Changes in / [39786813:a5a71d0]


Ignore:
Files:
6 added
21 deleted
109 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    r39786813 ra5a71d0  
    3030
    3131# generated by latex
    32 doc/refrat/refrat.aux
    33 doc/refrat/refrat.bbl
    34 doc/refrat/refrat.blg
    35 doc/refrat/refrat.brf
    36 doc/refrat/refrat.dvi
    37 doc/refrat/refrat.idx
    38 doc/refrat/refrat.ilg
    39 doc/refrat/refrat.ind
    40 doc/refrat/refrat.log
    41 doc/refrat/refrat.out
    42 doc/refrat/refrat.pdf
    43 doc/refrat/refrat.ps
    44 doc/refrat/refrat.toc
     32*.aux
     33*.bbl
     34*.blg
     35*.brf
     36*.dvi
     37*.idx
     38*.ilg
     39*.ind
     40*.log
     41*.out
     42*.pdf
     43*.ps
     44*.toc
  • configure

    r39786813 ra5a71d0  
    24092409
    24102410
     2411if test "x${CXXFLAGS}" = "x"; then
     2412   export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
     2413else
     2414   export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
     2415fi
     2416
    24112417am__api_version='1.11'
    24122418
  • configure.ac

    r39786813 ra5a71d0  
    77#AC_CONFIG_SRCDIR([src/main.cc])
    88AC_CONFIG_HEADERS([config.h])
     9
     10if test "x${CXXFLAGS}" = "x"; then
     11   export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
     12else
     13   export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
     14fi
    915
    1016AM_INIT_AUTOMAKE
  • doc/refrat/Makefile

    r39786813 ra5a71d0  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .::
     3Macros =
     4TeXLIB = .:${Macros}:
    45LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    56BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
  • doc/refrat/refrat.tex

    r39786813 ra5a71d0  
    1717\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
    1818\usepackage{breakurl}
    19 \urlstyle{sf}
     19\renewcommand{\UrlFont}{\small\sf}
    2020
    2121%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    2323% Names used in the document.
    2424
    25 \newcommand{\CFA}{Cforall\xspace}               % set language text name
    26 \newcommand{\CFAA}{C$\forall$\xspace}   % set language symbolic name
     25\newcommand{\CFA}{C$\forall$\xspace}    % set language symbolic name
     26\newcommand{\CFL}{Cforall\xspace}               % set language text name
    2727\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    2828\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     
    3333
    3434\makeatletter
     35% allow escape sequence in lstinline
     36%\usepackage{etoolbox}
     37%\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
     38
     39\renewcommand\small{%
     40   \@setfontsize\small{8.5}{11}%
     41   \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
     42   \abovedisplayshortskip \z@ \@plus 2pt
     43   \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
     44   \def\@listi{\leftmargin\leftmargini
     45               \topsep 4pt \@plus 2pt \@minus 2pt
     46               \parsep 2pt \@pluspt \@minuspt
     47               \itemsep \parsep}%
     48   \belowdisplayskip \abovedisplayskip
     49}
     50\usepackage{relsize}            % must be after change to small
     51
     52\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
     53\renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
     54
     55%  Reduce size of chapter/section titles
     56\def\@makechapterhead#1{%
     57  \vspace*{50\p@}%
     58  {\parindent \z@ \raggedright \normalfont
     59    \ifnum \c@secnumdepth >\m@ne
     60        \large\bfseries \@chapapp\space \thechapter
     61        \par\nobreak
     62        \vskip 5\p@
     63    \fi
     64    \interlinepenalty\@M
     65    \Large \bfseries #1\par\nobreak
     66    \vskip 50\p@
     67  }}
     68\def\@makeschapterhead#1{%
     69  \vspace*{50\p@}%
     70  {\parindent \z@ \raggedright
     71    \normalfont
     72    \interlinepenalty\@M
     73    \Large \bfseries  #1\par\nobreak
     74    \vskip 50\p@
     75  }}
     76\renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
     77\renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     78\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     79\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
     80
    3581% index macros
    3682\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
     
    60106%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    61107
    62 % text inline and lowercase index: \Index{Inline and index text}
    63 % text inline and as-in index: \Index{Inline and Index text}
    64 % text inline but index with different as-is text: \Index[index text]{inline text}
     108% inline text and lowercase index: \Index{inline and lowercase index text}
     109% inline text and as-in index: \Index[as-is index text]{inline text}
     110% inline text but index with different as-is text: \Index[index text]{inline text}
    65111\newcommand{\Index}{\@ifstar\@sIndex\@Index}
    66112\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
     
    69115
    70116% blocks and titles
    71 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    72117\newenvironment{rationale}{%
    73118  \begin{quotation}\noindent$\Box$\enspace
     
    75120  \hfill\enspace$\Box$\end{quotation}
    76121}%
     122\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    77123\newcommand{\rewrite}{\(\Rightarrow\)}
    78124\newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
     
    103149\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    104150
    105 % adjust listings macros
     151% CFA based on ANSI C
    106152\lstdefinelanguage{CFA}[ANSI]{C}%
    107 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,context,disable,dtype,enable,
    108         fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,restrict,_Static_assert,
    109         _Thread_local,throw,throwResume,try,type,},
     153{morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable,
     154        fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert,
     155        _Thread_local,throw,throwResume,try,},
    110156}%
    111157
     
    113159language=CFA,
    114160columns=flexible,
    115 basicstyle=\sf\small,
     161basicstyle=\sf\relsize{-1},
    116162tabsize=4,
    117163xleftmargin=\parindent,
    118164escapechar=@,
    119165keepspaces=true,
    120 %showtabs=true,
    121 %tab=\rightarrowfill,
     166showstringspaces=false,
     167showlines=true,
    122168}%
    123169
     
    145191\linenumbers                                    % comment out to turn off line numbering
    146192
    147 \title{\CFA (\CFAA) Reference Manual and Rationale}
    148 \author{Glen Ditchfield \and Peter A. Buhr}
    149 \date{DRAFT\\\today}
     193\title{\Huge
     194\CFA (\CFL) Reference Manual and Rationale
     195}% title
     196\author{\huge
     197Glen Ditchfield and Peter A. Buhr
     198}% author
     199\date{
     200DRAFT\\\today
     201}% date
    150202
    151203\pagenumbering{roman}
     
    159211\copyright\,2015 Glen Ditchfield \\ \\
    160212\noindent
    161 This work is licensed under the Creative Commons Attribution 4.0 International License. To view a
    162 copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
     213This work is licensed under the Creative Commons Attribution 4.0 International License.
     214To view a copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
    163215\vspace*{1in}
    164216
     
    173225\chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction}
    174226
    175 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C
    176 programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and
    177 occasionally compares \CFA to {\CC} \cite{c++}.
    178 
    179 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering
    180 differs). Unfortunately, this means the manual contains more ``forward references'' than usual,
    181 making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple
    182 introduction to \CFA, see the companion document ``An Overview of \CFA''
     227This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
     228It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}.
     229
     230The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
     231Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard.
     232For a simple introduction to \CFA, see the companion document ``An Overview of \CFA''
    183233\cite{Ditchfield96:Overview}.
    184234
    185235\begin{rationale}
    186 Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the
    187 rationale behind a rule, and design decisions.
     236Commentary (like this) is quoted with quads.
     237Commentary usually deals with subtle points, the rationale behind a rule, and design decisions.
    188238\end{rationale}
    189239
     
    194244\chapter{Terms, definitions, and symbols}
    195245
    196 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11}
    197 standard.
     246Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard.
    198247
    199248% No ``Conformance'' or ``Environment'' chapters yet.
     
    205254
    206255\section{Notation}
    207 The syntax notation used in this document is the same as in the {\c11} standard, with one exception:
    208 ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that
    209 these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
     256The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
    210257
    211258
     
    215262\subsection{Scopes of identifiers}\index{scopes}
    216263
    217 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may
    218 overload\index{overloading} outer declarations of lexically identical identifiers in the same
    219 \Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations
    220 have \Index{compatible type}, or if one declares an array type and the other declares a pointer type
    221 and the element type and pointed-at type are compatible, or if one has function type and the other
    222 is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
     264\CFA's scope rules differ from C's in one major respect: a declaration of an identifier may overload\index{overloading} outer declarations of lexically identical identifiers in the same
     265\Index{name space}, instead of hiding them.
     266The outer declaration is hidden if the two declarations have \Index{compatible type}, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
    223267\lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
    224268\Index{visible} when the scope of the inner declaration terminates.
    225269\begin{rationale}
    226 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same
    227 scope; a {\CC} program can not.
     270Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;
     271a {\CC} program can not.
    228272\end{rationale}
    229273
     
    232276\index{linkage}
    233277
    234 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with
    235 external or internal linkage do not necessarily denote the same object or function. Instead, in the
    236 set of translation units and libraries that constitutes an entire program, any two instances of a
    237 particular identifier with \Index{external linkage} denote the same object or function if they have
    238 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and
    239 the element type and pointed-at type are compatible, or if one has function type and the other is a
    240 pointer to a compatible function type. Within one translation unit, each instance of an identifier
    241 with \Index{internal linkage} denotes the same object or function in the same circumstances.
     278\CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with external or internal linkage do not necessarily denote the same object or function.
     279Instead, in the set of translation units and libraries that constitutes an entire program, any two instances of a particular identifier with \Index{external linkage} denote the same object or function if they have
     280\Index{compatible type}s, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type.
     281Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances.
    242282Identifiers with \Index{no linkage} always denote unique entities.
    243283\begin{rationale}
    244 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C
    245 program cannot.
     284A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$;
     285a C program cannot.
    246286\end{rationale}
    247287
     
    253293\subsubsection{Semantics}
    254294
    255 \CFA provides a capability for generic types; using this capability a single "generic type
    256 generator" can be written that can represent multiple concrete type instantiations by substitution
    257 of the "type parameters" of the generic type for concrete types. Syntactically a generic type
    258 generator is represented by putting a forall specifier on a struct or union declaration, as defined
    259 in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters
    260 in parentheses after the name of the generic type generator:
    261 \begin{lstlisting}
    262 forall( type T | sumable( T ) ) struct pair {
     295\CFA provides a capability for generic types;
     296using this capability a single "generic type generator" can be written that can represent multiple concrete type instantiations by substitution of the "type parameters" of the generic type for concrete types.
     297Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}.
     298An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator:
     299\begin{lstlisting}
     300forall( otype T | sumable( T ) ) struct pair {
    263301        T x;
    264302        T y;
     
    267305\end{lstlisting}
    268306
    269 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall
    270 specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has
    271 the semantics that would result if the type parameters were substituted into the type generator
    272 declaration by macro substitution.
    273 
    274 Polymorphic functions may have generic types as parameters, and those generic types may use type
    275 parameters of the polymorphic function as type parameters of the generic type:
    276 \begin{lstlisting}
    277 forall( type T ) void swap( pair(T) *p ) {
     307The type parameters in an instantiation of a generic type must satisfy any constraints in the forall specifier on the type generator declaration, e.g., \lstinline$sumable$.
     308The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution.
     309
     310Polymorphic functions may have generic types as parameters, and those generic types may use type parameters of the polymorphic function as type parameters of the generic type:
     311\begin{lstlisting}
     312forall( otype T ) void swap( pair(T) *p ) {
    278313        T z = p->x;
    279314        p->x = p->y;
     
    285320\subsubsection{Constraints}
    286321
    287 To avoid unduly constraining implementors, the generic type generator definition must be visible at
    288 any point where it is instantiated.  Forward declarations of generic type generators are not
    289 forbidden, but the definition must be visible to instantiate the generic type.  Equivalently,
    290 instantiations of generic types are not allowed to be incomplete types.
     322To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated.
     323Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type.  Equivalently, instantiations of generic types are not allowed to be incomplete types.
    291324
    292325\examples
    293326\begin{lstlisting}
    294 forall( type T ) struct A;
    295 
    296 forall( type T ) struct B {
    297         A(T) *a;  // legal, but cannot instantiate B(T)
     327forall( otype T ) struct A;
     328
     329forall( otype T ) struct B {
     330        A(T) *a;                        // legal, but cannot instantiate B(T)
    298331};
    299332
    300 B(T) x; // illegal, *x.a is of an incomplete generic type
    301 
    302 forall( type T ) struct A {
     333B(T) x;                                 // illegal, *x.a is of an incomplete generic type
     334 
     335forall( otype T ) struct A {
    303336        B( T ) *b;
    304337};
    305338
    306 B( T ) y; // legal, *x.a is now of a complete generic type
    307 
     339B( T ) y;                               // legal, *x.a is now of a complete generic type
    308340
    309341// box.h:
    310         forall( type T ) struct box;
    311         forall( type T ) box( T ) *make_box( T );
    312         forall( type T ) void use_box( box( T ) *b );
     342        forall( otype T ) struct box;
     343        forall( otype T ) box( T ) *make_box( T );
     344        forall( otype T ) void use_box( box( T ) *b );
    313345       
    314346// main.c:
    315         box( int ) *b = make_box( 42 ); // illegal, def'n of box not visible
    316         use_box( b ); // illegal
     347        box( int ) *b = make_box( 42 ); // illegal, definition of box not visible
     348        use_box( b );           // illegal
    317349\end{lstlisting}
    318350
     
    320352\section{Conversions}
    321353\CFA defines situations where values of one type are automatically converted to another type.
    322 These conversions are called \define{implicit conversion}s. The programmer can request
     354These conversions are called \define{implicit conversion}s.
     355The programmer can request
    323356\define{explicit conversion}s using cast expressions.
    324357
     
    330363\subsubsection{Safe arithmetic conversions}
    331364
    332 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most
    333 binary arithmetic operators to convert the operands to a common type and determine the type of the
    334 operator's result. In \CFA, these conversions play a role in overload resolution, and
    335 collectively are called the \define{safe arithmetic conversion}s.
    336 
    337 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion
    338 rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let
    339 \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
     365In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most binary arithmetic operators to convert the operands to a common type and determine the type of the operator's result.
     366In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s.
     367
     368Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.
     369Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
    340370
    341371The following conversions are \emph{direct} safe arithmetic conversions.
     
    343373\item
    344374The \Index{integer promotion}s.
    345 
    346 \item
    347 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\)
    348 to \(unsigned_r\).
    349 
    350 \item
    351 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists
    352 and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
    353 
     375\item
     376For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\).
     377\item
     378For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
    354379\item
    355380Conversion from \(unsigned_{mr}\) to \lstinline$float$.
    356 
    357381\item
    358382Conversion from an enumerated type to its compatible integer type.
    359 
    360 \item
    361 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to
    362 \lstinline$long double$.
    363 
    364 \item
    365 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$,
    366 and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
    367 
     383\item
     384Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$.
     385\item
     386Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
    368387\begin{sloppypar}
    369388\item
    370 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from
    371 \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the
    372 implementation supports imaginary types.
     389Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the implementation supports imaginary types.
    373390\end{sloppypar}
    374391\end{itemize}
    375392
    376 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion
    377 and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then
    378 the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic
    379 conversion.
    380 
    381 \begin{rationale}
    382 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the
    383 usual arithmetic conversions, and \CFA does not include them as safe conversions.
     393If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic conversion.
     394
     395\begin{rationale}
     396Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions.
    384397\end{rationale}
    385398
     
    393406
    394407If an expression's type is a pointer to a structure or union type that has a member that is an
    395 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly
    396 converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's
    397 type. The result of the conversion is a pointer to the member.
     408\Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's type.
     409The result of the conversion is a pointer to the member.
    398410
    399411\examples
     
    402414        int x, y;
    403415};
    404 void move_by(struct point * p1, struct point * p2) {@\impl{move_by}@
     416void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@
    405417        p1->x += p2.x;
    406418        p1->y += p2.y;
    407419}
    408 
    409420struct color_point {
    410421        enum { RED, BLUE, GREEN } color;
    411422        struct point;
    412423} cp1, cp2;
    413 move_to(&cp1, &cp2);
     424move_to( &cp1, &cp2 );
    414425\end{lstlisting}
    415426Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
     
    418429
    419430\subsubsection{Specialization}
    420 A function or value whose type is polymorphic may be implicitly converted to one whose type is
    421 \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any
    422 value that is legal for the inferred parameter may be used, including other inferred parameters.
    423 
    424 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters
    425 in its type, then an object or function must be visible at the point of the specialization that has
    426 the same identifier as the assertion parameter and has a type that is compatible\index{compatible
    427   type} with or can be specialized to the type of the assertion parameter.  The assertion parameter
    428 is bound to that object or function.
    429 
    430 The type of the specialization is the type of the original with the bound inferred parameters and
    431 the bound assertion parameters replaced by their bound values.
     431A function or value whose type is polymorphic may be implicitly converted to one whose type is \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}.
     432Any value that is legal for the inferred parameter may be used, including other inferred parameters.
     433
     434If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible type} with or can be specialized to the type of the assertion parameter.
     435The assertion parameter is bound to that object or function.
     436
     437The type of the specialization is the type of the original with the bound inferred parameters and the bound assertion parameters replaced by their bound values.
    432438
    433439\examples
    434440The type
    435441\begin{lstlisting}
    436 forall( type T, type U ) void (*)( T, U );
     442forall( otype T, otype U ) void (*)( T, U );
    437443\end{lstlisting}
    438444can be specialized to (among other things)
    439445\begin{lstlisting}
    440 forall( type T ) void (*)( T, T );              // U bound to T
    441 forall( type T ) void (*)( T, real );   // U bound to real
    442 forall( type U ) void (*)( real, U );   // T bound to real
     446forall( otype T ) void (*)( T, T );             // U bound to T
     447forall( otype T ) void (*)( T, real );  // U bound to real
     448forall( otype U ) void (*)( real, U );  // T bound to real
    443449void f( real, real );                                   // both bound to real
    444450\end{lstlisting}
     
    446452The type
    447453\begin{lstlisting}
    448 forall( type T | T ?+?( T, T )) T (*)( T );
     454forall( otype T | T ?+?( T, T ) ) T (*)( T );
    449455\end{lstlisting}
    450456can be specialized to (among other things)
    451457\begin{lstlisting}
    452 int (*)( int );                                         // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )
     458int (*)( int );         // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )
    453459\end{lstlisting}
    454460
     
    465471from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
    466472\item
    467 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified
    468 type};
    469 \item
    470 from a pointer to a structure or union type to a pointer to the type of a member of the structure or
    471 union that is an \Index{anonymous structure} or an \Index{anonymous union};
    472 \item
    473 within the scope of an initialized \Index{type declaration}, conversions between a type and its
    474 implementation or between a pointer to a type and a pointer to its implementation.
     473from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type};
     474\item
     475from a pointer to a structure or union type to a pointer to the type of a member of the structure or union that is an \Index{anonymous structure} or an \Index{anonymous union};
     476\item
     477within the scope of an initialized \Index{type declaration}, conversions between a type and its implementation or between a pointer to a type and a pointer to its implementation.
    475478\end{itemize}
    476479
    477480Conversions that are not safe conversions are \define{unsafe conversion}s.
    478481\begin{rationale}
    479 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is
    480 clearly dangerous, and {\CC} does not have this implicit conversion.
    481 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a
    482 superset of C as possible, but discourages it by making it unsafe.
     482As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type.
     483This is clearly dangerous, and {\CC} does not have this implicit conversion.
     484\CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a superset of C as possible, but discourages it by making it unsafe.
    483485\end{rationale}
    484486
     
    486488\subsection{Conversion cost}
    487489
    488 The \define{conversion cost} of a safe\index{safe conversion}
    489 conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion
    490 costs.} is a measure of how desirable or undesirable it is. It is defined as follows.
     490The \define{conversion cost} of a safe\index{safe conversion} conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion costs.} is a measure of how desirable or undesirable it is.
     491It is defined as follows.
    491492\begin{itemize}
    492493\item
     
    497498
    498499\item
    499 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions
    500 needed to make up the conversion.
     500The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion.
    501501\end{itemize}
    502502
     
    506506\begin{itemize}
    507507\item
    508 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an
    509 implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms
    510 of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and
    511 then to \lstinline$double$.
    512 
    513 \item
    514 If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an
    515 implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
    516 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise,
    517 \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
    518 
    519 \item
    520 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost
    521 of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe
    522 conversion, and its conversion cost is undefined.
     508The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1.
     509The cost of an implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and then to \lstinline$double$.
     510
     511\item
     512If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
     513\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$.
     514Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
     515
     516\item
     517If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1.
     518Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined.
    523519\end{itemize}
    524520
     
    529525        \rhs \lstinline$forall$
    530526        \rhs \lstinline$lvalue$
    531         \rhs \lstinline$context$
     527        \rhs \lstinline$trait$
    532528        \rhs \lstinline$dtype$
    533529        \rhs \lstinline$ftype$
     
    538534\subsection{Identifiers}
    539535
    540 \CFA allows operator \Index{overloading} by associating operators with special function
    541 identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status
    542 for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them
    543 as overloadable identifiers. Programmers can use these identifiers to declare functions and objects
    544 that implement operators and constants for their own types.
     536\CFA allows operator \Index{overloading} by associating operators with special function identifiers.
     537Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them as overloadable identifiers.
     538Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types.
    545539
    546540
     
    554548\end{syntax}
    555549
    556 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0}
    557 and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer
    558 constants are considered to be identifiers.
    559 \begin{rationale}
    560 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar
    561 types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The
    562 operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any
    563 scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression}
    564 that evaluates to 0 is effectively compatible with every pointer type.
    565 
    566 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to
    567 any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
    568 0 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0
    569 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type
    570 matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
    571 Defining special constants for a user-defined type is more efficient than defining a conversion to
    572 the type from \lstinline$_Bool$.
    573 
    574 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers
    575 have special status in C. A facility that let programmers declare specific
    576 constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
    577 Some facility for defining the creation of values of programmer-defined types from arbitrary integer
    578 tokens would be needed. The complexity of such a feature doesn't seem worth the gain.
     550\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers.
     551No other tokens defined by the rules for integer constants are considered to be identifiers.
     552\begin{rationale}
     553Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C.
     554All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1.
     555The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
     556A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
     557
     558In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 0 as a special case.
     559However, user-defined arithmetic types often need the equivalent of a 1 or 0 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
     560Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$.
     561
     562Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C.
     563A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
     564Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
     565The complexity of such a feature doesn't seem worth the gain.
    579566\end{rationale}
    580567
     
    582569\subsubsection{Operator identifiers}
    583570
    584 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the
    585 programmer-definable operator identifiers and the operations they are associated with. Functions
    586 that are declared with (or pointed at by function pointers that are declared with) these identifiers
    587 can be called by expressions that use the operator tokens and syntax, or the operator identifiers
    588 and ``function call'' syntax. The relationships between operators and function calls are discussed
    589 in descriptions of the operators.
     571\index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with.
     572Functions that are declared with (or pointed at by function pointers that are declared with) these identifiers can be called by expressions that use the operator tokens and syntax, or the operator identifiers and ``function call'' syntax.
     573The relationships between operators and function calls are discussed in descriptions of the operators.
    590574
    591575\begin{table}[hbt]
     
    644628
    645629\begin{rationale}
    646 Operator identifiers are made up of the characters of the operator token, with question marks added
    647 to mark the positions of the arguments of operators. The question marks serve as mnemonic devices;
    648 programmers can not create new operators by arbitrarily mixing question marks and other
    649 non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement
    650 operators are distinguished by the position of the question mark.
    651 \end{rationale}
    652 
    653 \begin{rationale}
    654 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For
    655 instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
    656 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not
    657 as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
     630Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators.
     631The question marks serve as mnemonic devices;
     632programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters.
     633Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark.
     634\end{rationale}
     635
     636\begin{rationale}
     637The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
     638\CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
    658639\end{rationale}
    659640
     
    663644\item
    664645The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
    665 ``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be
    666 properly defined by functions unless some mechanism like call-by-name is added to the language.
    667 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by
    668 checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$''
    669 for user-defined types is enough to allow them to be used in logical expressions.
    670 
    671 \item
    672 The comma operator\index{comma expression}. It is a control-flow operator like those above.
     646``\lstinline$?:$''.
     647These operators do not always evaluate their operands, and hence can not be properly defined by functions unless some mechanism like call-by-name is added to the language.
     648Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' for user-defined types is enough to allow them to be used in logical expressions.
     649
     650\item
     651The comma operator\index{comma expression}.
     652It is a control-flow operator like those above.
    673653Changing its meaning seems pointless and confusing.
    674654
    675655\item
    676 The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that
    677 returns values of some programmer-defined pointer-like type. The problem lies with the type of the
    678 operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
    679 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression
    680 might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the
    681 function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by
    682 value, and there is no way to create a useful pointer-like result from a value. Hence the parameter
    683 must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
     656The ``address of'' operator.
     657It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type.
     658The problem lies with the type of the operator.
     659Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
     660\lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$.
     661The expression might be treated as a call to the unary function ``\lstinline$&?$''.
     662Now what is the type of the function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by value, and there is no way to create a useful pointer-like result from a value.
     663Hence the parameter must have type \lstinline$T *$.
     664But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
    684665---which doesn't seem like progress!
    685666
    686 The rule for address-of expressions would have to be something like ``keep applying address-of
    687 functions until you get one that takes a pointer argument, then use the built-in operator and
    688 stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
    689 
    690 \item
    691 The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied
    692 into the language's storage allocation model. Redefining it seems pointless.
    693 
    694 \item
    695 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix
    696 operators, since their right ``operand'' is not a value or object.
    697 
    698 \item
    699 Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done
    700 with a function call. The difference in syntax is small.
     667The rule for address-of expressions would have to be something like ``keep applying address-of functions until you get one that takes a pointer argument, then use the built-in operator and stop''.
     668It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
     669
     670\item
     671The \lstinline$sizeof$ operator.
     672It is already defined for every object type, and intimately tied into the language's storage allocation model.
     673Redefining it seems pointless.
     674
     675\item
     676The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''.
     677These are not really infix operators, since their right ``operand'' is not a value or object.
     678
     679\item
     680Cast operators\index{cast expression}.
     681Anything that can be done with an explicit cast can be done with a function call.
     682The difference in syntax is small.
    701683\end{itemize}
    702684\end{rationale}
     
    705687\section{Expressions}
    706688
    707 \CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number
    708 of \define{interpretation}s, each of which has a different type. The interpretations that are
    709 potentially executable are called \define{valid interpretation}s. The set of interpretations
    710 depends on the kind of expression and on the interpretations of the subexpressions that it contains.
    711 The rules for determining the valid interpretations of an expression are discussed below for each
    712 kind of expression. Eventually the context of the outermost expression chooses one interpretation
    713 of that expression.
    714 
    715 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or
    716 function denoted by every identifier in the expression. An expression can have some interpretations
    717 that are ambiguous and others that are unambiguous. An expression that is chosen to be executed
    718 shall not be ambiguous.
    719 
    720 The \define{best valid interpretations} are the valid interpretations that use the fewest
    721 unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and
    722 objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the
    723 lowest total \Index{conversion cost}, including all implicit conversions in the argument
    724 expressions. Of these, the best have the highest total conversion cost for the implicit conversions
    725 (if any) applied to the argument expressions. If there is no single best valid interpretation, or if
    726 the best valid interpretation is ambiguous, then the resulting interpretation is
    727 ambiguous\index{ambiguous interpretation}.
    728 
    729 \begin{rationale}
    730 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to
    731 mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the
    732 operands of binary operators if necessary to convert the operands to types with a common real type.
    733 In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the
    734 usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the
    735 proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when
    736 unary expressions must be converted, conversions of function results are preferred to conversion of
    737 function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
    738 
    739 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such
    740 functions are presumably more expensive than monomorphic functions and since the more specific
    741 function is presumably more appropriate. It also gives preference to monomorphic values (such as the
     689\CFA allows operators and identifiers to be overloaded.
     690Hence, each expression can have a number of \define{interpretation}s, each of which has a different type.
     691The interpretations that are potentially executable are called \define{valid interpretation}s.
     692The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains.
     693The rules for determining the valid interpretations of an expression are discussed below for each kind of expression.
     694Eventually the context of the outermost expression chooses one interpretation of that expression.
     695
     696An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression.
     697An expression can have some interpretations that are ambiguous and others that are unambiguous.
     698An expression that is chosen to be executed shall not be ambiguous.
     699
     700The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions.
     701Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}.
     702Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions.
     703Of these, the best have the highest total conversion cost for the implicit conversions
     704(if any) applied to the argument expressions.
     705If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}.
     706
     707\begin{rationale}
     708\CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics.
     709In C, the ``usual arithmetic conversions'' are applied to the operands of binary operators if necessary to convert the operands to types with a common real type.
     710In \CFA, those conversions are ``safe''.
     711The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible.
     712The ``lowest total expression cost'' rule chooses the proper common type.
     713The odd-looking ``highest argument conversion cost'' rule ensures that, when unary expressions must be converted, conversions of function results are preferred to conversion of function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
     714
     715The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such functions are presumably more expensive than monomorphic functions and since the more specific function is presumably more appropriate.
     716It also gives preference to monomorphic values (such as the
    742717\lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
    743 \lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to
    744 interpretations that perform unsafe conversions, because those conversions potentially lose accuracy
    745 or violate strong typing.
     718\lstinline$0$\use{0}).
     719However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing.
    746720
    747721There are two notable differences between \CFA's overload resolution rules and the rules for
    748 {\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a
    749 function call must be completely resolved based on the arguments to the call in most circumstances.
    750 In \CFA, a function call may have several interpretations, each with a different result type, and
    751 the interpretations of the containing context choose among them. Second, safe conversions are used
    752 to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic
    753 conversions'' are a separate set of rules that apply only to the built-in operators.
    754 \end{rationale}
    755 
    756 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent
    757 to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined
    758 by \define{rewrite rules}. Each operator has a set of predefined functions that overload its
    759 identifier. Overload resolution determines which member of the set is executed in a given
    760 expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file
    761 scope}. The predefined functions and rewrite rules are discussed below for each of these
    762 operators.
    763 \begin{rationale}
    764 Predefined functions and constants have internal linkage because that simplifies optimization in
    765 traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is
    766 equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in
    767 the current scope, a compiler can generate code to perform the addition directly. If predefined
    768 functions had external linkage, this optimization would be difficult.
    769 \end{rationale}
    770 
    771 \begin{rationale}
    772 Since each subsection describes the interpretations of an expression in terms of the interpretations
    773 of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that
    774 uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by
    775 Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic
    776 conversions. The overload resolution rules and the predefined functions have been chosen so that, in
    777 programs that do not introduce overloaded declarations, expressions will have the same meaning in C
    778 and in \CFA.
    779 \end{rationale}
    780 
    781 \begin{rationale}
    782 Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and
    783 associativity of operators. The sections are arranged in decreasing order of precedence, with all
    784 operators in a section having the same precedence.
     722{\CC} defined in \cite{c++}.
     723First, the result type of a function plays a role.
     724In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
     725In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them.
     726Second, safe conversions are used to choose among interpretations of all sorts of functions;
     727in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators.
     728\end{rationale}
     729
     730Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls.
     731A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}.
     732Each operator has a set of predefined functions that overload its identifier.
     733Overload resolution determines which member of the set is executed in a given expression.
     734The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}.
     735The predefined functions and rewrite rules are discussed below for each of these operators.
     736\begin{rationale}
     737Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments.
     738For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''.
     739If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly.
     740If predefined functions had external linkage, this optimization would be difficult.
     741\end{rationale}
     742
     743\begin{rationale}
     744Since each subsection describes the interpretations of an expression in terms of the interpretations of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that uses one bottom-up pass over an expression tree.
     745Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}.
     746It is extended here to handle polymorphic functions and arithmetic conversions.
     747The overload resolution rules and the predefined functions have been chosen so that, in programs that do not introduce overloaded declarations, expressions will have the same meaning in C and in \CFA.
     748\end{rationale}
     749
     750\begin{rationale}
     751Expression syntax is quoted from the {\c11} standard.
     752The syntax itself defines the precedence and associativity of operators.
     753The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence.
    785754\end{rationale}
    786755
     
    801770const int 1;@\use{1}@
    802771const int 0;@\use{0}@
    803 forall( dtype DT ) DT *const 0;
    804 forall( ftype FT ) FT *const 0;
     772forall( dtype DT ) DT * const 0;
     773forall( ftype FT ) FT * const 0;
    805774\end{lstlisting}
    806775
    807776\semantics
    808 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible}
    809 declarations of the identifier.
    810 
    811 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type
    812 and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and
    813 ``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined
    814 ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when
    815 specialized\index{specialization} with a data type or function type respectively, produce a null
    816 pointer of that type.
     777The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier.
     778
     779A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.
     780The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively.
     781The other two predefined ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type.
    817782
    818783A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
    819784
    820785\examples
    821 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
    822 pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
    823 conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
    824 conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
     786The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe conversion from \lstinline$void *$ to \lstinline$const void *$.
     787In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
    825788\lstinline$0$ to a pointer.
    826789
     
    828791Note that the predefined identifiers have addresses.
    829792
    830 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but
    831 special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$
    832 with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly,
    833 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer,
    834 and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is
    835 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The
    836 semantics of C expressions contain many special cases to deal with subexpressions that are null
    837 pointer constants.
    838 
    839 \CFA handles these cases through overload resolution. The declaration
    840 \begin{lstlisting}
    841 forall( dtype DT ) DT *const 0;
    842 \end{lstlisting}
    843 means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any}
    844 pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer.
    845 Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator
    846 with a special case for the null pointer constant, \CFA defines predefined functions with a
    847 polymorphic object parameter.
     793\CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens.
     794The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant.
     795Similarly,
     796``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant.
     797However, in C, ``\lstinline$(void *)(void *)0$'' is
     798\emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The semantics of C expressions contain many special cases to deal with subexpressions that are null pointer constants.
     799
     800\CFA handles these cases through overload resolution.
     801The declaration
     802\begin{lstlisting}
     803forall( dtype DT ) DT * const 0;
     804\end{lstlisting} means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} pointer-to-object type or pointer-to-incomplete type.
     805The only such value is the null pointer.
     806Therefore the type \emph{alone} is enough to identify a null pointer.
     807Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter.
    848808\end{rationale}
    849809
     
    851811\subsubsection{Generic selection}
    852812
    853 \constraints The best interpretation of the controlling expression shall be
    854 unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the
    855 types named in its generic association list. If a generic selection has no \lstinline$default$
    856 generic association, the best interpretation of its controlling expression shall have type
    857 compatible with exactly one of the types named in its generic association list.
     813\constraints The best interpretation of the controlling expression shall be unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the types named in its generic association list.
     814If a generic selection has no \lstinline$default$ generic association, the best interpretation of its controlling expression shall have type compatible with exactly one of the types named in its generic association list.
    858815
    859816\semantics
     
    883840\rewriterules
    884841\begin{lstlisting}
    885 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@
     842a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@
    886843a[b] @\rewrite@ ?[?]( a, b ) // otherwise
    887 a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@
     844a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@
    888845a++ @\rewrite@ ?++(&( a ))@\use{?++}@
    889846a-- @\rewrite@ ?--(&( a ))@\use{?--}@
     
    895852\predefined
    896853\begin{lstlisting}
    897 forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
    898 forall( type T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
    899 forall( type T ) lvalue const T ?[?]( const T *, ptrdiff_t );
    900 forall( type T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
    901 forall( type T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
    902 forall( type T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
    903 forall( type T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
    904 forall( type T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
    905 forall( type T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
    906 forall( type T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
    907 forall( type T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
    908 forall( type T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
    909 forall( type T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
    910 forall( type T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
    911 forall( type T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
    912 forall( type T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
     854forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
     855forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
     856forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t );
     857forall( otype T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
     858forall( otype T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
     859forall( otype T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
     860forall( otype T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
     861forall( otype T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
     862forall( otype T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
     863forall( otype T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
     864forall( otype T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
     865forall( otype T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
     866forall( otype T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
     867forall( otype T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
     868forall( otype T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
     869forall( otype T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
    913870\end{lstlisting}
    914871\semantics
    915 The interpretations of subscript expressions are the interpretations of the corresponding function
    916 call expressions.
     872The interpretations of subscript expressions are the interpretations of the corresponding function call expressions.
    917873\begin{rationale}
    918874C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
    919 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the
    920 number of overloadings of \lstinline$?[?]$.
    921 
    922 Subscript expressions are rewritten as function calls that pass the first parameter by value. This
    923 is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the
    924 rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid
    925 this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which
    926 does not have an address.
     875\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$.
     876
     877Subscript expressions are rewritten as function calls that pass the first parameter by value.
     878This is somewhat unfortunate, since array-like types tend to be large.
     879The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''.
     880However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address.
    927881
    928882The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
    929  to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so
    930 polymorphic functions that take pointers to arbitrary types often come in one flavor for each
    931 possible qualification of the pointed-at type.
     883 to qualified types} of \CFA's type system.
     884Type qualifiers are not included in type values, so polymorphic functions that take pointers to arbitrary types often come in one flavor for each possible qualification of the pointed-at type.
    932885\end{rationale}
    933886
     
    936889
    937890\semantics
    938 A \define{function designator} is an interpretation of an expression that has function type. The
    939 \nonterm{postfix-expression} in a function call may have some interpretations that are function
    940 designators and some that are not.
    941 
    942 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the
    943 expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid
    944 interpretations of the rewritten expression are determined in the manner described below.
    945 
    946 Each combination of function designators and argument interpretations is considered. For those
    947 interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function}
    948 designators, the combination has a \Index{valid interpretation} if the function designator accepts
    949 the number of arguments given, and each argument interpretation matches the corresponding explicit
    950 parameter:
     891A \define{function designator} is an interpretation of an expression that has function type.
     892The
     893\nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not.
     894
     895For those interpretations of the \nonterm{postfix-expression} that are not function designators, the expression is rewritten and becomes a call of a function named ``\lstinline$?()$''.
     896The valid interpretations of the rewritten expression are determined in the manner described below.
     897
     898Each combination of function designators and argument interpretations is considered.
     899For those interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} designators, the combination has a \Index{valid interpretation} if the function designator accepts the number of arguments given, and each argument interpretation matches the corresponding explicit parameter:
    951900\begin{itemize}
    952 \item
    953 if the argument corresponds to a parameter in the function designator's prototype, the argument
    954 interpretation must have the same type as the corresponding parameter, or be implicitly convertible
    955 to the parameter's type
    956 \item
    957 if the function designator's type does not include a prototype or if the argument corresponds to
     901\item if the argument corresponds to a parameter in the function designator's prototype, the argument interpretation must have the same type as the corresponding parameter, or be implicitly convertible to the parameter's type
     902\item if the function designator's type does not include a prototype or if the argument corresponds to
    958903``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
    959904\end{itemize}
     
    961906
    962907For those combinations where the interpretation of the \nonterm{postfix-expression} is a
    963 \Index{polymorphic function} designator and the function designator accepts the number of arguments
    964 given, there shall be at least one set of \define{implicit argument}s for the implicit parameters
    965 such that
     908\Index{polymorphic function} designator and the function designator accepts the number of arguments given, there shall be at least one set of \define{implicit argument}s for the implicit parameters such that
    966909\begin{itemize}
    967910\item
    968 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the
    969 implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must
    970 be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument
    971 must be a function type.
    972 
    973 \item
    974 if an explicit parameter's type uses any implicit parameters, then the corresponding explicit
    975 argument must have a type that is (or can be safely converted\index{safe conversion} to) the type
    976 produced by substituting the implicit arguments for the implicit parameters in the explicit
    977 parameter type.
    978 
    979 \item
    980 the remaining explicit arguments must match the remaining explicit parameters, as described for
    981 monomorphic function designators.
    982 
    983 \item
    984 for each \Index{assertion parameter} in the function designator's type, there must be an object or
    985 function with the same identifier that is visible at the call site and whose type is compatible with
    986 or can be specialized to the type of the assertion declaration.
     911If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type;
     912if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type;
     913and if it uses \lstinline$ftype$, the implicit argument must be a function type.
     914
     915\item if an explicit parameter's type uses any implicit parameters, then the corresponding explicit argument must have a type that is (or can be safely converted\index{safe conversion} to) the type produced by substituting the implicit arguments for the implicit parameters in the explicit parameter type.
     916
     917\item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators.
     918
     919\item for each \Index{assertion parameter} in the function designator's type, there must be an object or function with the same identifier that is visible at the call site and whose type is compatible with or can be specialized to the type of the assertion declaration.
    987920\end{itemize}
    988 There is a valid interpretation for each such set of implicit parameters. The type of each valid
    989 interpretation is the return type of the function designator with implicit parameter values
    990 substituted for the implicit arguments.
    991 
    992 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or
    993 any of the argument interpretations is ambiguous.
    994 
    995 Every valid interpretation whose return type is not compatible with any other valid interpretation's
    996 return type is an interpretation of the function call expression.
    997 
    998 Every set of valid interpretations that have mutually compatible\index{compatible type} result types
    999 also produces an interpretation of the function call expression. The type of the interpretation is
    1000 the \Index{composite type} of the types of the valid interpretations, and the value of the
    1001 interpretation is that of the \Index{best valid interpretation}.
    1002 \begin{rationale}
    1003 One desirable property of a polymorphic programming language is \define{generalizability}: the
    1004 ability to replace an abstraction with a more general but equivalent abstraction without requiring
    1005 changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to
    1006 replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$''
    1007 without affecting any calls of \lstinline$f$.
     921There is a valid interpretation for each such set of implicit parameters.
     922The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments.
     923
     924A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous.
     925
     926Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression.
     927
     928Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression.
     929The type of the interpretation is the \Index{composite type} of the types of the valid interpretations, and the value of the interpretation is that of the \Index{best valid interpretation}.
     930\begin{rationale}
     931One desirable property of a polymorphic programming language is \define{generalizability}: the ability to replace an abstraction with a more general but equivalent abstraction without requiring changes in any of the uses of the original\cite{Cormack90}.
     932For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( otype T ) T f( T );$'' without affecting any calls of \lstinline$f$.
    1008933
    1009934\CFA\index{deficiencies!generalizability} does not fully possess this property, because
     
    1015940float f;
    1016941double d;
    1017 f = g( f, f );  // (1)
    1018 f = g( i, f );  // (2) (safe conversion to float)
    1019 f = g( d, f );  // (3) (unsafe conversion to float)
    1020 \end{lstlisting}
    1021 If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second
    1022 calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
     942f = g( f, f );          // (1)
     943f = g( i, f );          // (2) (safe conversion to float)
     944f = g( d, f );          // (3) (unsafe conversion to float)
     945\end{lstlisting}
     946If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
    1023947\lstinline$double$, and the result would be a \lstinline$double$.
    1024948
    1025 Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a
    1026 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$''
    1027 can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an
    1028 object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any}
    1029 object type, which is undesirable.
     949Another example is the function ``\lstinline$void h( int *);$''.
     950This function can be passed a
     951\lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not.
     952In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type.
     953If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable.
    1030954\end{rationale}
    1031955
     
    1033957A function called ``\lstinline$?()$'' might be part of a numerical differentiation package.
    1034958\begin{lstlisting}
    1035 extern type Derivative;
     959extern otype Derivative;
    1036960extern double ?()( Derivative, double );
    1037961extern Derivative derivative_of( double (*f)( double ) );
     
    1045969For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
    1046970\begin{lstlisting}
    1047 int f( long );          // (1) 
    1048 int f( int, int );      // (2) 
     971int f( long );          // (1)
     972int f( int, int );      // (2)
    1049973int f( int *);          // (3)
    1050 
    1051974int i = f( 5 );         // calls (1)
    1052975\end{lstlisting}
    1053 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit
    1054 \lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second
    1055 requires two arguments, and since there is no implicit conversion from \lstinline$int$ to
    1056 \lstinline$int *$ that could be used with the third function.
    1057 
    1058 \begin{lstlisting}
    1059 forall( type T ) T h( T );
     976Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion.
     977The other functions do not, since the second requires two arguments, and since there is no implicit conversion from \lstinline$int$ to \lstinline$int *$ that could be used with the third function.
     978
     979\begin{lstlisting}
     980forall( otype T ) T h( T );
    1060981double d = h( 1.5 );
    1061982\end{lstlisting}
     
    1064985
    1065986\begin{lstlisting}
    1066 forall( type T, type U ) void g( T, U );        // (4)
    1067 forall( type T ) void g( T, T );                        // (5)
    1068 forall( type T ) void g( T, long );                     // (6)
    1069 void g( long, long );                                           // (7) 
     987forall( otype T, otype U ) void g( T, U );      // (4)
     988forall( otype T ) void g( T, T );                       // (5)
     989forall( otype T ) void g( T, long );                    // (6)
     990void g( long, long );                                           // (7)
    1070991double d;
    1071992int i;
    1072993int *p;
    1073 
    1074 g( d, d );                      // calls (5)
    1075 g( d, i );                      // calls (6)
    1076 g( i, i );                      // calls (7)
     994g( d, d );                      // calls (5)
     995g( d, i );                      // calls (6)
     996g( i, i );                      // calls (7)
    1077997g( i, p );                      // calls (4)
    1078998\end{lstlisting}
    1079 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are
    1080 discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is
    1081 chosen because it is less polymorphic than (4).
    1082 
    1083 For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6)
    1084 (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least
    1085 polymorphic.
    1086 
    1087 The third call has valid interpretations for all of the functions; (7) is chosen since it is not
    1088 polymorphic at all.
    1089 
    1090 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4)
    1091 is chosen because it does not involve unsafe conversions.
    1092 \begin{lstlisting}
    1093 forall( type T ) T min( T, T );
     999The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is chosen because it is less polymorphic than (4).
     1000
     1001For the second call, (7) is again discarded.
     1002Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic.
     1003
     1004The third call has valid interpretations for all of the functions;
     1005(7) is chosen since it is not polymorphic at all.
     1006
     1007The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions.
     1008\begin{lstlisting}
     1009forall( otype T ) T min( T, T );
    10941010double max( double, double );
    1095 context min_max( T ) {@\impl{min_max}@
     1011trait min_max( T ) {@\impl{min_max}@
    10961012        T min( T, T );
    10971013        T max( T, T );
    10981014}
    1099 forall( type U | min_max( U ) ) void shuffle( U, U );
    1100 shuffle(9, 10);
    1101 \end{lstlisting}
    1102 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the
    1103 only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
     1015forall( otype U | min_max( U ) ) void shuffle( U, U );
     1016shuffle( 9, 10 );
     1017\end{lstlisting}
     1018The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
    11041019\lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
    11051020\begin{lstlisting}
    1106 extern void q( int );           // (8) 
    1107 extern void q( void * );        // (9) 
     1021extern void q( int );           // (8)
     1022extern void q( void * );        // (9)
    11081023extern void r();
    11091024q( 0 );
    11101025r( 0 );
    11111026\end{lstlisting}
    1112 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of
    1113 the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is
    1114 chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For
    1115 the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has
    1116 \emph{no} declared parameter types.
     1027The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9).
     1028The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}.
     1029For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types.
    11171030
    11181031
    11191032\subsubsection{Structure and union members}
    11201033
    1121 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at
    1122 least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a
    1123 member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named
    1124 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous
    1125 interpretation} whose type is the composite type of the types of the members. If an interpretation
    1126 of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
    1127 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The
    1128 expression has no other interpretations.
     1034\semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a member named \lstinline$m$.
     1035If two or more interpretations of \lstinline$s$ have members named
     1036\lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous interpretation} whose type is the composite type of the types of the members.
     1037If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
     1038\lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type.
     1039The expression has no other interpretations.
    11291040
    11301041The expression ``\lstinline$p->m$'' has the same interpretations as the expression
     
    11361047\predefined
    11371048\begin{lstlisting}
    1138 _Bool ?++( volatile _Bool * ),
    1139         ?++( _Atomic volatile _Bool * );
    1140 char ?++( volatile char * ),
    1141         ?++( _Atomic volatile char * );
    1142 signed char ?++( volatile signed char * ),
    1143         ?++( _Atomic volatile signed char * );
    1144 unsigned char ?++( volatile signed char * ),
    1145         ?++( _Atomic volatile signed char * );
    1146 short int ?++( volatile short int * ),
    1147         ?++( _Atomic volatile short int * );
    1148 unsigned short int ?++( volatile unsigned short int * ),
    1149         ?++( _Atomic volatile unsigned short int * );
    1150 int ?++( volatile int * ),
    1151         ?++( _Atomic volatile int * );
    1152 unsigned int ?++( volatile unsigned int * ),
    1153         ?++( _Atomic volatile unsigned int * );
    1154 long int ?++( volatile long int * ),
    1155         ?++( _Atomic volatile long int * );
    1156 long unsigned int ?++( volatile long unsigned int * ),
    1157         ?++( _Atomic volatile long unsigned int * );
    1158 long long int ?++( volatile long long int * ),
    1159         ?++( _Atomic volatile long long int * );
    1160 long long unsigned ?++( volatile long long unsigned int * ),
    1161         ?++( _Atomic volatile long long unsigned int * );
    1162 float ?++( volatile float * ),
    1163         ?++( _Atomic volatile float * );
    1164 double ?++( volatile double * ),
    1165         ?++( _Atomic volatile double * );
    1166 long double ?++( volatile long double * ),
    1167         ?++( _Atomic volatile long double * );
    1168 
    1169 forall( type T ) T * ?++( T * restrict volatile * ),
    1170         * ?++( T * _Atomic restrict volatile * );
    1171 
    1172 forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ),
    1173         * ?++( _Atomic T * _Atomic restrict volatile * );
    1174 
    1175 forall( type T ) const T * ?++( const T * restrict volatile * ),
    1176         * ?++( const T * _Atomic restrict volatile * );
    1177 
    1178 forall( type T ) volatile T * ?++( volatile T * restrict volatile * ),
    1179         * ?++( volatile T * _Atomic restrict volatile * );
    1180 
    1181 forall( type T ) restrict T * ?++( restrict T * restrict volatile * ),
    1182         * ?++( restrict T * _Atomic restrict volatile * );
    1183 
    1184 forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
     1049_Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * );
     1050char ?++( volatile char * ), ?++( _Atomic volatile char * );
     1051signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
     1052unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
     1053short int ?++( volatile short int * ), ?++( _Atomic volatile short int * );
     1054unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * );
     1055int ?++( volatile int * ), ?++( _Atomic volatile int * );
     1056unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * );
     1057long int ?++( volatile long int * ), ?++( _Atomic volatile long int * );
     1058long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * );
     1059long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * );
     1060long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * );
     1061float ?++( volatile float * ), ?++( _Atomic volatile float * );
     1062double ?++( volatile double * ), ?++( _Atomic volatile double * );
     1063long double ?++( volatile long double * ), ?++( _Atomic volatile long double * );
     1064
     1065forall( otype T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * );
     1066forall( otype T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * );
     1067forall( otype T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * );
     1068forall( otype T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * );
     1069forall( otype T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * );
     1070forall( otype T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
    11851071        * ?++( _Atomic const T * _Atomic restrict volatile * );
    1186 
    1187 forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
     1072forall( otype T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
    11881073        * ?++( _Atomic restrict T * _Atomic restrict volatile * );
    1189 
    1190 forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
     1074forall( otype T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
    11911075        * ?++( _Atomic volatile T * _Atomic restrict volatile * );
    1192 
    1193 forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ),
     1076forall( otype T ) const restrict T * ?++( const restrict T * restrict volatile * ),
    11941077        * ?++( const restrict T * _Atomic restrict volatile * );
    1195 
    1196 forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ),
     1078forall( otype T ) const volatile T * ?++( const volatile T * restrict volatile * ),
    11971079        * ?++( const volatile T * _Atomic restrict volatile * );
    1198 
    1199 forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
     1080forall( otype T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
    12001081        * ?++( restrict volatile T * _Atomic restrict volatile * );
    1201 
    1202 forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
     1082forall( otype T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
    12031083        * ?++( _Atomic const restrict T * _Atomic restrict volatile * );
    1204 
    1205 forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
     1084forall( otype T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
    12061085        * ?++( _Atomic const volatile T * _Atomic restrict volatile * );
    1207 
    1208 forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
     1086forall( otype T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
    12091087        * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1210 
    1211 forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
     1088forall( otype T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
    12121089        * ?++( const restrict volatile T * _Atomic restrict volatile * );
    1213 
    1214 forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
     1090forall( otype T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
    12151091        * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    12161092
    1217 _Bool ?--( volatile _Bool * ),
    1218         ?--( _Atomic volatile _Bool * );
    1219 char ?--( volatile char * ),
    1220         ?--( _Atomic volatile char * );
    1221 signed char ?--( volatile signed char * ),
    1222         ?--( _Atomic volatile signed char * );
    1223 unsigned char ?--( volatile signed char * ),
    1224         ?--( _Atomic volatile signed char * );
    1225 short int ?--( volatile short int * ),
    1226         ?--( _Atomic volatile short int * );
    1227 unsigned short int ?--( volatile unsigned short int * ),
    1228         ?--( _Atomic volatile unsigned short int * );
    1229 int ?--( volatile int * ),
    1230         ?--( _Atomic volatile int * );
    1231 unsigned int ?--( volatile unsigned int * ),
    1232         ?--( _Atomic volatile unsigned int * );
    1233 long int ?--( volatile long int * ),
    1234         ?--( _Atomic volatile long int * );
    1235 long unsigned int ?--( volatile long unsigned int * ),
    1236         ?--( _Atomic volatile long unsigned int * );
    1237 long long int ?--( volatile long long int * ),
    1238         ?--( _Atomic volatile long long int * );
    1239 long long unsigned ?--( volatile long long unsigned int * ),
    1240         ?--( _Atomic volatile long long unsigned int * );
    1241 float ?--( volatile float * ),
    1242         ?--( _Atomic volatile float * );
    1243 double ?--( volatile double * ),
    1244         ?--( _Atomic volatile double * );
    1245 long double ?--( volatile long double * ),
    1246         ?--( _Atomic volatile long double * );
    1247 
    1248 forall( type T ) T * ?--( T * restrict volatile * ),
    1249         * ?--( T * _Atomic restrict volatile * );
    1250 
    1251 forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ),
    1252         * ?--( _Atomic T * _Atomic restrict volatile * );
    1253 
    1254 forall( type T ) const T * ?--( const T * restrict volatile * ),
    1255         * ?--( const T * _Atomic restrict volatile * );
    1256 
    1257 forall( type T ) volatile T * ?--( volatile T * restrict volatile * ),
    1258         * ?--( volatile T * _Atomic restrict volatile * );
    1259 
    1260 forall( type T ) restrict T * ?--( restrict T * restrict volatile * ),
    1261         * ?--( restrict T * _Atomic restrict volatile * );
    1262 
    1263 forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
     1093_Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * );
     1094char ?--( volatile char * ), ?--( _Atomic volatile char * );
     1095signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
     1096unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
     1097short int ?--( volatile short int * ), ?--( _Atomic volatile short int * );
     1098unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * );
     1099int ?--( volatile int * ), ?--( _Atomic volatile int * );
     1100unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * );
     1101long int ?--( volatile long int * ), ?--( _Atomic volatile long int * );
     1102long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * );
     1103long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * );
     1104long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * );
     1105float ?--( volatile float * ), ?--( _Atomic volatile float * );
     1106double ?--( volatile double * ), ?--( _Atomic volatile double * );
     1107long double ?--( volatile long double * ), ?--( _Atomic volatile long double * );
     1108
     1109forall( otype T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * );
     1110forall( otype T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * );
     1111forall( otype T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * );
     1112forall( otype T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * );
     1113forall( otype T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * );
     1114forall( otype T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
    12641115        * ?--( _Atomic const T * _Atomic restrict volatile * );
    1265 
    1266 forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
     1116forall( otype T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
    12671117        * ?--( _Atomic restrict T * _Atomic restrict volatile * );
    1268 
    1269 forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
     1118forall( otype T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
    12701119        * ?--( _Atomic volatile T * _Atomic restrict volatile * );
    1271 
    1272 forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ),
     1120forall( otype T ) const restrict T * ?--( const restrict T * restrict volatile * ),
    12731121        * ?--( const restrict T * _Atomic restrict volatile * );
    1274 
    1275 forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ),
     1122forall( otype T ) const volatile T * ?--( const volatile T * restrict volatile * ),
    12761123        * ?--( const volatile T * _Atomic restrict volatile * );
    1277 
    1278 forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
     1124forall( otype T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
    12791125        * ?--( restrict volatile T * _Atomic restrict volatile * );
    1280 
    1281 forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
     1126forall( otype T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
    12821127        * ?--( _Atomic const restrict T * _Atomic restrict volatile * );
    1283 
    1284 forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
     1128forall( otype T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
    12851129        * ?--( _Atomic const volatile T * _Atomic restrict volatile * );
    1286 
    1287 forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
     1130forall( otype T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
    12881131        * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1289 
    1290 forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
     1132forall( otype T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
    12911133        * ?--( const restrict volatile T * _Atomic restrict volatile * );
    1292 
    1293 forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
     1134forall( otype T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
    12941135        * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    12951136\end{lstlisting}
     
    13081149
    13091150\begin{rationale}
    1310 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a
    1311 pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald
    1312 has pointed out, this forces the modified operand of such expressions to be an lvalue. This
    1313 partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
    1314 \end{rationale}
    1315 
    1316 \begin{rationale}
    1317 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to
    1318 object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction
    1319 follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as
    1320 opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the
    1321 type parameter \lstinline$T$.
     1151Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald has pointed out, this forces the modified operand of such expressions to be an lvalue.
     1152This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
     1153\end{rationale}
     1154
     1155\begin{rationale}
     1156In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types.
     1157Hence, \lstinline$void *$ objects cannot be incremented.
     1158In \CFA, the restriction follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the type parameter \lstinline$T$.
    13221159\end{rationale}
    13231160
    13241161\semantics
    1325 First, each interpretation of the operand of an increment or decrement expression is considered
    1326 separately. For each interpretation that is a bit-field or is declared with the
    1327 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the
    1328 expression has one valid interpretation, with the type of the operand, and the expression is
    1329 ambiguous if the operand is.
    1330 
    1331 For the remaining interpretations, the expression is rewritten, and the interpretations of the
    1332 expression are the interpretations of the corresponding function call. Finally, all interpretations
    1333 of the expression produced for the different interpretations of the operand are combined to produce
    1334 the interpretations of the expression as a whole; where interpretations have compatible result
    1335 types, the best interpretations are selected in the manner described for function call expressions.
     1162First, each interpretation of the operand of an increment or decrement expression is considered separately.
     1163For each interpretation that is a bit-field or is declared with the
     1164\lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is.
     1165
     1166For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call.
     1167Finally, all interpretations of the expression produced for the different interpretations of the operand are combined to produce the interpretations of the expression as a whole; where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
    13361168
    13371169\examples
     
    13461178\lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
    13471179\lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
    1348 \lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$
    1349 qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid
    1350 interpretation.
     1180\lstinline$volatile short int *$.
     1181Note that there is no conversion that adds an \lstinline$_Atomic$ qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid interpretation.
    13511182\end{sloppypar}
    13521183
    1353 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$,
    1354 and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$
    1355 has no valid interpretations.
    1356 
    1357 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the
    1358 \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the
    1359 \lstinline$volatile$ qualifier.
    1360 
    1361 \begin{lstlisting}
    1362 char * const restrict volatile * restrict volatile pqpc; pqpc++
    1363 char * * restrict volatile ppc; ppc++;
    1364 \end{lstlisting}
    1365 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$,
    1366 the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function
    1367 with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring
    1368 \lstinline$T$ to be \lstinline$char *$.
    1369 
    1370 \begin{sloppypar}
    1371 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$,
    1372 and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$.
    1373 \end{sloppypar}
    1374 
    1375 \begin{rationale}
    1376 Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such
    1377 thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
    1378 Therefore, there is no way to define a function that alters them, and hence no way to define
    1379 increment and decrement functions for them. As a result, the semantics of increment and decrement
    1380 expressions must treat them specially. This holds true for all of the operators that may modify
    1381 such objects.
    1382 \end{rationale}
    1383 
    1384 \begin{rationale}
    1385 The polymorphic overloadings for pointer increment and decrement can be understood by considering
    1386 increasingly complex types.
     1184There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ has no valid interpretations.
     1185
     1186The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the \lstinline$volatile$ qualifier.
     1187\begin{lstlisting}
     1188char * const restrict volatile * restrict volatile pqpc;
     1189pqpc++
     1190char * * restrict volatile ppc;
     1191ppc++;
     1192\end{lstlisting}
     1193Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring \lstinline$T$ to be \lstinline$char *$.
     1194
     1195\lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, and using the safe conversions from \lstinline$T$ to \lstinline$T const$ \lstinline$restrict volatile$.
     1196
     1197\begin{rationale}
     1198Increment and decrement expressions show up a deficiency of \CFA's type system.
     1199There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
     1200Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them.
     1201As a result, the semantics of increment and decrement expressions must treat them specially.
     1202This holds true for all of the operators that may modify such objects.
     1203\end{rationale}
     1204
     1205\begin{rationale}
     1206The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types.
    13871207\begin{enumerate}
    13881208\item
    1389 ``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and
    1390 the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were
    1391 declared by
    1392 \begin{lstlisting}
    1393 forall( type T ) T * ?++( T * * );
    1394 \end{lstlisting}
    1395 with \lstinline$T$ inferred to be \lstinline$char$.
    1396 
    1397 \item
    1398 ``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but
    1399 the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the
    1400 hypothetical function declared in point 1. Hence the actual predefined function is
    1401 \begin{lstlisting}
    1402 forall( type T ) T * ?++( T * restrict volatile * );
    1403 \end{lstlisting}
    1404 which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
    1405 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so
    1406 constant pointers cannot be incremented.)
    1407 
    1408 \item
    1409 ``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe
    1410 conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A
    1411 separate overloading of \lstinline$?++$ is required.
    1412 
    1413 \item
    1414 ``\lstinline$char const volatile * pq; pq++$''. Here the result has type
     1209``\lstinline$char * p; p++;$''.
     1210The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$.
     1211The expression would be valid if \lstinline$?++$ were declared by
     1212\begin{lstlisting}
     1213forall( otype T ) T * ?++( T * * );
     1214\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$.
     1215
     1216\item
     1217``\lstinline$char *restrict volatile qp; qp++$''.
     1218The result again has type \lstinline$char *$, but the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the hypothetical function declared in point 1.
     1219Hence the actual predefined function is
     1220\begin{lstlisting}
     1221forall( otype T ) T * ?++( T * restrict volatile * );
     1222\end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
     1223\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
     1224
     1225\item
     1226``\lstinline$char *_Atomic ap; ap++$''.
     1227The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable.
     1228A separate overloading of \lstinline$?++$ is required.
     1229
     1230\item
     1231``\lstinline$char const volatile * pq; pq++$''.
     1232Here the result has type
    14151233\lstinline$char const volatile *$, so a new overloading is needed:
    14161234\begin{lstlisting}
    1417 forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * );
    1418 \end{lstlisting}
    1419 One overloading is needed for each combination of qualifiers in the pointed-at
    1420 type\index{deficiencies!pointers to qualified types}.
     1235forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * );
     1236\end{lstlisting}
     1237One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}.
    14211238 
    14221239\item
    1423 ``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just
    1424 like \lstinline$const$ and \lstinline$volatile$ in the previous case:
    1425 \begin{lstlisting}
    1426 forall( type T ) T restrict * ?++( T restrict *restrict volatile * );
    1427 \end{lstlisting}
    1428 with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a
    1429 constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$
    1430 is not syntactically a pointer type. \CFA loosens the constraint.
     1240``\lstinline$float *restrict * prp; prp++$''.
     1241The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
     1242\begin{lstlisting}
     1243forall( otype T ) T restrict * ?++( T restrict *restrict volatile * );
     1244\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$.
     1245This looks odd, because {\c11} contains a constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ is not syntactically a pointer type. \CFA loosens the constraint.
    14311246\end{enumerate}
    14321247\end{rationale}
     
    14361251
    14371252\semantics
    1438 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the
    1439 compound literal.
     1253A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal.
    14401254
    14411255
     
    14551269\rewriterules
    14561270\begin{lstlisting}
    1457 *a      @\rewrite@ *?(a) @\use{*?}@
    1458 +a      @\rewrite@ +?(a) @\use{+?}@
    1459 -a      @\rewrite@ -?(a) @\use{-?}@
    1460 ~a      @\rewrite@ ~?(a) @\use{~?}@
    1461 !a      @\rewrite@ !?(a) @\use{"!?}@
    1462 ++a     @\rewrite@ ++?(&(a)) @\use{++?}@
    1463 --a     @\rewrite@ --?(&(a)) @\use{--?}@
     1271*a      @\rewrite@ *?( a ) @\use{*?}@
     1272+a      @\rewrite@ +?( a ) @\use{+?}@
     1273-a      @\rewrite@ -?( a ) @\use{-?}@
     1274~a      @\rewrite@ ~?( a ) @\use{~?}@
     1275!a      @\rewrite@ !?( a ) @\use{"!?}@
     1276++a     @\rewrite@ ++?(&( a )) @\use{++?}@
     1277--a     @\rewrite@ --?(&( a )) @\use{--?}@
    14641278\end{lstlisting}
    14651279
     
    14691283\predefined
    14701284\begin{lstlisting}
    1471 _Bool ++?( volatile _Bool * ),
    1472         ++?( _Atomic volatile _Bool * );
    1473 char ++?( volatile char * ),
    1474         ++?( _Atomic volatile char * );
    1475 signed char ++?( volatile signed char * ),
    1476         ++?( _Atomic volatile signed char * );
    1477 unsigned char ++?( volatile signed char * ),
    1478         ++?( _Atomic volatile signed char * );
    1479 short int ++?( volatile short int * ),
    1480         ++?( _Atomic volatile short int * );
    1481 unsigned short int ++?( volatile unsigned short int * ),
    1482         ++?( _Atomic volatile unsigned short int * );
    1483 int ++?( volatile int * ),
    1484         ++?( _Atomic volatile int * );
    1485 unsigned int ++?( volatile unsigned int * ),
    1486         ++?( _Atomic volatile unsigned int * );
    1487 long int ++?( volatile long int * ),
    1488         ++?( _Atomic volatile long int * );
    1489 long unsigned int ++?( volatile long unsigned int * ),
    1490         ++?( _Atomic volatile long unsigned int * );
    1491 long long int ++?( volatile long long int * ),
    1492         ++?( _Atomic volatile long long int * );
    1493 long long unsigned ++?( volatile long long unsigned int * ),
    1494         ++?( _Atomic volatile long long unsigned int * );
    1495 float ++?( volatile float * ),
    1496         ++?( _Atomic volatile float * );
    1497 double ++?( volatile double * ),
    1498         ++?( _Atomic volatile double * );
    1499 long double ++?( volatile long double * ),
    1500         ++?( _Atomic volatile long double * );
    1501 
    1502 forall( type T ) T * ++?( T * restrict volatile * ),
    1503         * ++?( T * _Atomic restrict volatile * );
    1504 
    1505 forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ),
    1506         * ++?( _Atomic T * _Atomic restrict volatile * );
    1507 
    1508 forall( type T ) const T * ++?( const T * restrict volatile * ),
    1509         * ++?( const T * _Atomic restrict volatile * );
    1510 
    1511 forall( type T ) volatile T * ++?( volatile T * restrict volatile * ),
    1512         * ++?( volatile T * _Atomic restrict volatile * );
    1513 
    1514 forall( type T ) restrict T * ++?( restrict T * restrict volatile * ),
    1515         * ++?( restrict T * _Atomic restrict volatile * );
    1516 
    1517 forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
     1285_Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * );
     1286char ++?( volatile char * ), ++?( _Atomic volatile char * );
     1287signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
     1288unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
     1289short int ++?( volatile short int * ), ++?( _Atomic volatile short int * );
     1290unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * );
     1291int ++?( volatile int * ), ++?( _Atomic volatile int * );
     1292unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * );
     1293long int ++?( volatile long int * ), ++?( _Atomic volatile long int * );
     1294long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * );
     1295long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * );
     1296long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * );
     1297float ++?( volatile float * ), ++?( _Atomic volatile float * );
     1298double ++?( volatile double * ), ++?( _Atomic volatile double * );
     1299long double ++?( volatile long double * ), ++?( _Atomic volatile long double * );
     1300
     1301forall( otype T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * );
     1302forall( otype T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * );
     1303forall( otype T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * );
     1304forall( otype T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * );
     1305forall( otype T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * );
     1306forall( otype T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
    15181307        * ++?( _Atomic const T * _Atomic restrict volatile * );
    1519 
    1520 forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
     1308forall( otype T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
    15211309        * ++?( _Atomic volatile T * _Atomic restrict volatile * );
    1522 
    1523 forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
     1310forall( otype T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
    15241311        * ++?( _Atomic restrict T * _Atomic restrict volatile * );
    1525 
    1526 forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ),
     1312forall( otype T ) const volatile T * ++?( const volatile T * restrict volatile * ),
    15271313        * ++?( const volatile T * _Atomic restrict volatile * );
    1528 
    1529 forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ),
     1314forall( otype T ) const restrict T * ++?( const restrict T * restrict volatile * ),
    15301315        * ++?( const restrict T * _Atomic restrict volatile * );
    1531 
    1532 forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
     1316forall( otype T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
    15331317        * ++?( restrict volatile T * _Atomic restrict volatile * );
    1534 
    1535 forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
     1318forall( otype T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
    15361319        * ++?( _Atomic const volatile T * _Atomic restrict volatile * );
    1537 
    1538 forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
     1320forall( otype T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
    15391321        * ++?( _Atomic const restrict T * _Atomic restrict volatile * );
    1540 
    1541 forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
     1322forall( otype T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
    15421323        * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1543 
    1544 forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
     1324forall( otype T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
    15451325        * ++?( const restrict volatile T * _Atomic restrict volatile * );
    1546 
    1547 forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
     1326forall( otype T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
    15481327        * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    15491328
    1550 _Bool --?( volatile _Bool * ),
    1551         --?( _Atomic volatile _Bool * );
    1552 char --?( volatile char * ),
    1553         --?( _Atomic volatile char * );
    1554 signed char --?( volatile signed char * ),
    1555         --?( _Atomic volatile signed char * );
    1556 unsigned char --?( volatile signed char * ),
    1557         --?( _Atomic volatile signed char * );
    1558 short int --?( volatile short int * ),
    1559         --?( _Atomic volatile short int * );
    1560 unsigned short int --?( volatile unsigned short int * ),
    1561         --?( _Atomic volatile unsigned short int * );
    1562 int --?( volatile int * ),
    1563         --?( _Atomic volatile int * );
    1564 unsigned int --?( volatile unsigned int * ),
    1565         --?( _Atomic volatile unsigned int * );
    1566 long int --?( volatile long int * ),
    1567         --?( _Atomic volatile long int * );
    1568 long unsigned int --?( volatile long unsigned int * ),
    1569         --?( _Atomic volatile long unsigned int * );
    1570 long long int --?( volatile long long int * ),
    1571         --?( _Atomic volatile long long int * );
    1572 long long unsigned --?( volatile long long unsigned int * ),
    1573         --?( _Atomic volatile long long unsigned int * );
    1574 float --?( volatile float * ),
    1575         --?( _Atomic volatile float * );
    1576 double --?( volatile double * ),
    1577         --?( _Atomic volatile double * );
    1578 long double --?( volatile long double * ),
    1579         --?( _Atomic volatile long double * );
    1580 
    1581 forall( type T ) T * --?( T * restrict volatile * ),
    1582         * --?( T * _Atomic restrict volatile * );
    1583 
    1584 forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ),
    1585         * --?( _Atomic T * _Atomic restrict volatile * );
    1586 
    1587 forall( type T ) const T * --?( const T * restrict volatile * ),
    1588         * --?( const T * _Atomic restrict volatile * );
    1589 
    1590 forall( type T ) volatile T * --?( volatile T * restrict volatile * ),
    1591         * --?( volatile T * _Atomic restrict volatile * );
    1592 
    1593 forall( type T ) restrict T * --?( restrict T * restrict volatile * ),
    1594         * --?( restrict T * _Atomic restrict volatile * );
    1595 
    1596 forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
     1329_Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * );
     1330char --?( volatile char * ), --?( _Atomic volatile char * );
     1331signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
     1332unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
     1333short int --?( volatile short int * ), --?( _Atomic volatile short int * );
     1334unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * );
     1335int --?( volatile int * ), --?( _Atomic volatile int * );
     1336unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * );
     1337long int --?( volatile long int * ), --?( _Atomic volatile long int * );
     1338long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * );
     1339long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * );
     1340long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * );
     1341float --?( volatile float * ), --?( _Atomic volatile float * );
     1342double --?( volatile double * ), --?( _Atomic volatile double * );
     1343long double --?( volatile long double * ), --?( _Atomic volatile long double * );
     1344
     1345forall( otype T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * );
     1346forall( otype T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * );
     1347forall( otype T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * );
     1348forall( otype T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * );
     1349forall( otype T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * );
     1350forall( otype T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
    15971351        * --?( _Atomic const T * _Atomic restrict volatile * );
    1598 
    1599 forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
     1352forall( otype T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
    16001353        * --?( _Atomic volatile T * _Atomic restrict volatile * );
    1601 
    1602 forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
     1354forall( otype T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
    16031355        * --?( _Atomic restrict T * _Atomic restrict volatile * );
    1604 
    1605 forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ),
     1356forall( otype T ) const volatile T * --?( const volatile T * restrict volatile * ),
    16061357        * --?( const volatile T * _Atomic restrict volatile * );
    1607 
    1608 forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ),
     1358forall( otype T ) const restrict T * --?( const restrict T * restrict volatile * ),
    16091359        * --?( const restrict T * _Atomic restrict volatile * );
    1610 
    1611 forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
     1360forall( otype T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
    16121361        * --?( restrict volatile T * _Atomic restrict volatile * );
    1613 
    1614 forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
     1362forall( otype T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
    16151363        * --?( _Atomic const volatile T * _Atomic restrict volatile * );
    1616 
    1617 forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
     1364forall( otype T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
    16181365        * --?( _Atomic const restrict T * _Atomic restrict volatile * );
    1619 
    1620 forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
     1366forall( otype T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
    16211367        * --?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1622 
    1623 forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
     1368forall( otype T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
    16241369        * --?( const restrict volatile T * _Atomic restrict volatile * );
    1625 
    1626 forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
     1370forall( otype T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
    16271371        * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    16281372\end{lstlisting}
     
    16451389
    16461390\semantics
    1647 The interpretations of prefix increment and decrement expressions are
    1648 determined in the same way as the interpretations of postfix increment and
    1649 decrement expressions.
     1391The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions.
    16501392
    16511393
     
    16541396\predefined
    16551397\begin{lstlisting}
    1656 forall( type T ) lvalue T *?( T * );
    1657 forall( type T ) _Atomic lvalue T *?( _Atomic T * );
    1658 forall( type T ) const lvalue T *?( const T * );
    1659 forall( type T ) volatile lvalue T *?( volatile T * );
    1660 forall( type T ) restrict lvalue T *?( restrict T * );
    1661 forall( type T ) _Atomic const lvalue T *?( _Atomic const T * );
    1662 forall( type T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
    1663 forall( type T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
    1664 forall( type T ) const volatile lvalue T *?( const volatile T * );
    1665 forall( type T ) const restrict lvalue T *?( const restrict T * );
    1666 forall( type T ) restrict volatile lvalue T *?( restrict volatile T * );
    1667 forall( type T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
    1668 forall( type T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
    1669 forall( type T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
    1670 forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * );
    1671 forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
    1672 
     1398forall( otype T ) lvalue T *?( T * );
     1399forall( otype T ) _Atomic lvalue T *?( _Atomic T * );
     1400forall( otype T ) const lvalue T *?( const T * );
     1401forall( otype T ) volatile lvalue T *?( volatile T * );
     1402forall( otype T ) restrict lvalue T *?( restrict T * );
     1403forall( otype T ) _Atomic const lvalue T *?( _Atomic const T * );
     1404forall( otype T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
     1405forall( otype T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
     1406forall( otype T ) const volatile lvalue T *?( const volatile T * );
     1407forall( otype T ) const restrict lvalue T *?( const restrict T * );
     1408forall( otype T ) restrict volatile lvalue T *?( restrict volatile T * );
     1409forall( otype T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
     1410forall( otype T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
     1411forall( otype T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
     1412forall( otype T ) const restrict volatile lvalue T *?( const restrict volatile T * );
     1413forall( otype T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
    16731414forall( ftype FT ) FT *?( FT * );
    16741415\end{lstlisting}
     
    16821423\lstinline$T$ is the type of the operand.
    16831424
    1684 The interpretations of an indirection expression are the interpretations of the corresponding
    1685 function call.
     1425The interpretations of an indirection expression are the interpretations of the corresponding function call.
    16861426
    16871427
     
    16901430\predefined
    16911431\begin{lstlisting}
    1692 int
    1693         +?( int ),
    1694         -?( int ),
    1695         ~?( int );
    1696 unsigned int
    1697         +?( unsigned int ),
    1698         -?( unsigned int ),
    1699          ~?( unsigned int );
    1700 long int
    1701         +?( long int ),
    1702         -?( long int ),
    1703         ~?( long int );
    1704 long unsigned int
    1705         +?( long unsigned int ),
    1706         -?( long unsigned int ),
    1707         ~?( long unsigned int );
    1708 long long int
    1709         +?( long long int ),
    1710         -?( long long int ),
    1711         ~?( long long int );
    1712 long long unsigned int
    1713         +?( long long unsigned int ),
    1714         -?( long long unsigned int ),
    1715         ~?( long long unsigned int );
    1716 float
    1717         +?( float ),
    1718         -?( float );
    1719 double
    1720         +?( double ),
    1721         -?( double );
    1722 long double
    1723         +?( long double ),
    1724         -?( long double );
    1725 _Complex float
    1726         +?( _Complex float ),
    1727         -?( _Complex float );
    1728 _Complex double
    1729         +?( _Complex double ),
    1730         -?( _Complex double );
    1731 _Complex long double
    1732         +?( _Complex long double ),
    1733         -?( _Complex long double );
    1734 
    1735 int !?( int ),
    1736         !?( unsigned int ),
    1737         !?( long ),
    1738         !?( long unsigned int ),
    1739         !?( long long int ),
    1740         !?( long long unsigned int ),
    1741         !?( float ),
    1742         !?( double ),
    1743         !?( long double ),
    1744         !?( _Complex float ),
    1745         !?( _Complex double ),
    1746         !?( _Complex long double );
    1747 
     1432int     +?( int ), -?( int ), ~?( int );
     1433unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int );
     1434long int +?( long int ), -?( long int ), ~?( long int );
     1435long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int );
     1436long long int +?( long long int ), -?( long long int ), ~?( long long int );
     1437long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int );
     1438float +?( float ), -?( float );
     1439double +?( double ), -?( double );
     1440long double +?( long double ), -?( long double );
     1441_Complex float +?( _Complex float ), -?( _Complex float );
     1442_Complex double +?( _Complex double ), -?( _Complex double );
     1443_Complex long double +?( _Complex long double ), -?( _Complex long double );
     1444int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ),
     1445        !?( long long int ), !?( long long unsigned int ),
     1446        !?( float ), !?( double ), !?( long double ),
     1447        !?( _Complex float ), !?( _Complex double ), !?( _Complex long double );
    17481448forall( dtype DT ) int !?( const restrict volatile DT * );
    17491449forall( dtype DT ) int !?( _Atomic const restrict volatile DT * );
    17501450forall( ftype FT ) int !?( FT * );
    17511451\end{lstlisting}
    1752 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    1753 rank of \lstinline$int$ there exist
     1452For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    17541453% Don't use predefined: keep this out of prelude.cf.
    17551454\begin{lstlisting}
     
    17591458
    17601459\semantics
    1761 The interpretations of a unary arithmetic expression are the interpretations of the corresponding
    1762 function call.
     1460The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call.
    17631461
    17641462\examples
     
    17661464long int li;
    17671465void eat_double( double );@\use{eat_double}@
    1768 
    1769 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
     1466eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
    17701467\end{lstlisting}
    17711468The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
    17721469\begin{center}
    1773 \begin{tabular}{llc}
    1774 interpretation & result type & expression conversion cost \\
     1470\begin{tabular}{llc} interpretation & result type & expression conversion cost \\
    17751471\hline
    17761472\lstinline$-?( (int)li )$                                       & \lstinline$int$                                       & (unsafe) \\
     
    17881484\end{tabular}
    17891485\end{center}
    1790 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument
    1791 conversion and the cost of the entire expression, are
     1486The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are
    17921487\begin{center}
    1793 \begin{tabular}{lcc}
    1794 interpretation & argument cost & expression cost \\
     1488\begin{tabular}{lcc} interpretation & argument cost & expression cost \\
    17951489\hline
    17961490\lstinline$eat_double( (double)-?( (int)li) )$                                  & 7                     & (unsafe) \\
     
    18081502\end{tabular}
    18091503\end{center}
    1810 Each has result type \lstinline$void$, so the best must be selected. The interpretations involving
    1811 unsafe conversions are discarded. The remainder have equal expression conversion costs, so the
     1504Each has result type \lstinline$void$, so the best must be selected.
     1505The interpretations involving unsafe conversions are discarded.
     1506The remainder have equal expression conversion costs, so the
    18121507``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
    18131508\lstinline$eat_double( (double)-?(li) )$.
     
    18201515\lstinline$dtype$, or \lstinline$ftype$.
    18211516
    1822 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall
    1823 have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall
    1824 be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one
    1825 interpretation, of type \lstinline$size_t$.
     1517When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one interpretation, of type \lstinline$size_t$.
    18261518
    18271519When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    1828 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When
    1829 the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the
    1830 expression is not a constant expression.
     1520\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand.
     1521When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
    18311522
    18321523When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    1833 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the
    1834 operand. When the operand is an opaque type or an inferred type parameter\index{inferred
    1835 parameter}, the expression is not a constant expression.
    1836 \begin{rationale}
    1837 \begin{lstlisting}
    1838 type Pair = struct { int first, second; };
     1524\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand.
     1525When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
     1526\begin{rationale}
     1527\begin{lstlisting}
     1528otype Pair = struct { int first, second; };
    18391529size_t p_size = sizeof(Pair);           // constant expression
    1840 
    1841 extern type Rational;@\use{Rational}@
     1530extern otype Rational;@\use{Rational}@
    18421531size_t c_size = sizeof(Rational);       // non-constant expression
    1843 
    18441532forall(type T) T f(T p1, T p2) {
    18451533        size_t t_size = sizeof(T);              // non-constant expression
     
    18471535}
    18481536\end{lstlisting}
    1849 ``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$,
     1537``\lstinline$sizeof Rational$'', although not statically known, is fixed.
     1538Within \lstinline$f()$,
    18501539``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
    18511540\end{rationale}
     
    18671556
    18681557In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
    1869 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is
    1870 the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some
    1871 interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast
    1872 expression is the cast of the interpretation that can be converted at the lowest cost. The cast
    1873 expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one
    1874 interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
    1875 
    1876 \begin{rationale}
    1877 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of
    1878 subexpressions, and to specialize polymorphic functions and values.
     1558\nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression;
     1559otherwise, \lstinline$e$ shall have some interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast expression is the cast of the interpretation that can be converted at the lowest cost.
     1560The cast expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
     1561
     1562\begin{rationale}
     1563Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values.
    18791564\end{rationale}
    18801565
     
    18991584\predefined
    19001585\begin{lstlisting}
    1901 int?*?( int, int ),
    1902         ?/?( int, int ),
    1903         ?%?( int, int );
    1904 unsigned int?*?( unsigned int, unsigned int ),
    1905         ?/?( unsigned int, unsigned int ),
    1906         ?%?( unsigned int, unsigned int );
    1907 long int?*?( long int, long int ),
    1908         ?/?( long, long ),
    1909         ?%?( long, long );
     1586int?*?( int, int ), ?/?( int, int ), ?%?( int, int );
     1587unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int );
     1588long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long );
    19101589long unsigned int?*?( long unsigned int, long unsigned int ),
    1911         ?/?( long unsigned int, long unsigned int ),
    1912         ?%?( long unsigned int, long unsigned int );
    1913 long long int?*?( long long int, long long int ),
    1914         ?/?( long long int, long long int ),
     1590        ?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int );
     1591long long int?*?( long long int, long long int ), ?/?( long long int, long long int ),
    19151592        ?%?( long long int, long long int );
    19161593long long unsigned int ?*?( long long unsigned int, long long unsigned int ),
    1917         ?/?( long long unsigned int, long long unsigned int ),
    1918         ?%?( long long unsigned int, long long unsigned int );
    1919 float?*?( float, float ),
    1920         ?/?( float, float );
    1921 double?*?( double, double ),
    1922         ?/?( double, double );
    1923 long double?*?( long double, long double ),
    1924         ?/?( long double, long double );
    1925 _Complex float?*?( float, _Complex float ),
    1926         ?/?( float, _Complex float ),
    1927         ?*?( _Complex float, float ),
    1928         ?/?( _Complex float, float ),
    1929         ?*?( _Complex float, _Complex float ),
    1930         ?/?( _Complex float, _Complex float );
    1931 _Complex double?*?( double, _Complex double ),
    1932         ?/?( double, _Complex double ),
    1933         ?*?( _Complex double, double ),
    1934         ?/?( _Complex double, double ),
    1935         ?*?( _Complex double, _Complex double ),
    1936         ?/?( _Complex double, _Complex double );
    1937 _Complex long double?*?( long double, _Complex long double ),
    1938         ?/?( long double, _Complex long double ),
    1939         ?*?( _Complex long double, long double ),
    1940         ?/?( _Complex long double, long double ),
    1941         ?*?( _Complex long double, _Complex long double ),
    1942         ?/?( _Complex long double, _Complex long double );
    1943 \end{lstlisting}
    1944 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    1945 rank of \lstinline$int$ there exist
     1594        ?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int );
     1595float?*?( float, float ), ?/?( float, float );
     1596double?*?( double, double ), ?/?( double, double );
     1597long double?*?( long double, long double ), ?/?( long double, long double );
     1598_Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ),
     1599        ?*?( _Complex float, float ), ?/?( _Complex float, float ),
     1600        ?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float );
     1601_Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ),
     1602        ?*?( _Complex double, double ), ?/?( _Complex double, double ),
     1603        ?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double );
     1604_Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ),
     1605        ?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ),
     1606        ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double );
     1607\end{lstlisting}
     1608For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    19461609% Don't use predefined: keep this out of prelude.cf.
    19471610\begin{lstlisting}
     
    19511614\begin{rationale}
    19521615{\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the
    1953 \Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary
    1954 operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
     1616\Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
    19551617\end{rationale}
    19561618
    19571619\semantics
    1958 The interpretations of multiplicative expressions are the interpretations of the corresponding
    1959 function call.
     1620The interpretations of multiplicative expressions are the interpretations of the corresponding function call.
    19601621
    19611622\examples
     
    19661627eat_double( li % i );
    19671628\end{lstlisting}
    1968 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations
    1969 of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and
    1970 the cost of converting the result to \lstinline$double$ (assuming no extended integer types are
    1971 present ) are
     1629``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''.
     1630The valid interpretations of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and the cost of converting the result to \lstinline$double$ (assuming no extended integer types are present ) are
    19721631\begin{center}
    1973 \begin{tabular}{lcc}
    1974 interpretation & argument cost & result cost \\
     1632\begin{tabular}{lcc} interpretation & argument cost & result cost \\
    19751633\hline
    19761634\lstinline$ ?%?( (int)li, i )$                                                                          & (unsafe)      & 6     \\
    19771635\lstinline$ ?%?( (unsigned)li,(unsigned)i )$                                            & (unsafe)      & 5     \\
    1978 \lstinline$ ?%?(li,(long)i )$                                                                           & 1                     & 4     \\
     1636\lstinline$ ?%?( li, (long)i )$                                                                         & 1                     & 4     \\
    19791637\lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$                          & 3                     & 3     \\
    19801638\lstinline$ ?%?( (long long)li,(long long)i )$                                          & 5                     & 2     \\
     
    19831641\end{center}
    19841642The best interpretation of \lstinline$eat_double( li, i )$ is
    1985 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the
    1986 lowest total cost.
    1987 
    1988 \begin{rationale}
    1989 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that
    1990 belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
     1643\lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost.
     1644
     1645\begin{rationale}
     1646{\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
    19911647\lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
    1992 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches
    1993 that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''.
    1994 
    1995 These ``missing'' operators limit polymorphism. Consider
    1996 \begin{lstlisting}
    1997 forall( type T | T ?*?( T, T ) ) T square( T );
     1648it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern;
     1649it does not predefine ``\lstinline$short ?*?( short, short )$''.
     1650
     1651These ``missing'' operators limit polymorphism.
     1652Consider
     1653\begin{lstlisting}
     1654forall( otype T | T ?*?( T, T ) ) T square( T );
    19981655short s;
    19991656square( s );
     
    20011658Since \CFA does not define a multiplication operator for \lstinline$short int$,
    20021659\lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
    2003 \lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern.
     1660\lstinline$int$.
     1661This is mildly surprising, but it follows the {\c11} operator pattern.
    20041662
    20051663A more troubling example is
    20061664\begin{lstlisting}
    2007 forall( type T | ?*?( T, T ) ) T product( T[], int n );
     1665forall( otype T | ?*?( T, T ) ) T product( T[], int n );
    20081666short sa[5];
    20091667product( sa, 5);
    20101668\end{lstlisting}
    20111669This has no valid interpretations, because \CFA has no conversion from ``array of
    2012 \lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations
    2013 include
     1670\lstinline$short int$'' to ``array of \lstinline$int$''.
     1671The alternatives in such situations include
    20141672\begin{itemize}
    20151673\item
     
    20201678\lstinline$product$.
    20211679\item
    2022 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to
    2023 the operator's argument type.
     1680Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
    20241681\end{itemize}
    20251682\end{rationale}
     
    20431700\predefined
    20441701\begin{lstlisting}
    2045 int?+?( int, int ),
    2046         ?-?( int, int );
    2047 unsigned int?+?( unsigned int, unsigned int ),
    2048         ?-?( unsigned int, unsigned int );
    2049 long int?+?( long int, long int ),
    2050         ?-?( long int, long int );
    2051 long unsigned int?+?( long unsigned int, long unsigned int ),
    2052         ?-?( long unsigned int, long unsigned int );
    2053 long long int?+?( long long int, long long int ),
    2054         ?-?( long long int, long long int );
     1702int?+?( int, int ), ?-?( int, int );
     1703unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int );
     1704long int?+?( long int, long int ), ?-?( long int, long int );
     1705long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int );
     1706long long int?+?( long long int, long long int ), ?-?( long long int, long long int );
    20551707long long unsigned int ?+?( long long unsigned int, long long unsigned int ),
    20561708        ?-?( long long unsigned int, long long unsigned int );
    2057 float?+?( float, float ),
    2058         ?-?( float, float );
    2059 double?+?( double, double ),
    2060         ?-?( double, double );
    2061 long double?+?( long double, long double ),
    2062         ?-?( long double, long double );
    2063 _Complex float?+?( _Complex float, float ),
    2064         ?-?( _Complex float, float ),
    2065         ?+?( float, _Complex float ),
    2066         ?-?( float, _Complex float ),
    2067         ?+?( _Complex float, _Complex float ),
    2068         ?-?( _Complex float, _Complex float );
    2069 _Complex double?+?( _Complex double, double ),
    2070         ?-?( _Complex double, double ),
    2071         ?+?( double, _Complex double ),
    2072         ?-?( double, _Complex double ),
    2073         ?+?( _Complex double, _Complex double ),
    2074         ?-?( _Complex double, _Complex double );
    2075 _Complex long double?+?( _Complex long double, long double ),
    2076         ?-?( _Complex long double, long double ),
    2077         ?+?( long double, _Complex long double ),
    2078         ?-?( long double, _Complex long double ),
    2079         ?+?( _Complex long double, _Complex long double ),
    2080         ?-?( _Complex long double, _Complex long double );
    2081 
    2082 forall( type T ) T
    2083         * ?+?( T *, ptrdiff_t ),
    2084         * ?+?( ptrdiff_t, T * ),
    2085         * ?-?( T *, ptrdiff_t );
    2086 
    2087 forall( type T ) _Atomic T
    2088         * ?+?( _Atomic T *, ptrdiff_t ),
    2089         * ?+?( ptrdiff_t, _Atomic T * ),
     1709float?+?( float, float ), ?-?( float, float );
     1710double?+?( double, double ), ?-?( double, double );
     1711long double?+?( long double, long double ), ?-?( long double, long double );
     1712_Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ),
     1713        ?+?( float, _Complex float ), ?-?( float, _Complex float ),
     1714        ?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float );
     1715_Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ),
     1716        ?+?( double, _Complex double ), ?-?( double, _Complex double ),
     1717        ?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double );
     1718_Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ),
     1719        ?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ),
     1720        ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double );
     1721
     1722forall( otype T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t );
     1723forall( otype T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ),
    20901724        * ?-?( _Atomic T *, ptrdiff_t );
    2091 
    2092 forall( type T ) const T
    2093         * ?+?( const T *, ptrdiff_t ),
    2094         * ?+?( ptrdiff_t, const T * ),
     1725forall( otype T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ),
    20951726        * ?-?( const T *, ptrdiff_t );
    2096 
    2097 forall( type T ) restrict T
    2098         * ?+?( restrict T *, ptrdiff_t ),
    2099         * ?+?( ptrdiff_t, restrict T * ),
     1727forall( otype T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ),
    21001728        * ?-?( restrict T *, ptrdiff_t );
    2101 
    2102 forall( type T ) volatile T
    2103         * ?+?( volatile T *, ptrdiff_t ),
    2104         * ?+?( ptrdiff_t, volatile T * ),
     1729forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ),
    21051730        * ?-?( volatile T *, ptrdiff_t );
    2106 
    2107 forall( type T ) _Atomic const T
    2108         * ?+?( _Atomic const T *, ptrdiff_t ),
    2109         * ?+?( ptrdiff_t, _Atomic const T * ),
     1731forall( otype T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ),
    21101732        * ?-?( _Atomic const T *, ptrdiff_t );
    2111 
    2112 forall( type T ) _Atomic restrict T
    2113         * ?+?( _Atomic restrict T *, ptrdiff_t ),
    2114         * ?+?( ptrdiff_t, _Atomic restrict T * ),
     1733forall( otype T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ),
    21151734        * ?-?( _Atomic restrict T *, ptrdiff_t );
    2116 
    2117 forall( type T ) _Atomic volatile T
    2118         * ?+?( _Atomic volatile T *, ptrdiff_t ),
    2119         * ?+?( ptrdiff_t, _Atomic volatile T * ),
     1735forall( otype T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ),
    21201736        * ?-?( _Atomic volatile T *, ptrdiff_t );
    2121 
    2122 forall( type T ) const restrict T
    2123         * ?+?( const restrict T *, ptrdiff_t ),
    2124         * ?+?( ptrdiff_t, const restrict T * ),
     1737forall( otype T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ),
    21251738        * ?-?( const restrict T *, ptrdiff_t );
    2126 
    2127 forall( type T ) const volatile T
    2128         * ?+?( const volatile T *, ptrdiff_t ),
    2129         * ?+?( ptrdiff_t, const volatile T * ),
     1739forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ),
    21301740        * ?-?( const volatile T *, ptrdiff_t );
    2131 
    2132 forall( type T ) restrict volatile T
    2133         * ?+?( restrict volatile T *, ptrdiff_t ),
    2134         * ?+?( ptrdiff_t, restrict volatile T * ),
     1741forall( otype T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ),
    21351742        * ?-?( restrict volatile T *, ptrdiff_t );
    2136 
    2137 forall( type T ) _Atomic const restrict T
    2138         * ?+?( _Atomic const restrict T *, ptrdiff_t ),
     1743forall( otype T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ),
    21391744        * ?+?( ptrdiff_t, _Atomic const restrict T * ),
    21401745        * ?-?( _Atomic const restrict T *, ptrdiff_t );
    2141 
    2142 forall( type T ) ptrdiff_t
     1746forall( otype T ) ptrdiff_t
    21431747        * ?-?( const restrict volatile T *, const restrict volatile T * ),
    21441748        * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
    21451749\end{lstlisting}
    2146 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2147 rank of \lstinline$int$ there exist
     1750For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    21481751% Don't use predefined: keep this out of prelude.cf.
    21491752\begin{lstlisting}
     
    21521755
    21531756\semantics
    2154 The interpretations of additive expressions are the interpretations of the corresponding function
    2155 calls.
    2156 
    2157 \begin{rationale}
    2158 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that
    2159 is synonymous with a signed integral type that is large enough to hold the difference between two
    2160 pointers. It seems reasonable to use it for pointer addition as well. (This is technically a
    2161 difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral}
    2162 argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
    2163 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an
    2164 argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an
    2165 unsigned type.
     1757The interpretations of additive expressions are the interpretations of the corresponding function calls.
     1758
     1759\begin{rationale}
     1760\lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that is synonymous with a signed integral type that is large enough to hold the difference between two pointers.
     1761It seems reasonable to use it for pointer addition as well. (This is technically a difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
     1762The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an unsigned type.
    21661763\end{rationale}
    21671764
     
    21841781\predefined
    21851782\begin{lstlisting}
    2186 int ?<<?( int, int ),
    2187          ?>>?( int, int );
    2188 unsigned int ?<<?( unsigned int, int ),
    2189          ?>>?( unsigned int, int );
    2190 long int ?<<?( long int, int ),
    2191          ?>>?( long int, int );
    2192 long unsigned int ?<<?( long unsigned int, int ),
    2193          ?>>?( long unsigned int, int );
    2194 long long int ?<<?( long long int, int ),
    2195          ?>>?( long long int, int );
    2196 long long unsigned int ?<<?( long long unsigned int, int ),
    2197          ?>>?( long long unsigned int, int);
    2198 \end{lstlisting}
    2199 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2200 rank of \lstinline$int$ there exist
     1783int ?<<?( int, int ), ?>>?( int, int );
     1784unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int );
     1785long int ?<<?( long int, int ), ?>>?( long int, int );
     1786long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int );
     1787long long int ?<<?( long long int, int ), ?>>?( long long int, int );
     1788long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int);
     1789\end{lstlisting}
     1790For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    22011791% Don't use predefined: keep this out of prelude.cf.
    22021792\begin{lstlisting}
     
    22051795
    22061796\begin{rationale}
    2207 The bitwise shift operators break the usual pattern: they do not convert both operands to a common
    2208 type. The right operand only undergoes \Index{integer promotion}.
     1797The bitwise shift operators break the usual pattern: they do not convert both operands to a common type.
     1798The right operand only undergoes \Index{integer promotion}.
    22091799\end{rationale}
    22101800
    22111801\semantics
    2212 The interpretations of a bitwise shift expression are the interpretations of the corresponding
    2213 function calls.
     1802The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls.
    22141803
    22151804
     
    22351824\predefined
    22361825\begin{lstlisting}
    2237 int ?<?( int, int ),
    2238         ?<=?( int, int ),
    2239         ?>?( int, int ),
    2240         ?>=?( int, int );
    2241 int ?<?( unsigned int, unsigned int ),
    2242         ?<=?( unsigned int, unsigned int ),
    2243         ?>?( unsigned int, unsigned int ),
    2244         ?>=?( unsigned int, unsigned int );
    2245 int ?<?( long int, long int ),
    2246         ?<=?( long int, long int ),
    2247         ?>?( long int, long int ),
    2248         ?>=?( long int, long int );
    2249 int ?<?( long unsigned int, long unsigned ),
    2250         ?<=?( long unsigned int, long unsigned ),
    2251         ?>?( long unsigned int, long unsigned ),
    2252         ?>=?( long unsigned int, long unsigned );
    2253 int ?<?( long long int, long long int ),
    2254         ?<=?( long long int, long long int ),
    2255         ?>?( long long int, long long int ),
    2256         ?>=?( long long int, long long int );
    2257 int ?<?( long long unsigned int, long long unsigned ),
    2258         ?<=?( long long unsigned int, long long unsigned ),
    2259         ?>?( long long unsigned int, long long unsigned ),
    2260         ?>=?( long long unsigned int, long long unsigned );
    2261 int ?<?( float, float ),
    2262         ?<=?( float, float ),
    2263         ?>?( float, float ),
    2264         ?>=?( float, float );
    2265 int ?<?( double, double ),
    2266         ?<=?( double, double ),
    2267         ?>?( double, double ),
    2268         ?>=?( double, double );
    2269 int ?<?( long double, long double ),
    2270         ?<=?( long double, long double ),
    2271         ?>?( long double, long double ),
    2272         ?>=?( long double, long double );
    2273 
    2274 forall( dtype DT ) int
    2275         ?<?( const restrict volatile DT *, const restrict volatile DT * ),
     1826int ?<?( int, int ), ?<=?( int, int ),
     1827        ?>?( int, int ), ?>=?( int, int );
     1828int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ),
     1829        ?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int );
     1830int ?<?( long int, long int ), ?<=?( long int, long int ),
     1831        ?>?( long int, long int ), ?>=?( long int, long int );
     1832int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ),
     1833        ?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned );
     1834int ?<?( long long int, long long int ), ?<=?( long long int, long long int ),
     1835        ?>?( long long int, long long int ), ?>=?( long long int, long long int );
     1836int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ),
     1837        ?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned );
     1838int ?<?( float, float ), ?<=?( float, float ),
     1839        ?>?( float, float ), ?>=?( float, float );
     1840int ?<?( double, double ), ?<=?( double, double ),
     1841        ?>?( double, double ), ?>=?( double, double );
     1842int ?<?( long double, long double ), ?<=?( long double, long double ),
     1843        ?>?( long double, long double ), ?>=?( long double, long double );
     1844forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ),
    22761845        ?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
    22771846        ?<=?( const restrict volatile DT *, const restrict volatile DT * ),
     
    22821851        ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
    22831852\end{lstlisting}
    2284 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2285 rank of \lstinline$int$ there exist
     1853For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    22861854% Don't use predefined: keep this out of prelude.cf.
    22871855\begin{lstlisting}
     
    22931861
    22941862\semantics
    2295 The interpretations of a relational expression are the interpretations of the corresponding function
    2296 call.
     1863The interpretations of a relational expression are the interpretations of the corresponding function call.
    22971864
    22981865
     
    23141881\predefined
    23151882\begin{lstlisting}
    2316 int ?==?( int, int ),
    2317         ?!=?( int, int ),
    2318         ?==?( unsigned int, unsigned int ),
    2319         ?!=?( unsigned int, unsigned int ),
    2320         ?==?( long int, long int ),
    2321         ?!=?( long int, long int ),
    2322         ?==?( long unsigned int, long unsigned int ),
    2323         ?!=?( long unsigned int, long unsigned int ),
    2324         ?==?( long long int, long long int ),
    2325         ?!=?( long long int, long long int ),
    2326         ?==?( long long unsigned int, long long unsigned int ),
    2327         ?!=?( long long unsigned int, long long unsigned int ),
    2328         ?==?( float, float ),
    2329         ?!=?( float, float ),
    2330         ?==?( _Complex float, float ),
    2331         ?!=?( _Complex float, float ),
    2332         ?==?( float, _Complex float ),
    2333         ?!=?( float, _Complex float ),
    2334         ?==?( _Complex float, _Complex float ),
    2335         ?!=?( _Complex float, _Complex float ),
    2336         ?==?( double, double ),
    2337         ?!=?( double, double ),
    2338         ?==?( _Complex double, double ),
    2339         ?!=?( _Complex double, double ),
    2340         ?==?( double, _Complex double ),
    2341         ?!=?( double, _Complex double ),
    2342         ?==?( _Complex double, _Complex double ),
    2343         ?!=?( _Complex double, _Complex double ),
    2344         ?==?( long double, long double ),
    2345         ?!=?( long double, long double ),
    2346         ?==?( _Complex long double, long double ),
    2347         ?!=?( _Complex long double, long double ),
    2348         ?==?( long double, _Complex long double ),
    2349         ?!=?( long double, _Complex long double ),
    2350         ?==?( _Complex long double, _Complex long double ),
    2351         ?!=?( _Complex long double, _Complex long double );
    2352 
     1883int ?==?( int, int ), ?!=?( int, int ),
     1884        ?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ),
     1885        ?==?( long int, long int ), ?!=?( long int, long int ),
     1886        ?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ),
     1887        ?==?( long long int, long long int ), ?!=?( long long int, long long int ),
     1888        ?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ),
     1889        ?==?( float, float ), ?!=?( float, float ),
     1890        ?==?( _Complex float, float ), ?!=?( _Complex float, float ),
     1891        ?==?( float, _Complex float ), ?!=?( float, _Complex float ),
     1892        ?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ),
     1893        ?==?( double, double ), ?!=?( double, double ),
     1894        ?==?( _Complex double, double ), ?!=?( _Complex double, double ),
     1895        ?==?( double, _Complex double ), ?!=?( double, _Complex double ),
     1896        ?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ),
     1897        ?==?( long double, long double ), ?!=?( long double, long double ),
     1898        ?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ),
     1899        ?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ),
     1900        ?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double );
    23531901forall( dtype DT ) int
    23541902        ?==?( const restrict volatile DT *, const restrict volatile DT * ),
     
    23751923        ?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ),
    23761924        ?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * );
    2377 
    23781925forall( ftype FT ) int
    2379         ?==?( FT *, FT * ),
    2380         ?!=?( FT *, FT * ),
    2381         ?==?( FT *, forall( ftype FT2) FT2 * ),
    2382         ?!=?( FT *, forall( ftype FT2) FT2 * ),
    2383         ?==?( forall( ftype FT2) FT2*, FT * ),
    2384         ?!=?( forall( ftype FT2) FT2*, FT * ),
    2385         ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ),
    2386         ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
    2387 \end{lstlisting}
    2388 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2389 rank of \lstinline$int$ there exist
     1926        ?==?( FT *, FT * ), ?!=?( FT *, FT * ),
     1927        ?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ),
     1928        ?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ),
     1929        ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
     1930\end{lstlisting}
     1931For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    23901932% Don't use predefined: keep this out of prelude.cf.
    23911933\begin{lstlisting}
     
    23951937
    23961938\begin{rationale}
    2397 The polymorphic equality operations come in three styles: comparisons between pointers of compatible
    2398 types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and
    2399 between the \Index{null pointer} constant and pointers to any type. In the last case, a special
    2400 constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA
    2401 type system.
     1939The polymorphic equality operations come in three styles: comparisons between pointers of compatible types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and between the \Index{null pointer} constant and pointers to any type.
     1940In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system.
    24021941\end{rationale}
    24031942
    24041943\semantics
    2405 The interpretations of an equality expression are the interpretations of the corresponding function
    2406 call.
     1944The interpretations of an equality expression are the interpretations of the corresponding function call.
    24071945
    24081946\begin{sloppypar}
    2409 The result of an equality comparison between two pointers to predefined functions or predefined
    2410 values is implementation-defined.
     1947The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined.
    24111948\end{sloppypar}
    24121949\begin{rationale}
    2413 The implementation-defined status of equality comparisons allows implementations to use one library
    2414 routine to implement many predefined functions. These optimization are particularly important when
    2415 the predefined functions are polymorphic, as is the case for most pointer operations
     1950The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions.
     1951These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations
    24161952\end{rationale}
    24171953
     
    24391975long long unsigned int ?&?( long long unsigned int, long long unsigned int );
    24401976\end{lstlisting}
    2441 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2442 rank of \lstinline$int$ there exist
     1977For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    24431978% Don't use predefined: keep this out of prelude.cf.
    24441979\begin{lstlisting}
     
    24471982
    24481983\semantics
    2449 The interpretations of a bitwise AND expression are the interpretations of the corresponding
    2450 function call.
     1984The interpretations of a bitwise AND expression are the interpretations of the corresponding function call.
    24511985
    24521986
     
    24732007long long unsigned int ?^?( long long unsigned int, long long unsigned int );
    24742008\end{lstlisting}
    2475 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2476 rank of \lstinline$int$ there exist
     2009For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    24772010% Don't use predefined: keep this out of prelude.cf.
    24782011\begin{lstlisting}
     
    24812014
    24822015\semantics
    2483 The interpretations of a bitwise exclusive OR expression are the interpretations of the
    2484 corresponding function call.
     2016The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call.
    24852017
    24862018
     
    25072039long long unsigned int ?|?( long long unsigned int, long long unsigned int );
    25082040\end{lstlisting}
    2509 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
    2510 rank of \lstinline$int$ there exist
     2041For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    25112042% Don't use predefined: keep this out of prelude.cf.
    25122043\begin{lstlisting}
     
    25152046
    25162047\semantics
    2517 The interpretations of a bitwise inclusive OR expression are the interpretations of the
    2518 corresponding function call.
     2048The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call.
    25192049
    25202050
     
    25282058
    25292059\semantics The operands of the expression ``\lstinline$a && b$'' are treated as
    2530 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be
    2531 unambiguous. The expression has only one interpretation, which is of type \lstinline$int$.
    2532 \begin{rationale}
    2533 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has
    2534 not been redefined for those types, the compiler can optimize away the function calls.
     2060``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous.
     2061The expression has only one interpretation, which is of type \lstinline$int$.
     2062\begin{rationale}
     2063When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has not been redefined for those types, the compiler can optimize away the function calls.
    25352064
    25362065A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
    2537 \lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points
    2538 at a \lstinline$Rational$ value that is non-zero.
    2539 
    2540 \begin{lstlisting}
    2541 extern type Rational;@\use{Rational}@
     2066\lstinline$if$ statements.
     2067For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero.
     2068
     2069\begin{lstlisting}
     2070extern otype Rational;@\use{Rational}@
    25422071extern const Rational 0;@\use{0}@
    25432072extern int ?!=?( Rational, Rational );
    25442073Rational *rp;
    2545 
    25462074while ( rp && *rp ) { ... }
    25472075\end{lstlisting}
    2548 The logical expression calls the \lstinline$Rational$ inequality operator, passing
    2549 it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In
    2550 contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$
    2551 conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would
    2552 produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was
    2553 not written with this situation in mind.
     2076The logical expression calls the \lstinline$Rational$ inequality operator, passing it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result.
     2077In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation.
     2078The conversion to \lstinline$int$ would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind.
    25542079\end{rationale}
    25552080
     
    25652090\semantics
    25662091
    2567 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
    2568 and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
    2569 interpretation, which is of type \lstinline$int$.
     2092The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous.
     2093The expression has only one interpretation, which is of type \lstinline$int$.
    25702094
    25712095
     
    25802104
    25812105\semantics
    2582 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and
    2583 third operands both have an interpretation with \lstinline$void$ type, then the expression has an
    2584 interpretation with type \lstinline$void$, equivalent to
     2106In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and third operands both have an interpretation with \lstinline$void$ type, then the expression has an interpretation with type \lstinline$void$, equivalent to
    25852107\begin{lstlisting}
    25862108( int)(( a)!=0) ? ( void)( b) : ( void)( c)
    25872109\end{lstlisting}
    25882110
    2589 If the second and third operands both have interpretations with non-\lstinline$void$ types, the
    2590 expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'',
    2591 with \lstinline$cond$ declared as
    2592 \begin{lstlisting}
    2593 forall( type T ) T cond( int, T, T );
    2594  
    2595 forall( dtype D ) void
    2596         * cond( int, D *, void * ),
    2597         * cond( int, void *, D * );
    2598        
    2599 forall( dtype D ) _atomic void
    2600         * cond( int, _Atomic D *, _Atomic void * ),
    2601         * cond( int, _Atomic void *, _Atomic D * );
    2602 
    2603 forall( dtype D ) const void
    2604         * cond( int, const D *, const void * ),
    2605         * cond( int, const void *, const D * );
    2606 
    2607 forall( dtype D ) restrict void
    2608         * cond( int, restrict D *, restrict void * ),
    2609         * cond( int, restrict void *, restrict D * );
    2610 
    2611 forall( dtype D ) volatile void
    2612         * cond( int, volatile D *, volatile void * ),
    2613         * cond( int, volatile void *, volatile D * );
    2614 
    2615 forall( dtype D ) _Atomic const void
    2616         * cond( int, _Atomic const D *, _Atomic const void * ),
    2617         * cond( int, _Atomic const void *, _Atomic const D * );
    2618 
    2619 forall( dtype D ) _Atomic restrict void
    2620         * cond( int, _Atomic restrict D *, _Atomic restrict void * ),
    2621         * cond( int, _Atomic restrict void *, _Atomic restrict D * );
    2622 
    2623 forall( dtype D ) _Atomic volatile void
    2624         * cond( int, _Atomic volatile D *, _Atomic volatile void * ),
    2625         * cond( int, _Atomic volatile void *, _Atomic volatile D * );
    2626 
    2627 forall( dtype D ) const restrict void
    2628         * cond( int, const restrict D *, const restrict void * ),
    2629         * cond( int, const restrict void *, const restrict D * );
    2630 
    2631 forall( dtype D ) const volatile void
    2632         * cond( int, const volatile D *, const volatile void * ),
    2633         * cond( int, const volatile void *, const volatile D * );
    2634 
    2635 forall( dtype D ) restrict volatile void
    2636         * cond( int, restrict volatile D *, restrict volatile void * ),
    2637         * cond( int, restrict volatile void *, restrict volatile D * );
    2638 
    2639 forall( dtype D ) _Atomic const restrict void
    2640         * cond( int, _Atomic const restrict D *, _Atomic const restrict void * ),
     2111If the second and third operands both have interpretations with non-\lstinline$void$ types, the expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', with \lstinline$cond$ declared as
     2112\begin{lstlisting}
     2113forall( otype T ) T cond( int, T, T );
     2114forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * );
     2115forall( dtype D ) _atomic void * cond(
     2116        int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * );
     2117forall( dtype D ) const void * cond(
     2118        int, const D *, const void * ), * cond( int, const void *, const D * );
     2119forall( dtype D ) restrict void * cond(
     2120        int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * );
     2121forall( dtype D ) volatile void * cond(
     2122        int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * );
     2123forall( dtype D ) _Atomic const void * cond(
     2124        int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * );
     2125forall( dtype D ) _Atomic restrict void * cond(
     2126        int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * );
     2127forall( dtype D ) _Atomic volatile void * cond(
     2128        int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * );
     2129forall( dtype D ) const restrict void * cond(
     2130        int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * );
     2131forall( dtype D ) const volatile void * cond(
     2132        int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * );
     2133forall( dtype D ) restrict volatile void * cond(
     2134        int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * );
     2135forall( dtype D ) _Atomic const restrict void * cond(
     2136        int, _Atomic const restrict D *, _Atomic const restrict void * ),
    26412137        * cond( int, _Atomic const restrict void *, _Atomic const restrict D * );
    2642 
    2643 forall( dtype D ) _Atomic const volatile void
    2644         * cond( int, _Atomic const volatile D *, _Atomic const volatile void * ),
     2138forall( dtype D ) _Atomic const volatile void * cond(
     2139        int, _Atomic const volatile D *, _Atomic const volatile void * ),
    26452140        * cond( int, _Atomic const volatile void *, _Atomic const volatile D * );
    2646 
    2647 forall( dtype D ) _Atomic restrict volatile void
    2648         * cond( int, _Atomic restrict volatile D *,
    2649          _Atomic restrict volatile void * ),
    2650         * cond( int, _Atomic restrict volatile void *,
    2651          _Atomic restrict volatile D * );
    2652 
    2653 forall( dtype D ) const restrict volatile void
    2654         * cond( int, const restrict volatile D *,
    2655          const restrict volatile void * ),
    2656         * cond( int, const restrict volatile void *,
    2657          const restrict volatile D * );
    2658 
    2659 forall( dtype D ) _Atomic const restrict volatile void
    2660         * cond( int, _Atomic const restrict volatile D *,
    2661          _Atomic const restrict volatile void * ),
    2662         * cond( int, _Atomic const restrict volatile void *,
    2663          _Atomic const restrict volatile D * );
    2664 \end{lstlisting}
    2665 
    2666 \begin{rationale}
    2667 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and
    2668 third operands have arithmetic type, and to combine the qualifiers of the second and third operands
    2669 if they are pointers.
     2141forall( dtype D ) _Atomic restrict volatile void * cond(
     2142        int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ),
     2143        * cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * );
     2144forall( dtype D ) const restrict volatile void * cond(
     2145        int, const restrict volatile D *, const restrict volatile void * ),
     2146        * cond( int, const restrict volatile void *, const restrict volatile D * );
     2147forall( dtype D ) _Atomic const restrict volatile void * cond(
     2148        int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ),
     2149        * cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * );
     2150\end{lstlisting}
     2151
     2152\begin{rationale}
     2153The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and third operands have arithmetic type, and to combine the qualifiers of the second and third operands if they are pointers.
    26702154\end{rationale}
    26712155
     
    26852169rand() ? cip : vip;
    26862170\end{lstlisting}
    2687 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second
    2688 and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
     2171The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
    26892172
    26902173\begin{lstlisting}
     
    27082191
    27092192\rewriterules
    2710 Let ``\(\leftarrow\)'' be any of the assignment operators. Then
     2193Let ``\(\leftarrow\)'' be any of the assignment operators.
     2194Then
    27112195\use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?}
    27122196\use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
     
    27162200
    27172201\semantics
    2718 Each interpretation of the left operand of an assignment expression is considered separately. For
    2719 each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class
    2720 specifier, the expression has one valid interpretation, with the type of the left operand. The
    2721 right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
    2722 For the remaining interpretations, the expression is rewritten, and the interpretations of the
    2723 assignment expression are the interpretations of the corresponding function call. Finally, all
    2724 interpretations of the expression produced for the different interpretations of the left operand are
    2725 combined to produce the interpretations of the expression as a whole; where interpretations have
    2726 compatible result types, the best interpretations are selected in the manner described for function
    2727 call expressions.
     2202Each interpretation of the left operand of an assignment expression is considered separately.
     2203For each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class specifier, the expression has one valid interpretation, with the type of the left operand.
     2204The right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
     2205For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call.
     2206Finally, all interpretations of the expression produced for the different interpretations of the left operand are combined to produce the interpretations of the expression as a whole;
     2207where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
    27282208
    27292209
     
    27902270        ?=?( volatile _Complex long double *, _Complex long double ),
    27912271        ?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double );
    2792 
    27932272forall( ftype FT ) FT
    27942273        * ?=?( FT * volatile *, FT * ),
    27952274        * ?=?( FT * volatile *, forall( ftype F ) F * );
    2796 
    27972275forall( ftype FT ) FT const
    27982276        * ?=?( FT const * volatile *, FT const * ),
    27992277        * ?=?( FT const * volatile *, forall( ftype F ) F * );
    2800 
    28012278forall( ftype FT ) FT volatile
    28022279        * ?=?( FT volatile * volatile *, FT * ),
    28032280        * ?=?( FT volatile * volatile *, forall( ftype F ) F * );
    2804 
    28052281forall( ftype FT ) FT const
    28062282        * ?=?( FT const volatile * volatile *, FT const * ),
    28072283        * ?=?( FT const volatile * volatile *, forall( ftype F ) F * );
    2808 
    28092284forall( dtype DT ) DT
    28102285        * ?=?( DT * restrict volatile *, DT * ),
     
    28142289        * ?=?( DT * _Atomic restrict volatile *, void * ),
    28152290        * ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2816 
    28172291forall( dtype DT ) DT _Atomic
    28182292        * ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ),
     
    28222296        * ?=?( _Atomic DT * _Atomic restrict volatile *, void * ),
    28232297        * ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2824 
    28252298forall( dtype DT ) DT const
    28262299        * ?=?( DT const * restrict volatile *, DT const * ),
     
    28302303        * ?=?( DT const * _Atomic restrict volatile *, void const * ),
    28312304        * ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * );
    2832 
    28332305forall( dtype DT ) DT restrict
    28342306        * ?=?( restrict DT * restrict volatile *, DT restrict * ),
     
    28382310        * ?=?( restrict DT * _Atomic restrict volatile *, void * ),
    28392311        * ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2840 
    28412312forall( dtype DT ) DT volatile
    28422313        * ?=?( DT volatile * restrict volatile *, DT volatile * ),
     
    28462317        * ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ),
    28472318        * ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2848 
    28492319forall( dtype DT ) DT _Atomic const
    28502320        * ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ),
     
    28542324        * ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ),
    28552325        * ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * );
    2856 
    28572326forall( dtype DT ) DT _Atomic restrict
    28582327        * ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ),
     
    28622331        * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ),
    28632332        * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
    2864 
    28652333forall( dtype DT ) DT _Atomic volatile
    28662334        * ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ),
     
    28702338        * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ),
    28712339        * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2872 
    28732340forall( dtype DT ) DT const restrict
    28742341        * ?=?( DT const restrict * restrict volatile *, DT const restrict * ),
     
    28782345        * ?=?( DT const restrict * _Atomic restrict volatile *, void const * ),
    28792346        * ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * );
    2880 
    28812347forall( dtype DT ) DT const volatile
    28822348        * ?=?( DT const volatile * restrict volatile *, DT const volatile * ),
     
    28862352        * ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ),
    28872353        * ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2888 
    28892354forall( dtype DT ) DT restrict volatile
    28902355        * ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ),
     
    28942359        * ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ),
    28952360        * ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
    2896 
    28972361forall( dtype DT ) DT _Atomic const restrict
    28982362        * ?=?( DT _Atomic const restrict * restrict volatile *,
     
    29082372        * ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
    29092373         forall( dtype D ) D * );
    2910 
    29112374forall( dtype DT ) DT _Atomic const volatile
    29122375        * ?=?( DT _Atomic const volatile * restrict volatile *,
     
    29222385        * ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
    29232386         forall( dtype D ) D * );
    2924 
    29252387forall( dtype DT ) DT _Atomic restrict volatile
    29262388        * ?=?( DT _Atomic restrict volatile * restrict volatile *,
     
    29362398        * ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
    29372399         forall( dtype D ) D * );
    2938 
    29392400forall( dtype DT ) DT const restrict volatile
    29402401        * ?=?( DT const restrict volatile * restrict volatile *,
     
    29502411        * ?=?( DT const restrict volatile * _Atomic restrict volatile *,
    29512412         forall( dtype D ) D * );
    2952 
    29532413forall( dtype DT ) DT _Atomic const restrict volatile
    29542414        * ?=?( DT _Atomic const restrict volatile * restrict volatile *,
     
    29642424        * ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
    29652425         forall( dtype D ) D * );
    2966 
    29672426forall( dtype DT ) void
    29682427        * ?=?( void * restrict volatile *, DT * );
    2969 
    29702428forall( dtype DT ) void const
    29712429        * ?=?( void const * restrict volatile *, DT const * );
    2972 
    29732430forall( dtype DT ) void volatile
    29742431        * ?=?( void volatile * restrict volatile *, DT volatile * );
    2975 
    29762432forall( dtype DT ) void const volatile
    29772433        * ?=?( void const volatile * restrict volatile *, DT const volatile * );
    29782434\end{lstlisting}
    29792435\begin{rationale}
    2980 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement,
    2981 except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter,
    2982 instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete
    2983 type.
     2436The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete type.
    29842437\end{rationale}
    29852438
     
    30062459
    30072460\semantics
    3008 The structure assignment functions provide member-wise assignment; each non-array member and each
    3009 element of each array member of the right argument is assigned to the corresponding member or
    3010 element of the left argument using the assignment function defined for its type. All other
    3011 assignment functions have the same effect as the corresponding C assignment expression.
    3012 \begin{rationale}
    3013 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that
    3014 is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
     2461The structure assignment functions provide member-wise assignment;
     2462each non-array member and each element of each array member of the right argument is assigned to the corresponding member or element of the left argument using the assignment function defined for its type.
     2463All other assignment functions have the same effect as the corresponding C assignment expression.
     2464\begin{rationale}
     2465Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
    30152466\end{rationale}
    30162467
     
    30202471\predefined
    30212472\begin{lstlisting}
    3022 forall( type T ) T
     2473forall( otype T ) T
    30232474        * ?+=?( T * restrict volatile *, ptrdiff_t ),
    30242475        * ?-=?( T * restrict volatile *, ptrdiff_t ),
    30252476        * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ),
    30262477        * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t );
    3027 
    3028 forall( type T ) T _Atomic
     2478forall( otype T ) T _Atomic
    30292479        * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ),
    30302480        * ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ),
    30312481        * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ),
    30322482        * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t );
    3033 
    3034 forall( type T ) T const
     2483forall( otype T ) T const
    30352484        * ?+=?( T const * restrict volatile *, ptrdiff_t ),
    30362485        * ?-=?( T const * restrict volatile *, ptrdiff_t ),
    30372486        * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ),
    30382487        * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t );
    3039 
    3040 forall( type T ) T restrict
     2488forall( otype T ) T restrict
    30412489        * ?+=?( T restrict * restrict volatile *, ptrdiff_t ),
    30422490        * ?-=?( T restrict * restrict volatile *, ptrdiff_t ),
    30432491        * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30442492        * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t );
    3045 
    3046 forall( type T ) T volatile
     2493forall( otype T ) T volatile
    30472494        * ?+=?( T volatile * restrict volatile *, ptrdiff_t ),
    30482495        * ?-=?( T volatile * restrict volatile *, ptrdiff_t ),
    30492496        * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30502497        * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t );
    3051 
    3052 forall( type T ) T _Atomic const
     2498forall( otype T ) T _Atomic const
    30532499        * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ),
    30542500        * ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ),
    30552501        * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ),
    30562502        * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t );
    3057 
    3058 forall( type T ) T _Atomic restrict
     2503forall( otype T ) T _Atomic restrict
    30592504        * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
    30602505        * ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
    30612506        * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30622507        * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t );
    3063 
    3064 forall( type T ) T _Atomic volatile
     2508forall( otype T ) T _Atomic volatile
    30652509        * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
    30662510        * ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
    30672511        * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30682512        * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t );
    3069 
    3070 forall( type T ) T const restrict
     2513forall( otype T ) T const restrict
    30712514        * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ),
    30722515        * ?-=?( T const restrict * restrict volatile *, ptrdiff_t ),
    30732516        * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30742517        * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t );
    3075 
    3076 forall( type T ) T const volatile
     2518forall( otype T ) T const volatile
    30772519        * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ),
    30782520        * ?-=?( T const volatile * restrict volatile *, ptrdiff_t ),
    30792521        * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30802522        * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t );
    3081 
    3082 forall( type T ) T restrict volatile
     2523forall( otype T ) T restrict volatile
    30832524        * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
    30842525        * ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
    30852526        * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30862527        * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    3087 
    3088 forall( type T ) T _Atomic const restrict
     2528forall( otype T ) T _Atomic const restrict
    30892529        * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
    30902530        * ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
    30912531        * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    30922532        * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t );
    3093 
    3094 forall( type T ) T _Atomic const volatile
     2533forall( otype T ) T _Atomic const volatile
    30952534        * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
    30962535        * ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
    30972536        * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    30982537        * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t );
    3099 
    3100 forall( type T ) T _Atomic restrict volatile
     2538forall( otype T ) T _Atomic restrict volatile
    31012539        * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
    31022540        * ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
    31032541        * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    31042542        * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    3105 
    3106 forall( type T ) T const restrict volatile
     2543forall( otype T ) T const restrict volatile
    31072544        * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
    31082545        * ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
    31092546        * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    31102547        * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    3111 
    3112 forall( type T ) T _Atomic const restrict volatile
     2548forall( otype T ) T _Atomic const restrict volatile
    31132549        * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
    31142550        * ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
     
    33212757\semantics
    33222758In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
    3323 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The
    3324 interpretations of the expression are the interpretations of the second operand.
     2759``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}.
     2760The interpretations of the expression are the interpretations of the second operand.
    33252761
    33262762
     
    33372773
    33382774\constraints
    3339 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the
    3340 identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the
    3341 same name space, except that:
     2775If an identifier has \Index{no linkage}, there shall be no more than one declaration of the identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the same name space, except that:
    33422776\begin{itemize}
    3343 \item
    3344 a typedef name may be redefined to denote the same type as it currently does, provided that type is
    3345 not a variably modified type;
    3346 \item
    3347 tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
     2777\item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type;
     2778\item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
    33482779\end{itemize}
    33492780\begin{rationale}
    3350 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow
    3351 overloading.
    3352 \end{rationale}
    3353 
    3354 An identifier declared by a type declaration shall not be redeclared as a parameter in a function
    3355 definition whose declarator includes an identifier list.
    3356 \begin{rationale}
    3357 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This
    3358 avoids an ambiguity between old-style function declarations and new-style function prototypes:
     2781This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading.
     2782\end{rationale}
     2783
     2784An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list.
     2785\begin{rationale}
     2786This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters.
     2787This avoids an ambiguity between old-style function declarations and new-style function prototypes:
    33592788\begin{lstlisting}
    33602789void f( Complex,        // ... 3000 characters ...
    33612790void g( Complex,        // ... 3000 characters ...
    3362 int Complex; { ... }
    3363 \end{lstlisting}
    3364 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the
    3365 second.
     2791int Complex;
     2792{ ... }
     2793\end{lstlisting}
     2794Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second.
    33662795\end{rationale}
    33672796
     
    33822811
    33832812\semantics
    3384 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure
    3385 specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union
    3386 specifiers with tags.
     2813\CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union specifiers with tags.
    33872814\begin{rationale}
    33882815This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}.
     
    34012828cp.x = 0;
    34022829cp.color = RED;
    3403 
    34042830struct literal {@\impl{literal}@
    34052831        enum { NUMBER, STRING } tag;
    34062832        union {
    3407          double n;
    3408          char *s;
     2833                double n;
     2834                char *s;
    34092835        };
    34102836};
     
    34282854\begin{comment}
    34292855\constraints
    3430 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier}
    3431 declares a structure or union tag, the types of the members of the structure or union shall not use
    3432 any of the type identifiers declared by the \nonterm{type-parameter-list}.
    3433 \begin{rationale}
    3434 This sort of declaration is illegal because the scope of the type identifiers ends at the end of the
    3435 declaration, but the scope of the structure tag does not.
    3436 \begin{lstlisting}
    3437 forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal
    3438 \end{lstlisting}
    3439 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the
    3440 members' type be?
     2856If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} declares a structure or union tag, the types of the members of the structure or union shall not use any of the type identifiers declared by the \nonterm{type-parameter-list}.
     2857\begin{rationale}
     2858This sort of declaration is illegal because the scope of the type identifiers ends at the end of the declaration, but the scope of the structure tag does not.
     2859\begin{lstlisting}
     2860forall( otype T ) struct Pair { T a, b;
     2861} mkPair( T, T ); // illegal
     2862\end{lstlisting}
     2863If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be?
    34412864\end{rationale}
    34422865\end{comment}
    34432866
    34442867\semantics
    3445 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type
    3446 identifiers, function and object identifiers with \Index{no linkage}.
     2868The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}.
    34472869
    34482870If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
     
    34502872\begin{lstlisting}
    34512873D( @\normalsize\nonterm{parameter-type-list}@ )
    3452 \end{lstlisting}
    3453 then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred
    3454 parameter} of the function declarator if and only if it is not an inferred parameter of a function
    3455 declarator in \lstinline$D$, and it is used in the type of a parameter in the following
     2874\end{lstlisting} then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred parameter} of the function declarator if and only if it is not an inferred parameter of a function declarator in \lstinline$D$, and it is used in the type of a parameter in the following
    34562875\nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
    3457 \Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by
    3458 assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s
    3459 of that function declarator.
     2876\Index{specification} in one of the \nonterm{forall-specifier}s.
     2877The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator.
    34602878
    34612879\begin{comment}
    34622880\begin{rationale}
    3463 Since every inferred parameter is used by some parameter, inference can be understood as a single
    3464 bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
     2881Since every inferred parameter is used by some parameter, inference can be understood as a single bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
    34652882
    34662883If this restriction were lifted, it would be possible to write
    34672884\begin{lstlisting}
    3468 forall( type T ) T * alloc( void );@\use{alloc}@
    3469 int *p = alloc();
     2885forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
    34702886\end{lstlisting}
    34712887Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
    3472 \lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression
    3473 involving polymorphic functions and overloaded identifiers, there could be considerable distance
    3474 between the call and the subexpression that causes \lstinline$T$ to be bound.
     2888\lstinline$int *$.
     2889In general, if a call to \lstinline$alloc()$ is a subexpression of an expression involving polymorphic functions and overloaded identifiers, there could be considerable distance between the call and the subexpression that causes \lstinline$T$ to be bound.
    34752890
    34762891With the current restriction, \lstinline$alloc()$ must be given an argument that determines
    34772892\lstinline$T$:
    34782893\begin{lstlisting}
    3479 forall( type T ) T * alloc( T initial_value );@\use{alloc}@
     2894forall( otype T ) T * alloc( T initial_value );@\use{alloc}@
    34802895\end{lstlisting}
    34812896\end{rationale}
    34822897\end{comment}
    34832898
    3484 If a function declarator is part of a function definition, its inferred parameters and assertion
    3485 parameters have \Index{block scope}; otherwise, identifiers declared by assertions have a
     2899If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope};
     2900otherwise, identifiers declared by assertions have a
    34862901\define{declaration scope}, which terminates at the end of the \nonterm{declaration}.
    34872902
    34882903A function type that has at least one inferred parameter is a \define{polymorphic function} type.
    3489 Function types with no inferred parameters are \define{monomorphic function} types. One function
    3490 type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the
    3491 same number of inferred parameters and fewer of its explicit parameters have types that depend on an
    3492 inferred parameter.
    3493 
    3494 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant
    3495 to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with
    3496 the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$
    3497 and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$
    3498 be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are
    3499 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if
    3500 for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same
    3501 identifier and compatible type, and vice versa.
     2904Function types with no inferred parameters are \define{monomorphic function} types.
     2905One function type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the same number of inferred parameters and fewer of its explicit parameters have types that depend on an inferred parameter.
     2906
     2907The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility.
     2908Let $f$ and $g$ be two polymorphic function types with the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s.
     2909Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$.
     2910Then $f$ and $g$ are
     2911\Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same identifier and compatible type, and vice versa.
    35022912
    35032913\examples
     
    35052915\begin{lstlisting}
    35062916int fi( int );
    3507 forall( type T ) T fT( T );
     2917forall( otype T ) T fT( T );
    35082918\end{lstlisting}
    35092919\lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a
     
    35112921\begin{lstlisting}
    35122922int (*pfi )( int ) = fi;
    3513 forall( type T ) T (*pfT )( T ) = fT;
    3514 \end{lstlisting}
    3515 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not
    3516 polymorphic, but the function it points at is.
     2923forall( otype T ) T (*pfT )( T ) = fT;
     2924\end{lstlisting}
     2925\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
    35172926\begin{lstlisting}
    35182927int (*fvpfi( void ))( int ) {
    35192928        return pfi;
    35202929}
    3521 forall( type T ) T (*fvpfT( void ))( T ) {
     2930forall( otype T ) T (*fvpfT( void ))( T ) {
    35222931        return pfT;
    35232932}
    35242933\end{lstlisting}
    3525 \lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers
    3526 to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points
    3527 at is polymorphic.
    3528 \begin{lstlisting}
    3529 forall( type T ) int ( *fTpfi( T ) )( int );
    3530 forall( type T ) T ( *fTpfT( T ) )( T );
    3531 forall( type T, type U ) U ( *fTpfU( T ) )( U );
    3532 \end{lstlisting}
    3533 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function
    3534 taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$
    3535 is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
    3536 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance,
    3537 in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and
    3538 the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
     2934\lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points at is polymorphic.
     2935\begin{lstlisting}
     2936forall( otype T ) int ( *fTpfi( T ) )( int );
     2937forall( otype T ) T ( *fTpfT( T ) )( T );
     2938forall( otype T, otype U ) U ( *fTpfU( T ) )( U );
     2939\end{lstlisting}
     2940\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
     2941It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
     2942\lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$.
     2943For instance, in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
    35392944``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
    3540 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that
    3541 is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
     2945\lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
    35422946\lstinline$char *$.
    35432947\begin{lstlisting}
    3544 forall( type T, type U, type V ) U * f( T *, U, V * const );
    3545 forall( type U, type V, type W ) U * g( V *, U, W * const );
    3546 \end{lstlisting}
    3547 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be
    3548 their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
    3549 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\)
    3550 by \(g_i\) in \(f\) gives
    3551 \begin{lstlisting}
    3552 forall( type V, type U, type W ) U * f( V *, U, W * const );
    3553 \end{lstlisting}
    3554 which has a return type and parameter list that is compatible with \(g\).
    3555 \begin{rationale}
    3556 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave
    3557 room for inferred parameters of ordinary types in case parameterized types get added one day.
     2948forall( otype T, otype U, otype V ) U * f( T *, U, V * const );
     2949forall( otype U, otype V, otype W ) U * g( V *, U, W * const );
     2950\end{lstlisting}
     2951The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
     2952Let \(f\) and \(g\) be their types;
     2953then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
     2954= \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$.
     2955Replacing every \(f_i\) by \(g_i\) in \(f\) gives
     2956\begin{lstlisting}
     2957forall( otype V, otype U, otype W ) U * f( V *, U, W * const );
     2958\end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
     2959\begin{rationale}
     2960The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave room for inferred parameters of ordinary types in case parameterized types get added one day.
    35582961
    35592962Even without parameterized types, I might try to allow
    35602963\begin{lstlisting}
    35612964forall( int n ) int sum( int vector[n] );
    3562 \end{lstlisting}
    3563 but C currently rewrites array parameters as pointer parameters, so the effects of such a change
    3564 require more thought.
    3565 \end{rationale}
    3566 
    3567 \begin{rationale}
    3568 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply
    3569 assertions to those types. Adding this to existing C declaration syntax and semantics was delicate,
    3570 and not entirely successful.
    3571 
    3572 C depends on declaration-before-use, so a forall specifier must introduce type names before they can
    3573 be used in the declaration specifiers. This could be done by making the forall specifier part of
    3574 the declaration specifiers, or by making it a new introductory clause of declarations.
    3575 
    3576 Assertions are also part of polymorphic function types, because it must be clear which functions
    3577 have access to the assertion parameters declared by the assertions. All attempts to put assertions
    3578 inside an introductory clause produced complex semantics and confusing code. Building them into the
    3579 declaration specifiers could be done by placing them in the function's parameter list, or in a
    3580 forall specifier that is a declaration specifier. Assertions are also used with type parameters of
    3581 specifications, and by type declarations. For consistency's sake it seems best to attach assertions
    3582 to the type declarations in forall specifiers, which means that forall specifiers must be
    3583 declaration specifiers.
     2965\end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought.
     2966\end{rationale}
     2967
     2968\begin{rationale}
     2969A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types.
     2970Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful.
     2971
     2972C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers.
     2973This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations.
     2974
     2975Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions.
     2976All attempts to put assertions inside an introductory clause produced complex semantics and confusing code.
     2977Building them into the declaration specifiers could be done by placing them in the function's parameter list, or in a forall specifier that is a declaration specifier.
     2978Assertions are also used with type parameters of specifications, and by type declarations.
     2979For consistency's sake it seems best to attach assertions to the type declarations in forall specifiers, which means that forall specifiers must be declaration specifiers.
    35842980\end{rationale}
    35852981%HERE
     
    35952991
    35962992\constraints
    3597 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and
    3598 pointer types whose referenced type is an object type shall not be restrict-qualified.
     2993\lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified.
    35992994
    36002995\semantics
    3601 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not
    3602 establish any special semantics in that case.
    3603 
    3604 \begin{rationale}
    3605 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be
    3606 passed to polymorphic functions.
    3607 \end{rationale}
    3608 
    3609 \lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be
    3610 an unqualified version of a type; then the result of calling a function with return type
     2996An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case.
     2997
     2998\begin{rationale}
     2999\CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions.
     3000\end{rationale}
     3001
     3002\lstinline$lvalue$ may be used to qualify the return type of a function type.
     3003Let \lstinline$T$ be an unqualified version of a type;
     3004then the result of calling a function with return type
    36113005\lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
    3612 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to
    3613 indicate that the function result is a constant or volatile lvalue.
    3614 \begin{rationale}
    3615 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the
    3616 return type of a function if the \lstinline$lvalue$ qualifier is also used.
    3617 \end{rationale}
    3618 
    3619 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the
    3620 result of the expression is an lvalue.
    3621 
    3622 \begin{rationale}
    3623 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to
    3624 object of type \lstinline$T$) type. Reference types have four uses in {\CC}.
     3006\lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to indicate that the function result is a constant or volatile lvalue.
     3007\begin{rationale}
     3008The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the return type of a function if the \lstinline$lvalue$ qualifier is also used.
     3009\end{rationale}
     3010
     3011An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue;
     3012the result of the expression is an lvalue.
     3013
     3014\begin{rationale}
     3015\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type.
     3016Reference types have four uses in {\CC}.
    36253017\begin{itemize}
    36263018\item
     
    36293021
    36303022\item
    3631 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting
    3632 some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives
    3633 an example.
     3023A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal \lstinline$with$ statement.
     3024The following {\CC} code gives an example.
    36343025\begin{lstlisting}
    36353026{
     
    36413032
    36423033\item
    3643 A reference parameter can be used to allow a function to modify an argument without forcing the
    3644 caller to pass the address of the argument. This is most useful for user-defined assignment
    3645 operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and
    3646 the two expressions
     3034A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument.
     3035This is most useful for user-defined assignment operators.
     3036In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions
    36473037\begin{lstlisting}
    36483038a = b;
    36493039operator=( a, b );
    3650 \end{lstlisting}
    3651 are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first
    3652 parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. It cannot have type
     3040\end{lstlisting} are equivalent.
     3041If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.
     3042It cannot have type
    36533043\lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
    36543044``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
    36553045
    3656 In the case of user-defined operators, this could just as well be handled by using pointer types and
    3657 by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
    3658 ``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things,
    3659 because they remove a useful property of C function calls: an argument can only be modified by a
    3660 function if it is preceded by ``\lstinline$&$''.
     3046In the case of user-defined operators, this could just as well be handled by using pointer types and by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
     3047``\lstinline$operator=(&( a), b )$''.
     3048Reference parameters of ``normal'' functions are Bad Things, because they remove a useful property of C function calls: an argument can only be modified by a function if it is preceded by ``\lstinline$&$''.
    36613049
    36623050\item
     
    36683056void fiddle( const Thing & );
    36693057\end{lstlisting}
    3670 If the second form is used, then constructors and destructors are not invoked to create a temporary
    3671 variable at the call site ( and it is bad style for the caller to make any assumptions about such
    3672 things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by
    3673 aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too
    3674 large or their constructors or destructors are too expensive. An implementation may switch between
    3675 them without causing trouble for well-behaved clients. This leaves the implementor to define ``too
    3676 large'' and ``too expensive''.
     3058If the second form is used, then constructors and destructors are not invoked to create a temporary variable at the call site ( and it is bad style for the caller to make any assumptions about such things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by aliases.
     3059The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive.
     3060An implementation may switch between them without causing trouble for well-behaved clients.
     3061This leaves the implementor to define ``too large'' and ``too expensive''.
    36773062
    36783063I propose to push this job onto the compiler by allowing it to implement
    36793064\begin{lstlisting}
    36803065void fiddle( const volatile Thing );
    3681 \end{lstlisting}
    3682 with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter
    3683 passing mechanism, it should be able to come up with a better definition of ``too large'', and may
    3684 be able to make a good guess at ``too expensive''.
     3066\end{lstlisting} with call-by-reference.
     3067Since it knows all about the size of \lstinline$Thing$s and the parameter passing mechanism, it should be able to come up with a better definition of ``too large'', and may be able to make a good guess at ``too expensive''.
    36853068\end{itemize}
    36863069
    3687 In summary, since references are only really necessary for returning lvalues, I'll only provide
    3688 lvalue functions.
     3070In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions.
    36893071\end{rationale}
    36903072
     
    36933075\subsection{Initialization}
    36943076
    3695 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the
    3696 object being initialized. An expression used in an \nonterm{initializer-list} is treated as being
    3697 cast to the type of the aggregate member that it initializes. In either case the cast must have a
    3698 single unambiguous \Index{interpretation}.
     3077An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized.
     3078An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes.
     3079In either case the cast must have a single unambiguous \Index{interpretation}.
    36993080
    37003081
     
    37173098\end{syntax}
    37183099\begin{rationale}
    3719 The declarations allowed in a specification are much the same as those allowed in a structure,
    3720 except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
     3100The declarations allowed in a specification are much the same as those allowed in a structure, except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
    37213101\end{rationale}
    37223102
    37233103\semantics
    3724 A \define{specification definition} defines a name for a \define{specification}: a parameterized
    3725 collection of object and function declarations.
     3104A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations.
    37263105
    37273106The declarations in a specification consist of the declarations in the
    37283107\nonterm{spec-declaration-list} and declarations produced by any assertions in the
    3729 \nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same
    3730 identifier and have compatible types, they are combined into one declaration with the composite type
    3731 constructed from the two types.
     3108\nonterm{spec-parameter-list}.
     3109If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the composite type constructed from the two types.
    37323110
    37333111
     
    37473125
    37483126\constraints
    3749 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name
    3750 of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for
    3751 each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the
    3752 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type
    3753 name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of
    3754 an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall
    3755 be the type name of a \Index{function type}.
     3127The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification.
     3128The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}.
     3129If the
     3130\nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type};
     3131if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type};
     3132and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}.
    37563133
    37573134\semantics
     
    37593136\define{assertion parameters}.
    37603137
    3761 The assertion parameters produced by an assertion that applies the name of a specification to type
    3762 arguments are found by taking the declarations specified in the specification and treating each of
    3763 the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
    3764 
    3765 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by
    3766 combining the declarations produced by each assertion. If the collection contains two declarations
    3767 that declare the same identifier and have compatible types, they are combined into one declaration
    3768 with the \Index{composite type} constructed from the two types.
     3138The assertion parameters produced by an assertion that applies the name of a specification to type arguments are found by taking the declarations specified in the specification and treating each of the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
     3139
     3140The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion.
     3141If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the \Index{composite type} constructed from the two types.
    37693142
    37703143\examples
    37713144\begin{lstlisting}
    3772 forall( type T | T ?*?( T, T ))@\use{?*?}@
     3145forall( otype T | T ?*?( T, T ))@\use{?*?}@
    37733146T square( T val ) {@\impl{square}@
    37743147        return val + val;
    37753148}
    3776 
    3777 context summable( type T ) {@\impl{summable}@
     3149trait summable( otype T ) {@\impl{summable}@
    37783150        T ?+=?( T *, T );@\use{?+=?}@
    37793151        const T 0;@\use{0}@
    37803152};
    3781 context list_of( type List, type Element ) {@\impl{list_of}@
     3153trait list_of( otype List, otype Element ) {@\impl{list_of}@
    37823154        Element car( List );
    37833155        List cdr( List );
     
    37863158        int is_nil( List );
    37873159};
    3788 context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {};
    3789 \end{lstlisting}
    3790 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added
    3791 up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion
    3792 parameters
     3160trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {};
     3161\end{lstlisting}
     3162\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up.
     3163The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters
    37933164\begin{lstlisting}
    37943165int ?+=?( int *, int );
     
    38253196
    38263197\constraints
    3827 If a type declaration has block scope, and the declared identifier has external or internal linkage,
    3828 the declaration shall have no initializer for the identifier.
     3198If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier.
    38293199
    38303200\semantics
    3831 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type
    3832 name} for a type incompatible with all other types.
    3833 
    3834 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared
    3835 with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class
    3836 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class
    3837 \lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that
    3838 terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains
    3839 the \nonterm{type-parameter}.
    3840 
    3841 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared
    3842 identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after
    3843 the end of the initializer. The type in the initializer is called the \define{implementation
    3844   type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between
    3845 the defined type and the implementation type, and between pointers to the defined type and pointers
    3846 to the implementation type.
    3847 
    3848 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or
    3849 with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a
    3850 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier,
    3851 it must contain exactly one definition of the identifier ( but not in an enclosed block, which would
    3852 define a new type known only within that block).
     3201A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type name} for a type incompatible with all other types.
     3202
     3203An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}.
     3204Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s;
     3205those declared with type-class
     3206\lstinline$dtype$\use{dtype} are \Index{incomplete type}s;
     3207and those declared with type-class
     3208\lstinline$ftype$\use{ftype} are \Index{function type}s.
     3209The identifier has \Index{block scope} that terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains the \nonterm{type-parameter}.
     3210
     3211A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after the end of the initializer.
     3212The type in the initializer is called the \define{implementation
     3213  type}.
     3214Within the scope of the declaration, \Index{implicit conversion}s can be performed between the defined type and the implementation type, and between pointers to the defined type and pointers to the implementation type.
     3215
     3216A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}.
     3217If a
     3218\Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, it must contain exactly one definition of the identifier ( but not in an enclosed block, which would define a new type known only within that block).
    38533219\begin{rationale}
    38543220Incomplete type declarations allow compact mutually-recursive types.
    38553221\begin{lstlisting}
    3856 type t1; // Incomplete type declaration.
    3857 type t2 = struct { t1 * p; ... };
    3858 type t1 = struct { t2 * p; ... };
    3859 \end{lstlisting}
    3860 Without them, mutual recursion could be handled by declaring mutually recursive structures, then
    3861 initializing the types to those structures.
     3222otype t1; // incomplete type declaration
     3223otype t2 = struct { t1 * p; ... };
     3224otype t1 = struct { t2 * p; ... };
     3225\end{lstlisting}
     3226Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures.
    38623227\begin{lstlisting}
    38633228struct s1;
    3864 type t2 = struct s2 { struct s1 * p; ... };
    3865 type t1 = struct s1 { struct s2 * p; ... };
    3866 \end{lstlisting}
    3867 This introduces extra names, and may force the programmer to cast between the types and their
    3868 implementations.
     3229otype t2 = struct s2 { struct s1 * p; ... };
     3230otype t1 = struct s1 { struct s2 * p; ... };
     3231\end{lstlisting}
     3232This introduces extra names, and may force the programmer to cast between the types and their implementations.
    38693233\end{rationale}
    38703234
    38713235A type declaration without an initializer and with \Index{storage-class specifier}
    3872 \lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are
    3873 \Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure
    3874 or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
    3875 \Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall
    3876 be declared with a type that is a \nonterm{constant-expression}.
    3877 \begin{rationale}
    3878 Type declarations can declare identifiers with external linkage, whereas typedef declarations
    3879 declare identifiers that only exist within a translation unit. These opaque types can be used in
    3880 declarations, but the implementation of the type is not visible.
    3881 
    3882 Static objects can not have opaque types because space for them would have to be allocated at
    3883 program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want
    3884 to deal with ``module initialization'' code just now.
    3885 \end{rationale}
    3886 
    3887 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a
    3888 value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a
    3889 qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. A
     3236\lstinline$extern$\use{extern} is an \define{opaque type declaration}.
     3237Opaque types are
     3238\Index{object type}s.
     3239An opaque type is not a \nonterm{constant-expression};
     3240neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
     3241\Index{object type} is a \nonterm{constant-expression}.
     3242Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}.
     3243\begin{rationale}
     3244Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit.
     3245These opaque types can be used in declarations, but the implementation of the type is not visible.
     3246
     3247Static objects can not have opaque types because space for them would have to be allocated at program start-up.
     3248This is a deficiency\index{deficiencies!static opaque objects}, but I don't want to deal with ``module initialization'' code just now.
     3249\end{rationale}
     3250
     3251An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$.
     3252An object type\index{object types} which is not a qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$.
     3253A
    38903254\Index{function type} is a value of type-class \lstinline$ftype$.
    38913255\begin{rationale}
    3892 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which
    3893 omits the identifier being declared.
    3894 
    3895 Object types are precisely the types that can be instantiated. Type qualifiers are not included in
    3896 type values because the compiler needs the information they provide at compile time to detect
    3897 illegal statements or to produce efficient machine instructions. For instance, the code that a
    3898 compiler must generate to manipulate an object that has volatile-qualified type may be different
    3899 from the code to manipulate an ordinary object.
    3900 
    3901 Type qualifiers are a weak point of C's type system. Consider the standard library function
    3902 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first
    3903 occurrence of the character in the string.
     3256Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared.
     3257
     3258Object types are precisely the types that can be instantiated.
     3259Type qualifiers are not included in type values because the compiler needs the information they provide at compile time to detect illegal statements or to produce efficient machine instructions.
     3260For instance, the code that a compiler must generate to manipulate an object that has volatile-qualified type may be different from the code to manipulate an ordinary object.
     3261
     3262Type qualifiers are a weak point of C's type system.
     3263Consider the standard library function
     3264\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
    39043265\begin{lstlisting}
    39053266char *strchr( const char *s, int c ) {@\impl{strchr}@
    39063267        char real_c = c; // done because c was declared as int.
    39073268        for ( ; *s != real_c; s++ )
    3908          if ( *s == '\0' ) return NULL;
     3269                if ( *s == '\0' ) return NULL;
    39093270        return ( char * )s;
    39103271}
    39113272\end{lstlisting}
    3912 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be
    3913 used to search a constant string, but the return type must be \lstinline$char *$, because the result
    3914 might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse)
    3915 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed
    3916 is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has
    3917 exactly the same qualifiers. Polymorphic functions do not provide a fix for this
    3918 deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of
    3919 type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination
    3920 of qualifiers.
    3921 \end{rationale}
    3922 
    3923 \begin{rationale}
    3924 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a
    3925 type declaration, or as the type of a structure or union member. This prevents the declaration of
    3926 types that contain each other.
    3927 \begin{lstlisting}
    3928 type t1;
    3929 type t2 = t1; // illegal: incomplete type t1.
    3930 type t1 = t2;
    3931 \end{lstlisting}
    3932 
    3933 The initializer in a file-scope declaration must be a constant expression. This means type
    3934 declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
     3273The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be used to search a constant string, but the return type must be \lstinline$char *$, because the result might be used to modify a non-constant string.
     3274Hence the body must perform a cast, and ( even worse)
     3275\lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings.
     3276What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers.
     3277Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values.
     3278Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers.
     3279\end{rationale}
     3280
     3281\begin{rationale}
     3282Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a type declaration, or as the type of a structure or union member.
     3283This prevents the declaration of types that contain each other.
     3284\begin{lstlisting}
     3285otype t1;
     3286otype t2 = t1; // illegal: incomplete type t1
     3287otype t1 = t2;
     3288\end{lstlisting}
     3289
     3290The initializer in a file-scope declaration must be a constant expression.
     3291This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
    39353292 types}.
    39363293\begin{lstlisting}
    3937 extern type Huge; // extended-precision integer type.
    3938 type Rational = struct {
     3294extern otype Huge; // extended-precision integer type
     3295otype Rational = struct {
    39393296        Huge numerator, denominator;    // illegal
    39403297};
     
    39443301\end{lstlisting}
    39453302Without this restriction, \CFA might require ``module initialization'' code ( since
    3946 \lstinline$Rational$ has external linkage, it must be created before any other translation unit
    3947 instantiates it), and would force an ordering on the initialization of the translation unit that
    3948 defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
    3949 
    3950 A benefit of the restriction is that it prevents the declaration in separate translation units of
    3951 types that contain each other, which would be hard to prevent otherwise.
     3303\lstinline$Rational$ has external linkage, it must be created before any other translation unit instantiates it), and would force an ordering on the initialization of the translation unit that defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
     3304
     3305A benefit of the restriction is that it prevents the declaration in separate translation units of types that contain each other, which would be hard to prevent otherwise.
    39523306\begin{lstlisting}
    39533307//  File a.c:
     
    39623316\begin{rationale}
    39633317Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a
    3964 \nonterm{struct-declaration}, type declarations can not be structure members. The form of
     3318\nonterm{struct-declaration}, type declarations can not be structure members.
     3319The form of
    39653320\nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
    3966 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued
    3967 expressions. It also side-steps the problem of type-valued expressions producing different values
    3968 in different declarations.
    3969 
    3970 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit
    3971 type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall
    3972 that when traditional C scanners read in an identifier, they look it up in the symbol table to
    3973 determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token
    3974 depending on what they find. A type parameter would add a type name to the current scope. The
    3975 scope manipulations involved in parsing the declaration of a function that takes function pointer
    3976 parameters and returns a function pointer may just be too complicated.
    3977 
    3978 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include
    3979 the return type of the function. Consider the following attempt to define a type-safe memory
    3980 allocation function.
     3321Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions.
     3322It also side-steps the problem of type-valued expressions producing different values in different declarations.
     3323
     3324Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters.
     3325This may be too restrictive, but it attempts to make compilation simpler.
     3326Recall that when traditional C scanners read in an identifier, they look it up in the symbol table to determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token depending on what they find.
     3327A type parameter would add a type name to the current scope.
     3328The scope manipulations involved in parsing the declaration of a function that takes function pointer parameters and returns a function pointer may just be too complicated.
     3329
     3330Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function.
     3331Consider the following attempt to define a type-safe memory allocation function.
    39813332\begin{lstlisting}
    39823333#include <stdlib.h>
    3983 T * new( type T ) { return ( T * )malloc( sizeof( T) ); };
    3984 @\ldots@
    3985 int * ip = new( int );
    3986 \end{lstlisting}
    3987 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the
    3988 function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the
    3989 meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a
    3990 type name, or a function or variable name. Nothing good can result from such a situation.
     3334T * new( otype T ) { return ( T * )malloc( sizeof( T) ); };
     3335@\ldots@ int * ip = new( int );
     3336\end{lstlisting}
     3337This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the meaning of \lstinline$T$ in the scope that contains \lstinline$new$;
     3338it could be undefined, or a type name, or a function or variable name.
     3339Nothing good can result from such a situation.
    39913340\end{rationale}
    39923341
     
    39943343Since type declarations create new types, instances of types are always passed by value.
    39953344\begin{lstlisting}
    3996 type A1 = int[2];
     3345otype A1 = int[2];
    39973346void f1( A1 a ) { a[0] = 0; };
    3998 typedef int A2[2];
     3347otypedef int A2[2];
    39993348void f2( A2 a ) { a[0] = 0; };
    40003349A1 v1;
     
    40033352f2( v2 );
    40043353\end{lstlisting}
    4005 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not
    4006 modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies
    4007 \lstinline$v2[0]$.
     3354\lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies \lstinline$v2[0]$.
    40083355
    40093356A translation unit containing the declarations
    40103357\begin{lstlisting}
    4011 extern type Complex;@\use{Complex}@ // opaque type declaration.
     3358extern type Complex;@\use{Complex}@ // opaque type declaration
    40123359extern float abs( Complex );@\use{abs}@
    4013 \end{lstlisting}
    4014 can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other
    4015 translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain
    4016 the declarations
    4017 \begin{lstlisting}
    4018 type Complex = struct { float re, im; };@\impl{Complex}@
     3360\end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$.
     3361Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$.
     3362That unit might contain the declarations
     3363\begin{lstlisting}
     3364otype Complex = struct { float re, im; };@\impl{Complex}@
    40193365Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@
    40203366float abs( Complex c ) {@\impl{abs( Complex )}@
     
    40223368}
    40233369\end{lstlisting}
    4024 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can
    4025 be retrieved.
    4026 
    4027 \begin{lstlisting}
    4028 type Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
     3370Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved.
     3371
     3372\begin{lstlisting}
     3373otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
    40293374Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@
    40303375        return (( int)t1 + seconds ) % 86400;
     
    40343379
    40353380\begin{rationale}
    4036 Within the scope of a type definition, an instance of the type can be viewed as having that type or
    4037 as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is
    4038 important. Different languages have treated the distinction between the abstraction and the
    4039 implementation in different ways.
     3381Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type.
     3382In the \lstinline$Time_of_day$ example, the difference is important.
     3383Different languages have treated the distinction between the abstraction and the implementation in different ways.
    40403384\begin{itemize}
    40413385\item
    4042 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two
    4043 primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
    4044 \item
    4045 The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a
    4046 record are member selection and assignment, which can not be overloaded, there is never any
    4047 ambiguity as to whether the abstraction or the implementation view is being used. In {\CC}
    4048 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be
    4049 overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the
    4050 abstract or implementation version of the operation should be used.
    4051 \item
    4052 An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly
    4053 declares derived subprograms that correspond to the existing subprograms that use the old type as a
    4054 parameter type or result type. The derived subprograms are clones of the existing subprograms with
    4055 the old type replaced by the derived type. Literals and aggregates of the old type are also cloned.
     3386Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies.
     3387Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
     3388\item
     3389The Simula class \cite{Simula87} is essentially a record type.
     3390Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used.
     3391In {\CC}
     3392\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
     3393A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
     3394\item
     3395An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type.
     3396The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
     3397Literals and aggregates of the old type are also cloned.
    40563398In other words, the abstract view provides exactly the same operations as the implementation view.
    40573399This allows the abstract view to be used in all cases.
    40583400
    4059 The derived subprograms can be replaced by programmer-specified subprograms. This is an exception
    4060 to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this
    4061 case, explicit conversions between the derived type and the old type can be used.
     3401The derived subprograms can be replaced by programmer-specified subprograms.
     3402This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope.
     3403In this case, explicit conversions between the derived type and the old type can be used.
    40623404\end{itemize}
    4063 \CFA's rules are like Clu's, except that implicit conversions and
    4064 conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$.
     3405\CFA's rules are like Clu's, except that implicit conversions and conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$.
    40653406\end{rationale}
    40663407
     
    40703411A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
    40713412\lstinline$type$ implicitly declares a \define{default assignment} function
    4072 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the
    4073 identifier \lstinline$T$.
    4074 \begin{rationale}
    4075 Assignment is central to C's imperative programming style, and every existing C object type has
    4076 assignment defined for it ( except for array types, which are treated as pointer types for purposes
    4077 of assignment). Without this rule, nearly every inferred type parameter would need an accompanying
    4078 assignment assertion parameter. If a type parameter should not have an assignment operation,
    4079 \lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define
    4080 an assignment function that causes a run-time error, or provide an external declaration but no
    4081 definition and thus cause a link-time error.
    4082 \end{rationale}
    4083 
    4084 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation
    4085 type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment
    4086 function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation
    4087 type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
    4088 \define{default object}s as declared by the assertion declarations. The default objects and
    4089 functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their
    4090 values are determined as follows:
     3413\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
     3414\begin{rationale}
     3415Assignment is central to C's imperative programming style, and every existing C object type has assignment defined for it ( except for array types, which are treated as pointer types for purposes of assignment).
     3416Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter.
     3417If a type parameter should not have an assignment operation,
     3418\lstinline$dtype$ should be used.
     3419If a type should not have assignment defined, the user can define an assignment function that causes a run-time error, or provide an external declaration but no definition and thus cause a link-time error.
     3420\end{rationale}
     3421
     3422A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment function.
     3423A definition\index{type definition} of a type identifier \lstinline$T$ with implementation type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
     3424\define{default object}s as declared by the assertion declarations.
     3425The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
     3426Their values are determined as follows:
    40913427\begin{itemize}
    40923428\item
    4093 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name
    4094 as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced
    4095 by \lstinline$T$ is compatible with the type of the default object, then the default object is
    4096 initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain
    4097 a definition of the default object.
     3429If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default object, then the default object is initialized with that object.
     3430Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object.
    40983431
    40993432\item
    4100 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same
    4101 name as the default function, and if the type of that function with all occurrence of \lstinline$I$
    4102 replaced by \lstinline$T$ is compatible with the type of the default function, then the default
    4103 function calls that function after converting its arguments and returns the converted result.
    4104 
    4105 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that
    4106 at the definition of \lstinline$T$ there is visible a declaration of a function with the same name
    4107 as the default function, and the type of that function with all occurrences of the anonymous
    4108 member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the
    4109 default function, then the default function calls that function after converting its arguments and
    4110 returns the result.
    4111 
    4112 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default
    4113 function.
     3433If at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and if the type of that function with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the converted result.
     3434
     3435Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and the type of that function with all occurrences of the anonymous member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the result.
     3436
     3437Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function.
    41143438\end{itemize}
    41153439\begin{rationale}
    4116 Note that a pointer to a default function will not compare as equal to a pointer to the inherited
    4117 function.
    4118 \end{rationale}
    4119 
    4120 A function or object with the same type and name as a default function or object that is declared
    4121 within the scope of the definition of \lstinline$T$ replaces the default function or object.
     3440Note that a pointer to a default function will not compare as equal to a pointer to the inherited function.
     3441\end{rationale}
     3442
     3443A function or object with the same type and name as a default function or object that is declared within the scope of the definition of \lstinline$T$ replaces the default function or object.
    41223444
    41233445\examples
    41243446\begin{lstlisting}
    4125 context s( type T ) {
     3447trait s( otype T ) {
    41263448        T a, b;
    4127 }
    4128 struct impl { int left, right; } a = { 0, 0 };
    4129 type Pair | s( Pair ) = struct impl;
     3449} struct impl { int left, right; } a = { 0, 0 };
     3450otype Pair | s( Pair ) = struct impl;
    41303451Pair b = { 1, 1 };
    41313452\end{lstlisting}
    41323453The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
    4133 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of
    4134 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value
    4135 from.
    4136 \begin{lstlisting}
    4137 context ss( type T ) {
     3454\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$.
     3455The definition of
     3456\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
     3457\begin{lstlisting}
     3458trait ss( otype T ) {
    41383459        T clone( T );
    41393460        void munge( T * );
    41403461}
    4141 type Whatsit | ss( Whatsit );@\use{Whatsit}@
    4142 type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
     3462otype Whatsit | ss( Whatsit );@\use{Whatsit}@
     3463otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
    41433464        Whatsit; // anonymous member
    41443465        int extra;
     
    41523473void munge( Doodad * );
    41533474\end{lstlisting}
    4154 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types
    4155 match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
     3475The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
    41563476\lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
    4157 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$
    4158 does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter
    4159 list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
    4160 \lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of
     3477\lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
     3478\lstinline$Doodad$'s \lstinline$clone()$'s type.
     3479Hence the definition of
    41613480``\lstinline$Doodad clone( Doodad )$'' is necessary.
    41623481
    41633482Default functions and objects are subject to the normal scope rules.
    41643483\begin{lstlisting}
    4165 type T = @\ldots@;
     3484otype T = @\ldots@;
    41663485T a_T = @\ldots@;               // Default assignment used.
    41673486T ?=?( T *, T );
     
    41733492
    41743493\begin{rationale}
    4175 The \emph{class} construct of object-oriented programming languages performs three independent
    4176 functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby
    4177 instances of one class may be used in contexts that require instances of another; and it allows one
    4178 class to \emph{inherit} the implementation of another.
    4179 
    4180 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided
    4181 by specifications and assertions. Inheritance is provided by default functions and objects.
     3494The \emph{class} construct of object-oriented programming languages performs three independent functions.
     3495It \emph{encapsulates} a data structure;
     3496it defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another;
     3497and it allows one class to \emph{inherit} the implementation of another.
     3498
     3499In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions.
     3500Inheritance is provided by default functions and objects.
    41823501\end{rationale}
    41833502
     
    41903509\end{syntax}
    41913510
    4192 Many statements contain expressions, which may have more than one interpretation. The following
    4193 sections describe how the \CFA translator selects an interpretation. In all cases the result of the
    4194 selection shall be a single unambiguous \Index{interpretation}.
     3511Many statements contain expressions, which may have more than one interpretation.
     3512The following sections describe how the \CFA translator selects an interpretation.
     3513In all cases the result of the selection shall be a single unambiguous \Index{interpretation}.
    41953514
    41963515
     
    42393558switch ( E ) ...
    42403559choose ( E ) ...
    4241 \end{lstlisting}
    4242 may have more than one interpretation, but it shall have only one interpretation with an integral type.
     3560\end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type.
    42433561An \Index{integer promotion} is performed on the expression if necessary.
    42443562The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
     
    42843602while ( E ) ...
    42853603do ... while ( E );
    4286 \end{lstlisting}
    4287 is treated as ``\lstinline$( int )((E)!=0)$''.
     3604\end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''.
    42883605
    42893606The statement
    42903607\begin{lstlisting}
    42913608for ( a; b; c ) @\ldots@
    4292 \end{lstlisting}
    4293 is treated as
     3609\end{lstlisting} is treated as
    42943610\begin{lstlisting}
    42953611for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ...
     
    44133729
    44143730The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
    4415 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the
    4416 macro name \lstinline$__STDC__$.
    4417 
    4418 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the
    4419 decimal constant 1.
     3731\lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard.
     3732It shall not define the macro name \lstinline$__STDC__$.
     3733
     3734In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1.
    44203735
    44213736
     
    44273742
    44283743\section{C types}
    4429 This section gives example specifications for some groups of types that are important in the C
    4430 language, in terms of the predefined operations that can be applied to those types.
     3744This section gives example specifications for some groups of types that are important in the C language, in terms of the predefined operations that can be applied to those types.
    44313745
    44323746
    44333747\subsection{Scalar, arithmetic, and integral types}
    44343748
    4435 The pointer, integral, and floating-point types are all \define{scalar types}. All of these types
    4436 can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read
    4437 as ``type \lstinline$Complex$ is scalar''.
    4438 \begin{lstlisting}
    4439 context scalar( type T ) {@\impl{scalar}@
     3749The pointer, integral, and floating-point types are all \define{scalar types}.
     3750All of these types can be logically negated and compared.
     3751The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
     3752\begin{lstlisting}
     3753trait scalar( otype T ) {@\impl{scalar}@
    44403754        int !?( T );
    44413755        int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T );
     
    44433757\end{lstlisting}
    44443758
    4445 The integral and floating-point types are \define{arithmetic types}, which support the basic
    4446 arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that,
    4447 in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are
    4448 available ). This is equivalent to inheritance of specifications.
    4449 \begin{lstlisting}
    4450 context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
     3759The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators.
     3760The use of an assertion in the \nonterm{spec-parameter-list} declares that, in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are available ).
     3761This is equivalent to inheritance of specifications.
     3762\begin{lstlisting}
     3763trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
    44513764        T +?( T ), -?( T );
    44523765        T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T );
     
    44573770\define{integral types}.
    44583771\begin{lstlisting}
    4459 context integral( type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
     3772trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
    44603773        T ~?( T );
    44613774        T ?&?( T, T ), ?|?( T, T ), ?^?( T, T );
     
    44713784The only operation that can be applied to all modifiable lvalues is simple assignment.
    44723785\begin{lstlisting}
    4473 context m_lvalue( type T ) {@\impl{m_lvalue}@
     3786trait m_lvalue( otype T ) {@\impl{m_lvalue}@
    44743787        T ?=?( T *, T );
    44753788};
     
    44773790
    44783791Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the
    4479 \nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple
    4480 inheritance of specifications. Scalars can also be incremented and decremented.
    4481 \begin{lstlisting}
    4482 context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
     3792\nonterm{spec-parameter-list} reflect those relationships.
     3793This is equivalent to multiple inheritance of specifications.
     3794Scalars can also be incremented and decremented.
     3795\begin{lstlisting}
     3796trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
    44833797        T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@
    44843798        T ++?( T * ), --?( T * );
     
    44863800\end{lstlisting}
    44873801
    4488 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this
    4489 results in the ``inheritance'' of \lstinline$scalar$ along both paths.
    4490 \begin{lstlisting}
    4491 context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
     3802Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic.
     3803Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths.
     3804\begin{lstlisting}
     3805trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
    44923806        T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@
    44933807        T ?+=?( T *, T ), ?-=?( T *, T );
    44943808};
    4495 
    4496 context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
     3809trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
    44973810        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
    44983811        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@
     
    45033816\subsection{Pointer and array types}
    45043817
    4505 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a
    4506 constant pointer to the first element of the array, and the subscript expression
     3818Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression
    45073819``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
    45083820Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
    4509 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not
    4510 enforce those restrictions. Consequently, there is no need for a separate ``array type''
    4511 specification.
    4512 
    4513 Pointer types are scalar types. Like other scalar types, they have ``\lstinline$+$'' and
     3821``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
     3822Consequently, there is no need for a separate ``array type'' specification.
     3823
     3824Pointer types are scalar types.
     3825Like other scalar types, they have ``\lstinline$+$'' and
    45143826``\lstinline$-$'' operators, but the types do not match the types of the operations in
    45153827\lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
    45163828\begin{lstlisting}
    4517 context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
     3829trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
    45183830        P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int );
    45193831        ptrdiff_t ?-?( P, P );
    45203832};
    4521 
    4522 context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
     3833trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
    45233834        P ?+=?( P *, long int ), ?-=?( P *, long int );
    45243835        P ?=?( P *, void * );
     
    45273838\end{lstlisting}
    45283839
    4529 Specifications that define the dereference operator ( or subscript operator ) require two
    4530 parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different
    4531 specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not
    4532 included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
     3840Specifications that define the dereference operator ( or subscript operator ) require two parameters, one for the pointer type and one for the pointed-at ( or element ) type.
     3841Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types.
     3842The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
    45333843``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
    45343844\begin{lstlisting}
    4535 context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@
    4536         lvalue T *?( P ); lvalue T ?[?]( P, long int );
     3845trait ptr_to( type P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@
     3846        lvalue T *?( P );
     3847        lvalue T ?[?]( P, long int );
    45373848};
    4538 
    4539 context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@
    4540         const lvalue T *?( P ); const lvalue T ?[?]( P, long int );@\use{pointer}@
     3849trait ptr_to_const( type P | pointer( P ), otype T ) {@\impl{ptr_to_const}@
     3850        const lvalue T *?( P );
     3851        const lvalue T ?[?]( P, long int );@\use{pointer}@
    45413852};
    4542 
    4543 context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@
    4544         volatile lvalue T *?( P ); volatile lvalue T ?[?]( P, long int );@\use{pointer}@
     3853trait ptr_to_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@
     3854        volatile lvalue T *?( P );
     3855        volatile lvalue T ?[?]( P, long int );@\use{pointer}@
    45453856};
    4546 \end{lstlisting}
    4547 \begin{lstlisting}
    4548 context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@
     3857trait ptr_to_const_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@
    45493858        const volatile lvalue T *?( P );@\use{pointer}@
    45503859        const volatile lvalue T ?[?]( P, long int );
     
    45523861\end{lstlisting}
    45533862
    4554 Assignment to pointers is more complicated than is the case with other types, because the target's
    4555 type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to
    4556 a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
     3863Assignment to pointers is more complicated than is the case with other types, because the target's type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
    45573864Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
    45583865``\lstinline$ptr_to$'' specifications.
    45593866\begin{lstlisting}
    4560 context m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ type T | ptr_to( P, T )@\use{ptr_to}@ {
     3867trait m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ {
    45613868        P ?=?( P *, T * );
    45623869        T * ?=?( T **, P );
    45633870};
    4564 
    4565 context m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ type T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
     3871trait m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ otype T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
    45663872        P ?=?( P *, const T * );
    45673873        const T * ?=?( const T **, P );
    45683874};
    4569 
    4570 context m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ type T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
     3875trait m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ otype T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
    45713876        P ?=?( P *, volatile T * );
    45723877        volatile T * ?=?( volatile T **, P );
    45733878};
    4574 
    4575 context m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
     3879trait m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
    45763880                type T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@
    45773881        P ?=?( P *, const volatile T * );
     
    45803884\end{lstlisting}
    45813885
    4582 Note the regular manner in which type qualifiers appear in those specifications. An alternative
    4583 specification can make use of the fact that qualification of the pointed-at type is part of a
    4584 pointer type to capture that regularity.
    4585 \begin{lstlisting}
    4586 context m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) {
     3886Note the regular manner in which type qualifiers appear in those specifications.
     3887An alternative specification can make use of the fact that qualification of the pointed-at type is part of a pointer type to capture that regularity.
     3888\begin{lstlisting}
     3889trait m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) {
    45873890        MyP ?=?( MyP *, CP );
    45883891        CP ?=?( CP *, MyP );
     
    45903893\end{lstlisting}
    45913894The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
    4592 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two
    4593 defects, compared to the original four: there is no automatic assertion that dereferencing a
     3895``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''.
     3896This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a
    45943897\lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
    4595 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed
    4596 to \lstinline$CP$ really is a pointer type.
     3898``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type.
    45973899
    45983900
    45993901\section{Relationships between operations}
    46003902
    4601 Different operators often have related meanings; for instance, in C, ``\lstinline$+$'',
     3903Different operators often have related meanings;
     3904for instance, in C, ``\lstinline$+$'',
    46023905``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
    4603 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not
    4604 require that these relationships be preserved, or even that all of the operators be implemented.
    4605 Completeness and consistency is left to the good taste and discretion of the programmer. It is
    4606 possible to encourage these attributes by providing generic operator functions, or member functions
    4607 of abstract classes, that are defined in terms of other, related operators.
    4608 
    4609 In \CFA, polymorphic functions provide the equivalent of these generic operators, and
    4610 specifications explicitly define the minimal implementation that a programmer should provide. This
    4611 section shows a few examples.
     3906Languages like {\CC} and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented.
     3907Completeness and consistency is left to the good taste and discretion of the programmer.
     3908It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators.
     3909
     3910In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide.
     3911This section shows a few examples.
    46123912
    46133913
    46143914\subsection{Relational and equality operators}
    46153915
    4616 The different comparison operators have obvious relationships, but there is no obvious subset of the
    4617 operations to use in the implementation of the others. However, it is usually convenient to
    4618 implement a single comparison function that returns a negative integer, 0, or a positive integer if
    4619 its first argument is respectively less than, equal to, or greater than its second argument; the
    4620 library function \lstinline$strcmp$ is an example.
    4621 
    4622 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation,
    4623 returns 1 if its operand compares equal to 0, and 0 otherwise.
    4624 \begin{lstlisting}
    4625 context comparable( type T ) {
     3916The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others.
     3917However, it is usually convenient to implement a single comparison function that returns a negative integer, 0, or a positive integer if its first argument is respectively less than, equal to, or greater than its second argument;
     3918the library function \lstinline$strcmp$ is an example.
     3919
     3920C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
     3921\begin{lstlisting}
     3922trait comparable( otype T ) {
    46263923        const T 0;
    46273924        int compare( T, T );
    46283925}
    4629 
    4630 forall( type T | comparable( T ) ) int ?<?( T l, T r ) {
     3926forall( otype T | comparable( T ) ) int ?<?( T l, T r ) {
    46313927        return compare( l, r ) < 0;
    46323928}
    46333929// ... similarly for <=, ==, >=, >, and !=.
    4634 
    4635 forall( type T | comparable( T ) ) int !?( T operand ) {
     3930forall( otype T | comparable( T ) ) int !?( T operand ) {
    46363931        return !compare( operand, 0 );
    46373932}
     
    46413936\subsection{Arithmetic and integer operations}
    46423937
    4643 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment
    4644 operators. Of these, the assignment operators are more likely to be implemented directly, because
    4645 it is usually more efficient to alter the contents of an existing object than to create and return a
    4646 new one. Similarly, a complete integral type would provide integral operations based on integral
    4647 assignment operations.
    4648 \begin{lstlisting}
    4649 context arith_base( type T ) {
     3938A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators.
     3939Of these, the assignment operators are more likely to be implemented directly, because it is usually more efficient to alter the contents of an existing object than to create and return a new one.
     3940Similarly, a complete integral type would provide integral operations based on integral assignment operations.
     3941\begin{lstlisting}
     3942trait arith_base( otype T ) {
    46503943        const T 1;
    46513944        T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T );
    46523945}
    4653 
    4654 forall( type T | arith_base( T ) ) T ?+?( T l, T r ) {
     3946forall( otype T | arith_base( T ) ) T ?+?( T l, T r ) {
    46553947        return l += r;
    46563948}
    4657 
    4658 forall( type T | arith_base( T ) ) T ?++( T * operand ) {
     3949forall( otype T | arith_base( T ) ) T ?++( T * operand ) {
    46593950        T temporary = *operand;
    46603951        *operand += 1;
    46613952        return temporary;
    46623953}
    4663 
    4664 forall( type T | arith_base( T ) ) T ++?( T * operand ) {
     3954forall( otype T | arith_base( T ) ) T ++?( T * operand ) {
    46653955        return *operand += 1;
    46663956}
    46673957// ... similarly for -, --, *, and /.
    4668 
    4669 context int_base( type T ) {
     3958trait int_base( otype T ) {
    46703959        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );
    46713960        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );
    46723961}
    4673 
    4674 forall( type T | int_base( T ) ) T ?&?( T l, T r ) {
     3962forall( otype T | int_base( T ) ) T ?&?( T l, T r ) {
    46753963        return l &= r;
    46763964}
     
    46783966\end{lstlisting}
    46793967
    4680 Note that, although an arithmetic type would certainly provide comparison functions, and an integral
    4681 type would provide arithmetic operations, there does not have to be any relationship among
    4682 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these
    4683 declarations provide guidance and assistance, but they do not define an absolutely minimal set of
    4684 requirements. A truly minimal implementation of an arithmetic type might only provide
     3968Note that, although an arithmetic type would certainly provide comparison functions, and an integral type would provide arithmetic operations, there does not have to be any relationship among
     3969\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$.
     3970Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements.
     3971A truly minimal implementation of an arithmetic type might only provide
    46853972\lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
    46863973\lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
     
    46923979Review index entries.
    46933980
    4694 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets
    4695 into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means
    4696 pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
    4697 
    4698 Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an
    4699 integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary
    4700 integer types via assignment, which works between any integer types. Does enum Color ?*?( enum
     3981Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers.
     3982This gets into \lstinline$noalias$ territory.
     3983Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
     3984
     3985Enumerated types.
     3986Constants are not ints.
     3987Overloading.
     3988Definition should be ``representable as an integer type'', not ``as an int''.
     3989C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types.
     3990Does enum Color ?*?( enum
    47013991Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
    47023992
    4703 Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for
    4704 chars. Generic selections make these choices visible. Safe conversion operators? Predefined
     3993Operators on {,signed,unsigned} char and other small types. ?<? harmless;
     3994?*? questionable for chars.
     3995Generic selections make these choices visible.
     3996Safe conversion operators? Predefined
    47053997``promotion'' function?
    47063998
    4707 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and
    4708 forth, but copying must not be done by assignment.
     3999\lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
    47094000
    47104001Don't use ptrdiff\_t by name in the predefineds.
    47114002
    4712 Polymorphic objects. Polymorphic typedefs and type declarations.
     4003Polymorphic objects.
     4004Polymorphic typedefs and type declarations.
    47134005
    47144006
     
    47194011\addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents
    47204012\begin{theindex}
    4721 Italic page numbers give the location of the main entry for the referenced term. Plain page numbers
    4722 denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter
    4723 font is used for grammar terminals and program identifiers.
     4013Italic page numbers give the location of the main entry for the referenced term.
     4014Plain page numbers denote uses of the indexed term.
     4015Entries for grammar non-terminals are italicized.
     4016A typewriter font is used for grammar terminals and program identifiers.
    47244017\indexspace
    47254018\input{refrat.ind}
  • src/CodeGen/CodeGenerator.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Mar 30 14:39:30 2016
     12// Last Modified On : Mon Apr 04 17:08:06 2016
    1313// Update Count     : 255
    1414//
     
    2121#include "Parser/ParseNode.h"
    2222
    23 #include "SynTree/Type.h"
     23#include "SynTree/Declaration.h"
    2424#include "SynTree/Expression.h"
    2525#include "SynTree/Initializer.h"
    2626#include "SynTree/Statement.h"
     27#include "SynTree/Type.h"
    2728
    2829#include "Common/utility.h"
     
    170171        }
    171172
    172         void CodeGenerator::visit( ContextDecl *aggregateDecl ) {}
     173        void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
    173174
    174175        void CodeGenerator::visit( TypedefDecl *typeDecl ) {
  • src/CodeGen/CodeGenerator.h

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 12 14:27:14 2015
    13 // Update Count     : 27
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:32:24 2016
     13// Update Count     : 28
    1414//
    1515
     
    1919#include <list>
    2020
     21#include "SynTree/Declaration.h"
    2122#include "SynTree/SynTree.h"
    2223#include "SynTree/Visitor.h"
     24
    2325#include "SymTab/Indexer.h"
    2426
     
    3840                virtual void visit( UnionDecl *aggregateDecl );
    3941                virtual void visit( EnumDecl *aggregateDecl );
    40                 virtual void visit( ContextDecl *aggregateDecl );
     42                virtual void visit( TraitDecl *aggregateDecl );
    4143                virtual void visit( TypedefDecl *typeDecl );
    4244                virtual void visit( TypeDecl *typeDecl );
  • src/CodeGen/GenType.cc

    r39786813 ra5a71d0  
    1919#include "GenType.h"
    2020#include "CodeGenerator.h"
     21
     22#include "SynTree/Declaration.h"
     23#include "SynTree/Expression.h"
     24#include "SynTree/Type.h"
    2125#include "SynTree/Visitor.h"
    22 #include "SynTree/Type.h"
    23 #include "SynTree/Expression.h"
    2426
    2527namespace CodeGen {
     
    194196        void GenType::visit( VarArgsType *varArgsType ) {
    195197                typeString = "__builtin_va_list " + typeString;
    196                 // don't handle qualifiers, var args pack shouldn't have any
     198                handleQualifiers( varArgsType );
    197199        }
    198200
  • src/GenPoly/Box.cc

    r39786813 ra5a71d0  
    1414//
    1515
     16#include <algorithm>
     17#include <iterator>
     18#include <list>
     19#include <map>
    1620#include <set>
    1721#include <stack>
    1822#include <string>
    19 #include <iterator>
    20 #include <algorithm>
     23#include <utility>
     24#include <vector>
    2125#include <cassert>
    2226
    2327#include "Box.h"
    24 #include "InstantiateGeneric.h"
     28#include "DeclMutator.h"
    2529#include "PolyMutator.h"
    2630#include "FindFunction.h"
     31#include "ScopedMap.h"
    2732#include "ScrubTyVars.h"
    2833
     
    3035
    3136#include "SynTree/Constant.h"
    32 #include "SynTree/Type.h"
     37#include "SynTree/Declaration.h"
    3338#include "SynTree/Expression.h"
    3439#include "SynTree/Initializer.h"
     40#include "SynTree/Mutator.h"
    3541#include "SynTree/Statement.h"
    36 #include "SynTree/Mutator.h"
     42#include "SynTree/Type.h"
     43#include "SynTree/TypeSubstitution.h"
    3744
    3845#include "ResolvExpr/TypeEnvironment.h"
     
    4047#include "ResolvExpr/typeops.h"
    4148
     49#include "SymTab/Indexer.h"
    4250#include "SymTab/Mangler.h"
    4351
     
    5462                FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
    5563
     64                /// Key for a unique concrete type; generic base type paired with type parameter list
     65                struct ConcreteType {
     66                        ConcreteType() : base(NULL), params() {}
     67
     68                        ConcreteType(AggregateDecl *_base, const std::list< Type* >& _params) : base(_base), params() { cloneAll(_params, params); }
     69
     70                        ConcreteType(const ConcreteType& that) : base(that.base), params() { cloneAll(that.params, params); }
     71
     72                        /// Extracts types from a list of TypeExpr*
     73                        ConcreteType(AggregateDecl *_base, const std::list< TypeExpr* >& _params) : base(_base), params() {
     74                                for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
     75                                        params.push_back( (*param)->get_type()->clone() );
     76                                }
     77                        }
     78
     79                        ConcreteType& operator= (const ConcreteType& that) {
     80                                deleteAll( params );
     81                                params.clear();
     82
     83                                base = that.base;
     84                                cloneAll( that.params, params );
     85
     86                                return *this;
     87                        }
     88
     89                        ~ConcreteType() { deleteAll( params ); }
     90
     91                        bool operator== (const ConcreteType& that) const {
     92                                if ( base != that.base ) return false;
     93
     94                                SymTab::Indexer dummy;
     95                                if ( params.size() != that.params.size() ) return false;
     96                                for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
     97                                        if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
     98                                }
     99                                return true;
     100                        }
     101
     102                        AggregateDecl *base;        ///< Base generic type
     103                        std::list< Type* > params;  ///< Instantiation parameters
     104                };
     105
     106                /// Maps a concrete type to the some value, accounting for scope
     107                template< typename Value >
     108                class InstantiationMap {
     109                        /// Information about a specific instantiation of a generic type
     110                        struct Instantiation {
     111                                ConcreteType key;  ///< Instantiation parameters for this type
     112                                Value *value;      ///< Value for this instantiation
     113
     114                                Instantiation() : key(), value(0) {}
     115                                Instantiation(const ConcreteType &_key, Value *_value) : key(_key), value(_value) {}
     116                        };
     117                        /// Map of generic types to instantiations of them
     118                        typedef std::map< AggregateDecl*, std::vector< Instantiation > > Scope;
     119
     120                        std::vector< Scope > scopes;  ///< list of scopes, from outermost to innermost
     121
     122                public:
     123                        /// Starts a new scope
     124                        void beginScope() {
     125                                Scope scope;
     126                                scopes.push_back(scope);
     127                        }
     128
     129                        /// Ends a scope
     130                        void endScope() {
     131                                scopes.pop_back();
     132                        }
     133
     134                        /// Default constructor initializes with one scope
     135                        InstantiationMap() { beginScope(); }
     136
     137//              private:
     138                        /// Gets the value for the concrete instantiation of this type, assuming it has already been instantiated in the current scope.
     139                        /// Returns NULL on none such.
     140                        Value *lookup( AggregateDecl *generic, const std::list< TypeExpr* >& params ) {
     141                                ConcreteType key(generic, params);
     142                                // scan scopes from innermost out
     143                                for ( typename std::vector< Scope >::const_reverse_iterator scope = scopes.rbegin(); scope != scopes.rend(); ++scope ) {
     144                                        // skip scope if no instantiations of this generic type
     145                                        typename Scope::const_iterator insts = scope->find( generic );
     146                                        if ( insts == scope->end() ) continue;
     147                                        // look through instantiations for matches to concrete type
     148                                        for ( typename std::vector< Instantiation >::const_iterator inst = insts->second.begin(); inst != insts->second.end(); ++inst ) {
     149                                                if ( inst->key == key ) return inst->value;
     150                                        }
     151                                }
     152                                // no matching instantiation found
     153                                return 0;
     154                        }
     155                public:
     156//                      StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)lookup( inst->get_baseStruct(), typeSubs ); }
     157//                      UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)lookup( inst->get_baseUnion(), typeSubs ); }
     158
     159//              private:
     160                        /// Adds a value for a concrete type to the current scope
     161                        void insert( AggregateDecl *generic, const std::list< TypeExpr* > &params, Value *value ) {
     162                                ConcreteType key(generic, params);
     163                                scopes.back()[generic].push_back( Instantiation( key, value ) );
     164                        }
     165//              public:
     166//                      void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { insert( inst->get_baseStruct(), typeSubs, decl ); }
     167//                      void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { insert( inst->get_baseUnion(), typeSubs, decl ); }
     168                };
     169
     170                /// Adds layout-generation functions to polymorphic types
     171                class LayoutFunctionBuilder : public DeclMutator {
     172                        unsigned int functionNesting;  // current level of nested functions
     173                public:
     174                        LayoutFunctionBuilder() : functionNesting( 0 ) {}
     175
     176                        virtual DeclarationWithType *mutate( FunctionDecl *functionDecl );
     177                        virtual Declaration *mutate( StructDecl *structDecl );
     178                        virtual Declaration *mutate( UnionDecl *unionDecl );
     179                };
     180               
    56181                /// Replaces polymorphic return types with out-parameters, replaces calls to polymorphic functions with adapter calls as needed, and adds appropriate type variables to the function call
    57182                class Pass1 : public PolyMutator {
     
    100225                        ObjectDecl *makeTemporary( Type *type );
    101226
    102                         typedef std::map< std::string, DeclarationWithType *> AdapterMap;
    103227                        std::map< std::string, DeclarationWithType *> assignOps;
    104228                        ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;
    105                         std::stack< AdapterMap > adapters;
     229                        ScopedMap< std::string, DeclarationWithType* > adapters;
    106230                        DeclarationWithType *retval;
    107231                        bool useRetval;
     
    124248
    125249                        std::map< UniqueId, std::string > adapterName;
     250                };
     251
     252                /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
     253                class GenericInstantiator : public DeclMutator {
     254                        /// Map of (generic type, parameter list) pairs to concrete type instantiations
     255                        InstantiationMap< AggregateDecl > instantiations;
     256                        /// Namer for concrete types
     257                        UniqueName typeNamer;
     258
     259                public:
     260                        GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}
     261
     262                        virtual Type* mutate( StructInstType *inst );
     263                        virtual Type* mutate( UnionInstType *inst );
     264
     265        //              virtual Expression* mutate( MemberExpr *memberExpr );
     266
     267                        virtual void doBeginScope();
     268                        virtual void doEndScope();
     269                private:
     270                        /// Wrap instantiation lookup for structs
     271                        StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
     272                        /// Wrap instantiation lookup for unions
     273                        UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
     274                        /// Wrap instantiation insertion for structs
     275                        void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
     276                        /// Wrap instantiation insertion for unions
     277                        void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
    126278                };
    127279
     
    159311        } // anonymous namespace
    160312
    161         void printAllNotBuiltin( const std::list< Declaration *>& translationUnit, std::ostream &os ) {
    162                 for ( std::list< Declaration *>::const_iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
    163                         if ( ! LinkageSpec::isBuiltin( (*i)->get_linkage() ) ) {
    164                                 (*i)->print( os );
    165                                 os << std::endl;
    166                         } // if
    167                 } // for
    168         }
    169 
    170313        /// version of mutateAll with special handling for translation unit so you can check the end of the prelude when debugging
    171314        template< typename MutatorType >
     
    195338
    196339        void box( std::list< Declaration *>& translationUnit ) {
     340                LayoutFunctionBuilder layoutBuilder;
    197341                Pass1 pass1;
    198342                Pass2 pass2;
     343                GenericInstantiator instantiator;
    199344                MemberExprFixer memberFixer;
    200345                Pass3 pass3;
     346               
     347                layoutBuilder.mutateDeclarationList( translationUnit );
    201348                mutateTranslationUnit/*All*/( translationUnit, pass1 );
    202349                mutateTranslationUnit/*All*/( translationUnit, pass2 );
    203                 instantiateGeneric( translationUnit );
     350//              instantiateGeneric( translationUnit );
     351                instantiator.mutateDeclarationList( translationUnit );
    204352                mutateTranslationUnit/*All*/( translationUnit, memberFixer );
    205353                mutateTranslationUnit/*All*/( translationUnit, pass3 );
    206354        }
    207355
     356        ////////////////////////////////// LayoutFunctionBuilder ////////////////////////////////////////////
     357
     358        DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) {
     359                functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
     360                mutateAll( functionDecl->get_oldDecls(), *this );
     361                ++functionNesting;
     362                functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
     363                --functionNesting;
     364                return functionDecl;
     365        }
     366       
     367        /// Get a list of type declarations that will affect a layout function
     368        std::list< TypeDecl* > takeOtypeOnly( std::list< TypeDecl* > &decls ) {
     369                std::list< TypeDecl * > otypeDecls;
     370
     371                for ( std::list< TypeDecl* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
     372                        if ( (*decl)->get_kind() == TypeDecl::Any ) {
     373                                otypeDecls.push_back( *decl );
     374                        }
     375                }
     376               
     377                return otypeDecls;
     378        }
     379
     380        /// Adds parameters for otype layout to a function type
     381        void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) {
     382                BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     383               
     384                for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
     385                        TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );
     386                        layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( &paramType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     387                        layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( &paramType ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     388                }
     389        }
     390
     391        /// Builds a layout function declaration
     392        FunctionDecl *buildLayoutFunctionDecl( const std::string &typeName, unsigned int functionNesting, FunctionType *layoutFnType ) {
     393                // Routines at global scope marked "static" to prevent multiple definitions is separate translation units
     394                // because each unit generates copies of the default routines for each aggregate.
     395                FunctionDecl *layoutDecl = new FunctionDecl(
     396                        "__layoutof_" + typeName, functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
     397                layoutDecl->fixUniqueId();
     398                return layoutDecl;
     399        }
     400
     401        /// Makes a unary operation
     402        Expression *makeOp( const std::string &name, Expression *arg ) {
     403                UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) );
     404                expr->get_args().push_back( arg );
     405                return expr;
     406        }
     407
     408        /// Makes a binary operation
     409        Expression *makeOp( const std::string &name, Expression *lhs, Expression *rhs ) {
     410                UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) );
     411                expr->get_args().push_back( lhs );
     412                expr->get_args().push_back( rhs );
     413                return expr;
     414        }
     415
     416        /// Returns the dereference of a local pointer variable
     417        Expression *derefVar( ObjectDecl *var ) {
     418                return makeOp( "*?", new VariableExpr( var ) );
     419        }
     420
     421        /// makes an if-statement with a single-expression if-block and no then block
     422        Statement *makeCond( Expression *cond, Expression *ifPart ) {
     423                return new IfStmt( noLabels, cond, new ExprStmt( noLabels, ifPart ), 0 );
     424        }
     425
     426        /// makes a statement that assigns rhs to lhs if lhs < rhs
     427        Statement *makeAssignMax( Expression *lhs, Expression *rhs ) {
     428                return makeCond( makeOp( "?<?", lhs, rhs ), makeOp( "?=?", lhs->clone(), rhs->clone() ) );
     429        }
     430
     431        /// makes a statement that aligns lhs to rhs (rhs should be an integer power of two)
     432        Statement *makeAlignTo( Expression *lhs, Expression *rhs ) {
     433                // check that the lhs is zeroed out to the level of rhs
     434                Expression *ifCond = makeOp( "?&?", lhs, makeOp( "?-?", rhs, new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), "1" ) ) ) );
     435                // if not aligned, increment to alignment
     436                Expression *ifExpr = makeOp( "?+=?", lhs->clone(), makeOp( "?-?", rhs->clone(), ifCond->clone() ) );
     437                return makeCond( ifCond, ifExpr );
     438        }
     439       
     440        /// adds an expression to a compound statement
     441        void addExpr( CompoundStmt *stmts, Expression *expr ) {
     442                stmts->get_kids().push_back( new ExprStmt( noLabels, expr ) );
     443        }
     444
     445        /// adds a statement to a compound statement
     446        void addStmt( CompoundStmt *stmts, Statement *stmt ) {
     447                stmts->get_kids().push_back( stmt );
     448        }
     449       
     450        Declaration *LayoutFunctionBuilder::mutate( StructDecl *structDecl ) {
     451                // do not generate layout function for "empty" tag structs
     452                if ( structDecl->get_members().empty() ) return structDecl;
     453
     454                // get parameters that can change layout, exiting early if none
     455                std::list< TypeDecl* > otypeParams = takeOtypeOnly( structDecl->get_parameters() );
     456                if ( otypeParams.empty() ) return structDecl;
     457
     458                // build layout function signature
     459                FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false );
     460                BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     461                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
     462               
     463                ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     464                layoutFnType->get_parameters().push_back( sizeParam );
     465                ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     466                layoutFnType->get_parameters().push_back( alignParam );
     467                ObjectDecl *offsetParam = new ObjectDecl( "__offsetof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     468                layoutFnType->get_parameters().push_back( offsetParam );
     469                addOtypeParams( layoutFnType, otypeParams );
     470
     471                // build function decl
     472                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl->get_name(), functionNesting, layoutFnType );
     473
     474                // calculate struct layout in function body
     475
     476                // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size
     477                addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "0" ) ) ) );
     478                addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
     479                unsigned long n_members = 0;
     480                bool firstMember = true;
     481                for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member ) {
     482                        DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
     483                        assert( dwt );
     484                        Type *memberType = dwt->get_type();
     485
     486                        if ( firstMember ) {
     487                                firstMember = false;
     488                        } else {
     489                                // make sure all members after the first (automatically aligned at 0) are properly padded for alignment
     490                                addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( memberType->clone() ) ) );
     491                        }
     492                       
     493                        // place current size in the current offset index
     494                        addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from( n_members ) ) ),
     495                                                                              derefVar( sizeParam ) ) );
     496                        ++n_members;
     497
     498                        // add member size to current size
     499                        addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );
     500                       
     501                        // take max of member alignment and global alignment
     502                        addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );
     503                }
     504                // make sure the type is end-padded to a multiple of its alignment
     505                addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );
     506
     507                addDeclarationAfter( layoutDecl );
     508                return structDecl;
     509        }
     510       
     511        Declaration *LayoutFunctionBuilder::mutate( UnionDecl *unionDecl ) {
     512                // do not generate layout function for "empty" tag unions
     513                if ( unionDecl->get_members().empty() ) return unionDecl;
     514               
     515                // get parameters that can change layout, exiting early if none
     516                std::list< TypeDecl* > otypeParams = takeOtypeOnly( unionDecl->get_parameters() );
     517                if ( otypeParams.empty() ) return unionDecl;
     518
     519                // build layout function signature
     520                FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false );
     521                BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     522                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
     523               
     524                ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     525                layoutFnType->get_parameters().push_back( sizeParam );
     526                ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     527                layoutFnType->get_parameters().push_back( alignParam );
     528                addOtypeParams( layoutFnType, otypeParams );
     529
     530                // build function decl
     531                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl->get_name(), functionNesting, layoutFnType );
     532
     533                // calculate union layout in function body
     534                addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
     535                addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
     536                for ( std::list< Declaration* >::const_iterator member = unionDecl->get_members().begin(); member != unionDecl->get_members().end(); ++member ) {
     537                        DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
     538                        assert( dwt );
     539                        Type *memberType = dwt->get_type();
     540                       
     541                        // take max member size and global size
     542                        addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );
     543                       
     544                        // take max of member alignment and global alignment
     545                        addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );
     546                }
     547                // make sure the type is end-padded to a multiple of its alignment
     548                addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );
     549
     550                addDeclarationAfter( layoutDecl );
     551                return unionDecl;
     552        }
     553       
    208554        ////////////////////////////////////////// Pass1 ////////////////////////////////////////////////////
    209555
     
    245591                }
    246592
    247                 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {
    248                         adapters.push(AdapterMap());
    249                 }
     593                Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {}
    250594
    251595                /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise
     
    350694                                } // for
    351695
    352                                 AdapterMap & adapters = Pass1::adapters.top();
    353696                                for ( std::list< FunctionType *>::iterator funType = functions.begin(); funType != functions.end(); ++funType ) {
    354697                                        std::string mangleName = mangleAdapterName( *funType, scopeTyVars );
     
    7731116                                        mangleName += makePolyMonoSuffix( originalFunction, exprTyVars );
    7741117
    775                                         AdapterMap & adapters = Pass1::adapters.top();
    776                                         AdapterMap::iterator adapter = adapters.find( mangleName );
     1118                                        typedef ScopedMap< std::string, DeclarationWithType* >::iterator AdapterIter;
     1119                                        AdapterIter adapter = adapters.find( mangleName );
    7771120                                        if ( adapter == adapters.end() ) {
    7781121                                                // adapter has not been created yet in the current scope, so define it
    7791122                                                FunctionDecl *newAdapter = makeAdapter( *funType, realFunction, mangleName, exprTyVars );
    780                                                 adapter = adapters.insert( adapters.begin(), std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) );
     1123                                                std::pair< AdapterIter, bool > answer = adapters.insert( std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) );
     1124                                                adapter = answer.first;
    7811125                                                stmtsToAdd.push_back( new DeclStmt( noLabels, newAdapter ) );
    7821126                                        } // if
     
    11571501
    11581502                void Pass1::doBeginScope() {
    1159                         // push a copy of the current map
    1160                         adapters.push(adapters.top());
     1503                        adapters.beginScope();
    11611504                        scopedAssignOps.beginScope();
    11621505                }
    11631506
    11641507                void Pass1::doEndScope() {
    1165                         adapters.pop();
     1508                        adapters.endScope();
    11661509                        scopedAssignOps.endScope();
    11671510                }
     
    13101653                }
    13111654
     1655//////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////
     1656
     1657                /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type
     1658                bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
     1659                        bool allConcrete = true;  // will finish the substitution list even if they're not all concrete
     1660
     1661                        // substitute concrete types for given parameters, and incomplete types for placeholders
     1662                        std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
     1663                        std::list< Expression* >::const_iterator param = params.begin();
     1664                        for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
     1665        //                      switch ( (*baseParam)->get_kind() ) {
     1666        //                      case TypeDecl::Any: {   // any type is a valid substitution here; complete types can be used to instantiate generics
     1667                                        TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
     1668                                        assert(paramType && "Aggregate parameters should be type expressions");
     1669                                        out.push_back( paramType->clone() );
     1670                                        // check that the substituted type isn't a type variable itself
     1671                                        if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) {
     1672                                                allConcrete = false;
     1673                                        }
     1674        //                              break;
     1675        //                      }
     1676        //                      case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
     1677        //                              out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
     1678        //                              break;
     1679        //                      case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
     1680        //                              out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
     1681        //                              break;
     1682        //                      }
     1683                        }
     1684
     1685                        // if any parameters left over, not done
     1686                        if ( baseParam != baseParams.end() ) return false;
     1687        //              // if not enough parameters given, substitute remaining incomplete types for placeholders
     1688        //              for ( ; baseParam != baseParams.end(); ++baseParam ) {
     1689        //                      switch ( (*baseParam)->get_kind() ) {
     1690        //                      case TypeDecl::Any:    // no more substitutions here, fail early
     1691        //                              return false;
     1692        //                      case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
     1693        //                              out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
     1694        //                              break;
     1695        //                      case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
     1696        //                              out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
     1697        //                              break;
     1698        //                      }
     1699        //              }
     1700
     1701                        return allConcrete;
     1702                }
     1703
     1704                /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
     1705                void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
     1706                                                                std::list< Declaration* >& out ) {
     1707                        // substitute types into new members
     1708                        TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
     1709                        for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
     1710                                Declaration *newMember = (*member)->clone();
     1711                                subs.apply(newMember);
     1712                                out.push_back( newMember );
     1713                        }
     1714                }
     1715
     1716                Type* GenericInstantiator::mutate( StructInstType *inst ) {
     1717                        // mutate subtypes
     1718                        Type *mutated = Mutator::mutate( inst );
     1719                        inst = dynamic_cast< StructInstType* >( mutated );
     1720                        if ( ! inst ) return mutated;
     1721
     1722                        // exit early if no need for further mutation
     1723                        if ( inst->get_parameters().empty() ) return inst;
     1724                        assert( inst->get_baseParameters() && "Base struct has parameters" );
     1725
     1726                        // check if type can be concretely instantiated; put substitutions into typeSubs
     1727                        std::list< TypeExpr* > typeSubs;
     1728                        if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
     1729                                deleteAll( typeSubs );
     1730                                return inst;
     1731                        }
     1732
     1733                        // make concrete instantiation of generic type
     1734                        StructDecl *concDecl = lookup( inst, typeSubs );
     1735                        if ( ! concDecl ) {
     1736                                // set concDecl to new type, insert type declaration into statements to add
     1737                                concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
     1738                                substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs,        concDecl->get_members() );
     1739                                DeclMutator::addDeclaration( concDecl );
     1740                                insert( inst, typeSubs, concDecl );
     1741                        }
     1742                        StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
     1743                        newInst->set_baseStruct( concDecl );
     1744
     1745                        deleteAll( typeSubs );
     1746                        delete inst;
     1747                        return newInst;
     1748                }
     1749
     1750                Type* GenericInstantiator::mutate( UnionInstType *inst ) {
     1751                        // mutate subtypes
     1752                        Type *mutated = Mutator::mutate( inst );
     1753                        inst = dynamic_cast< UnionInstType* >( mutated );
     1754                        if ( ! inst ) return mutated;
     1755
     1756                        // exit early if no need for further mutation
     1757                        if ( inst->get_parameters().empty() ) return inst;
     1758                        assert( inst->get_baseParameters() && "Base union has parameters" );
     1759
     1760                        // check if type can be concretely instantiated; put substitutions into typeSubs
     1761                        std::list< TypeExpr* > typeSubs;
     1762                        if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
     1763                                deleteAll( typeSubs );
     1764                                return inst;
     1765                        }
     1766
     1767                        // make concrete instantiation of generic type
     1768                        UnionDecl *concDecl = lookup( inst, typeSubs );
     1769                        if ( ! concDecl ) {
     1770                                // set concDecl to new type, insert type declaration into statements to add
     1771                                concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
     1772                                substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
     1773                                DeclMutator::addDeclaration( concDecl );
     1774                                insert( inst, typeSubs, concDecl );
     1775                        }
     1776                        UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
     1777                        newInst->set_baseUnion( concDecl );
     1778
     1779                        deleteAll( typeSubs );
     1780                        delete inst;
     1781                        return newInst;
     1782                }
     1783
     1784        //      /// Gets the base struct or union declaration for a member expression; NULL if not applicable
     1785        //      AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) {
     1786        //              // get variable for member aggregate
     1787        //              VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() );
     1788        //              if ( ! varExpr ) return NULL;
     1789        //
     1790        //              // get object for variable
     1791        //              ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
     1792        //              if ( ! objectDecl ) return NULL;
     1793        //
     1794        //              // get base declaration from object type
     1795        //              Type *objectType = objectDecl->get_type();
     1796        //              StructInstType *structType = dynamic_cast< StructInstType* >( objectType );
     1797        //              if ( structType ) return structType->get_baseStruct();
     1798        //              UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType );
     1799        //              if ( unionType ) return unionType->get_baseUnion();
     1800        //
     1801        //              return NULL;
     1802        //      }
     1803        //
     1804        //      /// Finds the declaration with the given name, returning decls.end() if none such
     1805        //      std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) {
     1806        //              for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
     1807        //                      if ( (*decl)->get_name() == name ) return decl;
     1808        //              }
     1809        //              return decls.end();
     1810        //      }
     1811        //
     1812        //      Expression* Instantiate::mutate( MemberExpr *memberExpr ) {
     1813        //              // mutate, exiting early if no longer MemberExpr
     1814        //              Expression *expr = Mutator::mutate( memberExpr );
     1815        //              memberExpr = dynamic_cast< MemberExpr* >( expr );
     1816        //              if ( ! memberExpr ) return expr;
     1817        //
     1818        //              // get declaration of member and base declaration of member, exiting early if not found
     1819        //              AggregateDecl *memberBase = getMemberBaseDecl( memberExpr );
     1820        //              if ( ! memberBase ) return memberExpr;
     1821        //              DeclarationWithType *memberDecl = memberExpr->get_member();
     1822        //              std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() );
     1823        //              if ( baseIt == memberBase->get_members().end() ) return memberExpr;
     1824        //              DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt );
     1825        //              if ( ! baseDecl ) return memberExpr;
     1826        //
     1827        //              // check if stated type of the member is not the type of the member's declaration; if so, need a cast
     1828        //              // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker
     1829        //              SymTab::Indexer dummy;
     1830        //              if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr;
     1831        //              else return new CastExpr( memberExpr, memberDecl->get_type() );
     1832        //      }
     1833
     1834                void GenericInstantiator::doBeginScope() {
     1835                        DeclMutator::doBeginScope();
     1836                        instantiations.beginScope();
     1837                }
     1838
     1839                void GenericInstantiator::doEndScope() {
     1840                        DeclMutator::doEndScope();
     1841                        instantiations.endScope();
     1842                }
     1843
    13121844////////////////////////////////////////// MemberExprFixer ////////////////////////////////////////////////////
    13131845
  • src/GenPoly/DeclMutator.cc

    r39786813 ra5a71d0  
    2424        }
    2525
    26         DeclMutator::DeclMutator() : Mutator(), declsToAdd(1) {}
     26        DeclMutator::DeclMutator() : Mutator(), declsToAdd(1), declsToAddAfter(1) {}
    2727
    2828        DeclMutator::~DeclMutator() {}
    2929       
    3030        void DeclMutator::mutateDeclarationList( std::list< Declaration* > &decls ) {
    31                 for ( std::list< Declaration* >::iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
     31                for ( std::list< Declaration* >::iterator decl = decls.begin(); ; ++decl ) {
     32                        // splice in new declarations after previous decl
     33                        decls.splice( decl, declsToAddAfter.back() );
     34
     35                        if ( decl == decls.end() ) break;
     36                       
    3237                        // run mutator on declaration
    3338                        *decl = maybeMutate( *decl, *this );
     
    3944
    4045        void DeclMutator::doBeginScope() {
    41                 // add new decl list for inside of scope
     46                // add new decl lists for inside of scope
    4247                declsToAdd.resize( declsToAdd.size()+1 );
     48                declsToAddAfter.resize( declsToAddAfter.size()+1 );
    4349        }
    4450
     
    4955                newBack->splice( newBack->end(), *back );
    5056                declsToAdd.pop_back();
     57               
     58                back = declsToAddAfter.rbegin();
     59                newBack = back + 1;
     60                newBack->splice( newBack->end(), *back );
     61                declsToAddAfter.pop_back();
    5162        }
    5263
     
    6172                stmt = maybeMutate( stmt, *this );
    6273                // return if no declarations to add
    63                 if ( declsToAdd.back().empty() ) return stmt;
     74                if ( declsToAdd.back().empty() && declsToAddAfter.back().empty() ) {
     75                        doEndScope();
     76                        return stmt;
     77                }
    6478
    6579                // otherwise add declarations to new compound statement
     
    7185                declsToAdd.back().clear();
    7286
     87                // add mutated statement
     88                compound->get_kids().push_back( stmt );
     89
     90                // add declarations after to new compound statement
     91                for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
     92                        DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
     93                        compound->get_kids().push_back( declStmt );
     94                }
     95                declsToAddAfter.back().clear();
     96
    7397                doEndScope();
    74 
    75                 // add mutated statement and return
    76                 compound->get_kids().push_back( stmt );
    7798                return compound;
    7899        }
     
    80101        void DeclMutator::mutateStatementList( std::list< Statement* > &stmts ) {
    81102                doBeginScope();
     103
    82104               
    83                 for ( std::list< Statement* >::iterator stmt = stmts.begin(); stmt != stmts.end(); ++stmt ) {
     105                for ( std::list< Statement* >::iterator stmt = stmts.begin(); ; ++stmt ) {
     106                        // add any new declarations after the previous statement
     107                        for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
     108                                DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
     109                                stmts.insert( stmt, declStmt );
     110                        }
     111                        declsToAddAfter.back().clear();
     112
     113                        if ( stmt == stmts.end() ) break;
     114                       
    84115                        // run mutator on statement
    85116                        *stmt = maybeMutate( *stmt, *this );
     
    92123                        declsToAdd.back().clear();
    93124                }
    94 
     125               
    95126                doEndScope();
    96127        }
     
    98129        void DeclMutator::addDeclaration( Declaration *decl ) {
    99130                declsToAdd.back().push_back( decl );
     131        }
     132
     133        void DeclMutator::addDeclarationAfter( Declaration *decl ) {
     134                declsToAddAfter.back().push_back( decl );
    100135        }
    101136
  • src/GenPoly/DeclMutator.h

    r39786813 ra5a71d0  
    5555                /// Add a declaration to the list to be added before the current position
    5656                void addDeclaration( Declaration* decl );
     57                /// Add a declaration to the list to be added after the current position
     58                void addDeclarationAfter( Declaration* decl );
    5759        private:
    5860                /// A stack of declarations to add before the current declaration or statement
    5961                std::vector< std::list< Declaration* > > declsToAdd;
     62                /// A stack of declarations to add after the current declaration or statement
     63                std::vector< std::list< Declaration* > > declsToAddAfter;
    6064        };
    6165} // namespace
  • src/GenPoly/module.mk

    r39786813 ra5a71d0  
    2323       GenPoly/CopyParams.cc \
    2424       GenPoly/FindFunction.cc \
    25        GenPoly/InstantiateGeneric.cc \
    2625       GenPoly/DeclMutator.cc
  • src/InitTweak/RemoveInit.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Mar 30 15:45:12 2016
     12// Last Modified On : Mon Apr 04 17:18:03 2016
    1313// Update Count     : 166
    1414//
     
    6868                virtual Declaration* mutate( UnionDecl *aggregateDecl );
    6969                virtual Declaration* mutate( EnumDecl *aggregateDecl );
    70                 virtual Declaration* mutate( ContextDecl *aggregateDecl );
     70                virtual Declaration* mutate( TraitDecl *aggregateDecl );
    7171                virtual TypeDecl* mutate( TypeDecl *typeDecl );
    7272                virtual Declaration* mutate( TypedefDecl *typeDecl );
     
    251251        Declaration* CtorDtor::mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
    252252        Declaration* CtorDtor::mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
    253         Declaration* CtorDtor::mutate( ContextDecl *aggregateDecl ) { return aggregateDecl; }
     253        Declaration* CtorDtor::mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
    254254        TypeDecl* CtorDtor::mutate( TypeDecl *typeDecl ) { return typeDecl; }
    255255        Declaration* CtorDtor::mutate( TypedefDecl *typeDecl ) { return typeDecl; }
  • src/Makefile.am

    r39786813 ra5a71d0  
    1111## Created On       : Sun May 31 08:51:46 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Thu Jan 28 16:50:26 2016
    14 ## Update Count     : 55
     13## Last Modified On : Fri Feb 26 17:19:16 2016
     14## Update Count     : 57
    1515###############################################################################
    1616
     
    4646driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
    4747
    48 CXXFLAGS = -g   # remove default -O2 to allow better debugging
     48CXXFLAGS = -g -std=c++11                # remove default -O2 to allow better debugging
    4949
    5050MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
  • src/Makefile.in

    r39786813 ra5a71d0  
    122122        GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT) \
    123123        GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \
    124         GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \
    125124        GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \
    126125        InitTweak/driver_cfa_cpp-RemoveInit.$(OBJEXT) \
     
    155154        ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) \
    156155        ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) \
    157         SymTab/driver_cfa_cpp-IdTable.$(OBJEXT) \
    158156        SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) \
    159157        SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) \
     
    194192        SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \
    195193        SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \
    196         SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT) \
    197194        SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \
    198195        Tuples/driver_cfa_cpp-Mutate.$(OBJEXT) \
     
    250247CXX = @CXX@
    251248CXXDEPMODE = @CXXDEPMODE@
    252 CXXFLAGS = -g   # remove default -O2 to allow better debugging
     249CXXFLAGS = -g -std=c++11                # remove default -O2 to allow better debugging
    253250CYGPATH_W = @CYGPATH_W@
    254251DEFS = @DEFS@
     
    350347        GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
    351348        GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
    352         GenPoly/InstantiateGeneric.cc GenPoly/DeclMutator.cc \
    353         InitTweak/RemoveInit.cc InitTweak/FixInit.cc Parser/parser.yy \
    354         Parser/lex.ll Parser/TypedefTable.cc Parser/ParseNode.cc \
     349        GenPoly/DeclMutator.cc InitTweak/RemoveInit.cc \
     350        InitTweak/FixInit.cc Parser/parser.yy Parser/lex.ll \
     351        Parser/TypedefTable.cc Parser/ParseNode.cc \
    355352        Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
    356353        Parser/StatementNode.cc Parser/InitializerNode.cc \
     
    365362        ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \
    366363        ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \
    367         ResolvExpr/TypeEnvironment.cc SymTab/IdTable.cc \
    368         SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \
    369         SymTab/FixFunction.cc SymTab/ImplementationType.cc \
    370         SymTab/TypeEquality.cc SymTab/Autogen.cc SynTree/Type.cc \
    371         SynTree/VoidType.cc SynTree/BasicType.cc \
    372         SynTree/PointerType.cc SynTree/ArrayType.cc \
    373         SynTree/FunctionType.cc SynTree/ReferenceToType.cc \
    374         SynTree/TupleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \
     364        ResolvExpr/TypeEnvironment.cc SymTab/Indexer.cc \
     365        SymTab/Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \
     366        SymTab/ImplementationType.cc SymTab/TypeEquality.cc \
     367        SymTab/Autogen.cc SynTree/Type.cc SynTree/VoidType.cc \
     368        SynTree/BasicType.cc SynTree/PointerType.cc \
     369        SynTree/ArrayType.cc SynTree/FunctionType.cc \
     370        SynTree/ReferenceToType.cc SynTree/TupleType.cc \
     371        SynTree/TypeofType.cc SynTree/AttrType.cc \
    375372        SynTree/VarArgsType.cc SynTree/Constant.cc \
    376373        SynTree/Expression.cc SynTree/TupleExpr.cc \
     
    383380        SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \
    384381        SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \
    385         SynTree/CodeGenVisitor.cc SynTree/TypeSubstitution.cc \
    386         Tuples/Mutate.cc Tuples/AssignExpand.cc \
    387         Tuples/FunctionFixer.cc Tuples/TupleAssignment.cc \
    388         Tuples/FunctionChecker.cc Tuples/NameMatcher.cc
     382        SynTree/TypeSubstitution.cc Tuples/Mutate.cc \
     383        Tuples/AssignExpand.cc Tuples/FunctionFixer.cc \
     384        Tuples/TupleAssignment.cc Tuples/FunctionChecker.cc \
     385        Tuples/NameMatcher.cc
    389386MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \
    390387        ${cfa_cpplib_PROGRAMS}}
     
    559556        GenPoly/$(DEPDIR)/$(am__dirstamp)
    560557GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT):  \
    561         GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
    562 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT):  \
    563558        GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
    564559GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
     
    669664        @$(MKDIR_P) SymTab/$(DEPDIR)
    670665        @: > SymTab/$(DEPDIR)/$(am__dirstamp)
    671 SymTab/driver_cfa_cpp-IdTable.$(OBJEXT): SymTab/$(am__dirstamp) \
    672         SymTab/$(DEPDIR)/$(am__dirstamp)
    673666SymTab/driver_cfa_cpp-Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \
    674667        SymTab/$(DEPDIR)/$(am__dirstamp)
     
    753746SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \
    754747        SynTree/$(DEPDIR)/$(am__dirstamp)
    755 SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT):  \
    756         SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
    757748SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT):  \
    758749        SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
     
    805796        -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT)
    806797        -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT)
    807         -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)
    808798        -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT)
    809799        -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT)
     
    843833        -rm -f SymTab/driver_cfa_cpp-Autogen.$(OBJEXT)
    844834        -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT)
    845         -rm -f SymTab/driver_cfa_cpp-IdTable.$(OBJEXT)
    846835        -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT)
    847836        -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT)
     
    855844        -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT)
    856845        -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT)
    857         -rm -f SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT)
    858846        -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT)
    859847        -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT)
     
    915903@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@
    916904@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@
    917 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@
    918905@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@
    919906@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@
     
    953940@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Autogen.Po@am__quote@
    954941@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-FixFunction.Po@am__quote@
    955 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po@am__quote@
    956942@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-ImplementationType.Po@am__quote@
    957943@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@
     
    965951@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AttrType.Po@am__quote@
    966952@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-BasicType.Po@am__quote@
    967 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po@am__quote@
    968953@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CommaExpr.Po@am__quote@
    969954@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CompoundStmt.Po@am__quote@
     
    13791364@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-FindFunction.obj `if test -f 'GenPoly/FindFunction.cc'; then $(CYGPATH_W) 'GenPoly/FindFunction.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/FindFunction.cc'; fi`
    13801365
    1381 GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc
    1382 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
    1383 @am__fastdepCXX_TRUE@   $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
    1384 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@
    1385 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1386 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
    1387 
    1388 GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc
    1389 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
    1390 @am__fastdepCXX_TRUE@   $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
    1391 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@
    1392 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1393 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
    1394 
    13951366GenPoly/driver_cfa_cpp-DeclMutator.o: GenPoly/DeclMutator.cc
    13961367@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-DeclMutator.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo -c -o GenPoly/driver_cfa_cpp-DeclMutator.o `test -f 'GenPoly/DeclMutator.cc' || echo '$(srcdir)/'`GenPoly/DeclMutator.cc
     
    18411812@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-TypeEnvironment.obj `if test -f 'ResolvExpr/TypeEnvironment.cc'; then $(CYGPATH_W) 'ResolvExpr/TypeEnvironment.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/TypeEnvironment.cc'; fi`
    18421813
    1843 SymTab/driver_cfa_cpp-IdTable.o: SymTab/IdTable.cc
    1844 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc
    1845 @am__fastdepCXX_TRUE@   $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po
    1846 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.o' libtool=no @AMDEPBACKSLASH@
    1847 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1848 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc
    1849 
    1850 SymTab/driver_cfa_cpp-IdTable.obj: SymTab/IdTable.cc
    1851 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`
    1852 @am__fastdepCXX_TRUE@   $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po
    1853 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.obj' libtool=no @AMDEPBACKSLASH@
    1854 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1855 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`
    1856 
    18571814SymTab/driver_cfa_cpp-Indexer.o: SymTab/Indexer.cc
    18581815@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-Indexer.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Tpo -c -o SymTab/driver_cfa_cpp-Indexer.o `test -f 'SymTab/Indexer.cc' || echo '$(srcdir)/'`SymTab/Indexer.cc
     
    23862343@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    23872344@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`
    2388 
    2389 SynTree/driver_cfa_cpp-CodeGenVisitor.o: SynTree/CodeGenVisitor.cc
    2390 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc
    2391 @am__fastdepCXX_TRUE@   $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po
    2392 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.o' libtool=no @AMDEPBACKSLASH@
    2393 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2394 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc
    2395 
    2396 SynTree/driver_cfa_cpp-CodeGenVisitor.obj: SynTree/CodeGenVisitor.cc
    2397 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`
    2398 @am__fastdepCXX_TRUE@   $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po
    2399 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.obj' libtool=no @AMDEPBACKSLASH@
    2400 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2401 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`
    24022345
    24032346SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc
  • src/Parser/DeclarationNode.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Jan 07 13:18:02 2016
    13 // Update Count     : 130
     12// Last Modified On : Mon Apr 04 17:09:46 2016
     13// Update Count     : 142
    1414//
    1515
     
    3434const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" };
    3535const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" };
    36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };
     36const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary", };
    3737const char *DeclarationNode::modifierName[]  = { "signed", "unsigned", "short", "long" };
    3838const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" };
    3939const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" };
     40const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
    4041
    4142UniqueName DeclarationNode::anonymous( "__anonymous" );
    4243
    43 extern LinkageSpec::Type linkage;               /* defined in cfa.y */
     44extern LinkageSpec::Type linkage;                                               // defined in parser.yy
    4445
    4546DeclarationNode *DeclarationNode::clone() const {
     
    5455        newnode->linkage = linkage;
    5556        return newnode;
    56 }
     57} // DeclarationNode::clone
    5758
    5859DeclarationNode::DeclarationNode() : type( 0 ), bitfieldWidth( 0 ), initializer( 0 ), hasEllipsis( false ), linkage( ::linkage ) {
     
    118119        newnode->type->function->newStyle = newStyle;
    119120        newnode->type->function->body = body;
     121        typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
    120122
    121123        if ( body ) {
     
    130132
    131133        return newnode;
    132 }
     134} // DeclarationNode::newFunction
    133135
    134136DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) {
     
    137139        newnode->type->qualifiers.push_back( q );
    138140        return newnode;
    139 }
     141} // DeclarationNode::newQualifier
    140142
    141143DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
     
    143145        newnode->storageClasses.push_back( sc );
    144146        return newnode;
    145 }
     147} // DeclarationNode::newStorageClass
    146148
    147149DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) {
     
    150152        newnode->type->basic->typeSpec.push_back( bt );
    151153        return newnode;
    152 }
     154} // DeclarationNode::newBasicType
     155
     156DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
     157        DeclarationNode *newnode = new DeclarationNode;
     158        newnode->type = new TypeData( TypeData::Builtin );
     159        newnode->type->builtin->type = bt;
     160        return newnode;
     161} // DeclarationNode::newBuiltinType
    153162
    154163DeclarationNode *DeclarationNode::newModifier( Modifier mod ) {
     
    157166        newnode->type->basic->modifiers.push_back( mod );
    158167        return newnode;
    159 }
     168} // DeclarationNode::newModifier
    160169
    161170DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) {
     
    164173        newnode->type->forall = forall;
    165174        return newnode;
    166 }
     175} // DeclarationNode::newForall
    167176
    168177DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) {
     
    173182        newnode->type->symbolic->params = 0;
    174183        return newnode;
    175 }
     184} // DeclarationNode::newFromTypedef
    176185
    177186DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields ) {
     
    182191        if ( newnode->type->aggregate->name == "" ) {           // anonymous aggregate ?
    183192                newnode->type->aggregate->name = DeclarationNode::anonymous.newName();
    184         } else {
    185                 // SKULLDUGGERY: generate a typedef for the aggregate name so that the aggregate does not have to be qualified
    186                 // by "struct"
     193        } else if ( ! typedefTable.exists( newnode->type->aggregate->name ) ) {
     194                // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
     195                // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
     196                // if the name is explicitly used.
    187197                typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD );
    188198                DeclarationNode *typedf = new DeclarationNode;
     
    193203        newnode->type->aggregate->fields = fields;
    194204        return newnode;
    195 }
     205} // DeclarationNode::newAggregate
    196206
    197207DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) {
     
    202212        if ( newnode->type->enumeration->name == "" ) {         // anonymous enumeration ?
    203213                newnode->type->enumeration->name = DeclarationNode::anonymous.newName();
    204         } else {
    205                 // SKULLDUGGERY: generate a typedef for the enumeration name so that the enumeration does not have to be
    206                 // qualified by "enum"
     214        } else if ( ! typedefTable.exists( newnode->type->enumeration->name ) ) {
     215                // SKULLDUGGERY: Generate a typedef for the enumeration name so the enumeration does not have to be qualified by
     216                // "enum". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if
     217                // the name is explicitly used.
    207218                typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD );
    208219                DeclarationNode *typedf = new DeclarationNode;
     
    212223        newnode->type->enumeration->constants = constants;
    213224        return newnode;
    214 }
     225} // DeclarationNode::newEnum
    215226
    216227DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) {
    217228        DeclarationNode *newnode = new DeclarationNode;
    218229        newnode->name = assign_strptr( name );
    219         // do something with the constant
    220         return newnode;
    221 }
     230        newnode->enumeratorValue = constant;
     231        typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
     232        return newnode;
     233} // DeclarationNode::newEnumConstant
    222234
    223235DeclarationNode *DeclarationNode::newName( std::string *name ) {
     
    225237        newnode->name = assign_strptr( name );
    226238        return newnode;
    227 }
     239} // DeclarationNode::newName
    228240
    229241DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) {
     
    234246        newnode->type->symbolic->actuals = params;
    235247        return newnode;
    236 }
     248} // DeclarationNode::newFromTypeGen
    237249
    238250DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) {
     
    243255        newnode->type->variable->name = newnode->name;
    244256        return newnode;
    245 }
    246 
    247 DeclarationNode *DeclarationNode::newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
     257} // DeclarationNode::newTypeParam
     258
     259DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
    248260        DeclarationNode *newnode = new DeclarationNode;
    249261        newnode->type = new TypeData( TypeData::Aggregate );
    250         newnode->type->aggregate->kind = Context;
     262        newnode->type->aggregate->kind = Trait;
    251263        newnode->type->aggregate->params = params;
    252264        newnode->type->aggregate->fields = asserts;
    253265        newnode->type->aggregate->name = assign_strptr( name );
    254266        return newnode;
    255 }
    256 
    257 DeclarationNode *DeclarationNode::newContextUse( std::string *name, ExpressionNode *params ) {
     267} // DeclarationNode::newTrait
     268
     269DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
    258270        DeclarationNode *newnode = new DeclarationNode;
    259271        newnode->type = new TypeData( TypeData::AggregateInst );
    260272        newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate );
    261         newnode->type->aggInst->aggregate->aggregate->kind = Context;
     273        newnode->type->aggInst->aggregate->aggregate->kind = Trait;
    262274        newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name );
    263275        newnode->type->aggInst->params = params;
    264276        return newnode;
    265 }
     277} // DeclarationNode::newTraitUse
    266278
    267279DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) {
     
    273285        newnode->type->symbolic->name = newnode->name;
    274286        return newnode;
    275 }
     287} // DeclarationNode::newTypeDecl
    276288
    277289DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) {
     
    279291        newnode->type = new TypeData( TypeData::Pointer );
    280292        return newnode->addQualifiers( qualifiers );
    281 }
     293} // DeclarationNode::newPointer
    282294
    283295DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) {
     
    292304        } // if
    293305        return newnode->addQualifiers( qualifiers );
    294 }
     306} // DeclarationNode::newArray
    295307
    296308DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) {
     
    796808                        errors.append( e );
    797809                } // try
    798                 cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
     810                cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
    799811        } // while
    800812        if ( ! errors.isEmpty() ) {
     
    883895                          ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
    884896                          break;
    885                         case DeclarationNode::Context:
    886                           ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );
     897                        case DeclarationNode::Trait:
     898                          ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
    887899                          break;
    888900                        default:
  • src/Parser/ExpressionNode.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb  1 13:32:30 2016
    13 // Update Count     : 271
     12// Last Modified On : Sun Mar 13 12:34:38 2016
     13// Update Count     : 272
    1414//
    1515
     
    487487                args.front() = new AddressExpr( args.front() );
    488488                break;
    489           default:
    490                 /* do nothing */
     489          default:              // do nothing
    491490                ;
    492         }
     491        } // switch
    493492
    494493        switch ( op->get_type() ) {
  • src/Parser/ParseNode.h

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Feb 09 13:23:34 2016
    13 // Update Count     : 185
     12// Last Modified On : Mon Apr 04 17:10:10 2016
     13// Update Count     : 190
    1414//
    1515
     
    108108
    109109        ConstantNode( Type, std::string * );
    110         ConstantNode( const ConstantNode &other ) : value( *new std::string( other.value ) ) {};
     110        ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {};
    111111        ~ConstantNode() { delete &value; }
    112112
     
    330330        enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
    331331        enum Modifier  { Signed, Unsigned, Short, Long };
    332         enum Aggregate { Struct, Union, Context };
     332        enum Aggregate { Struct, Union, Trait };
    333333        enum TypeClass { Type, Dtype, Ftype };
     334        enum BuiltinType { Valist };
    334335
    335336        static const char *storageName[];
     
    339340        static const char *aggregateName[];
    340341        static const char *typeClassName[];
     342        static const char *builtinTypeName[];
    341343
    342344        static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
     
    353355        static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params );
    354356        static DeclarationNode *newTypeParam( TypeClass, std::string *);
    355         static DeclarationNode *newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
    356         static DeclarationNode *newContextUse( std::string *name, ExpressionNode *params );
     357        static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
     358        static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params );
    357359        static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams );
    358360        static DeclarationNode *newPointer( DeclarationNode *qualifiers );
     
    364366        static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
    365367        static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
     368        static DeclarationNode *newBuiltinType( BuiltinType );
    366369
    367370        DeclarationNode *addQualifiers( DeclarationNode *);
     
    402405        LinkageSpec::Type get_linkage() const { return linkage; }
    403406        DeclarationNode *extractAggregate() const;
     407        ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }
    404408
    405409        DeclarationNode();
     
    414418        std::list< std::string > attributes;
    415419        ExpressionNode *bitfieldWidth;
     420        ExpressionNode *enumeratorValue;
    416421        InitializerNode *initializer;
    417422        bool hasEllipsis;
  • src/Parser/Parser.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 14:54:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 31 23:45:19 2015
    13 // Update Count     : 4
     12// Last Modified On : Mon Mar 21 18:04:47 2016
     13// Update Count     : 5
    1414//
    1515
    1616#include "Parser.h"
    17 #include "TypedefTable.h"
    1817#include "lex.h"
    1918#include "parser.h"
     19#include "TypedefTable.h"
    2020
    2121// global variables in cfa.y
  • src/Parser/TypeData.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Jan 14 10:43:42 2016
    13 // Update Count     : 36
     12// Last Modified On : Wed Apr 06 16:57:53 2016
     13// Update Count     : 49
    1414//
    1515
     
    2323#include "SynTree/Expression.h"
    2424#include "SynTree/Statement.h"
     25#include "SynTree/Initializer.h"
    2526
    2627TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) {
     
    8485                typeexpr->expr = 0;
    8586                break;
     87          case Builtin:
     88                builtin = new Builtin_t;
     89                break;
    8690          case Attr:
    8791                attr = new Attr_t;
     
    149153                delete typeexpr->expr;
    150154                delete typeexpr;
     155                break;
     156          case Builtin:
     157                delete builtin;
    151158                break;
    152159          case Attr:
     
    221228                newtype->typeexpr->expr = maybeClone( typeexpr->expr );
    222229                break;
     230          case Builtin:
     231                newtype->builtin->type = builtin->type;
     232                break;
    223233          case Attr:
    224234                newtype->attr->expr = maybeClone( attr->expr );
     
    396406                        attr->type->print( os, indent + 2 );
    397407                } // if
     408                break;
     409          case Builtin:
     410                os << "gcc builtin type";
    398411                break;
    399412          default:
     
    524537          case Typeof:
    525538                return buildTypeof();
     539          case Builtin:
     540                return new VarArgsType( buildQualifiers() );
    526541          case Attr:
    527542                return buildAttr();
     
    823838                buildForall( aggregate->params, at->get_parameters() );
    824839                break;
    825           case DeclarationNode::Context:
    826                 at = new ContextDecl( aggregate->name );
     840          case DeclarationNode::Trait:
     841                at = new TraitDecl( aggregate->name );
    827842                buildList( aggregate->params, at->get_parameters() );
    828843                break;
     
    863878                        ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    864879                        break;
    865                   case DeclarationNode::Context:
    866                         ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
     880                  case DeclarationNode::Trait:
     881                        ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    867882                        break;
    868883                  default:
     
    901916        EnumDecl *ret = new EnumDecl( enumeration->name );
    902917        buildList( enumeration->constants, ret->get_members() );
     918        std::list< Declaration * >::iterator members = ret->get_members().begin();
     919        for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
     920                if ( cur->get_enumeratorValue() != NULL ) {
     921                        ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
     922                        member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) );
     923                } // if
     924        } // for
    903925        return ret;
    904926}
  • src/Parser/TypeData.h

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan 14 23:31:15 2016
    13 // Update Count     : 17
     12// Last Modified On : Fri Feb 26 14:21:38 2016
     13// Update Count     : 19
    1414//
    1515
     
    2424struct TypeData {
    2525        enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
    26                                 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind;
     26                                Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
    2727
    2828        TypeData( Kind k = Unknown );
     
    9898        };
    9999
     100        struct Builtin_t {
     101                DeclarationNode::BuiltinType type;
     102        };
     103
    100104        struct Attr_t {
    101105                std::string name;
     
    116120                Typeof_t * typeexpr;
    117121                Attr_t * attr;
     122                Builtin_t * builtin;
    118123        };
    119124
  • src/Parser/TypedefTable.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jun 26 07:30:16 2015
    13 // Update Count     : 19
     12// Last Modified On : Mon Mar 21 18:18:58 2016
     13// Update Count     : 23
    1414//
    1515
    1616#include <map>
    1717#include <list>
     18#include <cassert>
    1819#include "TypedefTable.h"
    19 #include <cassert>
    2020using namespace std;
    2121
     
    2929TypedefTable::TypedefTable() : currentScope( 0 ) {}
    3030
     31bool TypedefTable::exists( const string &identifier ) {
     32        return table.count( identifier ) > 0;
     33}
     34
    3135void TypedefTable::changeKind( const string &identifier, kind_t kind ) {
    3236        tableType::iterator id_pos = table.find( identifier );
    33         if ( id_pos == table.end() ) {
    34                 return;
    35         } else {
    36                 (*((*id_pos ).second.begin())).kind = kind;
    37                 return;
    38         } // if
     37        if ( id_pos == table.end() ) return;
     38        id_pos->second.begin()->kind = kind;
    3939}
    4040
    41 bool TypedefTable::isKind( const string &identifier, kind_t kind ) const {
     41int TypedefTable::isKind( const string &identifier ) const {
    4242        tableType::const_iterator id_pos = table.find( identifier );
    43         if ( id_pos == table.end() ) {
    44                 return true;
    45         } else {
    46                 return (*((*id_pos ).second.begin())).kind == kind;
    47         } // if
    48 }
    49 
    50 bool TypedefTable::isIdentifier( const string &identifier ) const {
    51         return isKind( identifier, ID );
    52 }
    53 
    54 bool TypedefTable::isTypedef( const string &identifier ) const {
    55         return isKind( identifier, TD );
    56 }
    57 
    58 bool TypedefTable::isTypegen( const string &identifier ) const {
    59         return isKind( identifier, TG );
     43        // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
     44        if ( id_pos == table.end() ) return IDENTIFIER;
     45        return id_pos->second.begin()->kind;
    6046}
    6147
    6248void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) {
    63         if ( currentContext != "" && scope == contextScope ) {
     49        if ( currentTrait != "" && scope == contextScope ) {
    6450                DeferredEntry entry = { identifier, kind };
    65                 contexts[currentContext].push_back( entry );
     51                contexts[currentTrait].push_back( entry );
    6652        } else {
    6753                debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl );
     
    11298}
    11399
    114 void TypedefTable::openContext( const std::string &contextName ) {
     100void TypedefTable::openTrait( const std::string &contextName ) {
    115101        map< string, deferListType >::iterator i = contexts.find( contextName );
    116102        if ( i != contexts.end() ) {
     
    150136}
    151137
    152 void TypedefTable::enterContext( const std::string &contextName ) {
    153         currentContext = contextName;
     138void TypedefTable::enterTrait( const std::string &contextName ) {
     139        currentTrait = contextName;
    154140        contextScope = currentScope;
    155141}
    156142
    157 void TypedefTable::leaveContext() {
    158         currentContext = "";
     143void TypedefTable::leaveTrait() {
     144        currentTrait = "";
    159145}
    160146
  • src/Parser/TypedefTable.h

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 25 22:52:15 2015
    13 // Update Count     : 11
     12// Last Modified On : Mon Mar 21 18:17:36 2016
     13// Update Count     : 24
    1414//
    1515
     
    2222#include <stack>
    2323
     24#include "lex.h"
     25#include "parser.h"
     26
    2427class TypedefTable {
    2528  public:
    26         enum kind_t { ID, TD, TG };
     29        enum kind_t { ID = IDENTIFIER, TD = TYPEDEFname, TG = TYPEGENname };
    2730  private:
    2831        struct Entry {
     
    4043
    4144        int currentScope;
    42         std::string currentContext;
     45        std::string currentTrait;
    4346        int contextScope;
    4447       
     
    4952        std::stack< std::string > nextIdentifiers;
    5053
    51         bool isKind( const std::string &identifier, kind_t kind ) const;
    5254        void addToScope( const std::string &identifier, kind_t kind, int scope );
    5355  public:
    5456        TypedefTable();
    5557
    56         bool isIdentifier( const std::string &identifier ) const;
    57         bool isTypedef( const std::string &identifier ) const;
    58         bool isTypegen( const std::string &identifier ) const;
    59 
     58        bool exists( const std::string &identifier );
     59        int isKind( const std::string &identifier ) const;
    6060        void changeKind( const std::string &identifier, kind_t kind );
    6161       
     
    7979       
    8080        // dump the definitions from a pre-defined context into the current scope
    81         void openContext( const std::string &contextName );
     81        void openTrait( const std::string &contextName );
    8282       
    8383        void enterScope();
    8484        void leaveScope();
    85         void enterContext( const std::string &contextName );
    86         void leaveContext();
     85        void enterTrait( const std::string &contextName );
     86        void leaveTrait();
    8787
    8888        void print() const;
  • src/Parser/lex.cc

    r39786813 ra5a71d0  
    382382        (yy_c_buf_p) = yy_cp;
    383383
    384 #define YY_NUM_RULES 179
    385 #define YY_END_OF_BUFFER 180
     384#define YY_NUM_RULES 180
     385#define YY_END_OF_BUFFER 181
    386386/* This struct is not used in this scanner,
    387387   but its presence is necessary. */
     
    391391        flex_int32_t yy_nxt;
    392392        };
    393 static yyconst flex_int16_t yy_accept[876] =
     393static yyconst flex_int16_t yy_accept[888] =
    394394    {   0,
    395         0,    0,    0,    0,    0,    0,  114,  114,  117,  117,
    396       180,  178,    7,    9,    8,  137,  116,  101,  142,  145,
    397       113,  124,  125,  140,  138,  128,  139,  131,  141,  106,
    398       107,  108,  129,  130,  147,  149,  148,  150,  178,  101,
    399       122,  178,  123,  143,  101,  103,  101,  101,  101,  101,
    400       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    401       101,  126,  146,  127,  144,    7,  178,    4,    4,  179,
    402       104,  179,  105,  114,  115,  121,  117,  118,    7,    9,
    403         0,    8,  154,  173,  101,    0,  166,  136,  159,  167,
    404       164,  151,  162,  152,  163,  161,    0,  111,    3,    0,
    405 
    406       165,  111,  109,    0,    0,  109,  109,    0,    0,  109,
    407       108,  108,  108,    0,  108,  134,  135,  133,  155,  157,
    408       153,  158,  156,    0,    0,    0,    0,    0,    0,    0,
    409         0,    0,    0,    0,    0,    0,    0,    0,  102,  172,
    410         0,  116,  113,  101,    0,    0,  169,    0,  101,  101,
    411       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    412       101,  101,  101,  101,  101,   39,  101,  101,  101,  101,
    413       101,  101,  101,  101,  101,  101,   57,  101,  101,  101,
    414       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    415       101,  101,  168,  160,    7,    0,    0,    0,    2,    0,
    416 
    417         5,  104,    0,    0,    0,  114,    0,  120,  119,  119,
    418         0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
    419         0,    0,    0,    0,    0,    0,    0,    0,    0,  132,
    420       111,  111,    0,  111,  111,  111,    0,    6,  111,  109,
    421         0,    0,    0,  111,    0,  109,  109,  109,  109,    0,
    422       110,    0,    0,  108,  108,  108,  108,    0,  170,  171,
    423         0,  176,  174,    0,    0,    0,  102,    0,    0,    0,
    424         0,    0,    0,    0,    0,  101,   17,  101,  101,  101,
    425       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    426       101,  101,  101,  101,  101,   14,  101,  101,  101,  101,
    427 
    428       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    429       101,  101,  101,  101,   51,  101,  101,  101,   64,  101,
    430       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    431       101,   88,  101,  101,  101,  101,  101,  101,  101,    0,
    432         0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
    433         0,    0,    0,  119,    0,    0,  177,    0,    0,    0,
    434         0,    0,    0,    0,  111,    0,  111,    0,  111,    0,
    435         0,  111,  111,  109,  109,    0,    0,  110,  110,    0,
    436       110,    0,  110,  108,  108,    0,    0,    0,    0,    0,
    437         0,    0,    0,    0,    0,  175,  101,  101,  101,  101,
    438 
    439       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    440       101,  101,  101,  101,  101,  101,  101,  101,  101,   21,
    441       101,   24,  101,   27,  101,  101,  101,  101,  101,  101,
    442       101,   42,  101,   44,  101,  101,  101,  101,  101,  101,
    443       101,   56,  101,   67,  101,  101,  101,  101,  101,  101,
    444       101,  101,  101,  101,  101,   89,  101,  101,   96,  101,
    445       101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    446         0,    0,    0,    0,    0,  119,    0,    0,    0,    0,
    447         0,  111,  111,    0,    0,    0,    0,    0,  110,  110,
    448         0,  112,    0,  110,  110,    0,    0,    0,    0,    0,
    449 
    450         0,    0,    0,    0,    0,    0,    0,    0,  101,  101,
    451        22,  101,  101,  101,  101,  101,  101,  101,   15,  101,
    452       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    453       101,  101,  101,   23,   25,  101,   32,  101,  101,  101,
    454       101,  101,   41,  101,  101,  101,  101,   49,  101,  101,
    455        54,  101,  101,  101,  101,  101,   76,  101,  101,  101,
    456       101,  101,   86,  101,  101,   94,  101,  101,  100,    0,
     395        0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
     396      181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
     397      114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
     398      108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
     399      123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
     400      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     401      102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
     402      180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
     403        9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
     404      168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
     405
     406        0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
     407      110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
     408      158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
     409        0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
     410      173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
     411      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     412      102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
     413      102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
     414      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     415      102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
     416
     417        2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
     418      120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
    457419        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    458         0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
    459         0,  110,  112,  112,  112,  112,  112,  110,    0,    0,
    460 
    461         0,    0,    0,    0,    0,    0,    0,    0,  101,    0,
    462       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
    463       101,  101,  101,  101,  101,  101,   59,  101,  101,  101,
    464       101,  101,  101,  101,  101,   28,  101,  101,  101,  101,
    465        40,   43,   46,  101,  101,   52,  101,   61,   68,  101,
    466       101,   75,   77,   80,   81,   83,   84,  101,  101,   91,
    467       101,  101,    0,    1,    0,    0,    0,    0,    0,    0,
    468       104,    0,    0,    0,  119,    0,    0,    0,    0,  112,
    469       112,  112,  112,    0,    0,    0,    0,    0,    0,    0,
    470         0,    0,  101,  101,   18,  101,  101,  101,  101,  101,
    471 
    472       101,  101,   16,  101,  101,  101,   33,  101,  101,  101,
    473       101,  101,  101,  101,  101,  101,  101,  101,   35,  101,
    474        37,   38,  101,   48,   53,  101,  101,  101,   90,  101,
    475       101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    476         0,    0,    0,    0,   10,   11,   29,   55,  101,  101,
    477       101,  101,  101,  101,  101,  101,  101,  101,  101,   60,
    478        62,   65,  101,  101,   78,   92,  101,  101,   36,   47,
    479        71,   72,  101,   95,   97,    0,    0,    0,    0,    0,
    480         0,    0,    0,    0,    0,    0,    0,  101,   69,  101,
    481       101,   12,  101,  101,   30,   34,  101,  101,  101,   66,
    482 
    483       101,  101,  101,  101,  101,  101,    0,    0,    0,    0,
    484         0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
    485       101,  101,  101,  101,  101,  101,  101,   50,   63,   73,
    486        79,   93,   98,  101,  101,    0,    0,    0,    0,    0,
    487         0,    0,    0,  101,  101,   13,   19,  101,   31,  101,
    488       101,  101,   26,   87,    0,    0,  101,  101,  101,  101,
    489       101,   74,   99,  101,   85,   20,  101,   45,   82,  101,
    490       101,  101,  101,   70,    0
     420        0,  133,  112,  112,    0,  112,  112,    0,    0,    6,
     421        0,  110,    0,    0,    0,  112,    0,  110,  110,  110,
     422      110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
     423      171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
     424        0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
     425      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     426      102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
     427
     428      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     429      102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
     430       63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     431      102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
     432      102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
     433        0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
     434      178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
     435      112,    0,  112,    0,    0,  112,    0,  110,  110,    0,
     436        0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
     437        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
     438
     439      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     440      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     441      102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
     442      102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
     443      102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
     444      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     445      102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
     446        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     447        0,  120,    0,    0,    0,    0,    0,  112,    0,    0,
     448        0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
     449
     450      111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     451        0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
     452      102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
     453      102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
     454       25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
     455      102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
     456      102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
     457      102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
     458        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     459        0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
     460
     461      113,  113,  113,    0,  111,    0,    0,    0,    0,    0,
     462        0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
     463      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     464      102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
     465      102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
     466      102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
     467       81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
     468        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
     469      120,    0,    0,    0,    0,  113,    0,  113,  113,    0,
     470        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
     471
     472       18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
     473      102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
     474      102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
     475      102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
     476        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
     477       11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
     478      102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
     479       92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
     480        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     481        0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
     482
     483       34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
     484      102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     485        0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
     486      102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
     487        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
     488       13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
     489        0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
     490      102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
     491      102,  102,  102,  102,   96,   69,    0
    491492    } ;
    492493
     
    499500       16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
    500501       26,   26,   26,   26,   26,   27,   28,   29,   30,   31,
    501        32,   33,   34,   35,   36,   37,   38,   39,   40,   39,
    502        41,   11,   42,   11,   11,   43,   11,   44,   11,   45,
    503        11,   46,   47,   48,   49,   11,   11,   50,   11,   11,
    504        51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
    505 
    506        61,   62,   63,   64,   65,   11,   66,   67,   68,   69,
    507        70,   71,   11,   72,   73,   74,   75,   76,   77,   78,
    508        79,   80,   81,   82,   83,   84,    1,    1,    1,    1,
     502       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
     503       42,   11,   43,   11,   11,   44,   11,   45,   11,   46,
     504       11,   47,   48,   49,   50,   11,   11,   51,   11,   11,
     505       52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
     506
     507       62,   63,   64,   65,   66,   11,   67,   68,   69,   70,
     508       71,   72,   11,   73,   74,   75,   76,   77,   78,   79,
     509       80,   81,   82,   83,   84,   85,    1,    1,    1,    1,
    509510        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    510511        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    523524    } ;
    524525
    525 static yyconst flex_int32_t yy_meta[85] =
     526static yyconst flex_int32_t yy_meta[86] =
    526527    {   0,
    527528        1,    1,    2,    1,    1,    1,    1,    1,    3,    1,
     
    529530        6,    1,    7,    7,    7,    7,    7,    7,    1,    1,
    530531        1,    8,    1,    1,    1,    9,    9,    9,    9,    9,
    531         4,    4,   10,    4,   11,    4,    4,    4,   10,    4,
    532         1,   12,    1,    1,   13,    1,    9,    9,    9,    9,
    533         9,    9,    4,    4,    4,    4,   10,    4,    4,    4,
    534        11,    4,    4,    4,   10,    4,    4,    4,    4,    4,
    535         1,    1,    1,    1
     532        9,    4,    4,   10,    4,   11,    4,    4,    4,   10,
     533        4,    1,   12,    1,    1,   13,    1,    9,    9,    9,
     534        9,    9,    9,    4,    4,    4,    4,   10,    4,    4,
     535        4,   11,    4,    4,    4,   10,    4,    4,    4,    4,
     536        4,    1,    1,    1,    1
    536537    } ;
    537538
    538 static yyconst flex_int16_t yy_base[1050] =
     539static yyconst flex_int16_t yy_base[1062] =
    539540    {   0,
    540         0,   83, 2238, 2237,   93,    0,  175,  176,  177,  178,
    541      2252, 2782,  189, 2782,  195,   54, 2782, 2197,   59,  171,
    542      2782, 2782, 2782,   55,  186, 2782,  189,  187,  202,  214,
    543       272,    0, 2213, 2782,  214, 2213,  150,  340,  153,  222,
    544      2782,  157, 2782,  215,  224, 2782,  207,  181,  221,  249,
    545       235,  289,  155,  255,  218,  206,  266,  256,  323,  259,
    546       192, 2782,  223, 2782, 2210,  377,  342, 2782, 2220, 2782,
    547      2187,  234, 2782,    0, 2782,  421,    0, 2782,  393, 2782,
    548       399,  405, 2782,  492, 2184,  241, 2782, 2782, 2782, 2782,
    549      2782, 2201, 2782, 2200, 2782, 2782, 2211,  552, 2782, 2226,
    550 
    551      2782,  413,  393,  437,  493,  377,  318,  195,  430,  382,
    552         0,  384,  321,  196,  427, 2782, 2782, 2782, 2194, 2782,
    553      2782, 2782, 2193, 2192,  252,  302, 2206,  342,  435,  422,
    554       381,  455,  400,  494, 2185,  440, 2133,  469, 2163, 2782,
    555       276, 2782, 2782,  520, 2159, 2157, 2782, 2128,  414,  463,
    556       470,  325,  254,  479,  432,  274,  480,  423,  483,  498,
    557       492,  503,  499,  509,  341,  455,  484,  377,  510,  512,
    558       517,  518,  529,  530,  531,  537, 2154,  541,  536,  544,
    559       557,  546,  566,  569,  538,  552,  548,  554,  588,  571,
    560       570,  580, 2782, 2782,  645,  651, 2202,  657, 2782,  663,
    561 
    562      2782, 2152,  593, 2147, 2144,    0,  631, 2782, 2782,  669,
    563      2141, 2140, 2139,    0, 2160,  629,  635,  639,  678,  677,
    564       666,  670,  671,  674, 2138,  681,  682, 2115, 2114, 2782,
    565         0,  597,  702,  678,  676, 2111, 2160, 2782,  693,    0,
    566       710,  723,  743,  762,  788,  707, 2782, 2119, 2094,    0,
    567       776, 2138,  768,  723, 2782, 2113, 2086,  809, 2782, 2782,
    568      2118, 2782, 2782,  705,  710, 2098, 2097,  724, 2091, 2088,
    569      2087,    0, 2086,    0, 2056,  709,  682,  707,  712,  710,
    570       724,  647,  750,  671,  786,  751,  748,  731,  778,  787,
    571       789,  788,  792,  790,  758, 2084,  796,  806,  800,  813,
    572 
    573       798,  810,  802,  816,  822,  819,  815,  826,  830,  829,
    574       831,  832,  833,  837,  839,  841,  846,  843, 2081,  848,
    575       850,  849,  851,  852,  854,  853,  857,  855,  858,  863,
    576       868, 2080,  867,  912,  871,  878,  872,  879,  882,  937,
    577       939, 2076, 2074, 2071,    0, 2070,    0,  927,  931, 2069,
    578         0, 2067,    0, 2064,    0, 2084, 2782,  913,  926, 2064,
    579      2060,    0, 2057,    0, 2782,  942,  960,  953, 2782,  966,
    580       981, 1005, 2053, 2782, 2782,  955,  968,  995,  968, 1028,
    581       892, 1014,  970, 2782, 2782, 2049, 2047, 2045,    0, 2042,
    582         0, 2040,    0, 2038,    0, 2782,  909,  944,  982,  943,
    583 
    584      1006,  911, 1012,  923, 1013, 1019, 1009, 1016, 1023, 1024,
    585      1020,  972, 1030, 1028,  989, 1026, 1034, 1027, 1039, 2038,
    586      1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057,
    587      1055, 2033, 1059, 2031,  946, 1063, 1066, 1067, 1068, 1071,
    588      1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086,
    589      1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096,
    590      1111, 1164, 2020,    0, 2018,    0, 2015,    0, 2012,    0,
    591      1151, 2011,    0, 2010,    0, 2008, 2005, 2002,    0, 2001,
    592         0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782,
    593      1201, 1215, 1241, 2010, 1983, 1992, 1991,    0, 1990,    0,
    594 
    595      1988,    0, 1985,    0, 1982,    0, 1981,    0, 1161, 1149,
    596      1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163,
    597      1196, 1200, 1201, 1220, 1198, 1221, 1224,  604, 1226, 1227,
    598      1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246,
    599      1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267,
    600      1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279,
    601      1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015,
    602      1961,    0, 1958,    0, 1957,    0, 1956,    0, 1954,    0,
    603      1921,    0, 1919,    0, 1918,    0, 1336, 1342, 1369, 1353,
    604      1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911,    0,
    605 
    606      1910,    0, 1908,    0, 1905,    0,    0,    0, 1905,    0,
    607      1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355,
    608      1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381,
    609      1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401,
    610      1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402,
    611      1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876,
    612      1420, 1418, 1921, 2782, 1853,    0, 1852,    0,    0,    0,
    613      1854,    0,    0,    0, 2782,    0,    0,    0,    0, 1463,
    614      1849, 2782, 2782, 1469, 1846,    0, 1845,    0,    0,    0,
    615         0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449,
    616 
    617      1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474,
    618      1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487,
    619      1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498,
    620      1500,    0,    0,    0, 1828, 1825, 1824, 1548,    0, 1823,
    621      1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510,
    622      1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810,
    623      1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805,
    624      1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780,
    625      1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549,
    626      1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732,
    627 
    628      1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704,
    629      1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646,
    630      1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597,
    631      1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421,
    632      1205, 1201,  946, 1605, 1610,  910, 1603, 1607,  768, 1613,
    633      1618, 1619,  723,  605,  503,  370, 1609, 1620, 1623, 1624,
    634      1625,  338,  337, 1627,  290,  251, 1630,  200,  196, 1631,
    635      1632, 1637, 1633,  136, 2782, 1707, 1720, 1733, 1743, 1753,
    636      1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854,
    637      1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928,
    638 
    639      1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001,
    640      2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055,
    641      2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114,
    642      2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177,
    643      2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231,
    644      2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285,
    645      2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335,
    646      2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398,
    647      2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448,
    648      2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498,
    649 
    650      2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556,
    651      2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594,
    652      2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639,
    653      2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705,
    654      2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768
     541        0,   84, 2272, 2269,   94,    0,  177,  178,  179,  180,
     542     2285, 2822,  191, 2822,  197,   55, 2822, 2231,   60,  173,
     543     2822, 2822, 2822,   56,  188, 2822,  191,  189,  204,  216,
     544      275,    0, 2249, 2822,  216, 2247,  152,  344,  155,  220,
     545     2822,  159, 2822,  217,  226, 2822,  185,  154,  212,  251,
     546      237,  270,  235,  257,  241,  205,  193,  305,  314,  333,
     547      238,  228, 2822,  225, 2822, 2242,  402,  390, 2822, 2253,
     548     2822, 2221,  235, 2822,    0, 2822,  426,    0, 2822,  417,
     549     2822,  439,  451, 2822,  498, 2219,  264, 2822, 2822, 2822,
     550     2822, 2822, 2235, 2822, 2232, 2822, 2822, 2244,  559, 2822,
     551
     552     2261, 2822,  438,  444,  511,  534,  289,  253,  197,  380,
     553      305,    0,  319,  280,  198,  322, 2822, 2822, 2822, 2230,
     554     2822, 2822, 2822, 2227, 2224,  218,  255, 2239,  298,  350,
     555      368,  312,  440,  398,  405, 2220,  441, 2168,  446, 2196,
     556     2822,  335, 2822, 2822,  468, 2190, 2189, 2822, 2162,  439,
     557      282,  433,  372,  281,  437,  434,  428,  570,  444,  466,
     558      464,  469,  475,  321,  492,  438,  471,  445,  474,  512,
     559      489,  503,  496,  521,  276,  515,  516, 2189,  526,  510,
     560      519,  525,  543,  522,  560,  553,  523,  561,  551,  544,
     561      599,  582,  593,  584, 2822, 2822,  660,  651, 2236,  666,
     562
     563     2822,  678, 2822, 2183,  607, 2179, 2178,    0,  693, 2822,
     564     2822,  684, 2176, 2156, 2154,    0, 2177,  578,  608,  617,
     565      654,  679,  650,  683,  684,  687, 2172,  690,  691, 2147,
     566     2146, 2822,    0,  683,  710,  686,  700, 2145, 2196, 2822,
     567      714,    0,  427,  746,  764,  786,  808,  621, 2822, 2152,
     568     2125,    0,  794, 2171,  795,  709, 2822, 2147, 2121,  832,
     569     2822, 2822, 2152, 2822, 2822,  711,  714, 2129, 2129,  717,
     570     2125, 2123, 2120,    0, 2117,    0, 2088,  694,  679,  712,
     571      709,  711,  698,  566,  726,  743,  771,  741,  790,  784,
     572      800,  795,  742,  744,  814,  816,  818, 2118,  819,  745,
     573
     574      820,  821,  822,  823,  824,  746,  825,  748,  659,  831,
     575      826,  833,  838,  839,  848,  850,  851,  844,  834,  857,
     576     2116,  858,  859,  860,  862,  861,  864,  865,  867,  868,
     577      866,  871,  876,  872,  878, 2113,  880,  689,  881,  882,
     578      892,  896,  893,  953,  954, 2109, 2108, 2106,    0, 2103,
     579        0,  941,  945, 2102,    0, 2101,    0, 2099,    0, 2118,
     580     2822,  940,  941, 2094, 2088,    0, 2086,    0, 2822,  953,
     581      975,  964, 2822,  981,  997, 1021, 2084, 2822, 2822,  939,
     582      940, 1006,  982, 1041,  310, 1039, 1004, 2822, 2822, 2081,
     583     2079, 2077,    0, 2074,    0, 2071,    0, 2070,    0, 2822,
     584
     585      886,  941,  960,  962,  977,  976,  980,  982, 1017, 1010,
     586     1002,  998, 1022, 1031, 1028, 1033, 1034, 1037, 1040, 1043,
     587     1038, 1041, 1053, 2072, 1055, 2070, 1045, 2067, 1056, 1061,
     588     1063, 1065, 1066, 1067, 1070, 2064, 1071, 2063, 1073, 1074,
     589     1075, 1078, 1080, 1081, 1085, 2062, 1087, 2060, 1084, 1089,
     590     1091, 1097, 1099, 1092, 1102, 1103, 1105, 1106, 1108,  905,
     591     1109, 1116, 1110, 1122, 2057, 1120, 1123, 1179, 2051,    0,
     592     2050,    0, 2049,    0, 2047,    0, 1166, 2044,    0, 2041,
     593        0, 2040, 2039, 2037,    0, 2034,    0, 1173, 2031, 1179,
     594     1137, 1195, 1181, 1178, 1176, 2822, 1219, 1231, 1253, 2042,
     595
     596     2017, 2027, 2024,    0, 2021,    0, 2020,    0, 2019,    0,
     597     2017,    0, 2014,    0, 1141, 1172, 2014, 1180, 1155, 1196,
     598     1157, 1216, 1207, 1231, 1125, 1210, 1232, 1214, 1187, 1236,
     599     1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2013,
     600     1261, 1256, 2012, 1260, 1263, 1264, 1257, 2010, 1271, 1268,
     601     1269, 1273, 2007, 1275, 1282, 2006, 1283, 1284, 2005, 1276,
     602     1286, 1289, 2003, 1294, 1291, 1296, 1295, 1297, 1310, 2000,
     603     1305, 1308, 1999, 1307, 1300, 1998, 2046, 1960,    0, 1958,
     604        0, 1957,    0, 1954,    0, 1951,    0, 1950,    0, 1949,
     605        0, 1947,    0, 1355, 1361, 1389, 1372, 1944, 2822, 1378,
     606
     607     1325, 1365, 1379, 1941, 2822, 1940,    0, 1939,    0, 1937,
     608        0, 1934,    0,    0,    0, 1936,    0, 1366, 1312, 1311,
     609     1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390,
     610     1393, 1395, 1396, 1398, 1400, 1431, 1406, 1407, 1411, 1408,
     611     1413, 1414, 1935, 1409, 1416, 1419, 1933, 1930, 1929, 1422,
     612     1424, 1928, 1429, 1926, 1923, 1425, 1430, 1919, 1915, 1911,
     613     1895, 1894, 1893, 1436, 1433, 1891, 1439, 1440, 1938, 2822,
     614     1884,    0, 1883,    0,    0,    0, 1884,    0,    0,    0,
     615     2822,    0,    0,    0,    0, 1486, 1878, 2822, 2822, 1492,
     616     1877,    0, 1876,    0,    0,    0,    0, 1874, 1447, 1444,
     617
     618     1874, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1873, 1486,
     619     1490, 1488, 1502, 1452, 1510, 1504, 1491, 1519, 1506, 1498,
     620     1508, 1512, 1513, 1514, 1515, 1872, 1870, 1517, 1867, 1866,
     621     1518, 1520, 1523, 1865, 1521, 1525,    0,    0,    0, 1860,
     622     1857, 1856, 1575,    0, 1855, 1853, 1850, 1849, 1848, 1849,
     623     1846, 1845, 1844, 1531, 1536, 1527, 1528, 1552, 1533, 1537,
     624     1539, 1555, 1557, 1569, 1842, 1560, 1839, 1561, 1559, 1568,
     625     1572, 1567, 1573, 1838, 1837, 1835, 1828, 1574, 1826, 1825,
     626     1819, 1818, 1817, 1815, 1798, 1789, 1788, 1785, 1778, 1775,
     627     1768, 1766, 1576, 1768, 1577, 1581, 1580, 1579, 1584, 1585,
     628
     629     1747, 1586, 1615, 1590, 1746, 1591, 1592, 1602, 1600, 1594,
     630     1606, 1742, 1735, 1733, 1732, 1690, 1689, 1686, 1685, 1683,
     631     1682, 1678, 1677, 1674, 1676, 1607, 1611, 1614, 1612, 1608,
     632     1616, 1620, 1675, 1623, 1624, 1530, 1453, 1630, 1625, 1629,
     633     1438, 1354, 1319, 1318, 1267, 1212, 1210, 1208, 1631, 1636,
     634     1178, 1639, 1635, 1643, 1177, 1644, 1646, 1650, 1126,  964,
     635      937,  903, 1651, 1652, 1654, 1655, 1656, 1658,  788,  752,
     636     1660,  607,  487, 1662, 1663,  394,  357, 1664, 1666, 1668,
     637     1670, 1669, 1672, 1674,  233,  137, 2822, 1747, 1760, 1773,
     638     1783, 1793, 1806, 1816, 1829, 1842, 1855, 1863, 1873, 1880,
     639
     640     1887, 1894, 1901, 1908, 1915, 1922, 1929, 1936, 1949, 1956,
     641     1960, 1968, 1971, 1978, 1985, 1992, 1995, 2002, 2008, 2021,
     642     2034, 2041, 2048, 2055, 2062, 2065, 2072, 2075, 2082, 2085,
     643     2092, 2095, 2102, 2105, 2112, 2115, 2122, 2125, 2132, 2140,
     644     2147, 2154, 2161, 2168, 2171, 2178, 2181, 2188, 2191, 2198,
     645     2204, 2217, 2224, 2231, 2234, 2241, 2244, 2251, 2254, 2261,
     646     2264, 2271, 2274, 2281, 2284, 2291, 2298, 2301, 2308, 2311,
     647     2318, 2325, 2332, 2335, 2342, 2345, 2352, 2355, 2362, 2365,
     648     2372, 2375, 2382, 2388, 2401, 2408, 2415, 2418, 2425, 2428,
     649     2435, 2438, 2445, 2448, 2455, 2458, 2465, 2468, 2475, 2478,
     650
     651     2485, 2488, 2495, 2502, 2505, 2512, 2515, 2522, 2525, 2532,
     652     2535, 2538, 2544, 2551, 2560, 2567, 2574, 2577, 2584, 2587,
     653     2590, 2596, 2603, 2606, 2609, 2612, 2615, 2618, 2621, 2624,
     654     2631, 2634, 2641, 2644, 2647, 2650, 2653, 2663, 2670, 2673,
     655     2676, 2679, 2686, 2693, 2700, 2703, 2710, 2717, 2724, 2731,
     656     2738, 2745, 2752, 2759, 2766, 2773, 2780, 2787, 2794, 2801,
     657     2808
    655658    } ;
    656659
    657 static yyconst flex_int16_t yy_def[1050] =
     660static yyconst flex_int16_t yy_def[1062] =
    658661    {   0,
    659       875,    1,  876,  876,  875,    5,  877,  877,  878,  878,
    660       875,  875,  875,  875,  875,  875,  875,  879,  875,  875,
    661       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    662       875,   31,  875,  875,  875,  875,  875,  875,  880,  879,
    663       875,  875,  875,  875,  879,  875,  879,  879,  879,  879,
    664       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    665       879,  875,  875,  875,  875,  875,  881,  875,  875,  875,
    666       882,  875,  875,  883,  875,  875,  884,  875,  875,  875,
    667       875,  875,  875,  875,  879,  875,  875,  875,  875,  875,
    668       875,  875,  875,  875,  875,  875,  875,  875,  875,  885,
    669 
    670       875,   98,   30,  875,  875,  875,  875,  886,   30,  875,
    671        31,  875,  875,   31,  875,  875,  875,  875,  875,  875,
    672       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    673       875,  875,  875,  875,  875,  875,  875,  875,  887,  875,
    674       875,  875,  875,  879,  888,  889,  875,  875,  879,  879,
    675       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    676       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    677       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    678       879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
    679       879,  879,  875,  875,  875,  881,  881,  881,  875,  881,
    680 
    681       875,  882,  875,  890,  891,  883,  875,  875,  875,  875,
    682       892,  893,  894,  884,  875,  875,  875,  875,  875,  875,
    683       875,  875,  875,  875,  875,  875,  875,  895,  896,  875,
    684        98,  875,  875,  875,  875,   98,  897,  875,  875,  103,
    685       103,  875,  875,  875,  875,  875,  875,  875,  875,  898,
    686       899,  900,  875,  875,  875,  875,  875,  875,  875,  875,
    687       875,  875,  875,  875,  875,  875,  887,  875,  901,  902,
    688       903,  904,  905,  906,  875,  907,  907,  907,  907,  907,
    689       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    690       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    691 
    692       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    693       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    694       907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
    695       907,  907,  907,  907,  907,  907,  907,  907,  907,  908,
    696       909,  910,  911,  912,  913,  914,  915,  875,  875,  916,
    697       917,  918,  919,  920,  921,  875,  875,  875,  875,  875,
    698       922,  923,  924,  925,  875,  875,  875,  875,  875,  875,
    699       875,  367,  372,  875,  875,  926,  927,  928,  875,  875,
    700       875,  928,  875,  875,  875,  929,  930,  931,  932,  933,
    701       934,  935,  936,  937,  938,  875,  939,  939,  939,  939,
    702 
    703       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    704       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    705       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    706       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    707       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    708       939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
    709       939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
    710       875,  949,  950,  951,  952,  953,  953,  954,  955,  956,
    711       957,  875,  482,  875,  958,  875,  958,  875,  875,  875,
    712       875,  875,  875,  875,  875,  959,  960,  961,  962,  963,
    713 
    714       964,  965,  966,  967,  968,  969,  970,  971,  972,  972,
    715       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    716       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    717       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    718       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    719       972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
    720       972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
    721       974,  975,  976,  977,  978,  979,  980,  981,  982,  983,
    722       984,  985,  986,  987,  988,  989,  875,  875,  875,  875,
    723       990,  875,  589,  875,  875,  875,  593,  875,  991,  992,
    724 
    725       993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
    726      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    727      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    728      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    729      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    730      1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
    731      1001, 1001, 1003,  875, 1004, 1005, 1006, 1007, 1008, 1009,
    732      1010, 1011, 1012, 1013,  875, 1014, 1015, 1016, 1017,  875,
    733       680,  875,  875,  875, 1018, 1019, 1020, 1021, 1022, 1023,
    734      1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    735 
    736      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    737      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    738      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    739      1026, 1027, 1028, 1029, 1030, 1031, 1032,  875, 1033, 1018,
    740      1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026,
    741      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    742      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    743      1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031,
    744      1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026,
    745      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    746 
    747      1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037,
    748      1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026,
    749      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    750      1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046,
    751      1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    752      1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026,
    753      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
    754      1026, 1026, 1026, 1026,    0,  875,  875,  875,  875,  875,
    755       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    756       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    757 
    758       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    759       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    760       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    761       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    762       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    763       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    764       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    765       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    766       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    767       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    768 
    769       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    770       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    771       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    772       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    773       875,  875,  875,  875,  875,  875,  875,  875,  875
     662      887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
     663      887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
     664      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     665      887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
     666      887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
     667      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     668      891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
     669      887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
     670      887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
     671      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     672
     673      897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
     674      887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
     675      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     676      887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
     677      887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
     678      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     679      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     680      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     681      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     682      891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
     683
     684      887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
     685      887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
     686      887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
     687      908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
     688      887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
     689      887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
     690      887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
     691      913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
     692      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     693      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     694
     695      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     696      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     697      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     698      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
     699      919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
     700      927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
     701      887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
     702      887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
     703      939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
     704      942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
     705
     706      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     707      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     708      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     709      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     710      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     711      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
     712      951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
     713      955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
     714      964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
     715      970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
     716
     717      887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
     718      980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
     719      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     720      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     721      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     722      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     723      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
     724      984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
     725      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
     726      999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
     727
     728      887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
     729     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
     730     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     731     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     732     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     733     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     734     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
     735     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
     736      887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
     737     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
     738
     739     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     740     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     741     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     742     1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
     743     1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
     744     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     745     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     746     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     747     1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
     748     1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     749
     750     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     751     1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
     752     1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
     753     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     754     1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
     755     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     756     1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     757     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
     758     1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
     759      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     760
     761      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     762      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     763      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     764      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     765      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     766      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     767      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     768      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     769      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     770      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     771
     772      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     773      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     774      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     775      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     776      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     777      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     778      887
    774779    } ;
    775780
    776 static yyconst flex_int16_t yy_nxt[2867] =
     781static yyconst flex_int16_t yy_nxt[2908] =
    777782    {   0,
    778783       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    780785       28,   29,   30,   31,   32,   32,   32,   32,   33,   34,
    781786       35,   36,   37,   38,   39,   18,   18,   18,   18,   18,
    782        18,   18,   40,   18,   18,   18,   18,   18,   40,   18,
    783        41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
    784        51,   52,   53,   18,   54,   18,   55,   18,   18,   18,
    785        18,   56,   57,   58,   59,   60,   61,   18,   18,   18,
    786        62,   63,   64,   65,   66,   83,   91,   84,   84,   66,
    787        87,   88,   67,   70,   70,   70,   70,   70,   70,   70,
    788 
    789        70,   70,   70,   71,   70,   70,   70,   70,   70,   70,
    790        70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
    791        70,   70,   70,   70,   70,   70,   70,   70,   71,   71,
     787       18,   18,   18,   40,   18,   18,   18,   18,   18,   40,
     788       18,   41,   42,   43,   44,   45,   46,   47,   48,   49,
     789       50,   51,   52,   53,   18,   54,   18,   55,   18,   18,
     790       56,   18,   57,   58,   59,   60,   61,   62,   18,   18,
     791       18,   63,   64,   65,   66,   67,   84,   92,   85,   85,
     792       67,   88,   89,   68,   71,   71,   71,   71,   71,   71,
     793
     794       71,   71,   71,   71,   72,   71,   71,   71,   71,   71,
    792795       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    793        71,   71,   71,   70,   72,   70,   70,   71,   73,   71,
    794        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    795        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    796        71,   71,   71,   70,   70,   70,   70,   75,   75,   78,
    797        78,  122,  123,   89,  140,   78,   78,   86,   75,   75,
    798        79,   80,   81,   81,   81,   79,   81,   80,   82,   82,
    799 
    800        82,   81,   90,   92,  141,  145,   86,   97,   94,   98,
    801        98,   98,   98,   98,   98,  250,  875,   93,   99,   84,
    802        95,   96,   84,  100,  176,  117,   76,   76,   76,   76,
    803       142,  146,   86,  101,  102,  143,  103,  103,  103,  103,
    804       104,  104,  118,   86,  119,  120,  147,   86,  148,  252,
    805       258,   86,  160,  105,  193,  192,  106,   86,   86,  149,
    806       150,  151,  107,  108,  152,  153,  181,  154,  109,   86,
    807       155,  156,   86,   86,  105,   86,  144,  161,  157,  158,
    808       110,  159,  204,  261,  162,  262,   86,  179,  107,  228,
    809       163,  108,  102,  180,  111,  111,  111,  111,  111,  111,
    810 
    811        86,  168,   86,  169,  194,   86,   86,   86,  205,  164,
    812        86,  105,  170,  165,  112,  229,  177,   86,  166,  186,
    813       113,  281,  167,  178,  269,   86,  114,  187,  191,  182,
    814       183,  142,  105,  261,  188,  262,  143,  284,  115,  184,
    815        86,   86,  185,  198,  199,  171,  113,  124,  198,  189,
    816       270,  125,  126,  172,  127,  173,  128,  129,  174,  130,
    817       248,  131,  175,  256,  200,  200,  200,  200,  200,  200,
    818       132,  133,  134,  261,   86,  262,   86,  144,  195,   80,
    819        81,   81,   81,  195,  249,  280,  196,  257,   86,   86,
    820       135,  190,   86,  136,   79,   80,   81,   81,   81,   79,
    821 
    822        81,   80,   81,   81,   81,   81,   81,   80,   82,   82,
    823        82,   81,  261,  305,  262,  240,  240,  240,  240,  246,
    824       137,  138,  207,  208,  875,  247,  254,  207,   86,  209,
    825       247,  261,  255,  262,  209,   98,   98,   98,   98,   98,
    826        98,  263,  875,  210,  210,  210,  210,  241,  246,  308,
    827       875,  247,  263,  261,  209,  262,  247,  102,  255,  104,
    828       104,  104,  104,  104,  104,   86,  261,  239,  262,  211,
    829       875,  261,  209,  262,   86,  255,  105,  209,  209,  875,
    830       276,  209,  209,   86,  253,  264,  261,  277,  262,  209,
    831       296,  242,  209,  254,  209,  212,  209,  105,  213,  215,
    832 
    833       261,  255,  262,  216,  217,  283,   86,  875,  218,  219,
    834       243,  220,  243,  221,   86,  244,  244,  244,  244,  244,
    835       244,   86,  222,  223,  224,  261,  265,  262,  142,  306,
    836        86,   86,  278,  143,   86,   86,  285,  286,  287,  279,
    837       288,  289,  225,   86,  290,  226,  291,  245,  282,   86,
    838        86,  292,  293,  294,   86,  295,  297,  875,  298,  301,
    839        86,   86,  307,   86,  299,  300,  309,  303,   86,   86,
    840       304,   86,  302,  227,  231,  231,  231,  231,  231,  231,
    841        86,   86,   86,  312,  310,  311,  313,   86,   86,   86,
    842       232,  233,   86,  234,  235,   86,  142,   86,  314,   86,
    843 
    844       321,  315,  330,   86,  320,   86,  236,  318,   86,  316,
    845       317,  232,  233,  232,  319,  325,  234,   86,  235,  322,
    846        86,   86,   86,  331,  333,  328,  332,  629,  326,  323,
    847       324,   86,  207,  208,  337,  335,  338,  207,  365,   86,
    848       329,  342,  334,  336,  339,  327,  195,   80,   81,   81,
    849        81,  195,  198,  199,  196,   86,   86,  198,  198,  199,
    850       356,  365,  357,  198,  340,  199,  356,  343,  357,  340,
    851       356,  341,  357,  200,  200,  200,  200,  200,  200,  200,
    852       200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
    853       200,  348,  348,  348,  348,  357,  357,  356,   86,  357,
    854 
    855       358,  356,  356,  357,  357,  356,  359,  357,  356,  356,
    856       357,  357,  356,  356,  357,  357,  369,  365,  403,  366,
    857       369,  366,   86,  349,  367,  367,  367,  367,  367,  367,
    858       875,  232,  233,   86,  234,  235,  261,  369,  262,  369,
    859       365,  261,  405,  262,  369,  104,  104,  104,  104,  104,
    860       104,  398,  232,  233,  232,  374,  368,  234,   86,  235,
    861        86,   86,  105,   86,  371,  244,  244,  244,  244,  244,
    862       244,  384,  386,  397,   86,   86,  399,  253,  401,  400,
    863       402,  374,   86,  105,  372,  372,  372,  372,  372,  372,
    864       104,  104,  104,  104,  104,  104,  377,  384,  387,   86,
    865 
    866       232,   86,   86,  234,  235,  243,  404,  243,  411,   86,
    867       244,  244,  244,  244,  244,  244,  373,  410,  379,   86,
    868       380,  232,  253,  232,  381,  409,  234,  419,  235,   86,
    869       382,  111,  111,  111,  111,  111,  111,   86,   86,   86,
    870        86,   86,  383,   86,  412,  415,  380,   86,  416,   86,
    871       381,   86,  406,   86,  413,  414,  417,   86,  407,  408,
    872       422,   86,  421,  258,   86,  420,   86,   86,  418,  424,
    873        86,  423,  428,   86,  426,  427,  430,   86,  429,  425,
    874        86,   86,   86,   86,   86,  431,  432,  433,   86,  437,
    875        86,  435,   86,  438,   86,  439,  434,   86,  436,   86,
    876 
    877        86,   86,   86,   86,   86,   86,   86,  443,   86,   86,
    878       444,  441,  440,  446,   86,  442,  445,  451,   86,   86,
    879       142,  450,   86,   86,  447,  449,  448,  456,  452,   86,
    880        86,  459,  453,   86,  494,  460,  454,  455,  340,  199,
    881       457,  199,  458,  340,  356,  341,  357,  197,  461,  209,
    882       209,  209,  209,  348,  348,  348,  348,  356,  495,  357,
    883        86,   86,   86,   86,  367,  367,  367,  367,  367,  367,
    884       366,  509,  366,  514,   86,  367,  367,  367,  367,  367,
    885       367,  471,  482,  482,  482,  482,  482,  482,  231,  231,
    886       231,  231,  231,  231,   86,   86,  516,   86,  232,  486,
    887 
    888       875,  234,  235,  240,  240,  240,  240,  104,  104,  487,
    889       489,  510,  486,  512,  483,  377,  490,  545,  490,  232,
    890       370,  232,  488,   86,  234,  486,  235,  372,  372,  372,
    891       372,  372,  372,   86,  875,  371,  489,  379,  486,  380,
    892        86,  525,  490,  381,  490,  491,  529,  491,  511,  382,
    893       492,  492,  492,  492,  492,  492,  379,   86,  380,  373,
    894        86,  383,  381,   86,   86,  380,  513,   86,  496,  381,
    895        86,   86,  515,  517,   86,   86,  519,   86,   86,   86,
    896       383,   86,  493,  518,  380,   86,  526,  521,  381,  520,
    897        86,  522,  523,  524,  527,   86,  531,  532,  530,   86,
    898 
    899        86,  528,   86,   86,   86,  533,   86,   86,   86,  534,
    900        86,  535,  538,  541,   86,  543,  539,   86,   86,   86,
    901        86,  536,   86,  542,  537,  544,   86,  540,   86,  551,
    902        86,   86,  547,   86,  549,   86,  546,   86,   86,   86,
    903       548,   86,  550,  552,   86,   86,  558,   86,   86,   86,
    904       555,  553,  554,  556,  560,  561,  559,  557,   86,   86,
    905       567,  566,   86,  716,  563,  562,  199,  564,   86,  568,
    906       486,  569,  570,  209,  209,  209,  209,  565,  482,  482,
    907       482,  482,  482,  482,  372,  372,  372,  372,  372,  372,
    908       616,   86,  486,  486,  232,  592,  486,  234,  235,  588,
    909 
    910        86,  588,  487,  591,  589,  589,  589,  589,  589,  589,
    911       483,  614,   86,  612,   86,  232,  484,  232,  486,  486,
    912       234,  592,  235,  492,  492,  492,  492,  492,  492,  611,
    913        86,   86,   86,   86,  621,  620,  590,  593,  593,  593,
    914       593,  593,  593,   86,  615,  613,  617,   86,  618,   86,
    915        86,   86,   86,  594,  626,  875,  595,  596,  491,  856,
    916       491,  619,  622,  492,  492,  492,  492,  492,  492,  597,
    917       623,   86,   86,  624,  594,   86,  594,   86,   86,  595,
    918       625,  596,   86,  627,   86,   86,  630,   86,  628,  635,
    919       634,   86,   86,  633,   86,   86,  636,   86,   86,  632,
    920 
    921       631,   86,   86,  641,   86,   86,   86,   86,   86,  638,
    922       642,   86,  639,  640,   86,   86,  644,  637,   86,  643,
    923       645,  646,   86,  647,  648,  652,   86,  651,   86,  650,
    924        86,  649,   86,  656,  653,  658,   86,  655,  654,   86,
    925        86,   86,   86,   86,  657,  659,   86,   86,  682,  660,
    926       682,   86,  696,  695,  700,  662,  749,  661,  482,  482,
    927       482,  482,  482,  482,  589,  589,  589,  589,  589,  589,
    928       588,  682,  588,  682,   86,  589,  589,  589,  589,  589,
    929       589,  593,  593,  593,  593,  593,  593,  697,   86,   86,
    930       587,  680,  680,  680,  680,  680,  680,  683,   86,   86,
    931 
    932        86,  683,   86,  693,   86,  698,   86,  594,  701,  703,
    933       595,  596,  699,  597,   86,   86,  694,  704,  683,  702,
    934       683,  705,   86,  681,   86,  683,   86,  712,  594,  706,
    935       594,   86,   86,  595,  710,  596,   86,  707,   86,  708,
    936        86,   86,   86,  711,   86,   86,  709,  713,   86,  715,
    937       718,   86,   86,   86,   86,   86,  714,   86,   86,   86,
    938       717,  722,  726,   86,  719,  723,  727,  720,   86,   86,
    939       721,   86,  725,  729,   86,  875,  875,  728,  724,  745,
    940       730,  748,   86,  747,  731,  680,  680,  680,  680,  680,
    941       680,  593,  593,  593,  593,  593,  593,   86,   86,   86,
    942 
    943        86,  594,  750,  751,  595,  596,   86,  746,   86,  752,
    944        86,   86,  755,  759,  754,   86,  753,  681,  757,  756,
    945       762,   86,  594,  684,  594,   86,   86,  595,  760,  596,
    946       761,   86,  758,   86,  763,   86,   86,   86,   86,  764,
    947        86,   86,   86,  765,   86,   86,  766,  769,   86,   86,
    948       767,   86,   86,   86,  768,   86,   86,  774,  790,   86,
    949       775,   86,  771,  770,   86,  792,  772,  791,   86,  773,
    950       680,  680,  680,  680,  680,  680,  788,   86,  789,   86,
    951       796,  794,  793,  798,   86,   86,   86,  799,  800,   86,
    952        86,   86,  797,  801,  795,   86,   86,   86,  802,  803,
    953 
    954        86,   86,  738,   86,  804,   86,  823,   86,   86,   86,
    955        86,  825,  826,  805,  806,  828,   86,   86,   86,  822,
    956       829,  821,   86,   86,  820,  827,  831,  824,   86,   86,
    957        86,  832,   86,   86,  834,   86,  846,   86,  830,  833,
    958        86,  847,  845,  844,   86,  835,   86,  849,   86,   86,
    959        86,  851,  852,   86,   86,  848,   86,  859,   86,  853,
    960        86,   86,  854,  850,   86,  857,  858,  861,  860,   86,
    961        86,   86,  862,  863,   86,   86,   86,  866,   86,  868,
    962       864,   86,   86,   86,   86,  867,  865,  875,   86,  875,
    963       855,  871,   86,   86,  874,   86,   86,   86,  875,  875,
    964 
    965       869,  843,  870,  875,  842,  872,  873,   68,   68,   68,
    966        68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
    967        74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
    968        74,   74,   74,   77,   77,   77,   77,   77,   77,   77,
    969        77,   77,   77,   77,   77,   77,   85,  875,  840,   85,
    970       875,   85,   85,   85,   85,   85,  139,  839,  875,  838,
    971       139,  139,  139,  139,  139,  139,  197,  197,  197,  197,
    972       197,  197,  197,  197,  197,  197,  197,  197,  197,  202,
    973       875,  837,  202,   86,  202,  202,  202,  202,  202,  206,
    974        86,  206,  206,   86,  206,  206,  206,  206,  206,  206,
    975 
    976       875,  206,  214,  819,  875,  214,  214,  214,  214,  214,
    977       214,  214,  214,  818,  214,  237,  237,  237,  237,  237,
    978       237,  237,  237,  237,  237,  237,  237,  237,  251,  251,
    979       816,  251,  875,  814,  875,  251,  267,  812,  875,  267,
    980       810,  267,  267,  267,  267,  267,  271,  808,  271,   86,
    981        86,   86,  271,  273,   86,  273,   86,   86,   86,  273,
    982       344,   86,  344,   86,   86,   86,  344,  346,   86,  346,
    983       875,  787,  785,  346,  350,  875,  350,  875,  782,  780,
    984       350,  352,  778,  352,   86,   86,   86,  352,  354,   86,
    985       354,   86,   86,   86,  354,  361,   86,  361,  744,  741,
    986 
    987       740,  361,  363,  738,  363,  203,  734,  733,  363,  237,
    988       237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
    989       237,  237,  376,  664,  376,  378,  378,   86,  378,  378,
    990       378,   86,  378,  251,  251,   86,  251,  388,   86,  388,
    991        86,   86,   86,  388,  390,   86,  390,   86,   86,   86,
    992       390,  392,   86,  392,   86,   86,   86,  392,  271,  691,
    993       271,  394,  690,  394,  688,  686,  684,  394,  273,  591,
    994       273,   85,  679,  678,   85,  676,   85,   85,   85,   85,
    995        85,  197,  197,  197,  197,  197,  197,  197,  197,  197,
    996       197,  197,  197,  197,  462,  462,  462,  462,  462,  462,
    997 
    998       462,  462,  462,  462,  462,  462,  462,  463,  674,  463,
    999       672,  670,  668,  463,  465,  666,  465,  664,   86,   86,
    1000       465,  467,   86,  467,   86,   86,   86,  467,  344,   86,
    1001       344,  469,   86,  469,   86,  610,  608,  469,  346,  606,
    1002       346,  472,  604,  472,  602,  600,  496,  472,  350,  598,
    1003       350,  474,  598,  474,  587,  586,  584,  474,  352,  477,
    1004       352,  476,  477,  476,  582,  580,  578,  476,  354,  576,
    1005       354,  478,  574,  478,  572,   86,   86,  478,  361,   86,
    1006       361,  480,   86,  480,   86,   86,   86,  480,  363,   86,
    1007       363,  485,  508,  485,  506,  485,  504,  485,  376,  502,
    1008 
    1009       376,  500,  376,  498,  376,  378,  378,  484,  378,  378,
    1010       378,  481,  378,  497,  479,  497,  357,  357,  477,  497,
    1011       499,  475,  499,  473,  470,  468,  499,  501,  466,  501,
    1012       464,   86,   86,  501,  388,   86,  388,  503,  396,  503,
    1013       395,  393,  391,  503,  390,  389,  390,  505,  268,  505,
    1014       263,  262,  385,  505,  392,  385,  392,  507,  250,  507,
    1015       375,  375,  238,  507,  394,  370,  394,   85,  364,  362,
    1016        85,  360,   85,   85,   85,   85,   85,  462,  462,  462,
    1017       462,  462,  462,  462,  462,  462,  462,  462,  462,  462,
    1018       571,  356,  571,  355,  353,  351,  571,  463,  347,  463,
    1019 
    1020       573,  345,  573,  203,  199,   86,  573,  465,  275,  465,
    1021       575,  274,  575,  272,  268,  263,  575,  467,  266,  467,
    1022       577,  263,  577,  261,  260,  259,  577,  469,  238,  469,
    1023       579,  230,  579,   84,   84,   86,  579,  472,  203,  472,
    1024       581,  201,  581,   84,  121,  116,  581,  474,   86,  474,
    1025       476,  875,  476,   69,   69,  875,  476,  583,  875,  583,
    1026       875,  875,  875,  583,  478,  875,  478,  585,  875,  585,
    1027       875,  875,  875,  585,  480,  875,  480,  485,  875,  485,
    1028       875,  485,  875,  485,  378,  875,  378,  875,  875,  875,
    1029       378,  599,  875,  599,  875,  875,  875,  599,  497,  875,
    1030 
    1031       497,  601,  875,  601,  875,  875,  875,  601,  499,  875,
    1032       499,  603,  875,  603,  875,  875,  875,  603,  501,  875,
    1033       501,  605,  875,  605,  875,  875,  875,  605,  503,  875,
    1034       503,  607,  875,  607,  875,  875,  875,  607,  505,  875,
    1035       505,  609,  875,  609,  875,  875,  875,  609,  507,  875,
    1036       507,   85,  875,  875,   85,  875,   85,   85,   85,   85,
    1037        85,  663,  663,  663,  663,  663,  663,  663,  663,  663,
    1038       663,  663,  663,  663,  665,  875,  665,  875,  875,  875,
    1039       665,  571,  875,  571,  667,  875,  667,  875,  875,  875,
    1040       667,  573,  875,  573,  669,  875,  669,  875,  875,  875,
    1041 
    1042       669,  575,  875,  575,  671,  875,  671,  875,  875,  875,
    1043       671,  577,  875,  577,  673,  875,  673,  875,  875,  875,
    1044       673,  579,  875,  579,  675,  875,  675,  875,  875,  875,
    1045       675,  581,  875,  581,  677,  875,  677,  875,  875,  875,
    1046       677,  583,  875,  583,   85,  875,   85,  875,  875,  875,
    1047        85,  585,  875,  585,  485,  875,  485,  875,  875,  875,
    1048       485,  685,  875,  685,  875,  875,  875,  685,  599,  875,
    1049       599,  687,  875,  687,  875,  875,  875,  687,  601,  875,
    1050       601,  689,  875,  689,  875,  875,  875,  689,  603,  875,
    1051       603,  139,  875,  139,  875,  875,  875,  139,  605,  875,
    1052 
    1053       605,  692,  875,  692,  607,  875,  607,   85,  875,  875,
    1054        85,  875,   85,   85,   85,   85,   85,  609,  875,  609,
    1055       663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
    1056       663,  663,  663,  732,  875,  732,  875,  875,  875,  732,
    1057       665,  875,  665,  202,  875,  202,  875,  875,  875,  202,
    1058       667,  875,  667,  735,  875,  735,  669,  875,  669,  202,
    1059       875,  875,  202,  875,  202,  202,  202,  202,  202,  671,
    1060       875,  671,  736,  875,  736,  673,  875,  673,  675,  875,
    1061       675,  737,  875,  737,  677,  875,  677,   85,  875,   85,
    1062       739,  875,  739,  875,  875,  875,  739,  685,  875,  685,
    1063 
    1064       267,  875,  267,  875,  875,  875,  267,  687,  875,  687,
    1065       742,  875,  742,  689,  875,  689,  139,  875,  139,  743,
    1066       875,  743,  875,  875,  875,  743,   85,  875,  875,   85,
    1067       875,   85,   85,   85,   85,   85,  776,  875,  776,  732,
    1068       875,  732,  202,  875,  202,  777,  875,  777,  875,  875,
    1069       875,  777,  779,  875,  779,  875,  875,  875,  779,  781,
    1070       875,  781,  875,  875,  875,  781,  783,  875,  783,  784,
    1071       875,  784,  875,  875,  875,  784,  786,  875,  786,  875,
    1072       875,  875,  786,  807,  875,  807,  875,  875,  875,  807,
    1073       809,  875,  809,  875,  875,  875,  809,  811,  875,  811,
    1074 
    1075       875,  875,  875,  811,  813,  875,  813,  875,  875,  875,
    1076       813,  815,  875,  815,  875,  875,  875,  815,  817,  875,
    1077       817,  875,  875,  875,  817,  609,  875,  609,  875,  875,
    1078       875,  609,  836,  875,  836,  875,  875,  875,  836,  671,
    1079       875,  671,  875,  875,  875,  671,  675,  875,  675,  875,
    1080       875,  875,  675,   85,  875,   85,  875,  875,  875,   85,
    1081       841,  875,  841,  875,  875,  875,  841,  139,  875,  139,
    1082       875,  875,  875,  139,  202,  875,  202,  875,  875,  875,
    1083       202,   11,  875,  875,  875,  875,  875,  875,  875,  875,
    1084       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1085 
    1086       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1087       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1088       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1089       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1090       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1091       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1092       875,  875,  875,  875,  875,  875
     796       71,   71,   71,   71,   71,   71,   71,   71,   71,   72,
     797       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     798       72,   72,   72,   72,   72,   71,   73,   71,   71,   72,
     799       74,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     800       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     801       72,   72,   72,   72,   72,   71,   71,   71,   71,   76,
     802       76,   79,   79,  123,  124,   90,  141,   79,   79,   87,
     803       76,   76,   80,   81,   82,   82,   82,   80,   82,   81,
     804
     805       83,   83,   83,   82,   91,   93,   87,  142,  146,   98,
     806       95,   99,   99,   99,   99,   99,   99,  252,  887,   94,
     807      100,   85,   96,   97,   85,  101,  161,  118,  143,   77,
     808       77,   77,   77,  144,  147,  102,  103,   87,  104,  104,
     809      104,  104,  105,  105,  119,   87,  120,  121,  148,  263,
     810      149,  264,  254,  260,  183,  106,  195,   87,  159,  107,
     811      160,  150,  151,  152,   87,  108,  109,  153,  154,  162,
     812      155,  110,   87,  156,  157,  145,  163,  106,   87,  182,
     813       87,  158,  164,  111,  206,   87,  263,   87,  264,   87,
     814       87,  108,  194,   87,  109,  103,  250,  112,  112,  112,
     815
     816      112,  112,  112,   87,  169,  177,  170,  196,  193,   87,
     817      207,  180,  165,  230,  106,  171,  166,  181,  113,  178,
     818      251,  167,   87,  258,  114,  168,  179,  172,   87,  263,
     819      115,  264,  248,   87,   87,  173,  106,  174,  249,  231,
     820      175,  143,  116,  263,  176,  264,  144,  259,  317,  283,
     821      114,  125,  280,  500,  249,  126,  127,   87,  128,  191,
     822      129,  130,  256,  131,  249,  132,   87,  265,  257,  184,
     823      185,  257,  248,   87,  133,  134,  135,  501,  188,  186,
     824      249,  263,  187,  264,  271,   87,  189,  265,  145,  256,
     825      305,  200,  201,  190,  257,  136,  200,  257,  137,  263,
     826
     827      887,  264,  192,  197,   81,   82,   82,   82,  197,   87,
     828      272,  198,  202,  202,  202,  202,  202,  202,   80,   81,
     829       82,   82,   82,   80,   87,  138,  139,  209,  210,  263,
     830      887,  264,  209,  282,  211,  255,  263,  267,  264,  211,
     831       82,   81,   82,   82,   82,   82,   87,  887,  212,  212,
     832      212,  212,   82,   81,   83,   83,   83,   82,  887,  211,
     833       99,   99,   99,   99,   99,   99,  242,  242,  242,  242,
     834      266,  263,  263,  264,  264,  213,  143,  263,  211,  264,
     835       87,  144,  375,  211,  211,   87,   87,  211,  211,   87,
     836       87,   87,  286,  241,  887,  211,   87,   87,  211,  243,
     837
     838      211,  214,  211,  281,  215,  217,  278,  284,  285,  218,
     839      219,  307,  298,  279,  220,  221,   87,  222,   87,  223,
     840       87,   87,  887,   87,  309,  300,   87,   87,  224,  225,
     841      226,  103,  303,  105,  105,  105,  105,  105,  105,   87,
     842      299,   87,  301,  302,   87,  304,  308,  310,   87,  227,
     843      106,  245,  228,  245,  306,   87,  246,  246,  246,  246,
     844      246,  246,   87,  313,   87,  315,  244,   87,   87,  311,
     845      314,   87,  106,   87,   87,   87,  323,   87,   87,  322,
     846      229,  233,  233,  233,  233,  233,  233,  312,  333,  247,
     847      319,  316,  328,  320,  318,   87,   87,  234,  235,  236,
     848
     849      321,  237,  236,   87,  324,   87,  325,  143,  335,  360,
     850      331,  361,   87,   87,  238,  337,  326,  327,   87,  236,
     851      235,  236,   87,  329,  237,  332,  236,  287,  288,  289,
     852      336,  290,  291,  334,   87,  292,   87,  293,  407,  360,
     853      330,  361,  294,  295,  296,   87,  297,  339,  360,  343,
     854      361,   87,  200,  201,  338,  340,  346,  200,  341,   87,
     855      342,  197,   81,   82,   82,   82,  197,  200,  201,  198,
     856      378,  361,  200,  202,  202,  202,  202,  202,  202,  344,
     857      201,  360,  347,  361,  344,  360,  345,  361,  202,  202,
     858      202,  202,  202,  202,  209,  210,  378,  143,  361,  209,
     859
     860      202,  202,  202,  202,  202,  202,  352,  352,  352,  352,
     861      360,   87,  361,  362,  360,  360,  361,  361,  360,  363,
     862      361,  360,  360,  361,  361,  369,  369,  370,  369,  370,
     863      435,   87,  371,  371,  371,  371,  371,  371,  373,  353,
     864      373,   87,  263,  373,  264,  263,   87,  264,  369,  402,
     865       87,  369,  234,  235,  236,  406,  237,  236,  388,  401,
     866      373,   87,  373,   87,   87,  372,  390,  373,  105,  105,
     867      105,  105,  105,  105,  236,  235,  236,  404,   87,  237,
     868      405,  236,  403,  408,  388,  106,  246,  246,  246,  246,
     869      246,  246,  391,   87,   87,   87,   87,   87,   87,  419,
     870
     871       87,  255,  425,  432,   87,  420,  434,  106,  376,  376,
     872      376,  376,  376,  376,  381,  409,  413,  105,  105,  105,
     873      105,  105,  105,   87,  234,  245,  236,  245,  237,  236,
     874      246,  246,  246,  246,  246,  246,   87,  383,  410,  384,
     875       87,  377,   87,  385,  411,  412,  236,   87,  236,  386,
     876      255,  237,   87,  236,  112,  112,  112,  112,  112,  112,
     877      414,  387,  415,  417,  418,  384,   87,  416,   87,  385,
     878       87,   87,   87,   87,   87,   87,   87,   87,   87,  421,
     879      427,  426,  433,   87,  437,   87,   87,  260,  423,  424,
     880       87,   87,  436,  429,  428,  422,   87,  430,  431,  439,
     881
     882       87,  438,   87,   87,  446,  441,  440,  442,  443,   87,
     883       87,   87,   87,   87,   87,  445,   87,   87,   87,   87,
     884       87,  448,  447,   87,   87,  444,  449,  451,   87,  456,
     885       87,  450,   87,   87,   87,  452,  455,  454,   87,  453,
     886      457,  462,  460,  461,   87,   87,  458,  464,   87,  515,
     887      459,  463,  465,  466,  344,  201,  201,   87,  887,  344,
     888      467,  345,  199,  211,  211,  211,  211,  352,  352,  352,
     889      352,  360,  360,  361,  361,  371,  371,  371,  371,  371,
     890      371,  370,  569,  370,  492,  492,  371,  371,  371,  371,
     891      371,  371,  887,   87,  493,  494,  477,  488,  488,  488,
     892
     893      488,  488,  488,  233,  233,  233,  233,  233,  233,  516,
     894      492,  492,   87,  234,   87,  236,   87,  237,  236,  242,
     895      242,  242,  242,  105,  105,  495,  381,  517,   87,   87,
     896      489,  496,   87,  518,   87,  236,  374,  236,  519,  520,
     897      237,  521,  236,  376,  376,  376,  376,  376,  376,  383,
     898       87,  384,  375,  496,   87,  385,  522,  496,  497,  887,
     899      497,  386,   87,  498,  498,  498,  498,  498,  498,   87,
     900      525,  495,  526,  387,   87,  524,  377,  384,  523,  496,
     901       87,  385,  383,   87,  384,   87,   87,  527,  385,   87,
     902       87,  532,   87,   87,  502,   87,  499,   87,  535,  528,
     903
     904      529,  537,  530,  531,  533,   87,  387,   87,   87,  541,
     905      384,  534,  538,   87,  385,   87,  536,   87,   87,   87,
     906      539,  540,   87,   87,  546,   87,   87,   87,  544,  542,
     907       87,  548,   87,   87,  547,  543,   87,   87,  549,   87,
     908      545,   87,  552,   87,   87,  550,  556,  554,  551,   87,
     909      559,   87,  553,  555,   87,   87,  557,   87,   87,  558,
     910       87,   87,   87,  564,  560,  567,  563,  568,   87,  561,
     911      566,  562,   87,  565,   87,   87,  571,   87,   87,  573,
     912      627,  201,  492,  570,  576,  574,  572,  577,  211,  211,
     913      211,  211,  493,   87,  575,  488,  488,  488,  488,  488,
     914
     915      488,  376,  376,  376,  376,  376,  376,   87,  492,   87,
     916      618,  234,  595,  236,  595,  237,  236,  596,  596,  596,
     917      596,  596,  596,  492,   87,  599,  492,  621,  489,   87,
     918       87,  623,   87,  236,  490,  236,  598,  619,  237,   87,
     919      236,  498,  498,  498,  498,  498,  498,  620,   87,  492,
     920      597,  599,  492,  600,  600,  600,  600,  600,  600,   87,
     921      631,  622,   87,  887,  625,  887,   87,  862,   87,  601,
     922      497,  602,  497,  603,  602,  498,  498,  498,  498,  498,
     923      498,  624,  628,   87,   87,  630,  604,   87,   87,   87,
     924       87,  602,  633,  602,  626,  636,  603,  632,  602,  629,
     925
     926      634,   87,   87,  635,   87,   87,   87,  642,   87,   87,
     927      637,  641,   87,   87,  640,   87,   87,  643,  647,  639,
     928       87,   87,  887,   87,   87,   87,  638,   87,   87,  644,
     929      645,  646,  648,  650,   87,   87,   87,  649,   87,  653,
     930      651,   87,  652,   87,  654,  655,   87,   87,   87,   87,
     931      656,  657,   87,  660,  659,  661,  664,   87,  658,   87,
     932       87,  663,   87,   87,   87,  668,  665,  688,  688,  662,
     933      666,  701,  702,  887,  887,   87,  667,  488,  488,  488,
     934      488,  488,  488,  596,  596,  596,  596,  596,  596,  595,
     935      688,  595,  704,   87,  596,  596,  596,  596,  596,  596,
     936
     937      600,  600,  600,  600,  600,  600,  703,  688,   87,  887,
     938      594,  686,  686,  686,  686,  686,  686,  689,   87,  689,
     939       87,   87,  689,  699,   87,  708,   87,  601,  706,  602,
     940      688,  603,  602,  604,  707,   87,  700,  710,  709,  689,
     941       87,  689,   87,  705,  687,   87,  689,   87,   87,  602,
     942       87,  602,   87,  716,  603,  718,  602,  712,   87,   87,
     943       87,   87,  711,   87,  714,   87,   87,  713,   87,  717,
     944      715,   87,  721,  719,   87,  724,   87,   87,  722,  720,
     945      727,   87,   87,   87,  725,   87,  731,  723,   87,  732,
     946      726,   87,   87,  861,  728,  734,   87,  733,  730,   87,
     947
     948      735,   87,   87,  729,   87,   87,  751,  736,  686,  686,
     949      686,  686,  686,  686,  600,  600,  600,  600,  600,  600,
     950      750,   87,  755,   87,  601,  763,  602,  752,  603,  602,
     951      753,   87,   87,  764,   87,  756,  754,  757,   87,  758,
     952       87,  687,   87,   87,  759,  767,  602,  690,  602,  761,
     953       87,  603,  766,  602,   87,  760,   87,  762,   87,  765,
     954       87,  768,   87,  769,   87,   87,   87,   87,  770,   87,
     955       87,   87,   87,   87,  771,   87,  774,   87,  772,   87,
     956       87,  779,   87,   87,  795,   87,  780,  773,   87,   87,
     957      776,   87,  775,  803,  777,  796,  778,  686,  686,  686,
     958
     959      686,  686,  686,  793,   87,  794,  799,   87,  798,   87,
     960      801,   87,   87,   87,  797,  804,  805,  800,  806,   87,
     961       87,   87,  802,  807,   87,   87,   87,  808,   87,   87,
     962      743,   87,   87,   87,  809,  828,   87,   87,   87,  830,
     963      831,  833,   87,   87,   87,  834,   87,  836,  810,  811,
     964      826,  827,   87,  829,   87,  825,  832,  837,   87,   87,
     965       87,  838,  839,   87,   87,  835,   87,   87,   87,  851,
     966      850,  855,   87,  852,  840,   87,   87,   87,  853,  857,
     967      849,   87,   87,   87,  854,  858,  859,   87,   87,  856,
     968      860,   87,  863,  864,  865,   87,   87,  866,   87,  868,
     969
     970      867,  869,   87,   87,   87,  870,   87,   87,   87,  873,
     971       87,  875,   87,  876,   87,   87,   87,  874,   87,  872,
     972       87,   87,   87,  871,   87,  880,   87,   87,   87,  887,
     973      879,  881,  887,  848,  877,  878,  886,  887,  847,  884,
     974      887,  845,  882,  883,  887,  844,  885,   69,   69,   69,
     975       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
     976       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
     977       75,   75,   75,   78,   78,   78,   78,   78,   78,   78,
     978       78,   78,   78,   78,   78,   78,   86,  887,  843,   86,
     979      887,   86,   86,   86,   86,   86,  140,  842,   87,   87,
     980
     981      140,  140,  140,  140,  140,  140,  199,  199,  199,  199,
     982      199,  199,  199,  199,  199,  199,  199,  199,  199,  204,
     983       87,  887,  204,  824,  204,  204,  204,  204,  204,  208,
     984      887,  208,  208,  823,  208,  208,  208,  208,  208,  208,
     985      821,  208,  216,  887,  819,  216,  216,  216,  216,  216,
     986      216,  216,  216,  887,  216,  239,  239,  239,  239,  239,
     987      239,  239,  239,  239,  239,  239,  239,  239,  253,  253,
     988      817,  253,  887,  815,  813,  253,  269,   87,   87,  269,
     989       87,  269,  269,  269,  269,  269,  273,   87,  273,   87,
     990       87,   87,  273,  275,   87,  275,   87,   87,   87,  275,
     991
     992      348,   87,  348,  887,  792,  790,  348,  350,  887,  350,
     993      887,  787,  785,  350,  354,  783,  354,   87,   87,   87,
     994      354,  356,   87,  356,   87,   87,   87,  356,  358,  749,
     995      358,  746,  745,  743,  358,  365,  205,  365,  739,  738,
     996      670,  365,  367,   87,  367,   87,   87,   87,  367,  239,
     997      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
     998      239,  239,  380,   87,  380,  382,  382,   87,  382,  382,
     999      382,   87,  382,  253,  253,   87,  253,  392,   87,  392,
     1000       87,   87,   87,  392,  394,   87,  394,   87,   87,  697,
     1001      394,  396,  696,  396,  694,  692,  690,  396,  273,  598,
     1002
     1003      273,  398,  685,  398,  684,  682,  680,  398,  275,  678,
     1004      275,   86,  676,  674,   86,  672,   86,   86,   86,   86,
     1005       86,  199,  199,  199,  199,  199,  199,  199,  199,  199,
     1006      199,  199,  199,  199,  468,  468,  468,  468,  468,  468,
     1007      468,  468,  468,  468,  468,  468,  468,  469,  670,  469,
     1008       87,   87,   87,  469,  471,   87,  471,   87,   87,   87,
     1009      471,  473,   87,  473,   87,   87,   87,  473,  348,  617,
     1010      348,  475,  615,  475,  613,  611,  609,  475,  350,  607,
     1011      350,  478,  502,  478,  605,  605,  594,  478,  354,  593,
     1012      354,  480,  591,  480,  483,  483,  589,  480,  356,  587,
     1013
     1014      356,  482,  585,  482,  583,  581,  579,  482,  358,   87,
     1015      358,  484,   87,  484,   87,   87,   87,  484,  365,   87,
     1016      365,  486,   87,  486,   87,  514,  512,  486,  367,  510,
     1017      367,  491,  508,  491,  506,  491,  504,  491,  380,  490,
     1018      380,  487,  380,  485,  380,  382,  382,  361,  382,  382,
     1019      382,  361,  382,  503,  483,  503,  481,  479,  476,  503,
     1020      505,  474,  505,  472,  470,   87,  505,  507,   87,  507,
     1021       87,  400,  399,  507,  392,  397,  392,  509,  395,  509,
     1022      393,  270,  265,  509,  394,  264,  394,  511,  389,  511,
     1023      389,  252,  379,  511,  396,  379,  396,  513,  240,  513,
     1024
     1025      374,  368,  366,  513,  398,  364,  398,   86,  360,  359,
     1026       86,  357,   86,   86,   86,   86,   86,  468,  468,  468,
     1027      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
     1028      578,  355,  578,  351,  349,  205,  578,  469,  201,  469,
     1029      580,   87,  580,  277,  276,  274,  580,  471,  270,  471,
     1030      582,  265,  582,  268,  265,  263,  582,  473,  262,  473,
     1031      584,  261,  584,  240,  232,   85,  584,  475,   85,  475,
     1032      586,   87,  586,  205,  203,   85,  586,  478,  122,  478,
     1033      588,  117,  588,   87,  887,   70,  588,  480,   70,  480,
     1034      482,  887,  482,  887,  887,  887,  482,  590,  887,  590,
     1035
     1036      887,  887,  887,  590,  484,  887,  484,  592,  887,  592,
     1037      887,  887,  887,  592,  486,  887,  486,  491,  887,  491,
     1038      887,  491,  887,  491,  382,  887,  382,  887,  887,  887,
     1039      382,  606,  887,  606,  887,  887,  887,  606,  503,  887,
     1040      503,  608,  887,  608,  887,  887,  887,  608,  505,  887,
     1041      505,  610,  887,  610,  887,  887,  887,  610,  507,  887,
     1042      507,  612,  887,  612,  887,  887,  887,  612,  509,  887,
     1043      509,  614,  887,  614,  887,  887,  887,  614,  511,  887,
     1044      511,  616,  887,  616,  887,  887,  887,  616,  513,  887,
     1045      513,   86,  887,  887,   86,  887,   86,   86,   86,   86,
     1046
     1047       86,  669,  669,  669,  669,  669,  669,  669,  669,  669,
     1048      669,  669,  669,  669,  671,  887,  671,  887,  887,  887,
     1049      671,  578,  887,  578,  673,  887,  673,  887,  887,  887,
     1050      673,  580,  887,  580,  675,  887,  675,  887,  887,  887,
     1051      675,  582,  887,  582,  677,  887,  677,  887,  887,  887,
     1052      677,  584,  887,  584,  679,  887,  679,  887,  887,  887,
     1053      679,  586,  887,  586,  681,  887,  681,  887,  887,  887,
     1054      681,  588,  887,  588,  683,  887,  683,  887,  887,  887,
     1055      683,  590,  887,  590,   86,  887,   86,  887,  887,  887,
     1056       86,  592,  887,  592,  491,  887,  491,  887,  887,  887,
     1057
     1058      491,  691,  887,  691,  887,  887,  887,  691,  606,  887,
     1059      606,  693,  887,  693,  887,  887,  887,  693,  608,  887,
     1060      608,  695,  887,  695,  887,  887,  887,  695,  610,  887,
     1061      610,  140,  887,  140,  887,  887,  887,  140,  612,  887,
     1062      612,  698,  887,  698,  614,  887,  614,   86,  887,  887,
     1063       86,  887,   86,   86,   86,   86,   86,  616,  887,  616,
     1064      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
     1065      669,  669,  669,  737,  887,  737,  887,  887,  887,  737,
     1066      671,  887,  671,  204,  887,  204,  887,  887,  887,  204,
     1067      673,  887,  673,  740,  887,  740,  675,  887,  675,  204,
     1068
     1069      887,  887,  204,  887,  204,  204,  204,  204,  204,  677,
     1070      887,  677,  741,  887,  741,  679,  887,  679,  681,  887,
     1071      681,  742,  887,  742,  683,  887,  683,   86,  887,   86,
     1072      744,  887,  744,  887,  887,  887,  744,  691,  887,  691,
     1073      269,  887,  269,  887,  887,  887,  269,  693,  887,  693,
     1074      747,  887,  747,  695,  887,  695,  140,  887,  140,  748,
     1075      887,  748,  887,  887,  887,  748,   86,  887,  887,   86,
     1076      887,   86,   86,   86,   86,   86,  781,  887,  781,  737,
     1077      887,  737,  204,  887,  204,  782,  887,  782,  887,  887,
     1078      887,  782,  784,  887,  784,  887,  887,  887,  784,  786,
     1079
     1080      887,  786,  887,  887,  887,  786,  788,  887,  788,  789,
     1081      887,  789,  887,  887,  887,  789,  791,  887,  791,  887,
     1082      887,  887,  791,  812,  887,  812,  887,  887,  887,  812,
     1083      814,  887,  814,  887,  887,  887,  814,  816,  887,  816,
     1084      887,  887,  887,  816,  818,  887,  818,  887,  887,  887,
     1085      818,  820,  887,  820,  887,  887,  887,  820,  822,  887,
     1086      822,  887,  887,  887,  822,  616,  887,  616,  887,  887,
     1087      887,  616,  841,  887,  841,  887,  887,  887,  841,  677,
     1088      887,  677,  887,  887,  887,  677,  681,  887,  681,  887,
     1089      887,  887,  681,   86,  887,   86,  887,  887,  887,   86,
     1090
     1091      846,  887,  846,  887,  887,  887,  846,  140,  887,  140,
     1092      887,  887,  887,  140,  204,  887,  204,  887,  887,  887,
     1093      204,   11,  887,  887,  887,  887,  887,  887,  887,  887,
     1094      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1095      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1096      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1097      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1098      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1099      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1100      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1101
     1102      887,  887,  887,  887,  887,  887,  887
    10931103    } ;
    10941104
    1095 static yyconst flex_int16_t yy_chk[2867] =
     1105static yyconst flex_int16_t yy_chk[2908] =
    10961106    {   0,
    10971107        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11031113        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    11041114        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1105         1,    1,    1,    1,    2,   16,   24,   16,   24,    2,
    1106        19,   19,    2,    5,    5,    5,    5,    5,    5,    5,
     1115        1,    1,    1,    1,    1,    2,   16,   24,   16,   24,
     1116        2,   19,   19,    2,    5,    5,    5,    5,    5,    5,
    11071117
    11081118        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
     
    11131123        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11141124        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    1115         5,    5,    5,    5,    5,    5,    5,    7,    8,    9,
    1116        10,   37,   37,   20,   39,    9,   10,  874,    7,    8,
    1117        13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
    1118 
    1119        15,   15,   20,   25,   39,   42,   53,   28,   27,   28,
    1120        28,   28,   28,   28,   28,  108,  114,   25,   29,   25,
    1121        27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
    1122        40,   42,   48,   29,   30,   40,   30,   30,   30,   30,
    1123        30,   30,   35,   61,   35,   35,   44,  869,   44,  108,
    1124       114,  868,   48,   30,   63,   61,   30,   56,   47,   45,
    1125        45,   45,   30,   30,   45,   45,   56,   45,   30,   55,
    1126        45,   45,   49,   40,   30,   45,   40,   49,   45,   47,
    1127        30,   47,   72,  125,   49,  125,   51,   55,   30,   86,
    1128        49,   30,   31,   55,   31,   31,   31,   31,   31,   31,
    1129 
    1130        50,   51,  866,   51,   63,  153,   54,   58,   72,   50,
    1131        60,   31,   51,   50,   31,   86,   54,   57,   50,   58,
    1132        31,  153,   50,   54,  141,  156,   31,   58,   60,   57,
    1133        57,   59,   31,  126,   58,  126,   59,  156,   31,   57,
    1134        52,  865,   57,   67,   67,   52,   31,   38,   67,   59,
    1135       141,   38,   38,   52,   38,   52,   38,   38,   52,   38,
    1136       107,   38,   52,  113,   67,   67,   67,   67,   67,   67,
    1137        38,   38,   38,  128,   59,  128,  152,   59,   66,   66,
    1138        66,   66,   66,   66,  107,  152,   66,  113,  863,  862,
    1139        38,   59,  165,   38,   79,   79,   79,   79,   79,   79,
    1140 
    1141        81,   81,   81,   81,   81,   81,   82,   82,   82,   82,
    1142        82,   82,  131,  165,  131,  103,  103,  103,  103,  106,
    1143        38,   38,   76,   76,  856,  106,  112,   76,  168,   76,
    1144       110,  133,  112,  133,   76,  102,  102,  102,  102,  102,
    1145       102,  130,  103,   76,   76,   76,   76,  103,  110,  168,
    1146       109,  106,  129,  130,   76,  130,  110,  104,  112,  104,
    1147       104,  104,  104,  104,  104,  149,  129,  102,  129,   76,
    1148       103,  136,   76,  136,  158,  115,  104,   76,   76,  109,
    1149       149,   76,   76,  155,  109,  132,  132,  149,  132,   76,
    1150       158,  104,   76,  115,   76,   76,   76,  104,   76,   84,
    1151 
    1152       138,  115,  138,   84,   84,  155,  166,  109,   84,   84,
    1153       105,   84,  105,   84,  150,  105,  105,  105,  105,  105,
    1154       105,  151,   84,   84,   84,  134,  134,  134,  144,  166,
    1155       154,  157,  150,  144,  159,  167,  157,  157,  157,  151,
    1156       157,  157,   84,  161,  157,   84,  157,  105,  154,  160,
    1157       163,  157,  157,  157,  162,  157,  159,  855,  160,  162,
    1158       164,  169,  167,  170,  161,  161,  169,  163,  171,  172,
    1159       164,  144,  162,   84,   98,   98,   98,   98,   98,   98,
    1160       173,  174,  175,  171,  169,  170,  172,  179,  176,  185,
    1161        98,   98,  178,   98,   98,  180,  189,  182,  173,  187,
    1162 
    1163       180,  174,  185,  186,  179,  188,   98,  178,  181,  175,
    1164       176,   98,   98,   98,  178,  182,   98,  183,   98,  181,
    1165       184,  191,  190,  186,  188,  184,  187,  528,  183,  181,
    1166       181,  192,  207,  207,  191,  190,  191,  207,  232,  189,
    1167       184,  203,  189,  190,  192,  183,  195,  195,  195,  195,
    1168       195,  195,  196,  196,  195,  528,  854,  196,  198,  198,
    1169       216,  232,  216,  198,  200,  200,  217,  203,  217,  200,
    1170       218,  200,  218,  196,  196,  196,  196,  196,  196,  198,
    1171       198,  198,  198,  198,  198,  200,  200,  200,  200,  200,
    1172       200,  210,  210,  210,  210,  219,  220,  221,  282,  221,
    1173 
    1174       222,  222,  223,  222,  223,  224,  224,  224,  220,  219,
    1175       220,  219,  226,  227,  226,  227,  234,  235,  282,  233,
    1176       234,  233,  284,  210,  233,  233,  233,  233,  233,  233,
    1177       241,  239,  239,  277,  239,  239,  264,  234,  264,  234,
    1178       235,  265,  284,  265,  234,  242,  242,  242,  242,  242,
    1179       242,  277,  239,  239,  239,  246,  233,  239,  278,  239,
    1180       276,  280,  242,  279,  241,  243,  243,  243,  243,  243,
    1181       243,  254,  268,  276,  853,  281,  278,  242,  280,  279,
    1182       281,  246,  288,  242,  244,  244,  244,  244,  244,  244,
    1183       253,  253,  253,  253,  253,  253,  251,  254,  268,  287,
    1184 
    1185       244,  283,  286,  244,  244,  245,  283,  245,  288,  295,
    1186       245,  245,  245,  245,  245,  245,  244,  287,  251,  849,
    1187       251,  244,  253,  244,  251,  286,  244,  295,  244,  289,
    1188       251,  258,  258,  258,  258,  258,  258,  285,  290,  292,
    1189       291,  294,  251,  293,  289,  291,  251,  297,  292,  301,
    1190       251,  299,  285,  303,  290,  290,  293,  298,  285,  285,
    1191       299,  302,  298,  258,  300,  297,  307,  304,  294,  301,
    1192       306,  300,  304,  305,  303,  303,  306,  308,  305,  302,
    1193       310,  309,  311,  312,  313,  307,  308,  309,  314,  313,
    1194       315,  311,  316,  314,  318,  315,  310,  317,  312,  320,
    1195 
    1196       322,  321,  323,  324,  326,  325,  328,  318,  327,  329,
    1197       320,  316,  315,  322,  330,  317,  321,  327,  333,  331,
    1198       334,  326,  335,  337,  323,  325,  324,  333,  328,  336,
    1199       338,  337,  329,  339,  381,  338,  330,  331,  340,  340,
    1200       335,  341,  336,  340,  358,  340,  358,  341,  339,  348,
    1201       348,  348,  348,  349,  349,  349,  349,  359,  381,  359,
    1202       397,  846,  402,  334,  366,  366,  366,  366,  366,  366,
    1203       368,  397,  368,  402,  404,  368,  368,  368,  368,  368,
    1204       368,  348,  367,  367,  367,  367,  367,  367,  370,  370,
    1205       370,  370,  370,  370,  400,  398,  404,  435,  367,  376,
    1206 
    1207       843,  367,  367,  371,  371,  371,  371,  371,  371,  376,
    1208       379,  398,  377,  400,  367,  378,  379,  435,  383,  367,
    1209       370,  367,  377,  412,  367,  376,  367,  372,  372,  372,
    1210       372,  372,  372,  399,  382,  371,  383,  378,  377,  378,
    1211       415,  412,  379,  378,  383,  380,  415,  380,  399,  378,
    1212       380,  380,  380,  380,  380,  380,  382,  401,  382,  372,
    1213       407,  378,  382,  403,  405,  378,  401,  408,  382,  378,
    1214       406,  411,  403,  405,  409,  410,  407,  416,  418,  414,
    1215       382,  413,  380,  406,  382,  417,  413,  409,  382,  408,
    1216       419,  410,  410,  411,  414,  421,  417,  418,  416,  423,
    1217 
    1218       425,  414,  426,  427,  428,  419,  431,  429,  430,  421,
    1219       433,  423,  427,  429,  436,  431,  427,  437,  438,  439,
    1220       441,  425,  440,  430,  426,  433,  443,  428,  445,  441,
    1221       447,  446,  437,  448,  439,  449,  436,  450,  451,  455,
    1222       438,  452,  440,  443,  457,  633,  450,  460,  453,  458,
    1223       447,  445,  446,  448,  452,  453,  451,  449,  454,  456,
    1224       458,  457,  461,  633,  455,  454,  462,  456,  515,  460,
    1225       488,  461,  462,  471,  471,  471,  471,  456,  482,  482,
    1226       482,  482,  482,  482,  484,  484,  484,  484,  484,  484,
    1227       515,  513,  485,  487,  482,  489,  488,  482,  482,  486,
    1228 
    1229       510,  486,  485,  487,  486,  486,  486,  486,  486,  486,
    1230       482,  513,  509,  510,  520,  482,  484,  482,  485,  487,
    1231       482,  489,  482,  491,  491,  491,  491,  491,  491,  509,
    1232       512,  514,  519,  516,  520,  519,  486,  492,  492,  492,
    1233       492,  492,  492,  517,  514,  512,  516,  521,  517,  525,
    1234       518,  522,  523,  492,  525,  842,  492,  492,  493,  841,
    1235       493,  518,  521,  493,  493,  493,  493,  493,  493,  492,
    1236       522,  524,  526,  523,  492,  527,  492,  529,  530,  492,
    1237       524,  492,  531,  526,  532,  533,  529,  536,  527,  535,
    1238       533,  538,  539,  532,  542,  535,  536,  540,  541,  531,
    1239 
    1240       530,  544,  545,  542,  546,  547,  549,  554,  556,  539,
    1241       544,  561,  540,  541,  555,  552,  546,  538,  550,  545,
    1242       547,  549,  553,  550,  552,  556,  558,  555,  559,  554,
    1243       560,  553,  562,  561,  558,  563,  564,  560,  559,  565,
    1244       567,  563,  568,  613,  562,  564,  612,  617,  594,  565,
    1245       596,  698,  613,  612,  617,  568,  698,  567,  587,  587,
    1246       587,  587,  587,  587,  588,  588,  588,  588,  588,  588,
    1247       590,  594,  590,  596,  614,  590,  590,  590,  590,  590,
    1248       590,  593,  593,  593,  593,  593,  593,  614,  615,  616,
    1249       587,  589,  589,  589,  589,  589,  589,  595,  611,  622,
    1250 
    1251       618,  595,  619,  611,  621,  615,  620,  589,  618,  620,
    1252       589,  589,  616,  593,  623,  624,  611,  621,  595,  619,
    1253       595,  622,  625,  589,  626,  595,  628,  629,  589,  623,
    1254       589,  627,  630,  589,  627,  589,  631,  624,  634,  625,
    1255       632,  635,  637,  628,  638,  644,  626,  630,  639,  632,
    1256       635,  645,  640,  650,  629,  647,  631,  696,  693,  651,
    1257       634,  640,  650,  659,  637,  644,  651,  638,  658,  662,
    1258       639,  661,  647,  659,  697,  840,  839,  658,  645,  693,
    1259       661,  697,  699,  696,  662,  680,  680,  680,  680,  680,
    1260       680,  684,  684,  684,  684,  684,  684,  694,  702,  705,
    1261 
    1262       700,  680,  699,  700,  680,  680,  701,  694,  704,  701,
    1263       706,  708,  705,  709,  704,  707,  702,  680,  707,  706,
    1264       712,  711,  680,  684,  680,  710,  714,  680,  710,  680,
    1265       711,  713,  708,  718,  713,  715,  716,  717,  720,  714,
    1266       723,  709,  726,  715,  727,  712,  716,  720,  728,  730,
    1267       717,  731,  752,  751,  718,  753,  749,  730,  751,  754,
    1268       731,  750,  726,  723,  755,  753,  727,  752,  756,  728,
    1269       738,  738,  738,  738,  738,  738,  749,  757,  750,  758,
    1270       757,  755,  754,  759,  761,  763,  764,  761,  763,  767,
    1271       768,  773,  758,  764,  756,  765,  766,  788,  765,  766,
    1272 
    1273       790,  791,  738,  792,  767,  793,  792,  797,  794,  795,
    1274       759,  794,  795,  768,  773,  798,  801,  799,  805,  791,
    1275       799,  790,  821,  802,  788,  797,  802,  793,  803,  806,
    1276       804,  803,  824,  823,  805,  822,  823,  825,  801,  804,
    1277       798,  824,  822,  821,  826,  806,  827,  826,  830,  833,
    1278       834,  830,  833,  835,  847,  825,  844,  847,  848,  834,
    1279       857,  845,  835,  827,  850,  844,  845,  850,  848,  851,
    1280       852,  858,  851,  852,  859,  860,  861,  859,  864,  861,
    1281       857,  867,  870,  871,  873,  860,  858,  838,  872,  837,
    1282       836,  870,  832,  831,  873,  829,  828,  820,  819,  818,
    1283 
    1284       864,  817,  867,  816,  815,  871,  872,  876,  876,  876,
    1285       876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
    1286       877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
    1287       877,  877,  877,  878,  878,  878,  878,  878,  878,  878,
    1288       878,  878,  878,  878,  878,  878,  879,  814,  813,  879,
    1289       812,  879,  879,  879,  879,  879,  880,  811,  810,  809,
    1290       880,  880,  880,  880,  880,  880,  881,  881,  881,  881,
    1291       881,  881,  881,  881,  881,  881,  881,  881,  881,  882,
    1292       808,  807,  882,  800,  882,  882,  882,  882,  882,  883,
    1293       796,  883,  883,  789,  883,  883,  883,  883,  883,  883,
    1294 
    1295       787,  883,  884,  786,  785,  884,  884,  884,  884,  884,
    1296       884,  884,  884,  784,  884,  885,  885,  885,  885,  885,
    1297       885,  885,  885,  885,  885,  885,  885,  885,  886,  886,
    1298       783,  886,  782,  781,  780,  886,  887,  779,  778,  887,
    1299       777,  887,  887,  887,  887,  887,  888,  776,  888,  775,
    1300       774,  772,  888,  889,  771,  889,  770,  769,  762,  889,
    1301       890,  760,  890,  748,  747,  746,  890,  891,  745,  891,
    1302       744,  743,  742,  891,  892,  741,  892,  740,  737,  736,
    1303       892,  893,  735,  893,  729,  725,  724,  893,  894,  722,
    1304       894,  721,  719,  703,  894,  895,  695,  895,  692,  687,
    1305 
    1306       685,  895,  896,  681,  896,  671,  667,  665,  896,  897,
    1307       897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
    1308       897,  897,  898,  663,  898,  899,  899,  660,  899,  899,
    1309       899,  657,  899,  900,  900,  656,  900,  901,  655,  901,
    1310       654,  653,  652,  901,  902,  649,  902,  648,  646,  643,
    1311       902,  903,  642,  903,  641,  636,  609,  903,  904,  605,
    1312       904,  905,  603,  905,  601,  599,  597,  905,  906,  591,
    1313       906,  907,  585,  583,  907,  581,  907,  907,  907,  907,
    1314       907,  908,  908,  908,  908,  908,  908,  908,  908,  908,
    1315       908,  908,  908,  908,  909,  909,  909,  909,  909,  909,
    1316 
    1317       909,  909,  909,  909,  909,  909,  909,  910,  579,  910,
    1318       577,  575,  573,  910,  911,  571,  911,  570,  569,  566,
    1319       911,  912,  557,  912,  551,  548,  543,  912,  913,  537,
    1320       913,  914,  534,  914,  511,  507,  505,  914,  915,  503,
    1321       915,  916,  501,  916,  499,  497,  496,  916,  917,  495,
    1322       917,  918,  494,  918,  483,  480,  478,  918,  919,  477,
    1323       919,  920,  476,  920,  474,  472,  469,  920,  921,  467,
    1324       921,  922,  465,  922,  463,  459,  444,  922,  923,  442,
    1325       923,  924,  434,  924,  432,  424,  422,  924,  925,  420,
    1326       925,  926,  394,  926,  392,  926,  390,  926,  927,  388,
    1327 
    1328       927,  387,  927,  386,  927,  928,  928,  373,  928,  928,
    1329       928,  363,  928,  929,  361,  929,  360,  356,  354,  929,
    1330       930,  352,  930,  350,  346,  344,  930,  931,  343,  931,
    1331       342,  332,  319,  931,  932,  296,  932,  933,  275,  933,
    1332       273,  271,  270,  933,  934,  269,  934,  935,  267,  935,
    1333       266,  261,  257,  935,  936,  256,  936,  937,  252,  937,
    1334       249,  248,  237,  937,  938,  236,  938,  939,  229,  228,
    1335       939,  225,  939,  939,  939,  939,  939,  940,  940,  940,
    1336       940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
    1337       941,  215,  941,  213,  212,  211,  941,  942,  205,  942,
    1338 
    1339       943,  204,  943,  202,  197,  177,  943,  944,  148,  944,
    1340       945,  146,  945,  145,  139,  137,  945,  946,  135,  946,
    1341       947,  127,  947,  124,  123,  119,  947,  948,  100,  948,
    1342       949,   97,  949,   94,   92,   85,  949,  950,   71,  950,
    1343       951,   69,  951,   65,   36,   33,  951,  952,   18,  952,
    1344       953,   11,  953,    4,    3,    0,  953,  954,    0,  954,
    1345         0,    0,    0,  954,  955,    0,  955,  956,    0,  956,
    1346         0,    0,    0,  956,  957,    0,  957,  958,    0,  958,
    1347         0,  958,    0,  958,  959,    0,  959,    0,    0,    0,
    1348       959,  960,    0,  960,    0,    0,    0,  960,  961,    0,
    1349 
    1350       961,  962,    0,  962,    0,    0,    0,  962,  963,    0,
    1351       963,  964,    0,  964,    0,    0,    0,  964,  965,    0,
    1352       965,  966,    0,  966,    0,    0,    0,  966,  967,    0,
    1353       967,  968,    0,  968,    0,    0,    0,  968,  969,    0,
    1354       969,  970,    0,  970,    0,    0,    0,  970,  971,    0,
    1355       971,  972,    0,    0,  972,    0,  972,  972,  972,  972,
    1356       972,  973,  973,  973,  973,  973,  973,  973,  973,  973,
    1357       973,  973,  973,  973,  974,    0,  974,    0,    0,    0,
    1358       974,  975,    0,  975,  976,    0,  976,    0,    0,    0,
    1359       976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
    1360 
    1361       978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
    1362       980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
    1363       982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
    1364       984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
     1125        5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
     1126        8,    9,   10,   37,   37,   20,   39,    9,   10,  886,
     1127        7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
     1128
     1129       15,   15,   15,   15,   20,   25,   48,   39,   42,   28,
     1130       27,   28,   28,   28,   28,   28,   28,  109,  115,   25,
     1131       29,   25,   27,   27,   27,   29,   48,   35,   40,    7,
     1132        8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
     1133       30,   30,   30,   30,   35,   57,   35,   35,   44,  126,
     1134       44,  126,  109,  115,   57,   30,   64,   56,   47,   30,
     1135       47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
     1136       45,   30,   40,   45,   45,   40,   49,   30,   45,   56,
     1137       62,   45,   49,   30,   73,  885,  127,   53,  127,   51,
     1138       61,   30,   62,   55,   30,   31,  108,   31,   31,   31,
     1139
     1140       31,   31,   31,   50,   51,   53,   51,   64,   61,   54,
     1141       73,   55,   50,   87,   31,   51,   50,   55,   31,   54,
     1142      108,   50,   52,  114,   31,   50,   54,   52,  175,  129,
     1143       31,  129,  107,  154,  151,   52,   31,   52,  107,   87,
     1144       52,   60,   31,  132,   52,  132,   60,  114,  175,  154,
     1145       31,   38,  151,  385,  111,   38,   38,   58,   38,   60,
     1146       38,   38,  113,   38,  107,   38,   59,  130,  113,   58,
     1147       58,  116,  111,  164,   38,   38,   38,  385,   59,   58,
     1148      111,  130,   58,  130,  142,   60,   59,  131,   60,  116,
     1149      164,   68,   68,   59,  113,   38,   68,  116,   38,  131,
     1150
     1151      110,  131,   60,   67,   67,   67,   67,   67,   67,  877,
     1152      142,   67,   68,   68,   68,   68,   68,   68,   80,   80,
     1153       80,   80,   80,   80,  153,   38,   38,   77,   77,  134,
     1154      110,  134,   77,  153,   77,  110,  135,  135,  135,   77,
     1155       82,   82,   82,   82,   82,   82,  876,  243,   77,   77,
     1156       77,   77,   83,   83,   83,   83,   83,   83,  110,   77,
     1157      103,  103,  103,  103,  103,  103,  104,  104,  104,  104,
     1158      133,  133,  137,  133,  137,   77,  145,  139,   77,  139,
     1159      157,  145,  243,   77,   77,  152,  156,   77,   77,  155,
     1160      166,  150,  157,  103,  104,   77,  159,  168,   77,  104,
     1161
     1162       77,   77,   77,  152,   77,   85,  150,  155,  156,   85,
     1163       85,  166,  159,  150,   85,   85,  161,   85,  160,   85,
     1164      145,  162,  104,  167,  168,  161,  169,  163,   85,   85,
     1165       85,  105,  163,  105,  105,  105,  105,  105,  105,  873,
     1166      160,  171,  162,  162,  165,  163,  167,  169,  173,   85,
     1167      105,  106,   85,  106,  165,  172,  106,  106,  106,  106,
     1168      106,  106,  180,  171,  170,  173,  105,  176,  177,  170,
     1169      172,  181,  105,  174,  184,  187,  181,  182,  179,  180,
     1170       85,   99,   99,   99,   99,   99,   99,  170,  187,  106,
     1171      177,  174,  184,  179,  176,  183,  190,   99,   99,   99,
     1172
     1173      179,   99,   99,  189,  182,  186,  183,  191,  189,  218,
     1174      186,  218,  185,  188,   99,  190,  183,  183,  284,   99,
     1175       99,   99,  158,  185,   99,  186,   99,  158,  158,  158,
     1176      189,  158,  158,  188,  192,  158,  194,  158,  284,  219,
     1177      185,  219,  158,  158,  158,  193,  158,  192,  220,  194,
     1178      220,  191,  198,  198,  191,  192,  205,  198,  193,  872,
     1179      193,  197,  197,  197,  197,  197,  197,  200,  200,  197,
     1180      248,  221,  200,  198,  198,  198,  198,  198,  198,  202,
     1181      202,  223,  205,  223,  202,  221,  202,  221,  200,  200,
     1182      200,  200,  200,  200,  209,  209,  248,  338,  222,  209,
     1183
     1184      202,  202,  202,  202,  202,  202,  212,  212,  212,  212,
     1185      222,  309,  222,  224,  224,  225,  224,  225,  226,  226,
     1186      226,  228,  229,  228,  229,  234,  234,  235,  236,  235,
     1187      309,  279,  235,  235,  235,  235,  235,  235,  237,  212,
     1188      237,  338,  266,  237,  266,  267,  278,  267,  234,  279,
     1189      283,  236,  241,  241,  241,  283,  241,  241,  256,  278,
     1190      237,  281,  237,  282,  280,  235,  270,  237,  244,  244,
     1191      244,  244,  244,  244,  241,  241,  241,  281,  285,  241,
     1192      282,  241,  280,  285,  256,  244,  245,  245,  245,  245,
     1193      245,  245,  270,  288,  293,  286,  294,  300,  306,  293,
     1194
     1195      308,  244,  300,  306,  870,  294,  308,  244,  246,  246,
     1196      246,  246,  246,  246,  253,  286,  288,  255,  255,  255,
     1197      255,  255,  255,  287,  246,  247,  246,  247,  246,  246,
     1198      247,  247,  247,  247,  247,  247,  290,  253,  287,  253,
     1199      869,  246,  289,  253,  287,  287,  246,  292,  246,  253,
     1200      255,  246,  291,  246,  260,  260,  260,  260,  260,  260,
     1201      289,  253,  290,  292,  292,  253,  295,  291,  296,  253,
     1202      297,  299,  301,  302,  303,  304,  305,  307,  311,  295,
     1203      302,  301,  307,  310,  311,  312,  319,  260,  297,  299,
     1204      313,  314,  310,  304,  303,  296,  318,  305,  305,  313,
     1205
     1206      315,  312,  316,  317,  319,  315,  314,  316,  317,  320,
     1207      322,  323,  324,  326,  325,  318,  327,  328,  331,  329,
     1208      330,  322,  320,  332,  334,  317,  323,  325,  333,  330,
     1209      335,  324,  337,  339,  340,  326,  329,  328,  401,  327,
     1210      331,  337,  334,  335,  341,  343,  332,  340,  342,  401,
     1211      333,  339,  341,  342,  344,  344,  345,  460,  862,  344,
     1212      343,  344,  345,  352,  352,  352,  352,  353,  353,  353,
     1213      353,  362,  363,  362,  363,  370,  370,  370,  370,  370,
     1214      370,  372,  460,  372,  380,  381,  372,  372,  372,  372,
     1215      372,  372,  861,  402,  380,  381,  352,  371,  371,  371,
     1216
     1217      371,  371,  371,  374,  374,  374,  374,  374,  374,  402,
     1218      380,  381,  403,  371,  404,  371,  860,  371,  371,  375,
     1219      375,  375,  375,  375,  375,  383,  382,  403,  406,  405,
     1220      371,  383,  407,  404,  408,  371,  374,  371,  405,  406,
     1221      371,  407,  371,  376,  376,  376,  376,  376,  376,  382,
     1222      412,  382,  375,  387,  411,  382,  408,  383,  384,  386,
     1223      384,  382,  410,  384,  384,  384,  384,  384,  384,  409,
     1224      411,  387,  412,  382,  413,  410,  376,  382,  409,  387,
     1225      415,  382,  386,  414,  386,  416,  417,  413,  386,  418,
     1226      421,  417,  419,  422,  386,  420,  384,  427,  419,  414,
     1227
     1228      414,  421,  415,  416,  418,  423,  386,  425,  429,  427,
     1229      386,  418,  422,  430,  386,  431,  420,  432,  433,  434,
     1230      423,  425,  435,  437,  433,  439,  440,  441,  431,  429,
     1231      442,  435,  443,  444,  434,  430,  449,  445,  437,  447,
     1232      432,  450,  441,  451,  454,  439,  445,  443,  440,  452,
     1233      450,  453,  442,  444,  455,  456,  447,  457,  458,  449,
     1234      459,  461,  463,  455,  451,  458,  454,  459,  462,  452,
     1235      457,  453,  466,  456,  464,  467,  462,  525,  859,  463,
     1236      525,  468,  491,  461,  467,  464,  462,  468,  477,  477,
     1237      477,  477,  491,  515,  466,  488,  488,  488,  488,  488,
     1238
     1239      488,  490,  490,  490,  490,  490,  490,  519,  491,  521,
     1240      515,  488,  492,  488,  492,  488,  488,  492,  492,  492,
     1241      492,  492,  492,  494,  516,  495,  493,  519,  488,  855,
     1242      851,  521,  518,  488,  490,  488,  493,  516,  488,  529,
     1243      488,  497,  497,  497,  497,  497,  497,  518,  520,  494,
     1244      492,  495,  493,  498,  498,  498,  498,  498,  498,  523,
     1245      529,  520,  526,  848,  523,  847,  528,  846,  522,  498,
     1246      499,  498,  499,  498,  498,  499,  499,  499,  499,  499,
     1247      499,  522,  526,  524,  527,  528,  498,  531,  530,  532,
     1248      533,  498,  531,  498,  524,  534,  498,  530,  498,  527,
     1249
     1250      532,  535,  537,  533,  536,  538,  539,  541,  542,  547,
     1251      535,  539,  544,  541,  538,  545,  546,  542,  547,  537,
     1252      550,  551,  845,  549,  534,  552,  536,  554,  560,  544,
     1253      545,  546,  549,  551,  555,  557,  558,  550,  561,  555,
     1254      552,  562,  554,  565,  557,  558,  564,  567,  566,  568,
     1255      560,  561,  575,  565,  564,  566,  569,  571,  562,  574,
     1256      572,  568,  569,  620,  619,  575,  571,  601,  601,  567,
     1257      572,  619,  620,  844,  843,  622,  574,  594,  594,  594,
     1258      594,  594,  594,  595,  595,  595,  595,  595,  595,  597,
     1259      601,  597,  622,  621,  597,  597,  597,  597,  597,  597,
     1260
     1261      600,  600,  600,  600,  600,  600,  621,  602,  626,  842,
     1262      594,  596,  596,  596,  596,  596,  596,  603,  618,  603,
     1263      623,  624,  603,  618,  628,  626,  625,  596,  624,  596,
     1264      602,  596,  596,  600,  625,  627,  618,  628,  627,  603,
     1265      629,  603,  630,  623,  596,  631,  603,  632,  633,  596,
     1266      634,  596,  635,  634,  596,  636,  596,  630,  637,  638,
     1267      640,  644,  629,  639,  632,  641,  642,  631,  645,  635,
     1268      633,  646,  639,  637,  650,  642,  651,  656,  640,  638,
     1269      646,  653,  657,  636,  644,  665,  656,  641,  664,  657,
     1270      645,  667,  668,  841,  650,  665,  700,  664,  653,  699,
     1271
     1272      667,  702,  705,  651,  714,  837,  700,  668,  686,  686,
     1273      686,  686,  686,  686,  690,  690,  690,  690,  690,  690,
     1274      699,  708,  705,  703,  686,  714,  686,  702,  686,  686,
     1275      703,  704,  706,  715,  707,  706,  704,  707,  710,  708,
     1276      712,  686,  711,  717,  710,  718,  686,  690,  686,  712,
     1277      720,  686,  717,  686,  713,  711,  716,  713,  719,  716,
     1278      721,  719,  715,  720,  722,  723,  724,  725,  721,  728,
     1279      731,  718,  732,  735,  722,  733,  725,  736,  723,  756,
     1280      757,  735,  836,  754,  756,  759,  736,  724,  755,  760,
     1281      731,  761,  728,  764,  732,  757,  733,  743,  743,  743,
     1282
     1283      743,  743,  743,  754,  758,  755,  760,  762,  759,  763,
     1284      762,  769,  766,  768,  758,  766,  768,  761,  769,  772,
     1285      770,  764,  763,  770,  771,  773,  778,  771,  793,  795,
     1286      743,  798,  797,  796,  772,  797,  799,  800,  802,  799,
     1287      800,  803,  804,  806,  807,  804,  810,  807,  773,  778,
     1288      795,  796,  809,  798,  808,  793,  802,  808,  811,  826,
     1289      830,  809,  810,  827,  829,  806,  828,  803,  831,  828,
     1290      827,  831,  832,  829,  811,  834,  835,  839,  830,  835,
     1291      826,  840,  838,  849,  830,  838,  839,  853,  850,  832,
     1292      840,  852,  849,  850,  852,  854,  856,  853,  857,  856,
     1293
     1294      854,  857,  858,  863,  864,  858,  865,  866,  867,  865,
     1295      868,  867,  871,  868,  874,  875,  878,  866,  879,  864,
     1296      880,  882,  881,  863,  883,  878,  884,  833,  825,  824,
     1297      875,  879,  823,  822,  871,  874,  884,  821,  820,  882,
     1298      819,  818,  880,  881,  817,  816,  883,  888,  888,  888,
     1299      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
     1300      889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
     1301      889,  889,  889,  890,  890,  890,  890,  890,  890,  890,
     1302      890,  890,  890,  890,  890,  890,  891,  815,  814,  891,
     1303      813,  891,  891,  891,  891,  891,  892,  812,  805,  801,
     1304
     1305      892,  892,  892,  892,  892,  892,  893,  893,  893,  893,
     1306      893,  893,  893,  893,  893,  893,  893,  893,  893,  894,
     1307      794,  792,  894,  791,  894,  894,  894,  894,  894,  895,
     1308      790,  895,  895,  789,  895,  895,  895,  895,  895,  895,
     1309      788,  895,  896,  787,  786,  896,  896,  896,  896,  896,
     1310      896,  896,  896,  785,  896,  897,  897,  897,  897,  897,
     1311      897,  897,  897,  897,  897,  897,  897,  897,  898,  898,
     1312      784,  898,  783,  782,  781,  898,  899,  780,  779,  899,
     1313      777,  899,  899,  899,  899,  899,  900,  776,  900,  775,
     1314      774,  767,  900,  901,  765,  901,  753,  752,  751,  901,
     1315
     1316      902,  750,  902,  749,  748,  747,  902,  903,  746,  903,
     1317      745,  742,  741,  903,  904,  740,  904,  734,  730,  729,
     1318      904,  905,  727,  905,  726,  709,  701,  905,  906,  698,
     1319      906,  693,  691,  687,  906,  907,  677,  907,  673,  671,
     1320      669,  907,  908,  666,  908,  663,  662,  661,  908,  909,
     1321      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
     1322      909,  909,  910,  660,  910,  911,  911,  659,  911,  911,
     1323      911,  658,  911,  912,  912,  655,  912,  913,  654,  913,
     1324      652,  649,  648,  913,  914,  647,  914,  643,  616,  612,
     1325      914,  915,  610,  915,  608,  606,  604,  915,  916,  598,
     1326
     1327      916,  917,  592,  917,  590,  588,  586,  917,  918,  584,
     1328      918,  919,  582,  580,  919,  578,  919,  919,  919,  919,
     1329      919,  920,  920,  920,  920,  920,  920,  920,  920,  920,
     1330      920,  920,  920,  920,  921,  921,  921,  921,  921,  921,
     1331      921,  921,  921,  921,  921,  921,  921,  922,  577,  922,
     1332      576,  573,  570,  922,  923,  563,  923,  559,  556,  553,
     1333      923,  924,  548,  924,  543,  540,  517,  924,  925,  513,
     1334      925,  926,  511,  926,  509,  507,  505,  926,  927,  503,
     1335      927,  928,  502,  928,  501,  500,  489,  928,  929,  486,
     1336      929,  930,  484,  930,  483,  482,  480,  930,  931,  478,
     1337
     1338      931,  932,  475,  932,  473,  471,  469,  932,  933,  465,
     1339      933,  934,  448,  934,  446,  438,  436,  934,  935,  428,
     1340      935,  936,  426,  936,  424,  398,  396,  936,  937,  394,
     1341      937,  938,  392,  938,  391,  938,  390,  938,  939,  377,
     1342      939,  367,  939,  365,  939,  940,  940,  364,  940,  940,
     1343      940,  360,  940,  941,  358,  941,  356,  354,  350,  941,
     1344      942,  348,  942,  347,  346,  336,  942,  943,  321,  943,
     1345      298,  277,  275,  943,  944,  273,  944,  945,  272,  945,
     1346      271,  269,  268,  945,  946,  263,  946,  947,  259,  947,
     1347      258,  254,  251,  947,  948,  250,  948,  949,  239,  949,
     1348
     1349      238,  231,  230,  949,  950,  227,  950,  951,  217,  215,
     1350      951,  214,  951,  951,  951,  951,  951,  952,  952,  952,
     1351      952,  952,  952,  952,  952,  952,  952,  952,  952,  952,
     1352      953,  213,  953,  207,  206,  204,  953,  954,  199,  954,
     1353      955,  178,  955,  149,  147,  146,  955,  956,  140,  956,
     1354      957,  138,  957,  136,  128,  125,  957,  958,  124,  958,
     1355      959,  120,  959,  101,   98,   95,  959,  960,   93,  960,
     1356      961,   86,  961,   72,   70,   66,  961,  962,   36,  962,
     1357      963,   33,  963,   18,   11,    4,  963,  964,    3,  964,
     1358      965,    0,  965,    0,    0,    0,  965,  966,    0,  966,
     1359
     1360        0,    0,    0,  966,  967,    0,  967,  968,    0,  968,
     1361        0,    0,    0,  968,  969,    0,  969,  970,    0,  970,
     1362        0,  970,    0,  970,  971,    0,  971,    0,    0,    0,
     1363      971,  972,    0,  972,    0,    0,    0,  972,  973,    0,
     1364      973,  974,    0,  974,    0,    0,    0,  974,  975,    0,
     1365      975,  976,    0,  976,    0,    0,    0,  976,  977,    0,
     1366      977,  978,    0,  978,    0,    0,    0,  978,  979,    0,
     1367      979,  980,    0,  980,    0,    0,    0,  980,  981,    0,
     1368      981,  982,    0,  982,    0,    0,    0,  982,  983,    0,
     1369      983,  984,    0,    0,  984,    0,  984,  984,  984,  984,
     1370
     1371      984,  985,  985,  985,  985,  985,  985,  985,  985,  985,
     1372      985,  985,  985,  985,  986,    0,  986,    0,    0,    0,
    13651373      986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
    13661374      988,  989,    0,  989,  990,    0,  990,    0,    0,    0,
    1367       990,  991,    0,  991,    0,    0,    0,  991,  992,    0,
    1368       992,  993,    0,  993,    0,    0,    0,  993,  994,    0,
    1369       994,  995,    0,  995,    0,    0,    0,  995,  996,    0,
    1370       996,  997,    0,  997,    0,    0,    0,  997,  998,    0,
    1371 
    1372       998,  999,    0,  999, 1000,    0, 1000, 1001,    0,    0,
    1373      1001,    0, 1001, 1001, 1001, 1001, 1001, 1002,    0, 1002,
    1374      1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
    1375      1003, 1003, 1003, 1004,    0, 1004,    0,    0,    0, 1004,
    1376      1005,    0, 1005, 1006,    0, 1006,    0,    0,    0, 1006,
    1377      1007,    0, 1007, 1008,    0, 1008, 1009,    0, 1009, 1010,
    1378         0,    0, 1010,    0, 1010, 1010, 1010, 1010, 1010, 1011,
    1379         0, 1011, 1012,    0, 1012, 1013,    0, 1013, 1014,    0,
    1380      1014, 1015,    0, 1015, 1016,    0, 1016, 1017,    0, 1017,
    1381      1018,    0, 1018,    0,    0,    0, 1018, 1019,    0, 1019,
    1382 
    1383      1020,    0, 1020,    0,    0,    0, 1020, 1021,    0, 1021,
    1384      1022,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
    1385         0, 1025,    0,    0,    0, 1025, 1026,    0,    0, 1026,
    1386         0, 1026, 1026, 1026, 1026, 1026, 1027,    0, 1027, 1028,
    1387         0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,    0,
    1388         0, 1030, 1031,    0, 1031,    0,    0,    0, 1031, 1032,
    1389         0, 1032,    0,    0,    0, 1032, 1033,    0, 1033, 1034,
    1390         0, 1034,    0,    0,    0, 1034, 1035,    0, 1035,    0,
    1391         0,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
    1392      1037,    0, 1037,    0,    0,    0, 1037, 1038,    0, 1038,
    1393 
    1394         0,    0,    0, 1038, 1039,    0, 1039,    0,    0,    0,
    1395      1039, 1040,    0, 1040,    0,    0,    0, 1040, 1041,    0,
    1396      1041,    0,    0,    0, 1041, 1042,    0, 1042,    0,    0,
     1375      990,  991,    0,  991,  992,    0,  992,    0,    0,    0,
     1376      992,  993,    0,  993,  994,    0,  994,    0,    0,    0,
     1377      994,  995,    0,  995,  996,    0,  996,    0,    0,    0,
     1378      996,  997,    0,  997,  998,    0,  998,    0,    0,    0,
     1379      998,  999,    0,  999, 1000,    0, 1000,    0,    0,    0,
     1380     1000, 1001,    0, 1001, 1002,    0, 1002,    0,    0,    0,
     1381
     1382     1002, 1003,    0, 1003,    0,    0,    0, 1003, 1004,    0,
     1383     1004, 1005,    0, 1005,    0,    0,    0, 1005, 1006,    0,
     1384     1006, 1007,    0, 1007,    0,    0,    0, 1007, 1008,    0,
     1385     1008, 1009,    0, 1009,    0,    0,    0, 1009, 1010,    0,
     1386     1010, 1011,    0, 1011, 1012,    0, 1012, 1013,    0,    0,
     1387     1013,    0, 1013, 1013, 1013, 1013, 1013, 1014,    0, 1014,
     1388     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1389     1015, 1015, 1015, 1016,    0, 1016,    0,    0,    0, 1016,
     1390     1017,    0, 1017, 1018,    0, 1018,    0,    0,    0, 1018,
     1391     1019,    0, 1019, 1020,    0, 1020, 1021,    0, 1021, 1022,
     1392
     1393        0,    0, 1022,    0, 1022, 1022, 1022, 1022, 1022, 1023,
     1394        0, 1023, 1024,    0, 1024, 1025,    0, 1025, 1026,    0,
     1395     1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0, 1029,
     1396     1030,    0, 1030,    0,    0,    0, 1030, 1031,    0, 1031,
     1397     1032,    0, 1032,    0,    0,    0, 1032, 1033,    0, 1033,
     1398     1034,    0, 1034, 1035,    0, 1035, 1036,    0, 1036, 1037,
     1399        0, 1037,    0,    0,    0, 1037, 1038,    0,    0, 1038,
     1400        0, 1038, 1038, 1038, 1038, 1038, 1039,    0, 1039, 1040,
     1401        0, 1040, 1041,    0, 1041, 1042,    0, 1042,    0,    0,
    13971402        0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
    1398         0, 1044,    0,    0,    0, 1044, 1045,    0, 1045,    0,
    1399         0,    0, 1045, 1046,    0, 1046,    0,    0,    0, 1046,
    1400      1047,    0, 1047,    0,    0,    0, 1047, 1048,    0, 1048,
    1401         0,    0,    0, 1048, 1049,    0, 1049,    0,    0,    0,
    1402      1049,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1403       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1404 
    1405       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1406       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1407       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1408       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1409       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1410       875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
    1411       875,  875,  875,  875,  875,  875
     1403
     1404        0, 1044,    0,    0,    0, 1044, 1045,    0, 1045, 1046,
     1405        0, 1046,    0,    0,    0, 1046, 1047,    0, 1047,    0,
     1406        0,    0, 1047, 1048,    0, 1048,    0,    0,    0, 1048,
     1407     1049,    0, 1049,    0,    0,    0, 1049, 1050,    0, 1050,
     1408        0,    0,    0, 1050, 1051,    0, 1051,    0,    0,    0,
     1409     1051, 1052,    0, 1052,    0,    0,    0, 1052, 1053,    0,
     1410     1053,    0,    0,    0, 1053, 1054,    0, 1054,    0,    0,
     1411        0, 1054, 1055,    0, 1055,    0,    0,    0, 1055, 1056,
     1412        0, 1056,    0,    0,    0, 1056, 1057,    0, 1057,    0,
     1413        0,    0, 1057, 1058,    0, 1058,    0,    0,    0, 1058,
     1414
     1415     1059,    0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,
     1416        0,    0,    0, 1060, 1061,    0, 1061,    0,    0,    0,
     1417     1061,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1418      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1419      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1420      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1421      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1422      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1423      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1424      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1425
     1426      887,  887,  887,  887,  887,  887,  887
    14121427    } ;
    14131428
    14141429/* Table of booleans, true if rule could match eol. */
    1415 static yyconst flex_int32_t yy_rule_can_match_eol[180] =
     1430static yyconst flex_int32_t yy_rule_can_match_eol[181] =
    14161431    {   0,
    141714321, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    14201435    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14211436    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1422     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
    1423     1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1437    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
     1438    0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14241439    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14251440    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1426         };
     1441    0,     };
    14271442
    14281443static yy_state_type yy_last_accepting_state;
     
    14521467 * Created On       : Sat Sep 22 08:58:10 2001
    14531468 * Last Modified By : Peter A. Buhr
    1454  * Last Modified On : Tue Feb  2 15:06:54 2016
    1455  * Update Count     : 426
     1469 * Last Modified On : Mon Mar 21 23:33:46 2016
     1470 * Update Count     : 450
    14561471 */
    14571472#line 20 "lex.ll"
     
    14651480
    14661481#include "lex.h"
     1482#include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    14671483#include "ParseNode.h"
    1468 #include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
     1484#include "TypedefTable.h"
    14691485
    14701486char *yyfilename;
     
    14821498#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    14831499#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    1484 #define IDENTIFIER_RETURN()     RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) )
     1500#define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
    14851501#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    14861502
     
    15021518// attribute identifier, GCC: $ in identifier
    15031519// numeric constants, CFA: '_' in constant
    1504 // GCC: D (double), LD (long double) and iI (imaginary) suffixes
     1520// GCC: D (double), DL (long double) and iI (imaginary) suffixes
     1521//floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI]))
    15051522// character escape sequence, GCC: \e => esc character
    15061523// ' stop highlighting
     
    15111528
    15121529
    1513 #line 1514 "Parser/lex.cc"
     1530#line 1531 "Parser/lex.cc"
    15141531
    15151532#define INITIAL 0
     
    17031720        register int yy_act;
    17041721   
    1705 #line 137 "lex.ll"
     1722#line 139 "lex.ll"
    17061723
    17071724                                   /* line directives */
    1708 #line 1709 "Parser/lex.cc"
     1725#line 1726 "Parser/lex.cc"
    17091726
    17101727        if ( !(yy_init) )
     
    17601777                                {
    17611778                                yy_current_state = (int) yy_def[yy_current_state];
    1762                                 if ( yy_current_state >= 876 )
     1779                                if ( yy_current_state >= 888 )
    17631780                                        yy_c = yy_meta[(unsigned int) yy_c];
    17641781                                }
     
    17661783                        ++yy_cp;
    17671784                        }
    1768                 while ( yy_base[yy_current_state] != 2782 );
     1785                while ( yy_base[yy_current_state] != 2822 );
    17691786
    17701787yy_find_action:
     
    18031820/* rule 1 can match eol */
    18041821YY_RULE_SETUP
    1805 #line 139 "lex.ll"
     1822#line 141 "lex.ll"
    18061823{
    18071824        /* " stop highlighting */
     
    18301847/* rule 2 can match eol */
    18311848YY_RULE_SETUP
    1832 #line 162 "lex.ll"
     1849#line 164 "lex.ll"
    18331850;
    18341851        YY_BREAK
     
    18361853case 3:
    18371854YY_RULE_SETUP
    1838 #line 165 "lex.ll"
     1855#line 167 "lex.ll"
    18391856{ BEGIN COMMENT; }
    18401857        YY_BREAK
     
    18421859/* rule 4 can match eol */
    18431860YY_RULE_SETUP
    1844 #line 166 "lex.ll"
     1861#line 168 "lex.ll"
    18451862;
    18461863        YY_BREAK
    18471864case 5:
    18481865YY_RULE_SETUP
    1849 #line 167 "lex.ll"
     1866#line 169 "lex.ll"
    18501867{ BEGIN 0; }
    18511868        YY_BREAK
     
    18541871/* rule 6 can match eol */
    18551872YY_RULE_SETUP
    1856 #line 170 "lex.ll"
     1873#line 172 "lex.ll"
    18571874;
    18581875        YY_BREAK
     
    18601877case 7:
    18611878YY_RULE_SETUP
    1862 #line 173 "lex.ll"
     1879#line 175 "lex.ll"
    18631880{ WHITE_RETURN(' '); }
    18641881        YY_BREAK
    18651882case 8:
    18661883YY_RULE_SETUP
    1867 #line 174 "lex.ll"
     1884#line 176 "lex.ll"
    18681885{ WHITE_RETURN(' '); }
    18691886        YY_BREAK
     
    18711888/* rule 9 can match eol */
    18721889YY_RULE_SETUP
    1873 #line 175 "lex.ll"
     1890#line 177 "lex.ll"
    18741891{ NEWLINE_RETURN(); }
    18751892        YY_BREAK
     
    18771894case 10:
    18781895YY_RULE_SETUP
    1879 #line 178 "lex.ll"
     1896#line 180 "lex.ll"
    18801897{ KEYWORD_RETURN(ALIGNAS); }                    // C11
    18811898        YY_BREAK
    18821899case 11:
    18831900YY_RULE_SETUP
    1884 #line 179 "lex.ll"
     1901#line 181 "lex.ll"
    18851902{ KEYWORD_RETURN(ALIGNOF); }                    // C11
    18861903        YY_BREAK
    18871904case 12:
    18881905YY_RULE_SETUP
    1889 #line 180 "lex.ll"
     1906#line 182 "lex.ll"
    18901907{ KEYWORD_RETURN(ALIGNOF); }                    // GCC
    18911908        YY_BREAK
    18921909case 13:
    18931910YY_RULE_SETUP
    1894 #line 181 "lex.ll"
     1911#line 183 "lex.ll"
    18951912{ KEYWORD_RETURN(ALIGNOF); }                    // GCC
    18961913        YY_BREAK
    18971914case 14:
    18981915YY_RULE_SETUP
    1899 #line 182 "lex.ll"
     1916#line 184 "lex.ll"
    19001917{ KEYWORD_RETURN(ASM); }
    19011918        YY_BREAK
    19021919case 15:
    19031920YY_RULE_SETUP
    1904 #line 183 "lex.ll"
     1921#line 185 "lex.ll"
    19051922{ KEYWORD_RETURN(ASM); }                                // GCC
    19061923        YY_BREAK
    19071924case 16:
    19081925YY_RULE_SETUP
    1909 #line 184 "lex.ll"
     1926#line 186 "lex.ll"
    19101927{ KEYWORD_RETURN(ASM); }                                // GCC
    19111928        YY_BREAK
    19121929case 17:
    19131930YY_RULE_SETUP
    1914 #line 185 "lex.ll"
     1931#line 187 "lex.ll"
    19151932{ KEYWORD_RETURN(AT); }                                 // CFA
    19161933        YY_BREAK
    19171934case 18:
    19181935YY_RULE_SETUP
    1919 #line 186 "lex.ll"
     1936#line 188 "lex.ll"
    19201937{ KEYWORD_RETURN(ATOMIC); }                             // C11
    19211938        YY_BREAK
    19221939case 19:
    19231940YY_RULE_SETUP
    1924 #line 187 "lex.ll"
     1941#line 189 "lex.ll"
    19251942{ KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    19261943        YY_BREAK
    19271944case 20:
    19281945YY_RULE_SETUP
    1929 #line 188 "lex.ll"
     1946#line 190 "lex.ll"
    19301947{ KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    19311948        YY_BREAK
    19321949case 21:
    19331950YY_RULE_SETUP
    1934 #line 189 "lex.ll"
     1951#line 191 "lex.ll"
    19351952{ KEYWORD_RETURN(AUTO); }
    19361953        YY_BREAK
    19371954case 22:
    19381955YY_RULE_SETUP
    1939 #line 190 "lex.ll"
     1956#line 192 "lex.ll"
    19401957{ KEYWORD_RETURN(BOOL); }                               // C99
    19411958        YY_BREAK
    19421959case 23:
    19431960YY_RULE_SETUP
    1944 #line 191 "lex.ll"
     1961#line 193 "lex.ll"
    19451962{ KEYWORD_RETURN(BREAK); }
    19461963        YY_BREAK
    19471964case 24:
    19481965YY_RULE_SETUP
    1949 #line 192 "lex.ll"
     1966#line 194 "lex.ll"
    19501967{ KEYWORD_RETURN(CASE); }
    19511968        YY_BREAK
    19521969case 25:
    19531970YY_RULE_SETUP
    1954 #line 193 "lex.ll"
     1971#line 195 "lex.ll"
    19551972{ KEYWORD_RETURN(CATCH); }                              // CFA
    19561973        YY_BREAK
    19571974case 26:
    19581975YY_RULE_SETUP
    1959 #line 194 "lex.ll"
     1976#line 196 "lex.ll"
    19601977{ KEYWORD_RETURN(CATCHRESUME); }                // CFA
    19611978        YY_BREAK
    19621979case 27:
    19631980YY_RULE_SETUP
    1964 #line 195 "lex.ll"
     1981#line 197 "lex.ll"
    19651982{ KEYWORD_RETURN(CHAR); }
    19661983        YY_BREAK
    19671984case 28:
    19681985YY_RULE_SETUP
    1969 #line 196 "lex.ll"
     1986#line 198 "lex.ll"
    19701987{ KEYWORD_RETURN(CHOOSE); }                             // CFA
    19711988        YY_BREAK
    19721989case 29:
    19731990YY_RULE_SETUP
    1974 #line 197 "lex.ll"
     1991#line 199 "lex.ll"
    19751992{ KEYWORD_RETURN(COMPLEX); }                    // C99
    19761993        YY_BREAK
    19771994case 30:
    19781995YY_RULE_SETUP
    1979 #line 198 "lex.ll"
     1996#line 200 "lex.ll"
    19801997{ KEYWORD_RETURN(COMPLEX); }                    // GCC
    19811998        YY_BREAK
    19821999case 31:
    19832000YY_RULE_SETUP
    1984 #line 199 "lex.ll"
     2001#line 201 "lex.ll"
    19852002{ KEYWORD_RETURN(COMPLEX); }                    // GCC
    19862003        YY_BREAK
    19872004case 32:
    19882005YY_RULE_SETUP
    1989 #line 200 "lex.ll"
     2006#line 202 "lex.ll"
    19902007{ KEYWORD_RETURN(CONST); }
    19912008        YY_BREAK
    19922009case 33:
    19932010YY_RULE_SETUP
    1994 #line 201 "lex.ll"
     2011#line 203 "lex.ll"
    19952012{ KEYWORD_RETURN(CONST); }                              // GCC
    19962013        YY_BREAK
    19972014case 34:
    19982015YY_RULE_SETUP
    1999 #line 202 "lex.ll"
     2016#line 204 "lex.ll"
    20002017{ KEYWORD_RETURN(CONST); }                              // GCC
    20012018        YY_BREAK
    20022019case 35:
    20032020YY_RULE_SETUP
    2004 #line 203 "lex.ll"
    2005 { KEYWORD_RETURN(CONTEXT); }                    // CFA
     2021#line 205 "lex.ll"
     2022{ KEYWORD_RETURN(CONTINUE); }
    20062023        YY_BREAK
    20072024case 36:
    20082025YY_RULE_SETUP
    2009 #line 204 "lex.ll"
    2010 { KEYWORD_RETURN(CONTINUE); }
     2026#line 206 "lex.ll"
     2027{ KEYWORD_RETURN(DEFAULT); }
    20112028        YY_BREAK
    20122029case 37:
    20132030YY_RULE_SETUP
    2014 #line 205 "lex.ll"
    2015 { KEYWORD_RETURN(DEFAULT); }
     2031#line 207 "lex.ll"
     2032{ KEYWORD_RETURN(DISABLE); }                    // CFA
    20162033        YY_BREAK
    20172034case 38:
    20182035YY_RULE_SETUP
    2019 #line 206 "lex.ll"
    2020 { KEYWORD_RETURN(DISABLE); }                    // CFA
     2036#line 208 "lex.ll"
     2037{ KEYWORD_RETURN(DO); }
    20212038        YY_BREAK
    20222039case 39:
    20232040YY_RULE_SETUP
    2024 #line 207 "lex.ll"
    2025 { KEYWORD_RETURN(DO); }
     2041#line 209 "lex.ll"
     2042{ KEYWORD_RETURN(DOUBLE); }
    20262043        YY_BREAK
    20272044case 40:
    20282045YY_RULE_SETUP
    2029 #line 208 "lex.ll"
    2030 { KEYWORD_RETURN(DOUBLE); }
     2046#line 210 "lex.ll"
     2047{ KEYWORD_RETURN(DTYPE); }                              // CFA
    20312048        YY_BREAK
    20322049case 41:
    20332050YY_RULE_SETUP
    2034 #line 209 "lex.ll"
    2035 { KEYWORD_RETURN(DTYPE); }                              // CFA
     2051#line 211 "lex.ll"
     2052{ KEYWORD_RETURN(ELSE); }
    20362053        YY_BREAK
    20372054case 42:
    20382055YY_RULE_SETUP
    2039 #line 210 "lex.ll"
    2040 { KEYWORD_RETURN(ELSE); }
     2056#line 212 "lex.ll"
     2057{ KEYWORD_RETURN(ENABLE); }                             // CFA
    20412058        YY_BREAK
    20422059case 43:
    20432060YY_RULE_SETUP
    2044 #line 211 "lex.ll"
    2045 { KEYWORD_RETURN(ENABLE); }                             // CFA
     2061#line 213 "lex.ll"
     2062{ KEYWORD_RETURN(ENUM); }
    20462063        YY_BREAK
    20472064case 44:
    20482065YY_RULE_SETUP
    2049 #line 212 "lex.ll"
    2050 { KEYWORD_RETURN(ENUM); }
     2066#line 214 "lex.ll"
     2067{ KEYWORD_RETURN(EXTENSION); }                  // GCC
    20512068        YY_BREAK
    20522069case 45:
    20532070YY_RULE_SETUP
    2054 #line 213 "lex.ll"
    2055 { KEYWORD_RETURN(EXTENSION); }                  // GCC
     2071#line 215 "lex.ll"
     2072{ KEYWORD_RETURN(EXTERN); }
    20562073        YY_BREAK
    20572074case 46:
    20582075YY_RULE_SETUP
    2059 #line 214 "lex.ll"
    2060 { KEYWORD_RETURN(EXTERN); }
     2076#line 216 "lex.ll"
     2077{ KEYWORD_RETURN(FALLTHRU); }                   // CFA
    20612078        YY_BREAK
    20622079case 47:
    20632080YY_RULE_SETUP
    2064 #line 215 "lex.ll"
    2065 { KEYWORD_RETURN(FALLTHRU); }                   // CFA
     2081#line 217 "lex.ll"
     2082{ KEYWORD_RETURN(FINALLY); }                    // CFA
    20662083        YY_BREAK
    20672084case 48:
    20682085YY_RULE_SETUP
    2069 #line 216 "lex.ll"
    2070 { KEYWORD_RETURN(FINALLY); }                    // CFA
     2086#line 218 "lex.ll"
     2087{ KEYWORD_RETURN(FLOAT); }
    20712088        YY_BREAK
    20722089case 49:
    20732090YY_RULE_SETUP
    2074 #line 217 "lex.ll"
    2075 { KEYWORD_RETURN(FLOAT); }
     2091#line 219 "lex.ll"
     2092{ KEYWORD_RETURN(FLOAT); }                              // GCC
    20762093        YY_BREAK
    20772094case 50:
    20782095YY_RULE_SETUP
    2079 #line 218 "lex.ll"
    2080 { KEYWORD_RETURN(FLOAT); }                              // GCC
     2096#line 220 "lex.ll"
     2097{ KEYWORD_RETURN(FOR); }
    20812098        YY_BREAK
    20822099case 51:
    20832100YY_RULE_SETUP
    2084 #line 219 "lex.ll"
    2085 { KEYWORD_RETURN(FOR); }
     2101#line 221 "lex.ll"
     2102{ KEYWORD_RETURN(FORALL); }                             // CFA
    20862103        YY_BREAK
    20872104case 52:
    20882105YY_RULE_SETUP
    2089 #line 220 "lex.ll"
    2090 { KEYWORD_RETURN(FORALL); }                             // CFA
     2106#line 222 "lex.ll"
     2107{ KEYWORD_RETURN(FORTRAN); }
    20912108        YY_BREAK
    20922109case 53:
    20932110YY_RULE_SETUP
    2094 #line 221 "lex.ll"
    2095 { KEYWORD_RETURN(FORTRAN); }
     2111#line 223 "lex.ll"
     2112{ KEYWORD_RETURN(FTYPE); }                              // CFA
    20962113        YY_BREAK
    20972114case 54:
    20982115YY_RULE_SETUP
    2099 #line 222 "lex.ll"
    2100 { KEYWORD_RETURN(FTYPE); }                              // CFA
     2116#line 224 "lex.ll"
     2117{ KEYWORD_RETURN(GENERIC); }                    // C11
    21012118        YY_BREAK
    21022119case 55:
    21032120YY_RULE_SETUP
    2104 #line 223 "lex.ll"
    2105 { KEYWORD_RETURN(GENERIC); }                    // C11
     2121#line 225 "lex.ll"
     2122{ KEYWORD_RETURN(GOTO); }
    21062123        YY_BREAK
    21072124case 56:
    21082125YY_RULE_SETUP
    2109 #line 224 "lex.ll"
    2110 { KEYWORD_RETURN(GOTO); }
     2126#line 226 "lex.ll"
     2127{ KEYWORD_RETURN(IF); }
    21112128        YY_BREAK
    21122129case 57:
    21132130YY_RULE_SETUP
    2114 #line 225 "lex.ll"
    2115 { KEYWORD_RETURN(IF); }
     2131#line 227 "lex.ll"
     2132{ KEYWORD_RETURN(IMAGINARY); }                  // C99
    21162133        YY_BREAK
    21172134case 58:
    2118 YY_RULE_SETUP
    2119 #line 226 "lex.ll"
    2120 { KEYWORD_RETURN(IMAGINARY); }                  // C99
    2121         YY_BREAK
    2122 case 59:
    2123 YY_RULE_SETUP
    2124 #line 227 "lex.ll"
    2125 { KEYWORD_RETURN(IMAGINARY); }                  // GCC
    2126         YY_BREAK
    2127 case 60:
    21282135YY_RULE_SETUP
    21292136#line 228 "lex.ll"
    21302137{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
    21312138        YY_BREAK
     2139case 59:
     2140YY_RULE_SETUP
     2141#line 229 "lex.ll"
     2142{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
     2143        YY_BREAK
     2144case 60:
     2145YY_RULE_SETUP
     2146#line 230 "lex.ll"
     2147{ KEYWORD_RETURN(INLINE); }                             // C99
     2148        YY_BREAK
    21322149case 61:
    2133 YY_RULE_SETUP
    2134 #line 229 "lex.ll"
    2135 { KEYWORD_RETURN(INLINE); }                             // C99
    2136         YY_BREAK
    2137 case 62:
    2138 YY_RULE_SETUP
    2139 #line 230 "lex.ll"
    2140 { KEYWORD_RETURN(INLINE); }                             // GCC
    2141         YY_BREAK
    2142 case 63:
    21432150YY_RULE_SETUP
    21442151#line 231 "lex.ll"
    21452152{ KEYWORD_RETURN(INLINE); }                             // GCC
    21462153        YY_BREAK
     2154case 62:
     2155YY_RULE_SETUP
     2156#line 232 "lex.ll"
     2157{ KEYWORD_RETURN(INLINE); }                             // GCC
     2158        YY_BREAK
     2159case 63:
     2160YY_RULE_SETUP
     2161#line 233 "lex.ll"
     2162{ KEYWORD_RETURN(INT); }
     2163        YY_BREAK
    21472164case 64:
    21482165YY_RULE_SETUP
    2149 #line 232 "lex.ll"
    2150 { KEYWORD_RETURN(INT); }
     2166#line 234 "lex.ll"
     2167{ KEYWORD_RETURN(INT); }                                // GCC
    21512168        YY_BREAK
    21522169case 65:
    21532170YY_RULE_SETUP
    2154 #line 233 "lex.ll"
    2155 { KEYWORD_RETURN(INT); }                                // GCC
     2171#line 235 "lex.ll"
     2172{ KEYWORD_RETURN(LABEL); }                              // GCC
    21562173        YY_BREAK
    21572174case 66:
    21582175YY_RULE_SETUP
    2159 #line 234 "lex.ll"
    2160 { KEYWORD_RETURN(LABEL); }                              // GCC
     2176#line 236 "lex.ll"
     2177{ KEYWORD_RETURN(LONG); }
    21612178        YY_BREAK
    21622179case 67:
    21632180YY_RULE_SETUP
    2164 #line 235 "lex.ll"
    2165 { KEYWORD_RETURN(LONG); }
     2181#line 237 "lex.ll"
     2182{ KEYWORD_RETURN(LVALUE); }                             // CFA
    21662183        YY_BREAK
    21672184case 68:
    21682185YY_RULE_SETUP
    2169 #line 236 "lex.ll"
    2170 { KEYWORD_RETURN(LVALUE); }                             // CFA
     2186#line 238 "lex.ll"
     2187{ KEYWORD_RETURN(NORETURN); }                   // C11
    21712188        YY_BREAK
    21722189case 69:
    21732190YY_RULE_SETUP
    2174 #line 237 "lex.ll"
    2175 { KEYWORD_RETURN(NORETURN); }                   // C11
     2191#line 239 "lex.ll"
     2192{ KEYWORD_RETURN(OFFSETOF); }           // GCC
    21762193        YY_BREAK
    21772194case 70:
    21782195YY_RULE_SETUP
    2179 #line 238 "lex.ll"
    2180 { KEYWORD_RETURN(OFFSETOF); }           // GCC
     2196#line 240 "lex.ll"
     2197{ KEYWORD_RETURN(OTYPE); }                              // CFA
    21812198        YY_BREAK
    21822199case 71:
    21832200YY_RULE_SETUP
    2184 #line 239 "lex.ll"
     2201#line 241 "lex.ll"
    21852202{ KEYWORD_RETURN(REGISTER); }
    21862203        YY_BREAK
    21872204case 72:
    21882205YY_RULE_SETUP
    2189 #line 240 "lex.ll"
     2206#line 242 "lex.ll"
    21902207{ KEYWORD_RETURN(RESTRICT); }                   // C99
    21912208        YY_BREAK
    21922209case 73:
    21932210YY_RULE_SETUP
    2194 #line 241 "lex.ll"
     2211#line 243 "lex.ll"
    21952212{ KEYWORD_RETURN(RESTRICT); }                   // GCC
    21962213        YY_BREAK
    21972214case 74:
    21982215YY_RULE_SETUP
    2199 #line 242 "lex.ll"
     2216#line 244 "lex.ll"
    22002217{ KEYWORD_RETURN(RESTRICT); }                   // GCC
    22012218        YY_BREAK
    22022219case 75:
    22032220YY_RULE_SETUP
    2204 #line 243 "lex.ll"
     2221#line 245 "lex.ll"
    22052222{ KEYWORD_RETURN(RETURN); }
    22062223        YY_BREAK
    22072224case 76:
    22082225YY_RULE_SETUP
    2209 #line 244 "lex.ll"
     2226#line 246 "lex.ll"
    22102227{ KEYWORD_RETURN(SHORT); }
    22112228        YY_BREAK
    22122229case 77:
    22132230YY_RULE_SETUP
    2214 #line 245 "lex.ll"
     2231#line 247 "lex.ll"
    22152232{ KEYWORD_RETURN(SIGNED); }
    22162233        YY_BREAK
    22172234case 78:
    22182235YY_RULE_SETUP
    2219 #line 246 "lex.ll"
     2236#line 248 "lex.ll"
    22202237{ KEYWORD_RETURN(SIGNED); }                             // GCC
    22212238        YY_BREAK
    22222239case 79:
    22232240YY_RULE_SETUP
    2224 #line 247 "lex.ll"
     2241#line 249 "lex.ll"
    22252242{ KEYWORD_RETURN(SIGNED); }                             // GCC
    22262243        YY_BREAK
    22272244case 80:
    22282245YY_RULE_SETUP
    2229 #line 248 "lex.ll"
     2246#line 250 "lex.ll"
    22302247{ KEYWORD_RETURN(SIZEOF); }
    22312248        YY_BREAK
    22322249case 81:
    22332250YY_RULE_SETUP
    2234 #line 249 "lex.ll"
     2251#line 251 "lex.ll"
    22352252{ KEYWORD_RETURN(STATIC); }
    22362253        YY_BREAK
    22372254case 82:
    22382255YY_RULE_SETUP
    2239 #line 250 "lex.ll"
     2256#line 252 "lex.ll"
    22402257{ KEYWORD_RETURN(STATICASSERT); }               // C11
    22412258        YY_BREAK
    22422259case 83:
    22432260YY_RULE_SETUP
    2244 #line 251 "lex.ll"
     2261#line 253 "lex.ll"
    22452262{ KEYWORD_RETURN(STRUCT); }
    22462263        YY_BREAK
    22472264case 84:
    22482265YY_RULE_SETUP
    2249 #line 252 "lex.ll"
     2266#line 254 "lex.ll"
    22502267{ KEYWORD_RETURN(SWITCH); }
    22512268        YY_BREAK
    22522269case 85:
    22532270YY_RULE_SETUP
    2254 #line 253 "lex.ll"
     2271#line 255 "lex.ll"
    22552272{ KEYWORD_RETURN(THREADLOCAL); }                // C11
    22562273        YY_BREAK
    22572274case 86:
    22582275YY_RULE_SETUP
    2259 #line 254 "lex.ll"
     2276#line 256 "lex.ll"
    22602277{ KEYWORD_RETURN(THROW); }                              // CFA
    22612278        YY_BREAK
    22622279case 87:
    22632280YY_RULE_SETUP
    2264 #line 255 "lex.ll"
     2281#line 257 "lex.ll"
    22652282{ KEYWORD_RETURN(THROWRESUME); }                // CFA
    22662283        YY_BREAK
    22672284case 88:
    22682285YY_RULE_SETUP
    2269 #line 256 "lex.ll"
     2286#line 258 "lex.ll"
     2287{ KEYWORD_RETURN(TRAIT); }                              // CFA
     2288        YY_BREAK
     2289case 89:
     2290YY_RULE_SETUP
     2291#line 259 "lex.ll"
    22702292{ KEYWORD_RETURN(TRY); }                                // CFA
    22712293        YY_BREAK
    2272 case 89:
    2273 YY_RULE_SETUP
    2274 #line 257 "lex.ll"
    2275 { KEYWORD_RETURN(TYPE); }                               // CFA
    2276         YY_BREAK
    22772294case 90:
    22782295YY_RULE_SETUP
    2279 #line 258 "lex.ll"
     2296#line 260 "lex.ll"
    22802297{ KEYWORD_RETURN(TYPEDEF); }
    22812298        YY_BREAK
    22822299case 91:
    2283 YY_RULE_SETUP
    2284 #line 259 "lex.ll"
    2285 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    2286         YY_BREAK
    2287 case 92:
    2288 YY_RULE_SETUP
    2289 #line 260 "lex.ll"
    2290 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    2291         YY_BREAK
    2292 case 93:
    22932300YY_RULE_SETUP
    22942301#line 261 "lex.ll"
    22952302{ KEYWORD_RETURN(TYPEOF); }                             // GCC
    22962303        YY_BREAK
     2304case 92:
     2305YY_RULE_SETUP
     2306#line 262 "lex.ll"
     2307{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2308        YY_BREAK
     2309case 93:
     2310YY_RULE_SETUP
     2311#line 263 "lex.ll"
     2312{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2313        YY_BREAK
    22972314case 94:
    22982315YY_RULE_SETUP
    2299 #line 262 "lex.ll"
     2316#line 264 "lex.ll"
    23002317{ KEYWORD_RETURN(UNION); }
    23012318        YY_BREAK
    23022319case 95:
    23032320YY_RULE_SETUP
    2304 #line 263 "lex.ll"
     2321#line 265 "lex.ll"
    23052322{ KEYWORD_RETURN(UNSIGNED); }
    23062323        YY_BREAK
    23072324case 96:
    23082325YY_RULE_SETUP
    2309 #line 264 "lex.ll"
     2326#line 266 "lex.ll"
     2327{ KEYWORD_RETURN(VALIST); }                     // GCC
     2328        YY_BREAK
     2329case 97:
     2330YY_RULE_SETUP
     2331#line 267 "lex.ll"
    23102332{ KEYWORD_RETURN(VOID); }
    23112333        YY_BREAK
    2312 case 97:
    2313 YY_RULE_SETUP
    2314 #line 265 "lex.ll"
     2334case 98:
     2335YY_RULE_SETUP
     2336#line 268 "lex.ll"
    23152337{ KEYWORD_RETURN(VOLATILE); }
    23162338        YY_BREAK
    2317 case 98:
    2318 YY_RULE_SETUP
    2319 #line 266 "lex.ll"
     2339case 99:
     2340YY_RULE_SETUP
     2341#line 269 "lex.ll"
    23202342{ KEYWORD_RETURN(VOLATILE); }                   // GCC
    23212343        YY_BREAK
    2322 case 99:
    2323 YY_RULE_SETUP
    2324 #line 267 "lex.ll"
     2344case 100:
     2345YY_RULE_SETUP
     2346#line 270 "lex.ll"
    23252347{ KEYWORD_RETURN(VOLATILE); }                   // GCC
    23262348        YY_BREAK
    2327 case 100:
    2328 YY_RULE_SETUP
    2329 #line 268 "lex.ll"
     2349case 101:
     2350YY_RULE_SETUP
     2351#line 271 "lex.ll"
    23302352{ KEYWORD_RETURN(WHILE); }
    23312353        YY_BREAK
    23322354/* identifier */
    2333 case 101:
    2334 YY_RULE_SETUP
    2335 #line 271 "lex.ll"
    2336 { IDENTIFIER_RETURN(); }
    2337         YY_BREAK
    23382355case 102:
    2339 YY_RULE_SETUP
    2340 #line 272 "lex.ll"
    2341 { ATTRIBUTE_RETURN(); }
    2342         YY_BREAK
    2343 case 103:
    2344 YY_RULE_SETUP
    2345 #line 273 "lex.ll"
    2346 { BEGIN BKQUOTE; }
    2347         YY_BREAK
    2348 case 104:
    23492356YY_RULE_SETUP
    23502357#line 274 "lex.ll"
    23512358{ IDENTIFIER_RETURN(); }
    23522359        YY_BREAK
     2360case 103:
     2361YY_RULE_SETUP
     2362#line 275 "lex.ll"
     2363{ ATTRIBUTE_RETURN(); }
     2364        YY_BREAK
     2365case 104:
     2366YY_RULE_SETUP
     2367#line 276 "lex.ll"
     2368{ BEGIN BKQUOTE; }
     2369        YY_BREAK
    23532370case 105:
    23542371YY_RULE_SETUP
    2355 #line 275 "lex.ll"
     2372#line 277 "lex.ll"
     2373{ IDENTIFIER_RETURN(); }
     2374        YY_BREAK
     2375case 106:
     2376YY_RULE_SETUP
     2377#line 278 "lex.ll"
    23562378{ BEGIN 0; }
    23572379        YY_BREAK
    23582380/* numeric constants */
    2359 case 106:
    2360 YY_RULE_SETUP
    2361 #line 278 "lex.ll"
     2381case 107:
     2382YY_RULE_SETUP
     2383#line 281 "lex.ll"
    23622384{ NUMERIC_RETURN(ZERO); }                               // CFA
    23632385        YY_BREAK
    2364 case 107:
    2365 YY_RULE_SETUP
    2366 #line 279 "lex.ll"
     2386case 108:
     2387YY_RULE_SETUP
     2388#line 282 "lex.ll"
    23672389{ NUMERIC_RETURN(ONE); }                                // CFA
    23682390        YY_BREAK
    2369 case 108:
    2370 YY_RULE_SETUP
    2371 #line 280 "lex.ll"
     2391case 109:
     2392YY_RULE_SETUP
     2393#line 283 "lex.ll"
    23722394{ NUMERIC_RETURN(INTEGERconstant); }
    23732395        YY_BREAK
    2374 case 109:
    2375 YY_RULE_SETUP
    2376 #line 281 "lex.ll"
     2396case 110:
     2397YY_RULE_SETUP
     2398#line 284 "lex.ll"
    23772399{ NUMERIC_RETURN(INTEGERconstant); }
    23782400        YY_BREAK
    2379 case 110:
    2380 YY_RULE_SETUP
    2381 #line 282 "lex.ll"
     2401case 111:
     2402YY_RULE_SETUP
     2403#line 285 "lex.ll"
    23822404{ NUMERIC_RETURN(INTEGERconstant); }
    23832405        YY_BREAK
    2384 case 111:
    2385 YY_RULE_SETUP
    2386 #line 283 "lex.ll"
     2406case 112:
     2407YY_RULE_SETUP
     2408#line 286 "lex.ll"
    23872409{ NUMERIC_RETURN(FLOATINGconstant); }
    23882410        YY_BREAK
    2389 case 112:
    2390 YY_RULE_SETUP
    2391 #line 284 "lex.ll"
     2411case 113:
     2412YY_RULE_SETUP
     2413#line 287 "lex.ll"
    23922414{ NUMERIC_RETURN(FLOATINGconstant); }
    23932415        YY_BREAK
    23942416/* character constant, allows empty value */
    2395 case 113:
    2396 YY_RULE_SETUP
    2397 #line 287 "lex.ll"
     2417case 114:
     2418YY_RULE_SETUP
     2419#line 290 "lex.ll"
    23982420{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    23992421        YY_BREAK
    2400 case 114:
    2401 YY_RULE_SETUP
    2402 #line 288 "lex.ll"
     2422case 115:
     2423YY_RULE_SETUP
     2424#line 291 "lex.ll"
    24032425{ *strtext += std::string( yytext ); }
    24042426        YY_BREAK
    2405 case 115:
    2406 /* rule 115 can match eol */
    2407 YY_RULE_SETUP
    2408 #line 289 "lex.ll"
     2427case 116:
     2428/* rule 116 can match eol */
     2429YY_RULE_SETUP
     2430#line 292 "lex.ll"
    24092431{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
    24102432        YY_BREAK
    24112433/* ' stop highlighting */
    24122434/* string constant */
    2413 case 116:
    2414 YY_RULE_SETUP
    2415 #line 293 "lex.ll"
     2435case 117:
     2436YY_RULE_SETUP
     2437#line 296 "lex.ll"
    24162438{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    24172439        YY_BREAK
    2418 case 117:
    2419 YY_RULE_SETUP
    2420 #line 294 "lex.ll"
     2440case 118:
     2441YY_RULE_SETUP
     2442#line 297 "lex.ll"
    24212443{ *strtext += std::string( yytext ); }
    24222444        YY_BREAK
    2423 case 118:
    2424 /* rule 118 can match eol */
    2425 YY_RULE_SETUP
    2426 #line 295 "lex.ll"
     2445case 119:
     2446/* rule 119 can match eol */
     2447YY_RULE_SETUP
     2448#line 298 "lex.ll"
    24272449{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
    24282450        YY_BREAK
    24292451/* " stop highlighting */
    24302452/* common character/string constant */
    2431 case 119:
    2432 YY_RULE_SETUP
    2433 #line 299 "lex.ll"
     2453case 120:
     2454YY_RULE_SETUP
     2455#line 302 "lex.ll"
    24342456{ rm_underscore(); *strtext += std::string( yytext ); }
    24352457        YY_BREAK
    2436 case 120:
    2437 /* rule 120 can match eol */
    2438 YY_RULE_SETUP
    2439 #line 300 "lex.ll"
     2458case 121:
     2459/* rule 121 can match eol */
     2460YY_RULE_SETUP
     2461#line 303 "lex.ll"
    24402462{}                                              // continuation (ALSO HANDLED BY CPP)
    24412463        YY_BREAK
    2442 case 121:
    2443 YY_RULE_SETUP
    2444 #line 301 "lex.ll"
     2464case 122:
     2465YY_RULE_SETUP
     2466#line 304 "lex.ll"
    24452467{ *strtext += std::string( yytext ); } // unknown escape character
    24462468        YY_BREAK
    24472469/* punctuation */
    2448 case 122:
    2449 YY_RULE_SETUP
    2450 #line 304 "lex.ll"
    2451 { ASCIIOP_RETURN(); }
    2452         YY_BREAK
    24532470case 123:
    2454 YY_RULE_SETUP
    2455 #line 305 "lex.ll"
    2456 { ASCIIOP_RETURN(); }
    2457         YY_BREAK
    2458 case 124:
    2459 YY_RULE_SETUP
    2460 #line 306 "lex.ll"
    2461 { ASCIIOP_RETURN(); }
    2462         YY_BREAK
    2463 case 125:
    24642471YY_RULE_SETUP
    24652472#line 307 "lex.ll"
    24662473{ ASCIIOP_RETURN(); }
    24672474        YY_BREAK
    2468 case 126:
     2475case 124:
    24692476YY_RULE_SETUP
    24702477#line 308 "lex.ll"
    24712478{ ASCIIOP_RETURN(); }
    24722479        YY_BREAK
    2473 case 127:
     2480case 125:
    24742481YY_RULE_SETUP
    24752482#line 309 "lex.ll"
    24762483{ ASCIIOP_RETURN(); }
    24772484        YY_BREAK
    2478 case 128:
     2485case 126:
    24792486YY_RULE_SETUP
    24802487#line 310 "lex.ll"
    2481 { ASCIIOP_RETURN(); }                                   // also operator
    2482         YY_BREAK
    2483 case 129:
     2488{ ASCIIOP_RETURN(); }
     2489        YY_BREAK
     2490case 127:
    24842491YY_RULE_SETUP
    24852492#line 311 "lex.ll"
    24862493{ ASCIIOP_RETURN(); }
    24872494        YY_BREAK
    2488 case 130:
     2495case 128:
    24892496YY_RULE_SETUP
    24902497#line 312 "lex.ll"
    24912498{ ASCIIOP_RETURN(); }
    24922499        YY_BREAK
    2493 case 131:
     2500case 129:
    24942501YY_RULE_SETUP
    24952502#line 313 "lex.ll"
    24962503{ ASCIIOP_RETURN(); }                                   // also operator
    24972504        YY_BREAK
     2505case 130:
     2506YY_RULE_SETUP
     2507#line 314 "lex.ll"
     2508{ ASCIIOP_RETURN(); }
     2509        YY_BREAK
     2510case 131:
     2511YY_RULE_SETUP
     2512#line 315 "lex.ll"
     2513{ ASCIIOP_RETURN(); }
     2514        YY_BREAK
    24982515case 132:
    24992516YY_RULE_SETUP
    2500 #line 314 "lex.ll"
     2517#line 316 "lex.ll"
     2518{ ASCIIOP_RETURN(); }                                   // also operator
     2519        YY_BREAK
     2520case 133:
     2521YY_RULE_SETUP
     2522#line 317 "lex.ll"
    25012523{ NAMEDOP_RETURN(ELLIPSIS); }
    25022524        YY_BREAK
    25032525/* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
    2504 case 133:
    2505 YY_RULE_SETUP
    2506 #line 317 "lex.ll"
     2526case 134:
     2527YY_RULE_SETUP
     2528#line 320 "lex.ll"
    25072529{ RETURN_VAL('['); }
    25082530        YY_BREAK
    2509 case 134:
    2510 YY_RULE_SETUP
    2511 #line 318 "lex.ll"
     2531case 135:
     2532YY_RULE_SETUP
     2533#line 321 "lex.ll"
    25122534{ RETURN_VAL(']'); }
    25132535        YY_BREAK
    2514 case 135:
    2515 YY_RULE_SETUP
    2516 #line 319 "lex.ll"
     2536case 136:
     2537YY_RULE_SETUP
     2538#line 322 "lex.ll"
    25172539{ RETURN_VAL('{'); }
    25182540        YY_BREAK
    2519 case 136:
    2520 YY_RULE_SETUP
    2521 #line 320 "lex.ll"
     2541case 137:
     2542YY_RULE_SETUP
     2543#line 323 "lex.ll"
    25222544{ RETURN_VAL('}'); }
    25232545        YY_BREAK
    25242546/* operators */
    2525 case 137:
    2526 YY_RULE_SETUP
    2527 #line 323 "lex.ll"
    2528 { ASCIIOP_RETURN(); }
    2529         YY_BREAK
    25302547case 138:
    2531 YY_RULE_SETUP
    2532 #line 324 "lex.ll"
    2533 { ASCIIOP_RETURN(); }
    2534         YY_BREAK
    2535 case 139:
    2536 YY_RULE_SETUP
    2537 #line 325 "lex.ll"
    2538 { ASCIIOP_RETURN(); }
    2539         YY_BREAK
    2540 case 140:
    25412548YY_RULE_SETUP
    25422549#line 326 "lex.ll"
    25432550{ ASCIIOP_RETURN(); }
    25442551        YY_BREAK
    2545 case 141:
     2552case 139:
    25462553YY_RULE_SETUP
    25472554#line 327 "lex.ll"
    25482555{ ASCIIOP_RETURN(); }
    25492556        YY_BREAK
    2550 case 142:
     2557case 140:
    25512558YY_RULE_SETUP
    25522559#line 328 "lex.ll"
    25532560{ ASCIIOP_RETURN(); }
    25542561        YY_BREAK
    2555 case 143:
     2562case 141:
    25562563YY_RULE_SETUP
    25572564#line 329 "lex.ll"
    25582565{ ASCIIOP_RETURN(); }
    25592566        YY_BREAK
    2560 case 144:
     2567case 142:
    25612568YY_RULE_SETUP
    25622569#line 330 "lex.ll"
    25632570{ ASCIIOP_RETURN(); }
    25642571        YY_BREAK
    2565 case 145:
     2572case 143:
    25662573YY_RULE_SETUP
    25672574#line 331 "lex.ll"
    25682575{ ASCIIOP_RETURN(); }
    25692576        YY_BREAK
    2570 case 146:
     2577case 144:
    25712578YY_RULE_SETUP
    25722579#line 332 "lex.ll"
    25732580{ ASCIIOP_RETURN(); }
    25742581        YY_BREAK
    2575 case 147:
     2582case 145:
    25762583YY_RULE_SETUP
    25772584#line 333 "lex.ll"
    25782585{ ASCIIOP_RETURN(); }
    25792586        YY_BREAK
    2580 case 148:
     2587case 146:
    25812588YY_RULE_SETUP
    25822589#line 334 "lex.ll"
    25832590{ ASCIIOP_RETURN(); }
    25842591        YY_BREAK
    2585 case 149:
     2592case 147:
    25862593YY_RULE_SETUP
    25872594#line 335 "lex.ll"
    25882595{ ASCIIOP_RETURN(); }
    25892596        YY_BREAK
    2590 case 150:
     2597case 148:
    25912598YY_RULE_SETUP
    25922599#line 336 "lex.ll"
    25932600{ ASCIIOP_RETURN(); }
    25942601        YY_BREAK
     2602case 149:
     2603YY_RULE_SETUP
     2604#line 337 "lex.ll"
     2605{ ASCIIOP_RETURN(); }
     2606        YY_BREAK
     2607case 150:
     2608YY_RULE_SETUP
     2609#line 338 "lex.ll"
     2610{ ASCIIOP_RETURN(); }
     2611        YY_BREAK
    25952612case 151:
    25962613YY_RULE_SETUP
    2597 #line 338 "lex.ll"
     2614#line 339 "lex.ll"
     2615{ ASCIIOP_RETURN(); }
     2616        YY_BREAK
     2617case 152:
     2618YY_RULE_SETUP
     2619#line 341 "lex.ll"
    25982620{ NAMEDOP_RETURN(ICR); }
    25992621        YY_BREAK
    2600 case 152:
    2601 YY_RULE_SETUP
    2602 #line 339 "lex.ll"
     2622case 153:
     2623YY_RULE_SETUP
     2624#line 342 "lex.ll"
    26032625{ NAMEDOP_RETURN(DECR); }
    26042626        YY_BREAK
    2605 case 153:
    2606 YY_RULE_SETUP
    2607 #line 340 "lex.ll"
     2627case 154:
     2628YY_RULE_SETUP
     2629#line 343 "lex.ll"
    26082630{ NAMEDOP_RETURN(EQ); }
    26092631        YY_BREAK
    2610 case 154:
    2611 YY_RULE_SETUP
    2612 #line 341 "lex.ll"
     2632case 155:
     2633YY_RULE_SETUP
     2634#line 344 "lex.ll"
    26132635{ NAMEDOP_RETURN(NE); }
    26142636        YY_BREAK
    2615 case 155:
    2616 YY_RULE_SETUP
    2617 #line 342 "lex.ll"
     2637case 156:
     2638YY_RULE_SETUP
     2639#line 345 "lex.ll"
    26182640{ NAMEDOP_RETURN(LS); }
    26192641        YY_BREAK
    2620 case 156:
    2621 YY_RULE_SETUP
    2622 #line 343 "lex.ll"
     2642case 157:
     2643YY_RULE_SETUP
     2644#line 346 "lex.ll"
    26232645{ NAMEDOP_RETURN(RS); }
    26242646        YY_BREAK
    2625 case 157:
    2626 YY_RULE_SETUP
    2627 #line 344 "lex.ll"
     2647case 158:
     2648YY_RULE_SETUP
     2649#line 347 "lex.ll"
    26282650{ NAMEDOP_RETURN(LE); }
    26292651        YY_BREAK
    2630 case 158:
    2631 YY_RULE_SETUP
    2632 #line 345 "lex.ll"
     2652case 159:
     2653YY_RULE_SETUP
     2654#line 348 "lex.ll"
    26332655{ NAMEDOP_RETURN(GE); }
    26342656        YY_BREAK
    2635 case 159:
    2636 YY_RULE_SETUP
    2637 #line 346 "lex.ll"
     2657case 160:
     2658YY_RULE_SETUP
     2659#line 349 "lex.ll"
    26382660{ NAMEDOP_RETURN(ANDAND); }
    26392661        YY_BREAK
    2640 case 160:
    2641 YY_RULE_SETUP
    2642 #line 347 "lex.ll"
     2662case 161:
     2663YY_RULE_SETUP
     2664#line 350 "lex.ll"
    26432665{ NAMEDOP_RETURN(OROR); }
    26442666        YY_BREAK
    2645 case 161:
    2646 YY_RULE_SETUP
    2647 #line 348 "lex.ll"
     2667case 162:
     2668YY_RULE_SETUP
     2669#line 351 "lex.ll"
    26482670{ NAMEDOP_RETURN(ARROW); }
    26492671        YY_BREAK
    2650 case 162:
    2651 YY_RULE_SETUP
    2652 #line 349 "lex.ll"
     2672case 163:
     2673YY_RULE_SETUP
     2674#line 352 "lex.ll"
    26532675{ NAMEDOP_RETURN(PLUSassign); }
    26542676        YY_BREAK
    2655 case 163:
    2656 YY_RULE_SETUP
    2657 #line 350 "lex.ll"
     2677case 164:
     2678YY_RULE_SETUP
     2679#line 353 "lex.ll"
    26582680{ NAMEDOP_RETURN(MINUSassign); }
    26592681        YY_BREAK
    2660 case 164:
    2661 YY_RULE_SETUP
    2662 #line 351 "lex.ll"
     2682case 165:
     2683YY_RULE_SETUP
     2684#line 354 "lex.ll"
    26632685{ NAMEDOP_RETURN(MULTassign); }
    26642686        YY_BREAK
    2665 case 165:
    2666 YY_RULE_SETUP
    2667 #line 352 "lex.ll"
     2687case 166:
     2688YY_RULE_SETUP
     2689#line 355 "lex.ll"
    26682690{ NAMEDOP_RETURN(DIVassign); }
    26692691        YY_BREAK
    2670 case 166:
    2671 YY_RULE_SETUP
    2672 #line 353 "lex.ll"
     2692case 167:
     2693YY_RULE_SETUP
     2694#line 356 "lex.ll"
    26732695{ NAMEDOP_RETURN(MODassign); }
    26742696        YY_BREAK
    2675 case 167:
    2676 YY_RULE_SETUP
    2677 #line 354 "lex.ll"
     2697case 168:
     2698YY_RULE_SETUP
     2699#line 357 "lex.ll"
    26782700{ NAMEDOP_RETURN(ANDassign); }
    26792701        YY_BREAK
    2680 case 168:
    2681 YY_RULE_SETUP
    2682 #line 355 "lex.ll"
     2702case 169:
     2703YY_RULE_SETUP
     2704#line 358 "lex.ll"
    26832705{ NAMEDOP_RETURN(ORassign); }
    26842706        YY_BREAK
    2685 case 169:
    2686 YY_RULE_SETUP
    2687 #line 356 "lex.ll"
     2707case 170:
     2708YY_RULE_SETUP
     2709#line 359 "lex.ll"
    26882710{ NAMEDOP_RETURN(ERassign); }
    26892711        YY_BREAK
    2690 case 170:
    2691 YY_RULE_SETUP
    2692 #line 357 "lex.ll"
     2712case 171:
     2713YY_RULE_SETUP
     2714#line 360 "lex.ll"
    26932715{ NAMEDOP_RETURN(LSassign); }
    26942716        YY_BREAK
    2695 case 171:
    2696 YY_RULE_SETUP
    2697 #line 358 "lex.ll"
     2717case 172:
     2718YY_RULE_SETUP
     2719#line 361 "lex.ll"
    26982720{ NAMEDOP_RETURN(RSassign); }
    26992721        YY_BREAK
    2700 case 172:
    2701 YY_RULE_SETUP
    2702 #line 360 "lex.ll"
     2722case 173:
     2723YY_RULE_SETUP
     2724#line 363 "lex.ll"
    27032725{ NAMEDOP_RETURN(ATassign); }
    27042726        YY_BREAK
    27052727/* CFA, operator identifier */
    2706 case 173:
    2707 YY_RULE_SETUP
    2708 #line 363 "lex.ll"
     2728case 174:
     2729YY_RULE_SETUP
     2730#line 366 "lex.ll"
    27092731{ IDENTIFIER_RETURN(); }                                // unary
    27102732        YY_BREAK
    2711 case 174:
    2712 YY_RULE_SETUP
    2713 #line 364 "lex.ll"
     2733case 175:
     2734YY_RULE_SETUP
     2735#line 367 "lex.ll"
    27142736{ IDENTIFIER_RETURN(); }
    27152737        YY_BREAK
    2716 case 175:
    2717 YY_RULE_SETUP
    2718 #line 365 "lex.ll"
     2738case 176:
     2739YY_RULE_SETUP
     2740#line 368 "lex.ll"
    27192741{ IDENTIFIER_RETURN(); }
    27202742        YY_BREAK
    2721 case 176:
    2722 YY_RULE_SETUP
    2723 #line 366 "lex.ll"
     2743case 177:
     2744YY_RULE_SETUP
     2745#line 369 "lex.ll"
    27242746{ IDENTIFIER_RETURN(); }                // binary
    27252747        YY_BREAK
     
    27502772          an argument list.
    27512773        */
    2752 case 177:
    2753 YY_RULE_SETUP
    2754 #line 393 "lex.ll"
     2774case 178:
     2775YY_RULE_SETUP
     2776#line 396 "lex.ll"
    27552777{
    27562778        // 1 or 2 character unary operator ?
     
    27652787        YY_BREAK
    27662788/* unknown characters */
    2767 case 178:
    2768 YY_RULE_SETUP
    2769 #line 405 "lex.ll"
     2789case 179:
     2790YY_RULE_SETUP
     2791#line 408 "lex.ll"
    27702792{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    27712793        YY_BREAK
    2772 case 179:
    2773 YY_RULE_SETUP
    2774 #line 407 "lex.ll"
     2794case 180:
     2795YY_RULE_SETUP
     2796#line 410 "lex.ll"
    27752797ECHO;
    27762798        YY_BREAK
    2777 #line 2778 "Parser/lex.cc"
     2799#line 2800 "Parser/lex.cc"
    27782800case YY_STATE_EOF(INITIAL):
    27792801case YY_STATE_EOF(COMMENT):
     
    30723094                        {
    30733095                        yy_current_state = (int) yy_def[yy_current_state];
    3074                         if ( yy_current_state >= 876 )
     3096                        if ( yy_current_state >= 888 )
    30753097                                yy_c = yy_meta[(unsigned int) yy_c];
    30763098                        }
     
    31003122                {
    31013123                yy_current_state = (int) yy_def[yy_current_state];
    3102                 if ( yy_current_state >= 876 )
     3124                if ( yy_current_state >= 888 )
    31033125                        yy_c = yy_meta[(unsigned int) yy_c];
    31043126                }
    31053127        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    3106         yy_is_jam = (yy_current_state == 875);
     3128        yy_is_jam = (yy_current_state == 887);
    31073129
    31083130        return yy_is_jam ? 0 : yy_current_state;
     
    37503772#define YYTABLES_NAME "yytables"
    37513773
    3752 #line 407 "lex.ll"
     3774#line 410 "lex.ll"
    37533775
    37543776
  • src/Parser/lex.h

    r39786813 ra5a71d0  
    1010// Created On       : Sat Sep 22 08:58:10 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun  8 20:28:48 2015
    13 // Update Count     : 341
     12// Last Modified On : Mon Mar 21 18:18:06 2016
     13// Update Count     : 346
    1414//
    1515
     
    2020void yyerror( const char * );
    2121
     22#include <string>
     23#include "ParseNode.h"
    2224// External declarations for information sharing between lexer and scanner
    23 #include "TypedefTable.h"
     25class TypedefTable;
    2426extern TypedefTable typedefTable;
    2527
  • src/Parser/lex.ll

    r39786813 ra5a71d0  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Tue Feb  2 15:06:54 2016
    13  * Update Count     : 426
     12 * Last Modified On : Mon Mar 21 23:33:46 2016
     13 * Update Count     : 450
    1414 */
    1515
     
    2727
    2828#include "lex.h"
     29#include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    2930#include "ParseNode.h"
    30 #include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
     31#include "TypedefTable.h"
    3132
    3233char *yyfilename;
     
    4445#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    4546#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    46 #define IDENTIFIER_RETURN()     RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) )
     47#define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
    4748#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    4849
     
    9596fractional_constant ({decimal_digits}?"."{decimal_digits})|({decimal_digits}".")
    9697exponent "_"?[eE]"_"?[+-]?{decimal_digits}
    97                                 // GCC: D (double), LD (long double) and iI (imaginary) suffixes
    98 floating_suffix "_"?([fFdD]?|([lL]?)|([iI][lLfFdD]?)|([lLfFdD][iI]))
     98                                // GCC: D (double), DL (long double) and iI (imaginary) suffixes
     99floating_suffix "_"?([fFdDlL][iI]?|"DL"|[iI][lLfFdD]?)
     100                                //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI]))
    99101floating_constant (({fractional_constant}{exponent}?)|({decimal_digits}{exponent})){floating_suffix}?
    100102
     
    137139%%
    138140                                   /* line directives */
    139 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" {
     141^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
    140142        /* " stop highlighting */
    141143        char *end_num;
     
    201203__const                 { KEYWORD_RETURN(CONST); }                              // GCC
    202204__const__               { KEYWORD_RETURN(CONST); }                              // GCC
    203 context                 { KEYWORD_RETURN(CONTEXT); }                    // CFA
    204205continue                { KEYWORD_RETURN(CONTINUE); }
    205206default                 { KEYWORD_RETURN(DEFAULT); }
     
    237238_Noreturn               { KEYWORD_RETURN(NORETURN); }                   // C11
    238239__builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }                // GCC
     240otype                   { KEYWORD_RETURN(OTYPE); }                              // CFA
    239241register                { KEYWORD_RETURN(REGISTER); }
    240242restrict                { KEYWORD_RETURN(RESTRICT); }                   // C99
     
    254256throw                   { KEYWORD_RETURN(THROW); }                              // CFA
    255257throwResume             { KEYWORD_RETURN(THROWRESUME); }                // CFA
     258trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    256259try                             { KEYWORD_RETURN(TRY); }                                // CFA
    257 type                    { KEYWORD_RETURN(TYPE); }                               // CFA
    258260typedef                 { KEYWORD_RETURN(TYPEDEF); }
    259261typeof                  { KEYWORD_RETURN(TYPEOF); }                             // GCC
     
    262264union                   { KEYWORD_RETURN(UNION); }
    263265unsigned                { KEYWORD_RETURN(UNSIGNED); }
     266__builtin_va_list { KEYWORD_RETURN(VALIST); }                   // GCC
    264267void                    { KEYWORD_RETURN(VOID); }
    265268volatile                { KEYWORD_RETURN(VOLATILE); }
  • src/Parser/parser.cc

    r39786813 ra5a71d0  
    22
    33/* Bison implementation for Yacc-like parsers in C
    4 
     4   
    55      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
    6 
     6   
    77   This program is free software: you can redistribute it and/or modify
    88   it under the terms of the GNU General Public License as published by
    99   the Free Software Foundation, either version 3 of the License, or
    1010   (at your option) any later version.
    11 
     11   
    1212   This program is distributed in the hope that it will be useful,
    1313   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1414   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1515   GNU General Public License for more details.
    16 
     16   
    1717   You should have received a copy of the GNU General Public License
    1818   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     
    2727   Bison output files to be licensed under the GNU General Public
    2828   License without this special exception.
    29 
     29   
    3030   This special exception was added by the Free Software Foundation in
    3131   version 2.2 of Bison.  */
     
    7777#include <cstdio>
    7878#include <stack>
     79#include "lex.h"
     80#include "parser.h"
     81#include "ParseNode.h"
    7982#include "TypedefTable.h"
    80 #include "lex.h"
    81 #include "ParseNode.h"
    8283#include "TypeData.h"
    8384#include "LinkageSpec.h"
     
    9091
    9192/* Line 268 of yacc.c  */
    92 #line 93 "Parser/parser.cc"
     93#line 94 "Parser/parser.cc"
    9394
    9495/* Enabling traces.  */
     
    138139     SIGNED = 277,
    139140     UNSIGNED = 278,
    140      BOOL = 279,
    141      COMPLEX = 280,
    142      IMAGINARY = 281,
    143      TYPEOF = 282,
    144      LABEL = 283,
    145      ENUM = 284,
    146      STRUCT = 285,
    147      UNION = 286,
    148      TYPE = 287,
    149      FTYPE = 288,
    150      DTYPE = 289,
    151      CONTEXT = 290,
    152      SIZEOF = 291,
    153      OFFSETOF = 292,
    154      ATTRIBUTE = 293,
    155      EXTENSION = 294,
    156      IF = 295,
    157      ELSE = 296,
    158      SWITCH = 297,
    159      CASE = 298,
    160      DEFAULT = 299,
    161      DO = 300,
    162      WHILE = 301,
    163      FOR = 302,
    164      BREAK = 303,
    165      CONTINUE = 304,
    166      GOTO = 305,
    167      RETURN = 306,
    168      CHOOSE = 307,
    169      DISABLE = 308,
    170      ENABLE = 309,
    171      FALLTHRU = 310,
    172      TRY = 311,
    173      CATCH = 312,
    174      CATCHRESUME = 313,
    175      FINALLY = 314,
    176      THROW = 315,
    177      THROWRESUME = 316,
    178      AT = 317,
    179      ASM = 318,
    180      ALIGNAS = 319,
    181      ALIGNOF = 320,
    182      ATOMIC = 321,
    183      GENERIC = 322,
    184      NORETURN = 323,
    185      STATICASSERT = 324,
    186      THREADLOCAL = 325,
    187      IDENTIFIER = 326,
    188      QUOTED_IDENTIFIER = 327,
    189      TYPEDEFname = 328,
    190      TYPEGENname = 329,
    191      ATTR_IDENTIFIER = 330,
    192      ATTR_TYPEDEFname = 331,
    193      ATTR_TYPEGENname = 332,
    194      INTEGERconstant = 333,
    195      FLOATINGconstant = 334,
    196      CHARACTERconstant = 335,
    197      STRINGliteral = 336,
    198      ZERO = 337,
    199      ONE = 338,
    200      ARROW = 339,
    201      ICR = 340,
    202      DECR = 341,
    203      LS = 342,
    204      RS = 343,
    205      LE = 344,
    206      GE = 345,
    207      EQ = 346,
    208      NE = 347,
    209      ANDAND = 348,
    210      OROR = 349,
    211      ELLIPSIS = 350,
    212      MULTassign = 351,
    213      DIVassign = 352,
    214      MODassign = 353,
    215      PLUSassign = 354,
    216      MINUSassign = 355,
    217      LSassign = 356,
    218      RSassign = 357,
    219      ANDassign = 358,
    220      ERassign = 359,
    221      ORassign = 360,
    222      ATassign = 361,
    223      THEN = 362
     141     VALIST = 279,
     142     BOOL = 280,
     143     COMPLEX = 281,
     144     IMAGINARY = 282,
     145     TYPEOF = 283,
     146     LABEL = 284,
     147     ENUM = 285,
     148     STRUCT = 286,
     149     UNION = 287,
     150     OTYPE = 288,
     151     FTYPE = 289,
     152     DTYPE = 290,
     153     TRAIT = 291,
     154     SIZEOF = 292,
     155     OFFSETOF = 293,
     156     ATTRIBUTE = 294,
     157     EXTENSION = 295,
     158     IF = 296,
     159     ELSE = 297,
     160     SWITCH = 298,
     161     CASE = 299,
     162     DEFAULT = 300,
     163     DO = 301,
     164     WHILE = 302,
     165     FOR = 303,
     166     BREAK = 304,
     167     CONTINUE = 305,
     168     GOTO = 306,
     169     RETURN = 307,
     170     CHOOSE = 308,
     171     DISABLE = 309,
     172     ENABLE = 310,
     173     FALLTHRU = 311,
     174     TRY = 312,
     175     CATCH = 313,
     176     CATCHRESUME = 314,
     177     FINALLY = 315,
     178     THROW = 316,
     179     THROWRESUME = 317,
     180     AT = 318,
     181     ASM = 319,
     182     ALIGNAS = 320,
     183     ALIGNOF = 321,
     184     ATOMIC = 322,
     185     GENERIC = 323,
     186     NORETURN = 324,
     187     STATICASSERT = 325,
     188     THREADLOCAL = 326,
     189     IDENTIFIER = 327,
     190     QUOTED_IDENTIFIER = 328,
     191     TYPEDEFname = 329,
     192     TYPEGENname = 330,
     193     ATTR_IDENTIFIER = 331,
     194     ATTR_TYPEDEFname = 332,
     195     ATTR_TYPEGENname = 333,
     196     INTEGERconstant = 334,
     197     FLOATINGconstant = 335,
     198     CHARACTERconstant = 336,
     199     STRINGliteral = 337,
     200     ZERO = 338,
     201     ONE = 339,
     202     ARROW = 340,
     203     ICR = 341,
     204     DECR = 342,
     205     LS = 343,
     206     RS = 344,
     207     LE = 345,
     208     GE = 346,
     209     EQ = 347,
     210     NE = 348,
     211     ANDAND = 349,
     212     OROR = 350,
     213     ELLIPSIS = 351,
     214     MULTassign = 352,
     215     DIVassign = 353,
     216     MODassign = 354,
     217     PLUSassign = 355,
     218     MINUSassign = 356,
     219     LSassign = 357,
     220     RSassign = 358,
     221     ANDassign = 359,
     222     ERassign = 360,
     223     ORassign = 361,
     224     ATassign = 362,
     225     THEN = 363
    224226   };
    225227#endif
     
    246248#define SIGNED 277
    247249#define UNSIGNED 278
    248 #define BOOL 279
    249 #define COMPLEX 280
    250 #define IMAGINARY 281
    251 #define TYPEOF 282
    252 #define LABEL 283
    253 #define ENUM 284
    254 #define STRUCT 285
    255 #define UNION 286
    256 #define TYPE 287
    257 #define FTYPE 288
    258 #define DTYPE 289
    259 #define CONTEXT 290
    260 #define SIZEOF 291
    261 #define OFFSETOF 292
    262 #define ATTRIBUTE 293
    263 #define EXTENSION 294
    264 #define IF 295
    265 #define ELSE 296
    266 #define SWITCH 297
    267 #define CASE 298
    268 #define DEFAULT 299
    269 #define DO 300
    270 #define WHILE 301
    271 #define FOR 302
    272 #define BREAK 303
    273 #define CONTINUE 304
    274 #define GOTO 305
    275 #define RETURN 306
    276 #define CHOOSE 307
    277 #define DISABLE 308
    278 #define ENABLE 309
    279 #define FALLTHRU 310
    280 #define TRY 311
    281 #define CATCH 312
    282 #define CATCHRESUME 313
    283 #define FINALLY 314
    284 #define THROW 315
    285 #define THROWRESUME 316
    286 #define AT 317
    287 #define ASM 318
    288 #define ALIGNAS 319
    289 #define ALIGNOF 320
    290 #define ATOMIC 321
    291 #define GENERIC 322
    292 #define NORETURN 323
    293 #define STATICASSERT 324
    294 #define THREADLOCAL 325
    295 #define IDENTIFIER 326
    296 #define QUOTED_IDENTIFIER 327
    297 #define TYPEDEFname 328
    298 #define TYPEGENname 329
    299 #define ATTR_IDENTIFIER 330
    300 #define ATTR_TYPEDEFname 331
    301 #define ATTR_TYPEGENname 332
    302 #define INTEGERconstant 333
    303 #define FLOATINGconstant 334
    304 #define CHARACTERconstant 335
    305 #define STRINGliteral 336
    306 #define ZERO 337
    307 #define ONE 338
    308 #define ARROW 339
    309 #define ICR 340
    310 #define DECR 341
    311 #define LS 342
    312 #define RS 343
    313 #define LE 344
    314 #define GE 345
    315 #define EQ 346
    316 #define NE 347
    317 #define ANDAND 348
    318 #define OROR 349
    319 #define ELLIPSIS 350
    320 #define MULTassign 351
    321 #define DIVassign 352
    322 #define MODassign 353
    323 #define PLUSassign 354
    324 #define MINUSassign 355
    325 #define LSassign 356
    326 #define RSassign 357
    327 #define ANDassign 358
    328 #define ERassign 359
    329 #define ORassign 360
    330 #define ATassign 361
    331 #define THEN 362
     250#define VALIST 279
     251#define BOOL 280
     252#define COMPLEX 281
     253#define IMAGINARY 282
     254#define TYPEOF 283
     255#define LABEL 284
     256#define ENUM 285
     257#define STRUCT 286
     258#define UNION 287
     259#define OTYPE 288
     260#define FTYPE 289
     261#define DTYPE 290
     262#define TRAIT 291
     263#define SIZEOF 292
     264#define OFFSETOF 293
     265#define ATTRIBUTE 294
     266#define EXTENSION 295
     267#define IF 296
     268#define ELSE 297
     269#define SWITCH 298
     270#define CASE 299
     271#define DEFAULT 300
     272#define DO 301
     273#define WHILE 302
     274#define FOR 303
     275#define BREAK 304
     276#define CONTINUE 305
     277#define GOTO 306
     278#define RETURN 307
     279#define CHOOSE 308
     280#define DISABLE 309
     281#define ENABLE 310
     282#define FALLTHRU 311
     283#define TRY 312
     284#define CATCH 313
     285#define CATCHRESUME 314
     286#define FINALLY 315
     287#define THROW 316
     288#define THROWRESUME 317
     289#define AT 318
     290#define ASM 319
     291#define ALIGNAS 320
     292#define ALIGNOF 321
     293#define ATOMIC 322
     294#define GENERIC 323
     295#define NORETURN 324
     296#define STATICASSERT 325
     297#define THREADLOCAL 326
     298#define IDENTIFIER 327
     299#define QUOTED_IDENTIFIER 328
     300#define TYPEDEFname 329
     301#define TYPEGENname 330
     302#define ATTR_IDENTIFIER 331
     303#define ATTR_TYPEDEFname 332
     304#define ATTR_TYPEGENname 333
     305#define INTEGERconstant 334
     306#define FLOATINGconstant 335
     307#define CHARACTERconstant 336
     308#define STRINGliteral 337
     309#define ZERO 338
     310#define ONE 339
     311#define ARROW 340
     312#define ICR 341
     313#define DECR 342
     314#define LS 343
     315#define RS 344
     316#define LE 345
     317#define GE 346
     318#define EQ 347
     319#define NE 348
     320#define ANDAND 349
     321#define OROR 350
     322#define ELLIPSIS 351
     323#define MULTassign 352
     324#define DIVassign 353
     325#define MODassign 354
     326#define PLUSassign 355
     327#define MINUSassign 356
     328#define LSassign 357
     329#define RSassign 358
     330#define ANDassign 359
     331#define ERassign 360
     332#define ORassign 361
     333#define ATassign 362
     334#define THEN 363
    332335
    333336
     
    339342
    340343/* Line 293 of yacc.c  */
    341 #line 110 "parser.yy"
     344#line 112 "parser.yy"
    342345
    343346        Token tok;
     
    356359
    357360/* Line 293 of yacc.c  */
    358 #line 359 "Parser/parser.cc"
     361#line 362 "Parser/parser.cc"
    359362} YYSTYPE;
    360363# define YYSTYPE_IS_TRIVIAL 1
     
    368371
    369372/* Line 343 of yacc.c  */
    370 #line 371 "Parser/parser.cc"
     373#line 374 "Parser/parser.cc"
    371374
    372375#ifdef short
     
    585588
    586589/* YYFINAL -- State number of the termination state.  */
    587 #define YYFINAL  248
     590#define YYFINAL  249
    588591/* YYLAST -- Last index in YYTABLE.  */
    589 #define YYLAST   11042
     592#define YYLAST   11290
    590593
    591594/* YYNTOKENS -- Number of terminals.  */
    592 #define YYNTOKENS  132
     595#define YYNTOKENS  133
    593596/* YYNNTS -- Number of nonterminals.  */
    594597#define YYNNTS  238
    595598/* YYNRULES -- Number of rules.  */
    596 #define YYNRULES  751
     599#define YYNRULES  752
    597600/* YYNRULES -- Number of states.  */
    598 #define YYNSTATES  1578
     601#define YYNSTATES  1579
    599602
    600603/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    601604#define YYUNDEFTOK  2
    602 #define YYMAXUTOK   362
     605#define YYMAXUTOK   363
    603606
    604607#define YYTRANSLATE(YYX)                                                \
     
    611614       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    612615       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    613        2,     2,     2,   117,     2,     2,     2,   124,   119,     2,
    614      108,   109,   118,   120,   115,   121,   112,   123,     2,     2,
    615        2,     2,     2,     2,     2,     2,     2,     2,   116,   131,
    616      125,   130,   126,   129,     2,     2,     2,     2,     2,     2,
     616       2,     2,     2,   118,     2,     2,     2,   125,   120,     2,
     617     109,   110,   119,   121,   116,   122,   113,   124,     2,     2,
     618       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
     619     126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
    617620       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    618621       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    619        2,   110,     2,   111,   127,     2,     2,     2,     2,     2,
     622       2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
    620623       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    621624       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    622        2,     2,     2,   113,   128,   114,   122,     2,     2,     2,
     625       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
    623626       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    624627       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    644647      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    645648      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    646      105,   106,   107
     649     105,   106,   107,   108
    647650};
    648651
     
    685688    1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
    686689    1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,  1195,
    687     1197,  1199,  1201,  1203,  1205,  1208,  1211,  1215,  1219,  1221,
    688     1225,  1227,  1230,  1233,  1236,  1241,  1246,  1251,  1256,  1258,
    689     1261,  1264,  1268,  1270,  1273,  1276,  1278,  1281,  1284,  1288,
    690     1290,  1293,  1296,  1298,  1300,  1305,  1308,  1314,  1322,  1325,
    691     1328,  1331,  1333,  1336,  1339,  1343,  1346,  1350,  1352,  1355,
    692     1359,  1362,  1365,  1370,  1371,  1373,  1376,  1379,  1381,  1382,
    693     1384,  1387,  1390,  1396,  1403,  1406,  1409,  1414,  1415,  1418,
    694     1419,  1421,  1423,  1425,  1431,  1437,  1443,  1445,  1451,  1457,
    695     1467,  1469,  1475,  1476,  1478,  1480,  1486,  1488,  1490,  1496,
    696     1502,  1504,  1508,  1512,  1517,  1519,  1521,  1523,  1525,  1528,
    697     1530,  1534,  1538,  1540,  1543,  1545,  1549,  1551,  1553,  1555,
    698     1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1574,  1576,
    699     1578,  1580,  1583,  1584,  1587,  1590,  1592,  1597,  1598,  1600,
    700     1603,  1607,  1612,  1615,  1618,  1620,  1623,  1625,  1628,  1634,
    701     1640,  1648,  1655,  1657,  1660,  1663,  1667,  1669,  1672,  1675,
    702     1680,  1683,  1688,  1689,  1694,  1697,  1699,  1701,  1703,  1704,
    703     1707,  1713,  1719,  1733,  1735,  1737,  1741,  1745,  1748,  1752,
    704     1756,  1759,  1764,  1766,  1773,  1783,  1784,  1796,  1798,  1802,
    705     1806,  1810,  1812,  1814,  1820,  1823,  1829,  1830,  1832,  1834,
    706     1838,  1839,  1841,  1843,  1845,  1847,  1848,  1855,  1858,  1860,
    707     1863,  1868,  1871,  1875,  1879,  1883,  1888,  1894,  1900,  1906,
    708     1913,  1915,  1917,  1919,  1923,  1924,  1930,  1931,  1933,  1935,
    709     1938,  1945,  1947,  1951,  1952,  1954,  1959,  1961,  1963,  1965,
    710     1967,  1970,  1972,  1975,  1978,  1980,  1984,  1987,  1991,  1995,
    711     1998,  2003,  2008,  2012,  2021,  2025,  2028,  2030,  2033,  2040,
    712     2049,  2053,  2056,  2060,  2064,  2069,  2074,  2078,  2080,  2082,
    713     2084,  2089,  2096,  2100,  2103,  2107,  2111,  2116,  2121,  2125,
    714     2128,  2130,  2133,  2136,  2138,  2142,  2145,  2149,  2153,  2156,
    715     2161,  2166,  2170,  2177,  2186,  2190,  2193,  2195,  2198,  2201,
    716     2204,  2208,  2212,  2215,  2220,  2225,  2229,  2236,  2245,  2249,
    717     2252,  2254,  2257,  2260,  2262,  2264,  2267,  2271,  2275,  2278,
    718     2283,  2290,  2299,  2301,  2304,  2307,  2309,  2312,  2315,  2319,
    719     2323,  2325,  2330,  2335,  2339,  2345,  2354,  2358,  2361,  2365,
    720     2367,  2373,  2379,  2386,  2393,  2395,  2398,  2401,  2403,  2406,
    721     2409,  2413,  2417,  2419,  2424,  2429,  2433,  2439,  2448,  2452,
    722     2454,  2457,  2459,  2462,  2469,  2475,  2482,  2490,  2498,  2500,
    723     2503,  2506,  2508,  2511,  2514,  2518,  2522,  2524,  2529,  2534,
    724     2538,  2547,  2551,  2553,  2555,  2558,  2560,  2562,  2565,  2569,
    725     2572,  2576,  2579,  2583,  2587,  2590,  2595,  2599,  2602,  2606,
    726     2609,  2614,  2618,  2621,  2628,  2635,  2642,  2650,  2652,  2655,
    727     2657,  2659,  2661,  2664,  2668,  2671,  2675,  2678,  2682,  2686,
    728     2691,  2694,  2698,  2703,  2706,  2712,  2718,  2725,  2732,  2733,
    729     2735,  2736
     690    1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,  1221,
     691    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
     692    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
     693    1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1316,  1324,
     694    1327,  1330,  1333,  1335,  1338,  1341,  1345,  1348,  1352,  1354,
     695    1357,  1361,  1364,  1367,  1372,  1373,  1375,  1378,  1381,  1383,
     696    1384,  1386,  1389,  1392,  1398,  1405,  1408,  1411,  1416,  1417,
     697    1420,  1421,  1423,  1425,  1427,  1433,  1439,  1445,  1447,  1453,
     698    1459,  1469,  1471,  1477,  1478,  1480,  1482,  1488,  1490,  1492,
     699    1498,  1504,  1506,  1510,  1514,  1519,  1521,  1523,  1525,  1527,
     700    1530,  1532,  1536,  1540,  1542,  1545,  1547,  1551,  1553,  1555,
     701    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1576,
     702    1578,  1580,  1582,  1585,  1586,  1589,  1592,  1594,  1599,  1600,
     703    1602,  1605,  1609,  1614,  1617,  1620,  1622,  1625,  1627,  1630,
     704    1636,  1642,  1650,  1657,  1659,  1662,  1665,  1669,  1671,  1674,
     705    1677,  1682,  1685,  1690,  1691,  1696,  1699,  1701,  1703,  1705,
     706    1706,  1709,  1715,  1721,  1735,  1737,  1739,  1743,  1747,  1750,
     707    1754,  1758,  1761,  1766,  1768,  1775,  1785,  1786,  1798,  1800,
     708    1804,  1808,  1812,  1814,  1816,  1822,  1825,  1831,  1832,  1834,
     709    1836,  1840,  1841,  1843,  1845,  1847,  1849,  1850,  1857,  1860,
     710    1862,  1865,  1870,  1873,  1877,  1881,  1885,  1890,  1896,  1902,
     711    1908,  1915,  1917,  1919,  1921,  1925,  1926,  1932,  1933,  1935,
     712    1937,  1940,  1947,  1949,  1953,  1954,  1956,  1961,  1963,  1965,
     713    1967,  1969,  1972,  1974,  1977,  1980,  1982,  1986,  1989,  1993,
     714    1997,  2000,  2005,  2010,  2014,  2023,  2027,  2030,  2032,  2035,
     715    2042,  2051,  2055,  2058,  2062,  2066,  2071,  2076,  2080,  2082,
     716    2084,  2086,  2091,  2098,  2102,  2105,  2109,  2113,  2118,  2123,
     717    2127,  2130,  2132,  2135,  2138,  2140,  2144,  2147,  2151,  2155,
     718    2158,  2163,  2168,  2172,  2179,  2188,  2192,  2195,  2197,  2200,
     719    2203,  2206,  2210,  2214,  2217,  2222,  2227,  2231,  2238,  2247,
     720    2251,  2254,  2256,  2259,  2262,  2264,  2266,  2269,  2273,  2277,
     721    2280,  2285,  2292,  2301,  2303,  2306,  2309,  2311,  2314,  2317,
     722    2321,  2325,  2327,  2332,  2337,  2341,  2347,  2356,  2360,  2363,
     723    2367,  2369,  2375,  2381,  2388,  2395,  2397,  2400,  2403,  2405,
     724    2408,  2411,  2415,  2419,  2421,  2426,  2431,  2435,  2441,  2450,
     725    2454,  2456,  2459,  2461,  2464,  2471,  2477,  2484,  2492,  2500,
     726    2502,  2505,  2508,  2510,  2513,  2516,  2520,  2524,  2526,  2531,
     727    2536,  2540,  2549,  2553,  2555,  2557,  2560,  2562,  2564,  2567,
     728    2571,  2574,  2578,  2581,  2585,  2589,  2592,  2597,  2601,  2604,
     729    2608,  2611,  2616,  2620,  2623,  2630,  2637,  2644,  2652,  2654,
     730    2657,  2659,  2661,  2663,  2666,  2670,  2673,  2677,  2680,  2684,
     731    2688,  2693,  2696,  2700,  2705,  2708,  2714,  2720,  2727,  2734,
     732    2735,  2737,  2738
    730733};
    731734
     
    733736static const yytype_int16 yyrhs[] =
    734737{
    735      298,     0,    -1,    -1,    -1,    78,    -1,    79,    -1,    80,
    736       -1,    71,    -1,    75,    -1,   139,    -1,    71,    -1,    75,
    737       -1,    71,    -1,   139,    -1,    82,    -1,    83,    -1,    81,
    738       -1,   140,    81,    -1,    71,    -1,   139,    -1,   108,   167,
    739      109,    -1,   108,   171,   109,    -1,   141,    -1,   142,   110,
    740      133,   162,   134,   111,    -1,   142,   108,   143,   109,    -1,
    741      142,   112,   138,    -1,   142,   112,   110,   133,   145,   134,
    742      111,    -1,   142,    84,   138,    -1,   142,    84,   110,   133,
    743      145,   134,   111,    -1,   142,    85,    -1,   142,    86,    -1,
    744      108,   271,   109,   113,   275,   368,   114,    -1,   142,   113,
    745      143,   114,    -1,   144,    -1,   143,   115,   144,    -1,    -1,
    746      162,    -1,   138,   116,   162,    -1,   110,   133,   162,   134,
    747      111,   116,   162,    -1,   110,   133,   162,   115,   165,   134,
    748      111,   116,   162,    -1,   146,    -1,   145,   115,   146,    -1,
    749      138,    -1,   138,   112,   146,    -1,   138,   112,   110,   133,
    750      145,   134,   111,    -1,   138,    84,   146,    -1,   138,    84,
    751      110,   133,   145,   134,   111,    -1,   142,    -1,   135,    -1,
    752      140,    -1,    85,   147,    -1,    86,   147,    -1,    39,   149,
    753       -1,   148,   149,    -1,   117,   149,    -1,   118,   149,    -1,
    754       36,   147,    -1,    36,   108,   271,   109,    -1,    37,   108,
    755      271,   115,   138,   109,    -1,    75,    -1,    75,   108,   272,
    756      109,    -1,    75,   108,   144,   109,    -1,    65,   147,    -1,
    757       65,   108,   271,   109,    -1,    93,   138,    -1,   119,    -1,
    758      120,    -1,   121,    -1,   122,    -1,   147,    -1,   108,   271,
    759      109,   149,    -1,   108,   271,   109,   164,    -1,   149,    -1,
    760      150,   118,   149,    -1,   150,   123,   149,    -1,   150,   124,
    761      149,    -1,   150,    -1,   151,   120,   150,    -1,   151,   121,
    762      150,    -1,   151,    -1,   152,    87,   151,    -1,   152,    88,
    763      151,    -1,   152,    -1,   153,   125,   152,    -1,   153,   126,
    764      152,    -1,   153,    89,   152,    -1,   153,    90,   152,    -1,
    765      153,    -1,   154,    91,   153,    -1,   154,    92,   153,    -1,
    766      154,    -1,   155,   119,   154,    -1,   155,    -1,   156,   127,
    767      155,    -1,   156,    -1,   157,   128,   156,    -1,   157,    -1,
    768      158,    93,   157,    -1,   158,    -1,   159,    94,   158,    -1,
    769      159,    -1,   159,   129,   167,   116,   160,    -1,   159,   129,
    770      116,   160,    -1,   159,   129,   167,   116,   164,    -1,   160,
    771       -1,   160,    -1,   147,   130,   162,    -1,   147,   166,   162,
    772       -1,   164,   369,    -1,    -1,   162,    -1,   110,   111,    -1,
    773      110,   133,   162,   134,   111,    -1,   110,   133,   115,   165,
    774      134,   111,    -1,   110,   133,   162,   115,   165,   134,   111,
    775       -1,   163,    -1,   165,   115,   163,    -1,    96,    -1,    97,
    776       -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
    777       -1,   103,    -1,   104,    -1,   105,    -1,   162,    -1,   167,
    778      115,   162,    -1,    -1,   167,    -1,   170,    -1,   171,    -1,
    779      175,    -1,   176,    -1,   188,    -1,   190,    -1,   191,    -1,
    780      196,    -1,   127,   142,   113,   143,   114,   131,    -1,   138,
    781      116,   308,   169,    -1,   113,   114,    -1,   113,   133,   133,
    782      207,   172,   134,   114,    -1,   173,    -1,   172,   133,   173,
    783       -1,   210,    -1,    39,   210,    -1,   304,    -1,   169,   134,
    784       -1,   169,    -1,   174,   169,    -1,   168,   131,    -1,    40,
    785      108,   167,   109,   169,    -1,    40,   108,   167,   109,   169,
    786       41,   169,    -1,    42,   108,   167,   109,   181,    -1,    42,
    787      108,   167,   109,   113,   133,   203,   182,   114,    -1,    52,
    788      108,   167,   109,   181,    -1,    52,   108,   167,   109,   113,
    789      133,   203,   184,   114,    -1,   161,    -1,   161,    95,   161,
    790       -1,   306,    -1,   177,    -1,   178,   115,   177,    -1,    43,
    791      178,   116,    -1,    44,   116,    -1,   179,    -1,   180,   179,
    792       -1,   180,   169,    -1,    -1,   183,    -1,   180,   174,    -1,
    793      183,   180,   174,    -1,    -1,   185,    -1,   180,   187,    -1,
    794      180,   174,   186,    -1,   185,   180,   187,    -1,   185,   180,
    795      174,   186,    -1,    -1,   187,    -1,    55,    -1,    55,   131,
    796       -1,    46,   108,   167,   109,   169,    -1,    45,   169,    46,
    797      108,   167,   109,   131,    -1,    47,   108,   133,   189,   109,
    798      169,    -1,   168,   134,   131,   168,   131,   168,    -1,   210,
    799      168,   131,   168,    -1,    50,   138,   131,    -1,    50,   118,
    800      167,   131,    -1,    49,   131,    -1,    49,   138,   131,    -1,
    801       48,   131,    -1,    48,   138,   131,    -1,    51,   168,   131,
    802       -1,    60,   163,   131,    -1,    61,   163,   131,    -1,    61,
    803      163,    62,   162,   131,    -1,    56,   171,   192,    -1,    56,
    804      171,   194,    -1,    56,   171,   192,   194,    -1,   193,    -1,
    805       57,   108,    95,   109,   171,    -1,   193,    57,   108,    95,
    806      109,   171,    -1,    58,   108,    95,   109,   171,    -1,   193,
    807       58,   108,    95,   109,   171,    -1,    57,   108,   133,   133,
    808      195,   134,   109,   171,   134,    -1,   193,    57,   108,   133,
    809      133,   195,   134,   109,   171,   134,    -1,    58,   108,   133,
    810      133,   195,   134,   109,   171,   134,    -1,   193,    58,   108,
    811      133,   133,   195,   134,   109,   171,   134,    -1,    59,   171,
    812       -1,   223,    -1,   223,   305,    -1,   223,   353,    -1,   362,
    813      138,    -1,   362,    -1,    63,   197,   108,   140,   109,   131,
    814       -1,    63,   197,   108,   140,   116,   198,   109,   131,    -1,
    815       63,   197,   108,   140,   116,   198,   116,   198,   109,   131,
    816       -1,    63,   197,   108,   140,   116,   198,   116,   198,   116,
    817      201,   109,   131,    -1,    63,   197,    50,   108,   140,   116,
    818      116,   198,   116,   201,   116,   202,   109,   131,    -1,    -1,
    819       11,    -1,    -1,   199,    -1,   200,    -1,   199,   115,   200,
    820       -1,   140,   108,   161,   109,    -1,   110,   161,   111,   140,
    821      108,   161,   109,    -1,    -1,   140,    -1,   201,   115,   140,
    822       -1,   138,    -1,   202,   115,   138,    -1,   134,    -1,   204,
    823       -1,   210,    -1,   204,   133,   210,    -1,   134,    -1,   206,
    824       -1,   220,    -1,   206,   133,   220,    -1,    -1,   208,    -1,
    825       28,   209,   131,    -1,   208,    28,   209,   131,    -1,   270,
    826       -1,   209,   115,   270,    -1,   211,    -1,   220,    -1,   212,
    827      134,   131,    -1,   217,   134,   131,    -1,   214,   134,   131,
    828       -1,   289,   134,   131,    -1,   292,   134,   131,    -1,   213,
    829      273,    -1,   229,   213,   273,    -1,   212,   134,   115,   133,
    830      268,   273,    -1,   363,   268,   307,    -1,   366,   268,   307,
    831       -1,   225,   366,   268,   307,    -1,   215,    -1,   225,   215,
    832       -1,   229,   215,    -1,   229,   225,   215,    -1,   214,   134,
    833      115,   133,   268,    -1,   110,   111,   268,   108,   133,   256,
    834      134,   109,    -1,   366,   268,   108,   133,   256,   134,   109,
    835       -1,   216,   268,   108,   133,   256,   134,   109,    -1,   110,
    836      133,   258,   134,   111,    -1,   110,   133,   258,   134,   115,
    837      133,   259,   134,   111,    -1,     3,   213,    -1,     3,   215,
    838       -1,   217,   134,   115,   133,   138,    -1,     3,   223,   305,
    839       -1,   218,   134,   115,   133,   305,    -1,   225,     3,   223,
    840      305,    -1,   223,     3,   305,    -1,   223,     3,   225,   305,
    841       -1,     3,   138,   130,   162,    -1,   219,   134,   115,   133,
    842      138,   130,   162,    -1,   221,   134,   131,    -1,   218,   134,
    843      131,    -1,   219,   134,   131,    -1,   238,   134,   131,    -1,
    844      222,   305,   307,   273,    -1,   221,   115,   308,   305,   307,
    845      273,    -1,   234,    -1,   238,    -1,   240,    -1,   279,    -1,
    846      235,    -1,   239,    -1,   241,    -1,   280,    -1,    -1,   225,
    847       -1,   226,    -1,   225,   226,    -1,   227,    -1,   310,    -1,
    848       10,    -1,    12,    -1,    11,    -1,    14,    -1,    66,    -1,
    849       -1,    13,   108,   228,   282,   109,    -1,   230,    -1,   225,
    850      230,    -1,   229,   225,   230,    -1,   231,    -1,   230,   231,
    851       -1,   232,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
    852       -1,     8,    -1,     9,    -1,    68,    -1,    70,    -1,    16,
     738     299,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
     739      -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
     740      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
     741      -1,   141,    82,    -1,    72,    -1,   140,    -1,   109,   168,
     742     110,    -1,   109,   172,   110,    -1,   142,    -1,   143,   111,
     743     134,   163,   135,   112,    -1,   143,   109,   144,   110,    -1,
     744     143,   113,   139,    -1,   143,   113,   111,   134,   146,   135,
     745     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
     746     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
     747     109,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
     748     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
     749     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
     750     112,   117,   163,    -1,   111,   134,   163,   116,   166,   135,
     751     112,   117,   163,    -1,   147,    -1,   146,   116,   147,    -1,
     752     139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
     753     146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
     754     111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
     755     141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
     756      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
     757      37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
     758     272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
     759     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
     760      66,   109,   272,   110,    -1,    94,   139,    -1,   120,    -1,
     761     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   272,
     762     110,   150,    -1,   109,   272,   110,   165,    -1,   150,    -1,
     763     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
     764     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
     765     151,    -1,   152,    -1,   153,    88,   152,    -1,   153,    89,
     766     152,    -1,   153,    -1,   154,   126,   153,    -1,   154,   127,
     767     153,    -1,   154,    90,   153,    -1,   154,    91,   153,    -1,
     768     154,    -1,   155,    92,   154,    -1,   155,    93,   154,    -1,
     769     155,    -1,   156,   120,   155,    -1,   156,    -1,   157,   128,
     770     156,    -1,   157,    -1,   158,   129,   157,    -1,   158,    -1,
     771     159,    94,   158,    -1,   159,    -1,   160,    95,   159,    -1,
     772     160,    -1,   160,   130,   168,   117,   161,    -1,   160,   130,
     773     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
     774      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
     775      -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
     776     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
     777     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
     778      -1,   164,    -1,   166,   116,   164,    -1,    97,    -1,    98,
     779      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
     780      -1,   104,    -1,   105,    -1,   106,    -1,   163,    -1,   168,
     781     116,   163,    -1,    -1,   168,    -1,   171,    -1,   172,    -1,
     782     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
     783     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
     784     117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
     785     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
     786      -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
     787      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
     788     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
     789      42,   170,    -1,    43,   109,   168,   110,   182,    -1,    43,
     790     109,   168,   110,   114,   134,   204,   183,   115,    -1,    53,
     791     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
     792     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
     793      -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
     794     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
     795      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
     796     184,   181,   175,    -1,    -1,   186,    -1,   181,   188,    -1,
     797     181,   175,   187,    -1,   186,   181,   188,    -1,   186,   181,
     798     175,   187,    -1,    -1,   188,    -1,    56,    -1,    56,   132,
     799      -1,    47,   109,   168,   110,   170,    -1,    46,   170,    47,
     800     109,   168,   110,   132,    -1,    48,   109,   134,   190,   110,
     801     170,    -1,   169,   135,   132,   169,   132,   169,    -1,   211,
     802     169,   132,   169,    -1,    51,   139,   132,    -1,    51,   119,
     803     168,   132,    -1,    50,   132,    -1,    50,   139,   132,    -1,
     804      49,   132,    -1,    49,   139,   132,    -1,    52,   169,   132,
     805      -1,    61,   164,   132,    -1,    62,   164,   132,    -1,    62,
     806     164,    63,   163,   132,    -1,    57,   172,   193,    -1,    57,
     807     172,   195,    -1,    57,   172,   193,   195,    -1,   194,    -1,
     808      58,   109,    96,   110,   172,    -1,   194,    58,   109,    96,
     809     110,   172,    -1,    59,   109,    96,   110,   172,    -1,   194,
     810      59,   109,    96,   110,   172,    -1,    58,   109,   134,   134,
     811     196,   135,   110,   172,   135,    -1,   194,    58,   109,   134,
     812     134,   196,   135,   110,   172,   135,    -1,    59,   109,   134,
     813     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
     814     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
     815      -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
     816     139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
     817      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
     818      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
     819      -1,    64,   198,   109,   141,   117,   199,   117,   199,   117,
     820     202,   110,   132,    -1,    64,   198,    51,   109,   141,   117,
     821     117,   199,   117,   202,   117,   203,   110,   132,    -1,    -1,
     822      11,    -1,    -1,   200,    -1,   201,    -1,   200,   116,   201,
     823      -1,   141,   109,   162,   110,    -1,   111,   162,   112,   141,
     824     109,   162,   110,    -1,    -1,   141,    -1,   202,   116,   141,
     825      -1,   139,    -1,   203,   116,   139,    -1,   135,    -1,   205,
     826      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
     827      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
     828      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
     829      -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
     830     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
     831      -1,   290,   135,   132,    -1,   293,   135,   132,    -1,   214,
     832     274,    -1,   230,   214,   274,    -1,   213,   135,   116,   134,
     833     269,   274,    -1,   364,   269,   308,    -1,   367,   269,   308,
     834      -1,   226,   367,   269,   308,    -1,   216,    -1,   226,   216,
     835      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
     836     116,   134,   269,    -1,   111,   112,   269,   109,   134,   257,
     837     135,   110,    -1,   367,   269,   109,   134,   257,   135,   110,
     838      -1,   217,   269,   109,   134,   257,   135,   110,    -1,   111,
     839     134,   259,   135,   112,    -1,   111,   134,   259,   135,   116,
     840     134,   260,   135,   112,    -1,     3,   214,    -1,     3,   216,
     841      -1,   218,   135,   116,   134,   139,    -1,     3,   224,   306,
     842      -1,   219,   135,   116,   134,   306,    -1,   226,     3,   224,
     843     306,    -1,   224,     3,   306,    -1,   224,     3,   226,   306,
     844      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
     845     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
     846     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
     847     223,   306,   308,   274,    -1,   222,   116,   309,   306,   308,
     848     274,    -1,   235,    -1,   239,    -1,   241,    -1,   280,    -1,
     849     236,    -1,   240,    -1,   242,    -1,   281,    -1,    -1,   226,
     850      -1,   227,    -1,   226,   227,    -1,   228,    -1,   311,    -1,
     851      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
     852      -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
     853     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
     854      -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
     855      -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
    853856      -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
    854       -1,    22,    -1,    23,    -1,    15,    -1,    24,    -1,    25,
    855       -1,    26,    -1,   235,    -1,   229,   235,    -1,   234,   231,
    856       -1,   234,   231,   225,    -1,   234,   231,   235,    -1,   236,
    857       -1,   224,   237,   224,    -1,   233,    -1,   225,   233,    -1,
    858      236,   226,    -1,   236,   233,    -1,    27,   108,   272,   109,
    859       -1,    27,   108,   167,   109,    -1,    77,   108,   272,   109,
    860       -1,    77,   108,   167,   109,    -1,   239,    -1,   229,   239,
    861       -1,   238,   231,    -1,   238,   231,   225,    -1,   242,    -1,
    862      225,   242,    -1,   239,   226,    -1,   241,    -1,   229,   241,
    863       -1,   240,   231,    -1,   240,   231,   225,    -1,    73,    -1,
    864      225,    73,    -1,   241,   226,    -1,   243,    -1,   253,    -1,
    865      244,   113,   245,   114,    -1,   244,   270,    -1,   244,   270,
    866      113,   245,   114,    -1,   244,   108,   288,   109,   113,   245,
    867      114,    -1,   244,   281,    -1,    30,   308,    -1,    31,   308,
    868       -1,   246,    -1,   245,   246,    -1,   247,   131,    -1,    39,
    869      247,   131,    -1,   248,   131,    -1,    39,   248,   131,    -1,
    870      362,    -1,   362,   270,    -1,   247,   115,   270,    -1,   247,
    871      115,    -1,   223,   249,    -1,   248,   115,   308,   249,    -1,
    872       -1,   251,    -1,   314,   250,    -1,   327,   250,    -1,   353,
    873       -1,    -1,   251,    -1,   116,   161,    -1,    29,   308,    -1,
    874      252,   113,   254,   368,   114,    -1,   252,   270,   113,   254,
    875      368,   114,    -1,   252,   270,    -1,   270,   255,    -1,   254,
    876      115,   270,   255,    -1,    -1,   130,   161,    -1,    -1,   257,
    877       -1,   259,    -1,   258,    -1,   258,   134,   115,   133,   259,
    878       -1,   259,   134,   115,   133,    95,    -1,   258,   134,   115,
    879      133,    95,    -1,   263,    -1,   259,   134,   115,   133,   263,
    880       -1,   258,   134,   115,   133,   263,    -1,   258,   134,   115,
    881      133,   259,   134,   115,   133,   263,    -1,   264,    -1,   259,
    882      134,   115,   133,   264,    -1,    -1,   261,    -1,   262,    -1,
    883      262,   134,   115,   133,    95,    -1,   266,    -1,   265,    -1,
    884      262,   134,   115,   133,   266,    -1,   262,   134,   115,   133,
    885      265,    -1,   265,    -1,   358,   268,   369,    -1,   366,   268,
    886      369,    -1,   225,   366,   268,   369,    -1,   215,    -1,   266,
    887       -1,   358,    -1,   366,    -1,   225,   366,    -1,   367,    -1,
    888      222,   332,   369,    -1,   222,   336,   369,    -1,   222,    -1,
    889      222,   347,    -1,   138,    -1,   267,   115,   138,    -1,   136,
    890       -1,    73,    -1,    74,    -1,   137,    -1,    73,    -1,    74,
    891       -1,   138,    -1,    73,    -1,    74,    -1,   362,    -1,   223,
    892       -1,   223,   353,    -1,   362,    -1,   367,    -1,   223,    -1,
    893      223,   341,    -1,    -1,   130,   274,    -1,   106,   274,    -1,
    894      162,    -1,   113,   275,   368,   114,    -1,    -1,   274,    -1,
    895      276,   274,    -1,   275,   115,   274,    -1,   275,   115,   276,
    896      274,    -1,   277,   116,    -1,   270,   116,    -1,   278,    -1,
    897      277,   278,    -1,    79,    -1,   112,   270,    -1,   110,   133,
    898      162,   134,   111,    -1,   110,   133,   306,   134,   111,    -1,
    899      110,   133,   161,    95,   161,   134,   111,    -1,   112,   110,
    900      133,   145,   134,   111,    -1,   280,    -1,   229,   280,    -1,
    901      279,   231,    -1,   279,   231,   225,    -1,   281,    -1,   225,
    902      281,    -1,   280,   226,    -1,    74,   108,   288,   109,    -1,
    903      283,   369,    -1,   282,   115,   283,   369,    -1,    -1,   285,
    904      270,   284,   286,    -1,   223,   332,    -1,    32,    -1,    34,
    905       -1,    33,    -1,    -1,   286,   287,    -1,   128,   270,   108,
    906      288,   109,    -1,   128,   113,   133,   294,   114,    -1,   128,
    907      108,   133,   282,   134,   109,   113,   133,   294,   114,   108,
    908      288,   109,    -1,   272,    -1,   162,    -1,   288,   115,   272,
    909       -1,   288,   115,   162,    -1,    32,   290,    -1,   230,    32,
    910      290,    -1,   289,   115,   290,    -1,   291,   286,    -1,   291,
    911      286,   130,   272,    -1,   270,    -1,   269,   108,   133,   282,
    912      134,   109,    -1,    35,   270,   108,   133,   282,   134,   109,
    913      113,   114,    -1,    -1,    35,   270,   108,   133,   282,   134,
    914      109,   113,   293,   294,   114,    -1,   295,    -1,   294,   133,
    915      295,    -1,   296,   134,   131,    -1,   297,   134,   131,    -1,
    916      213,    -1,   215,    -1,   296,   134,   115,   133,   268,    -1,
    917      223,   305,    -1,   297,   134,   115,   133,   305,    -1,    -1,
    918      299,    -1,   301,    -1,   299,   133,   301,    -1,    -1,   299,
    919       -1,   210,    -1,   303,    -1,   196,    -1,    -1,     5,    81,
    920      302,   113,   300,   114,    -1,    39,   301,    -1,   304,    -1,
    921      319,   171,    -1,   323,   133,   205,   171,    -1,   214,   171,
    922       -1,   222,   319,   171,    -1,   225,   319,   171,    -1,   229,
    923      319,   171,    -1,   229,   225,   319,   171,    -1,   222,   323,
    924      133,   205,   171,    -1,   225,   323,   133,   205,   171,    -1,
    925      229,   323,   133,   205,   171,    -1,   229,   225,   323,   133,
    926      205,   171,    -1,   314,    -1,   319,    -1,   327,    -1,   161,
    927      122,   161,    -1,    -1,    63,   108,   140,   109,   308,    -1,
    928       -1,   309,    -1,   310,    -1,   309,   310,    -1,    38,   108,
    929      108,   311,   109,   109,    -1,   312,    -1,   311,   115,   312,
    930       -1,    -1,   313,    -1,   313,   108,   168,   109,    -1,   268,
    931       -1,   232,    -1,   233,    -1,   226,    -1,   315,   308,    -1,
    932      316,    -1,   317,   308,    -1,   318,   308,    -1,   136,    -1,
    933      108,   315,   109,    -1,   118,   314,    -1,   118,   225,   314,
    934       -1,   108,   316,   109,    -1,   315,   345,    -1,   108,   316,
    935      109,   345,    -1,   108,   317,   109,   346,    -1,   108,   317,
    936      109,    -1,   108,   316,   109,   108,   133,   260,   134,   109,
    937       -1,   108,   318,   109,    -1,   320,   308,    -1,   321,    -1,
    938      322,   308,    -1,   315,   108,   133,   260,   134,   109,    -1,
    939      108,   321,   109,   108,   133,   260,   134,   109,    -1,   108,
    940      320,   109,    -1,   118,   319,    -1,   118,   225,   319,    -1,
    941      108,   321,   109,    -1,   108,   321,   109,   345,    -1,   108,
    942      322,   109,   346,    -1,   108,   322,   109,    -1,   324,    -1,
    943      325,    -1,   326,    -1,   315,   108,   267,   109,    -1,   108,
    944      325,   109,   108,   267,   109,    -1,   108,   324,   109,    -1,
    945      118,   323,    -1,   118,   225,   323,    -1,   108,   325,   109,
    946       -1,   108,   325,   109,   345,    -1,   108,   326,   109,   346,
    947       -1,   108,   326,   109,    -1,   328,   308,    -1,   329,    -1,
    948      330,   308,    -1,   331,   308,    -1,   337,    -1,   108,   328,
    949      109,    -1,   118,   327,    -1,   118,   225,   327,    -1,   108,
    950      329,   109,    -1,   328,   345,    -1,   108,   329,   109,   345,
    951       -1,   108,   330,   109,   346,    -1,   108,   330,   109,    -1,
    952      328,   108,   133,   260,   134,   109,    -1,   108,   329,   109,
    953      108,   133,   260,   134,   109,    -1,   108,   331,   109,    -1,
    954      315,   308,    -1,   333,    -1,   334,   308,    -1,   335,   308,
    955       -1,   118,   332,    -1,   118,   225,   332,    -1,   108,   333,
    956      109,    -1,   315,   351,    -1,   108,   333,   109,   345,    -1,
    957      108,   334,   109,   346,    -1,   108,   334,   109,    -1,   315,
    958      108,   133,   260,   134,   109,    -1,   108,   333,   109,   108,
    959      133,   260,   134,   109,    -1,   108,   335,   109,    -1,   337,
    960      308,    -1,   338,    -1,   339,   308,    -1,   340,   308,    -1,
    961       73,    -1,    74,    -1,   118,   336,    -1,   118,   225,   336,
    962       -1,   108,   338,   109,    -1,   337,   351,    -1,   108,   338,
    963      109,   351,    -1,   337,   108,   133,   260,   134,   109,    -1,
    964      108,   338,   109,   108,   133,   260,   134,   109,    -1,   342,
    965       -1,   343,   308,    -1,   344,   308,    -1,   118,    -1,   118,
    966      225,    -1,   118,   341,    -1,   118,   225,   341,    -1,   108,
    967      342,   109,    -1,   345,    -1,   108,   342,   109,   345,    -1,
    968      108,   343,   109,   346,    -1,   108,   343,   109,    -1,   108,
    969      133,   260,   134,   109,    -1,   108,   342,   109,   108,   133,
    970      260,   134,   109,    -1,   108,   344,   109,    -1,   110,   111,
    971       -1,   110,   111,   346,    -1,   346,    -1,   110,   133,   162,
    972      134,   111,    -1,   110,   133,   118,   134,   111,    -1,   346,
    973      110,   133,   162,   134,   111,    -1,   346,   110,   133,   118,
    974      134,   111,    -1,   348,    -1,   349,   308,    -1,   350,   308,
    975       -1,   118,    -1,   118,   225,    -1,   118,   347,    -1,   118,
    976      225,   347,    -1,   108,   348,   109,    -1,   351,    -1,   108,
    977      348,   109,   351,    -1,   108,   349,   109,   346,    -1,   108,
    978      349,   109,    -1,   108,   133,   260,   134,   109,    -1,   108,
    979      348,   109,   108,   133,   260,   134,   109,    -1,   108,   350,
    980      109,    -1,   352,    -1,   352,   346,    -1,   346,    -1,   110,
    981      111,    -1,   110,   133,   225,   118,   134,   111,    -1,   110,
    982      133,   225,   134,   111,    -1,   110,   133,   225,   162,   134,
    983      111,    -1,   110,   133,     7,   224,   162,   134,   111,    -1,
    984      110,   133,   225,     7,   162,   134,   111,    -1,   354,    -1,
    985      355,   308,    -1,   356,   308,    -1,   118,    -1,   118,   225,
    986       -1,   118,   353,    -1,   118,   225,   353,    -1,   108,   354,
    987      109,    -1,   345,    -1,   108,   354,   109,   345,    -1,   108,
    988      355,   109,   346,    -1,   108,   355,   109,    -1,   108,   354,
    989      109,   108,   133,   260,   134,   109,    -1,   108,   356,   109,
    990       -1,   358,    -1,   366,    -1,   225,   366,    -1,   359,    -1,
    991      360,    -1,   118,   223,    -1,   225,   118,   223,    -1,   118,
    992      367,    -1,   225,   118,   367,    -1,   118,   357,    -1,   225,
    993      118,   357,    -1,   110,   111,   223,    -1,   361,   223,    -1,
    994      110,   111,   346,   223,    -1,   361,   346,   223,    -1,   346,
    995      223,    -1,   110,   111,   359,    -1,   361,   359,    -1,   110,
    996      111,   346,   359,    -1,   361,   346,   359,    -1,   346,   359,
    997       -1,   110,   133,   225,   118,   134,   111,    -1,   110,   133,
    998      225,   162,   134,   111,    -1,   110,   133,   229,   162,   134,
    999      111,    -1,   110,   133,   229,   225,   162,   134,   111,    -1,
    1000      366,    -1,   225,   366,    -1,   363,    -1,   364,    -1,   365,
    1001       -1,   118,   223,    -1,   225,   118,   223,    -1,   118,   367,
    1002       -1,   225,   118,   367,    -1,   118,   362,    -1,   225,   118,
    1003      362,    -1,   110,   111,   223,    -1,   110,   111,   346,   223,
    1004       -1,   346,   223,    -1,   110,   111,   364,    -1,   110,   111,
    1005      346,   364,    -1,   346,   364,    -1,   110,   133,   259,   134,
    1006      111,    -1,   110,   111,   108,   256,   109,    -1,   366,   108,
    1007      133,   256,   134,   109,    -1,   216,   108,   133,   256,   134,
    1008      109,    -1,    -1,   115,    -1,    -1,   130,   162,    -1
     857      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
     858      -1,    27,    -1,    24,    -1,   236,    -1,   230,   236,    -1,
     859     235,   232,    -1,   235,   232,   226,    -1,   235,   232,   236,
     860      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
     861     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
     862     273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
     863     273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
     864     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
     865     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
     866     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
     867      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
     868     254,    -1,   245,   114,   246,   115,    -1,   245,   271,    -1,
     869     245,   271,   114,   246,   115,    -1,   245,   109,   289,   110,
     870     114,   246,   115,    -1,   245,   282,    -1,    31,   309,    -1,
     871      32,   309,    -1,   247,    -1,   246,   247,    -1,   248,   132,
     872      -1,    40,   248,   132,    -1,   249,   132,    -1,    40,   249,
     873     132,    -1,   363,    -1,   363,   271,    -1,   248,   116,   271,
     874      -1,   248,   116,    -1,   224,   250,    -1,   249,   116,   309,
     875     250,    -1,    -1,   252,    -1,   315,   251,    -1,   328,   251,
     876      -1,   354,    -1,    -1,   252,    -1,   117,   162,    -1,    30,
     877     309,    -1,   253,   114,   255,   369,   115,    -1,   253,   271,
     878     114,   255,   369,   115,    -1,   253,   271,    -1,   271,   256,
     879      -1,   255,   116,   271,   256,    -1,    -1,   131,   162,    -1,
     880      -1,   258,    -1,   260,    -1,   259,    -1,   259,   135,   116,
     881     134,   260,    -1,   260,   135,   116,   134,    96,    -1,   259,
     882     135,   116,   134,    96,    -1,   264,    -1,   260,   135,   116,
     883     134,   264,    -1,   259,   135,   116,   134,   264,    -1,   259,
     884     135,   116,   134,   260,   135,   116,   134,   264,    -1,   265,
     885      -1,   260,   135,   116,   134,   265,    -1,    -1,   262,    -1,
     886     263,    -1,   263,   135,   116,   134,    96,    -1,   267,    -1,
     887     266,    -1,   263,   135,   116,   134,   267,    -1,   263,   135,
     888     116,   134,   266,    -1,   266,    -1,   359,   269,   370,    -1,
     889     367,   269,   370,    -1,   226,   367,   269,   370,    -1,   216,
     890      -1,   267,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
     891     368,    -1,   223,   333,   370,    -1,   223,   337,   370,    -1,
     892     223,    -1,   223,   348,    -1,   139,    -1,   268,   116,   139,
     893      -1,   137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,
     894      -1,    75,    -1,   139,    -1,    74,    -1,    75,    -1,   363,
     895      -1,   224,    -1,   224,   354,    -1,   363,    -1,   368,    -1,
     896     224,    -1,   224,   342,    -1,    -1,   131,   275,    -1,   107,
     897     275,    -1,   163,    -1,   114,   276,   369,   115,    -1,    -1,
     898     275,    -1,   277,   275,    -1,   276,   116,   275,    -1,   276,
     899     116,   277,   275,    -1,   278,   117,    -1,   271,   117,    -1,
     900     279,    -1,   278,   279,    -1,    80,    -1,   113,   271,    -1,
     901     111,   134,   163,   135,   112,    -1,   111,   134,   307,   135,
     902     112,    -1,   111,   134,   162,    96,   162,   135,   112,    -1,
     903     113,   111,   134,   146,   135,   112,    -1,   281,    -1,   230,
     904     281,    -1,   280,   232,    -1,   280,   232,   226,    -1,   282,
     905      -1,   226,   282,    -1,   281,   227,    -1,    75,   109,   289,
     906     110,    -1,   284,   370,    -1,   283,   116,   284,   370,    -1,
     907      -1,   286,   271,   285,   287,    -1,   224,   333,    -1,    33,
     908      -1,    35,    -1,    34,    -1,    -1,   287,   288,    -1,   129,
     909     271,   109,   289,   110,    -1,   129,   114,   134,   295,   115,
     910      -1,   129,   109,   134,   283,   135,   110,   114,   134,   295,
     911     115,   109,   289,   110,    -1,   273,    -1,   163,    -1,   289,
     912     116,   273,    -1,   289,   116,   163,    -1,    33,   291,    -1,
     913     231,    33,   291,    -1,   290,   116,   291,    -1,   292,   287,
     914      -1,   292,   287,   131,   273,    -1,   271,    -1,   270,   109,
     915     134,   283,   135,   110,    -1,    36,   271,   109,   134,   283,
     916     135,   110,   114,   115,    -1,    -1,    36,   271,   109,   134,
     917     283,   135,   110,   114,   294,   295,   115,    -1,   296,    -1,
     918     295,   134,   296,    -1,   297,   135,   132,    -1,   298,   135,
     919     132,    -1,   214,    -1,   216,    -1,   297,   135,   116,   134,
     920     269,    -1,   224,   306,    -1,   298,   135,   116,   134,   306,
     921      -1,    -1,   300,    -1,   302,    -1,   300,   134,   302,    -1,
     922      -1,   300,    -1,   211,    -1,   304,    -1,   197,    -1,    -1,
     923       5,    82,   303,   114,   301,   115,    -1,    40,   302,    -1,
     924     305,    -1,   320,   172,    -1,   324,   134,   206,   172,    -1,
     925     215,   172,    -1,   223,   320,   172,    -1,   226,   320,   172,
     926      -1,   230,   320,   172,    -1,   230,   226,   320,   172,    -1,
     927     223,   324,   134,   206,   172,    -1,   226,   324,   134,   206,
     928     172,    -1,   230,   324,   134,   206,   172,    -1,   230,   226,
     929     324,   134,   206,   172,    -1,   315,    -1,   320,    -1,   328,
     930      -1,   162,   123,   162,    -1,    -1,    64,   109,   141,   110,
     931     309,    -1,    -1,   310,    -1,   311,    -1,   310,   311,    -1,
     932      39,   109,   109,   312,   110,   110,    -1,   313,    -1,   312,
     933     116,   313,    -1,    -1,   314,    -1,   314,   109,   169,   110,
     934      -1,   269,    -1,   233,    -1,   234,    -1,   227,    -1,   316,
     935     309,    -1,   317,    -1,   318,   309,    -1,   319,   309,    -1,
     936     137,    -1,   109,   316,   110,    -1,   119,   315,    -1,   119,
     937     226,   315,    -1,   109,   317,   110,    -1,   316,   346,    -1,
     938     109,   317,   110,   346,    -1,   109,   318,   110,   347,    -1,
     939     109,   318,   110,    -1,   109,   317,   110,   109,   134,   261,
     940     135,   110,    -1,   109,   319,   110,    -1,   321,   309,    -1,
     941     322,    -1,   323,   309,    -1,   316,   109,   134,   261,   135,
     942     110,    -1,   109,   322,   110,   109,   134,   261,   135,   110,
     943      -1,   109,   321,   110,    -1,   119,   320,    -1,   119,   226,
     944     320,    -1,   109,   322,   110,    -1,   109,   322,   110,   346,
     945      -1,   109,   323,   110,   347,    -1,   109,   323,   110,    -1,
     946     325,    -1,   326,    -1,   327,    -1,   316,   109,   268,   110,
     947      -1,   109,   326,   110,   109,   268,   110,    -1,   109,   325,
     948     110,    -1,   119,   324,    -1,   119,   226,   324,    -1,   109,
     949     326,   110,    -1,   109,   326,   110,   346,    -1,   109,   327,
     950     110,   347,    -1,   109,   327,   110,    -1,   329,   309,    -1,
     951     330,    -1,   331,   309,    -1,   332,   309,    -1,   338,    -1,
     952     109,   329,   110,    -1,   119,   328,    -1,   119,   226,   328,
     953      -1,   109,   330,   110,    -1,   329,   346,    -1,   109,   330,
     954     110,   346,    -1,   109,   331,   110,   347,    -1,   109,   331,
     955     110,    -1,   329,   109,   134,   261,   135,   110,    -1,   109,
     956     330,   110,   109,   134,   261,   135,   110,    -1,   109,   332,
     957     110,    -1,   316,   309,    -1,   334,    -1,   335,   309,    -1,
     958     336,   309,    -1,   119,   333,    -1,   119,   226,   333,    -1,
     959     109,   334,   110,    -1,   316,   352,    -1,   109,   334,   110,
     960     346,    -1,   109,   335,   110,   347,    -1,   109,   335,   110,
     961      -1,   316,   109,   134,   261,   135,   110,    -1,   109,   334,
     962     110,   109,   134,   261,   135,   110,    -1,   109,   336,   110,
     963      -1,   338,   309,    -1,   339,    -1,   340,   309,    -1,   341,
     964     309,    -1,    74,    -1,    75,    -1,   119,   337,    -1,   119,
     965     226,   337,    -1,   109,   339,   110,    -1,   338,   352,    -1,
     966     109,   339,   110,   352,    -1,   338,   109,   134,   261,   135,
     967     110,    -1,   109,   339,   110,   109,   134,   261,   135,   110,
     968      -1,   343,    -1,   344,   309,    -1,   345,   309,    -1,   119,
     969      -1,   119,   226,    -1,   119,   342,    -1,   119,   226,   342,
     970      -1,   109,   343,   110,    -1,   346,    -1,   109,   343,   110,
     971     346,    -1,   109,   344,   110,   347,    -1,   109,   344,   110,
     972      -1,   109,   134,   261,   135,   110,    -1,   109,   343,   110,
     973     109,   134,   261,   135,   110,    -1,   109,   345,   110,    -1,
     974     111,   112,    -1,   111,   112,   347,    -1,   347,    -1,   111,
     975     134,   163,   135,   112,    -1,   111,   134,   119,   135,   112,
     976      -1,   347,   111,   134,   163,   135,   112,    -1,   347,   111,
     977     134,   119,   135,   112,    -1,   349,    -1,   350,   309,    -1,
     978     351,   309,    -1,   119,    -1,   119,   226,    -1,   119,   348,
     979      -1,   119,   226,   348,    -1,   109,   349,   110,    -1,   352,
     980      -1,   109,   349,   110,   352,    -1,   109,   350,   110,   347,
     981      -1,   109,   350,   110,    -1,   109,   134,   261,   135,   110,
     982      -1,   109,   349,   110,   109,   134,   261,   135,   110,    -1,
     983     109,   351,   110,    -1,   353,    -1,   353,   347,    -1,   347,
     984      -1,   111,   112,    -1,   111,   134,   226,   119,   135,   112,
     985      -1,   111,   134,   226,   135,   112,    -1,   111,   134,   226,
     986     163,   135,   112,    -1,   111,   134,     7,   225,   163,   135,
     987     112,    -1,   111,   134,   226,     7,   163,   135,   112,    -1,
     988     355,    -1,   356,   309,    -1,   357,   309,    -1,   119,    -1,
     989     119,   226,    -1,   119,   354,    -1,   119,   226,   354,    -1,
     990     109,   355,   110,    -1,   346,    -1,   109,   355,   110,   346,
     991      -1,   109,   356,   110,   347,    -1,   109,   356,   110,    -1,
     992     109,   355,   110,   109,   134,   261,   135,   110,    -1,   109,
     993     357,   110,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
     994     360,    -1,   361,    -1,   119,   224,    -1,   226,   119,   224,
     995      -1,   119,   368,    -1,   226,   119,   368,    -1,   119,   358,
     996      -1,   226,   119,   358,    -1,   111,   112,   224,    -1,   362,
     997     224,    -1,   111,   112,   347,   224,    -1,   362,   347,   224,
     998      -1,   347,   224,    -1,   111,   112,   360,    -1,   362,   360,
     999      -1,   111,   112,   347,   360,    -1,   362,   347,   360,    -1,
     1000     347,   360,    -1,   111,   134,   226,   119,   135,   112,    -1,
     1001     111,   134,   226,   163,   135,   112,    -1,   111,   134,   230,
     1002     163,   135,   112,    -1,   111,   134,   230,   226,   163,   135,
     1003     112,    -1,   367,    -1,   226,   367,    -1,   364,    -1,   365,
     1004      -1,   366,    -1,   119,   224,    -1,   226,   119,   224,    -1,
     1005     119,   368,    -1,   226,   119,   368,    -1,   119,   363,    -1,
     1006     226,   119,   363,    -1,   111,   112,   224,    -1,   111,   112,
     1007     347,   224,    -1,   347,   224,    -1,   111,   112,   365,    -1,
     1008     111,   112,   347,   365,    -1,   347,   365,    -1,   111,   134,
     1009     260,   135,   112,    -1,   111,   112,   109,   257,   110,    -1,
     1010     367,   109,   134,   257,   135,   110,    -1,   217,   109,   134,
     1011     257,   135,   110,    -1,    -1,   116,    -1,    -1,   131,   163,
     1012      -1
    10091013};
    10101014
     
    10121016static const yytype_uint16 yyrline[] =
    10131017{
    1014        0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
    1015      317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
    1016      343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
    1017      369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
    1018      402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
    1019      429,   431,   433,   435,   437,   439,   445,   447,   449,   451,
    1020      453,   455,   457,   459,   461,   466,   467,   468,   469,   473,
    1021      474,   476,   481,   482,   484,   486,   491,   492,   494,   499,
    1022      500,   502,   507,   508,   510,   512,   514,   519,   520,   522,
    1023      527,   528,   533,   534,   539,   540,   545,   546,   551,   552,
    1024      557,   558,   560,   562,   567,   572,   573,   575,   577,   583,
    1025      584,   590,   592,   594,   596,   601,   602,   607,   608,   609,
    1026      610,   611,   612,   613,   614,   615,   616,   620,   621,   627,
    1027      628,   634,   635,   636,   637,   638,   639,   640,   641,   642,
    1028      651,   658,   660,   670,   671,   676,   678,   680,   682,   686,
    1029      687,   692,   697,   700,   702,   704,   709,   711,   719,   720,
    1030      722,   726,   727,   732,   733,   738,   739,   743,   748,   749,
    1031      753,   755,   761,   762,   766,   768,   770,   772,   778,   779,
    1032      783,   784,   788,   790,   792,   797,   799,   804,   806,   810,
    1033      813,   817,   820,   824,   826,   830,   832,   839,   841,   843,
    1034      852,   854,   856,   858,   860,   865,   867,   869,   871,   876,
    1035      889,   890,   895,   897,   902,   906,   908,   910,   912,   914,
    1036      920,   921,   927,   928,   932,   933,   938,   940,   946,   947,
    1037      949,   954,   956,   963,   965,   969,   970,   975,   977,   981,
    1038      982,   986,   988,   992,   993,   997,   998,  1002,  1003,  1018,
    1039     1019,  1020,  1021,  1022,  1026,  1031,  1038,  1048,  1053,  1058,
    1040     1066,  1071,  1076,  1081,  1086,  1094,  1116,  1121,  1128,  1130,
    1041     1137,  1142,  1147,  1158,  1163,  1168,  1173,  1178,  1187,  1192,
    1042     1200,  1201,  1202,  1203,  1209,  1214,  1222,  1223,  1224,  1225,
    1043     1229,  1230,  1231,  1232,  1237,  1238,  1247,  1248,  1253,  1254,
    1044     1259,  1261,  1263,  1265,  1267,  1270,  1269,  1281,  1282,  1284,
    1045     1294,  1295,  1300,  1304,  1306,  1308,  1310,  1312,  1314,  1316,
    1046     1318,  1323,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,
    1047     1341,  1343,  1345,  1351,  1352,  1354,  1356,  1358,  1363,  1364,
    1048     1370,  1371,  1373,  1375,  1380,  1382,  1384,  1386,  1391,  1392,
    1049     1394,  1396,  1401,  1402,  1404,  1409,  1410,  1412,  1414,  1419,
    1050     1421,  1423,  1428,  1429,  1433,  1435,  1437,  1439,  1441,  1446,
    1051     1448,  1453,  1455,  1460,  1461,  1463,  1464,  1469,  1470,  1472,
    1052     1474,  1479,  1481,  1487,  1488,  1490,  1493,  1496,  1501,  1502,
    1053     1507,  1512,  1516,  1518,  1520,  1525,  1527,  1533,  1534,  1542,
    1054     1543,  1547,  1548,  1549,  1551,  1553,  1560,  1561,  1563,  1565,
    1055     1570,  1571,  1577,  1578,  1582,  1583,  1588,  1589,  1590,  1592,
    1056     1600,  1601,  1603,  1606,  1608,  1612,  1613,  1614,  1616,  1618,
    1057     1622,  1627,  1635,  1636,  1645,  1647,  1652,  1653,  1654,  1658,
    1058     1659,  1660,  1664,  1665,  1666,  1670,  1671,  1672,  1677,  1678,
    1059     1679,  1680,  1686,  1687,  1689,  1694,  1695,  1700,  1701,  1702,
    1060     1703,  1704,  1719,  1720,  1725,  1726,  1734,  1736,  1738,  1741,
    1061     1743,  1745,  1768,  1769,  1771,  1773,  1778,  1779,  1781,  1786,
    1062     1791,  1792,  1798,  1797,  1801,  1805,  1807,  1809,  1815,  1816,
    1063     1821,  1826,  1828,  1833,  1835,  1836,  1838,  1843,  1845,  1847,
    1064     1852,  1854,  1859,  1864,  1872,  1878,  1877,  1891,  1892,  1897,
    1065     1898,  1902,  1907,  1912,  1920,  1925,  1936,  1937,  1948,  1949,
    1066     1955,  1956,  1960,  1961,  1962,  1965,  1964,  1975,  1980,  1985,
    1067     1991,  2000,  2006,  2012,  2018,  2024,  2032,  2038,  2046,  2052,
    1068     2061,  2062,  2063,  2067,  2071,  2073,  2078,  2079,  2083,  2084,
    1069     2089,  2095,  2096,  2099,  2101,  2102,  2106,  2107,  2108,  2109,
    1070     2143,  2145,  2146,  2148,  2153,  2158,  2163,  2165,  2167,  2172,
    1071     2174,  2176,  2178,  2183,  2185,  2195,  2197,  2198,  2203,  2205,
    1072     2207,  2212,  2214,  2216,  2221,  2223,  2225,  2234,  2235,  2236,
    1073     2240,  2242,  2244,  2249,  2251,  2253,  2258,  2260,  2262,  2277,
    1074     2279,  2280,  2282,  2287,  2288,  2293,  2295,  2297,  2302,  2304,
    1075     2306,  2308,  2313,  2315,  2317,  2327,  2329,  2330,  2332,  2337,
    1076     2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2392,
    1077     2394,  2395,  2397,  2402,  2407,  2415,  2417,  2419,  2424,  2426,
    1078     2431,  2433,  2447,  2448,  2450,  2455,  2457,  2459,  2461,  2463,
    1079     2468,  2469,  2471,  2473,  2478,  2480,  2482,  2488,  2490,  2492,
    1080     2496,  2498,  2500,  2502,  2516,  2517,  2519,  2524,  2526,  2528,
    1081     2530,  2532,  2537,  2538,  2540,  2542,  2547,  2549,  2551,  2557,
    1082     2558,  2560,  2569,  2572,  2574,  2577,  2579,  2581,  2594,  2595,
    1083     2597,  2602,  2604,  2606,  2608,  2610,  2615,  2616,  2618,  2620,
    1084     2625,  2627,  2635,  2636,  2637,  2642,  2643,  2647,  2649,  2651,
    1085     2653,  2655,  2657,  2664,  2666,  2668,  2670,  2672,  2674,  2676,
    1086     2678,  2680,  2682,  2687,  2689,  2691,  2696,  2722,  2723,  2725,
    1087     2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,  2751,  2753,
    1088     2755,  2757,  2759,  2761,  2766,  2771,  2773,  2775,  2793,  2795,
    1089     2800,  2801
     1018       0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
     1019     319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
     1020     345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
     1021     371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
     1022     404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
     1023     431,   433,   435,   437,   439,   441,   447,   449,   451,   453,
     1024     455,   457,   459,   461,   463,   468,   469,   470,   471,   475,
     1025     476,   478,   483,   484,   486,   488,   493,   494,   496,   501,
     1026     502,   504,   509,   510,   512,   514,   516,   521,   522,   524,
     1027     529,   530,   535,   536,   541,   542,   547,   548,   553,   554,
     1028     559,   560,   562,   564,   569,   574,   575,   577,   579,   585,
     1029     586,   592,   594,   596,   598,   603,   604,   609,   610,   611,
     1030     612,   613,   614,   615,   616,   617,   618,   622,   623,   629,
     1031     630,   636,   637,   638,   639,   640,   641,   642,   643,   644,
     1032     653,   660,   662,   672,   673,   678,   680,   682,   684,   688,
     1033     689,   694,   699,   702,   704,   706,   711,   713,   721,   722,
     1034     724,   728,   729,   734,   735,   740,   741,   745,   750,   751,
     1035     755,   757,   763,   764,   768,   770,   772,   774,   780,   781,
     1036     785,   786,   790,   792,   794,   799,   801,   806,   808,   812,
     1037     815,   819,   822,   826,   828,   832,   834,   841,   843,   845,
     1038     854,   856,   858,   860,   862,   867,   869,   871,   873,   878,
     1039     891,   892,   897,   899,   904,   908,   910,   912,   914,   916,
     1040     922,   923,   929,   930,   934,   935,   940,   942,   948,   949,
     1041     951,   956,   958,   965,   967,   971,   972,   977,   979,   983,
     1042     984,   988,   990,   994,   995,   999,  1000,  1004,  1005,  1020,
     1043    1021,  1022,  1023,  1024,  1028,  1033,  1040,  1050,  1055,  1060,
     1044    1068,  1073,  1078,  1083,  1088,  1096,  1118,  1123,  1130,  1132,
     1045    1139,  1144,  1149,  1160,  1165,  1170,  1175,  1180,  1189,  1194,
     1046    1202,  1203,  1204,  1205,  1211,  1216,  1224,  1225,  1226,  1227,
     1047    1231,  1232,  1233,  1234,  1239,  1240,  1249,  1250,  1255,  1256,
     1048    1261,  1263,  1265,  1267,  1269,  1272,  1271,  1283,  1284,  1286,
     1049    1296,  1297,  1302,  1306,  1308,  1310,  1312,  1314,  1316,  1318,
     1050    1320,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,  1341,
     1051    1343,  1345,  1347,  1349,  1355,  1356,  1358,  1360,  1362,  1367,
     1052    1368,  1374,  1375,  1377,  1379,  1384,  1386,  1388,  1390,  1395,
     1053    1396,  1398,  1400,  1405,  1406,  1408,  1413,  1414,  1416,  1418,
     1054    1423,  1425,  1427,  1432,  1433,  1437,  1439,  1441,  1443,  1445,
     1055    1450,  1452,  1457,  1459,  1464,  1465,  1467,  1468,  1473,  1474,
     1056    1476,  1478,  1483,  1485,  1491,  1492,  1494,  1497,  1500,  1505,
     1057    1506,  1511,  1516,  1520,  1522,  1524,  1529,  1531,  1537,  1538,
     1058    1546,  1547,  1551,  1552,  1553,  1555,  1557,  1564,  1565,  1567,
     1059    1569,  1574,  1575,  1581,  1582,  1586,  1587,  1592,  1593,  1594,
     1060    1596,  1604,  1605,  1607,  1610,  1612,  1616,  1617,  1618,  1620,
     1061    1622,  1626,  1631,  1639,  1640,  1649,  1651,  1656,  1657,  1658,
     1062    1662,  1663,  1664,  1668,  1669,  1670,  1674,  1675,  1676,  1681,
     1063    1682,  1683,  1684,  1690,  1691,  1693,  1698,  1699,  1704,  1705,
     1064    1706,  1707,  1708,  1723,  1724,  1729,  1730,  1738,  1740,  1742,
     1065    1745,  1747,  1749,  1772,  1773,  1775,  1777,  1782,  1783,  1785,
     1066    1790,  1795,  1796,  1802,  1801,  1805,  1809,  1811,  1813,  1819,
     1067    1820,  1825,  1830,  1832,  1837,  1839,  1840,  1842,  1847,  1849,
     1068    1851,  1856,  1858,  1863,  1868,  1876,  1882,  1881,  1895,  1896,
     1069    1901,  1902,  1906,  1911,  1916,  1924,  1929,  1940,  1941,  1952,
     1070    1953,  1959,  1960,  1964,  1965,  1966,  1969,  1968,  1979,  1984,
     1071    1989,  1995,  2004,  2010,  2016,  2022,  2028,  2036,  2042,  2050,
     1072    2056,  2065,  2066,  2067,  2071,  2075,  2077,  2082,  2083,  2087,
     1073    2088,  2093,  2099,  2100,  2103,  2105,  2106,  2110,  2111,  2112,
     1074    2113,  2147,  2149,  2150,  2152,  2157,  2162,  2167,  2169,  2171,
     1075    2176,  2178,  2180,  2182,  2187,  2189,  2199,  2201,  2202,  2207,
     1076    2209,  2211,  2216,  2218,  2220,  2225,  2227,  2229,  2238,  2239,
     1077    2240,  2244,  2246,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
     1078    2281,  2283,  2284,  2286,  2291,  2292,  2297,  2299,  2301,  2306,
     1079    2308,  2310,  2312,  2317,  2319,  2321,  2331,  2333,  2334,  2336,
     1080    2341,  2343,  2345,  2350,  2352,  2354,  2356,  2361,  2363,  2365,
     1081    2396,  2398,  2399,  2401,  2406,  2411,  2419,  2421,  2423,  2428,
     1082    2430,  2435,  2437,  2451,  2452,  2454,  2459,  2461,  2463,  2465,
     1083    2467,  2472,  2473,  2475,  2477,  2482,  2484,  2486,  2492,  2494,
     1084    2496,  2500,  2502,  2504,  2506,  2520,  2521,  2523,  2528,  2530,
     1085    2532,  2534,  2536,  2541,  2542,  2544,  2546,  2551,  2553,  2555,
     1086    2561,  2562,  2564,  2573,  2576,  2578,  2581,  2583,  2585,  2598,
     1087    2599,  2601,  2606,  2608,  2610,  2612,  2614,  2619,  2620,  2622,
     1088    2624,  2629,  2631,  2639,  2640,  2641,  2646,  2647,  2651,  2653,
     1089    2655,  2657,  2659,  2661,  2668,  2670,  2672,  2674,  2676,  2678,
     1090    2680,  2682,  2684,  2686,  2691,  2693,  2695,  2700,  2726,  2727,
     1091    2729,  2733,  2734,  2738,  2740,  2742,  2744,  2746,  2748,  2755,
     1092    2757,  2759,  2761,  2763,  2765,  2770,  2775,  2777,  2779,  2797,
     1093    2799,  2804,  2805
    10901094};
    10911095#endif
     
    10991103  "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL",
    11001104  "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE",
    1101   "SIGNED", "UNSIGNED", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL",
    1102   "ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF",
    1103   "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE",
    1104   "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN",
    1105   "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",
    1106   "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",
    1107   "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",
    1108   "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",
    1109   "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
     1105  "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",
     1106  "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",
     1107  "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",
     1108  "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",
     1109  "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",
     1110  "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",
     1111  "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
     1112  "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
     1113  "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
    11101114  "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant",
    11111115  "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE",
     
    11691173  "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
    11701174  "type_name_list", "type_declaring_list", "type_declarator",
    1171   "type_declarator_name", "context_specifier", "$@3",
    1172   "context_declaration_list", "context_declaration",
    1173   "new_context_declaring_list", "context_declaring_list",
    1174   "translation_unit", "external_definition_list",
    1175   "external_definition_list_opt", "external_definition", "$@4",
    1176   "external_function_definition", "function_definition", "declarator",
    1177   "subrange", "asm_name_opt", "attribute_list_opt", "attribute_list",
    1178   "attribute", "attribute_parameter_list", "attrib", "any_word",
    1179   "variable_declarator", "paren_identifier", "variable_ptr",
    1180   "variable_array", "variable_function", "function_declarator",
    1181   "function_no_ptr", "function_ptr", "function_array",
    1182   "old_function_declarator", "old_function_no_ptr", "old_function_ptr",
    1183   "old_function_array", "type_redeclarator", "paren_type", "type_ptr",
    1184   "type_array", "type_function", "identifier_parameter_declarator",
     1175  "type_declarator_name", "trait_specifier", "$@3",
     1176  "trait_declaration_list", "trait_declaration",
     1177  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
     1178  "external_definition_list", "external_definition_list_opt",
     1179  "external_definition", "$@4", "external_function_definition",
     1180  "function_definition", "declarator", "subrange", "asm_name_opt",
     1181  "attribute_list_opt", "attribute_list", "attribute",
     1182  "attribute_parameter_list", "attrib", "any_word", "variable_declarator",
     1183  "paren_identifier", "variable_ptr", "variable_array",
     1184  "variable_function", "function_declarator", "function_no_ptr",
     1185  "function_ptr", "function_array", "old_function_declarator",
     1186  "old_function_no_ptr", "old_function_ptr", "old_function_array",
     1187  "type_redeclarator", "paren_type", "type_ptr", "type_array",
     1188  "type_function", "identifier_parameter_declarator",
    11851189  "identifier_parameter_ptr", "identifier_parameter_array",
    11861190  "identifier_parameter_function", "type_parameter_redeclarator",
     
    12191223     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
    12201224     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    1221      355,   356,   357,   358,   359,   360,   361,   362,    40,    41,
    1222       91,    93,    46,   123,   125,    44,    58,    33,    42,    38,
    1223       43,    45,   126,    47,    37,    60,    62,    94,   124,    63,
    1224       61,    59
     1225     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
     1226      41,    91,    93,    46,   123,   125,    44,    58,    33,    42,
     1227      38,    43,    45,   126,    47,    37,    60,    62,    94,   124,
     1228      63,    61,    59
    12251229};
    12261230# endif
     
    12291233static const yytype_uint16 yyr1[] =
    12301234{
    1231        0,   132,   133,   134,   135,   135,   135,   136,   136,   136,
    1232      137,   137,   138,   138,   139,   139,   140,   140,   141,   141,
    1233      141,   141,   142,   142,   142,   142,   142,   142,   142,   142,
    1234      142,   142,   142,   143,   143,   144,   144,   144,   144,   144,
    1235      145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
    1236      147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
    1237      147,   147,   147,   147,   147,   148,   148,   148,   148,   149,
    1238      149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
    1239      152,   152,   153,   153,   153,   153,   153,   154,   154,   154,
    1240      155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
    1241      160,   160,   160,   160,   161,   162,   162,   162,   162,   163,
    1242      163,   164,   164,   164,   164,   165,   165,   166,   166,   166,
    1243      166,   166,   166,   166,   166,   166,   166,   167,   167,   168,
    1244      168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
    1245      170,   171,   171,   172,   172,   173,   173,   173,   173,   174,
    1246      174,   175,   176,   176,   176,   176,   176,   176,   177,   177,
    1247      177,   178,   178,   179,   179,   180,   180,   181,   182,   182,
    1248      183,   183,   184,   184,   185,   185,   185,   185,   186,   186,
    1249      187,   187,   188,   188,   188,   189,   189,   190,   190,   190,
    1250      190,   190,   190,   190,   190,   190,   190,   191,   191,   191,
    1251      192,   192,   192,   192,   192,   193,   193,   193,   193,   194,
    1252      195,   195,   195,   195,   195,   196,   196,   196,   196,   196,
    1253      197,   197,   198,   198,   199,   199,   200,   200,   201,   201,
    1254      201,   202,   202,   203,   203,   204,   204,   205,   205,   206,
    1255      206,   207,   207,   208,   208,   209,   209,   210,   210,   211,
    1256      211,   211,   211,   211,   212,   212,   212,   213,   213,   213,
    1257      214,   214,   214,   214,   214,   215,   215,   215,   216,   216,
    1258      217,   217,   217,   218,   218,   218,   218,   218,   219,   219,
    1259      220,   220,   220,   220,   221,   221,   222,   222,   222,   222,
    1260      223,   223,   223,   223,   224,   224,   225,   225,   226,   226,
    1261      227,   227,   227,   227,   227,   228,   227,   229,   229,   229,
    1262      230,   230,   231,   232,   232,   232,   232,   232,   232,   232,
    1263      232,   233,   233,   233,   233,   233,   233,   233,   233,   233,
    1264      233,   233,   233,   234,   234,   234,   234,   234,   235,   235,
    1265      236,   236,   236,   236,   237,   237,   237,   237,   238,   238,
    1266      238,   238,   239,   239,   239,   240,   240,   240,   240,   241,
    1267      241,   241,   242,   242,   243,   243,   243,   243,   243,   244,
    1268      244,   245,   245,   246,   246,   246,   246,   247,   247,   247,
    1269      247,   248,   248,   249,   249,   249,   249,   249,   250,   250,
    1270      251,   252,   253,   253,   253,   254,   254,   255,   255,   256,
    1271      256,   257,   257,   257,   257,   257,   258,   258,   258,   258,
    1272      259,   259,   260,   260,   261,   261,   262,   262,   262,   262,
    1273      263,   263,   263,   263,   263,   264,   264,   264,   264,   264,
    1274      265,   265,   266,   266,   267,   267,   268,   268,   268,   269,
    1275      269,   269,   270,   270,   270,   271,   271,   271,   272,   272,
    1276      272,   272,   273,   273,   273,   274,   274,   275,   275,   275,
    1277      275,   275,   276,   276,   277,   277,   278,   278,   278,   278,
    1278      278,   278,   279,   279,   279,   279,   280,   280,   280,   281,
    1279      282,   282,   284,   283,   283,   285,   285,   285,   286,   286,
    1280      287,   287,   287,   288,   288,   288,   288,   289,   289,   289,
    1281      290,   290,   291,   291,   292,   293,   292,   294,   294,   295,
    1282      295,   296,   296,   296,   297,   297,   298,   298,   299,   299,
    1283      300,   300,   301,   301,   301,   302,   301,   301,   303,   303,
    1284      303,   304,   304,   304,   304,   304,   304,   304,   304,   304,
    1285      305,   305,   305,   306,   307,   307,   308,   308,   309,   309,
    1286      310,   311,   311,   312,   312,   312,   313,   313,   313,   313,
    1287      314,   314,   314,   314,   315,   315,   316,   316,   316,   317,
    1288      317,   317,   317,   318,   318,   319,   319,   319,   320,   320,
    1289      320,   321,   321,   321,   322,   322,   322,   323,   323,   323,
    1290      324,   324,   324,   325,   325,   325,   326,   326,   326,   327,
    1291      327,   327,   327,   328,   328,   329,   329,   329,   330,   330,
    1292      330,   330,   331,   331,   331,   332,   332,   332,   332,   333,
    1293      333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
    1294      336,   336,   336,   337,   337,   338,   338,   338,   339,   339,
    1295      340,   340,   341,   341,   341,   342,   342,   342,   342,   342,
    1296      343,   343,   343,   343,   344,   344,   344,   345,   345,   345,
    1297      346,   346,   346,   346,   347,   347,   347,   348,   348,   348,
    1298      348,   348,   349,   349,   349,   349,   350,   350,   350,   351,
    1299      351,   351,   352,   352,   352,   352,   352,   352,   353,   353,
    1300      353,   354,   354,   354,   354,   354,   355,   355,   355,   355,
    1301      356,   356,   357,   357,   357,   358,   358,   359,   359,   359,
    1302      359,   359,   359,   360,   360,   360,   360,   360,   360,   360,
    1303      360,   360,   360,   361,   361,   361,   361,   362,   362,   362,
    1304      363,   363,   364,   364,   364,   364,   364,   364,   365,   365,
    1305      365,   365,   365,   365,   366,   367,   367,   367,   368,   368,
    1306      369,   369
     1235       0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
     1236     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
     1237     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
     1238     143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
     1239     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
     1240     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
     1241     148,   148,   148,   148,   148,   149,   149,   149,   149,   150,
     1242     150,   150,   151,   151,   151,   151,   152,   152,   152,   153,
     1243     153,   153,   154,   154,   154,   154,   154,   155,   155,   155,
     1244     156,   156,   157,   157,   158,   158,   159,   159,   160,   160,
     1245     161,   161,   161,   161,   162,   163,   163,   163,   163,   164,
     1246     164,   165,   165,   165,   165,   166,   166,   167,   167,   167,
     1247     167,   167,   167,   167,   167,   167,   167,   168,   168,   169,
     1248     169,   170,   170,   170,   170,   170,   170,   170,   170,   170,
     1249     171,   172,   172,   173,   173,   174,   174,   174,   174,   175,
     1250     175,   176,   177,   177,   177,   177,   177,   177,   178,   178,
     1251     178,   179,   179,   180,   180,   181,   181,   182,   183,   183,
     1252     184,   184,   185,   185,   186,   186,   186,   186,   187,   187,
     1253     188,   188,   189,   189,   189,   190,   190,   191,   191,   191,
     1254     191,   191,   191,   191,   191,   191,   191,   192,   192,   192,
     1255     193,   193,   193,   193,   193,   194,   194,   194,   194,   195,
     1256     196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
     1257     198,   198,   199,   199,   200,   200,   201,   201,   202,   202,
     1258     202,   203,   203,   204,   204,   205,   205,   206,   206,   207,
     1259     207,   208,   208,   209,   209,   210,   210,   211,   211,   212,
     1260     212,   212,   212,   212,   213,   213,   213,   214,   214,   214,
     1261     215,   215,   215,   215,   215,   216,   216,   216,   217,   217,
     1262     218,   218,   218,   219,   219,   219,   219,   219,   220,   220,
     1263     221,   221,   221,   221,   222,   222,   223,   223,   223,   223,
     1264     224,   224,   224,   224,   225,   225,   226,   226,   227,   227,
     1265     228,   228,   228,   228,   228,   229,   228,   230,   230,   230,
     1266     231,   231,   232,   233,   233,   233,   233,   233,   233,   233,
     1267     233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
     1268     234,   234,   234,   234,   235,   235,   235,   235,   235,   236,
     1269     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
     1270     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
     1271     242,   242,   242,   243,   243,   244,   244,   244,   244,   244,
     1272     245,   245,   246,   246,   247,   247,   247,   247,   248,   248,
     1273     248,   248,   249,   249,   250,   250,   250,   250,   250,   251,
     1274     251,   252,   253,   254,   254,   254,   255,   255,   256,   256,
     1275     257,   257,   258,   258,   258,   258,   258,   259,   259,   259,
     1276     259,   260,   260,   261,   261,   262,   262,   263,   263,   263,
     1277     263,   264,   264,   264,   264,   264,   265,   265,   265,   265,
     1278     265,   266,   266,   267,   267,   268,   268,   269,   269,   269,
     1279     270,   270,   270,   271,   271,   271,   272,   272,   272,   273,
     1280     273,   273,   273,   274,   274,   274,   275,   275,   276,   276,
     1281     276,   276,   276,   277,   277,   278,   278,   279,   279,   279,
     1282     279,   279,   279,   280,   280,   280,   280,   281,   281,   281,
     1283     282,   283,   283,   285,   284,   284,   286,   286,   286,   287,
     1284     287,   288,   288,   288,   289,   289,   289,   289,   290,   290,
     1285     290,   291,   291,   292,   292,   293,   294,   293,   295,   295,
     1286     296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
     1287     300,   301,   301,   302,   302,   302,   303,   302,   302,   304,
     1288     304,   304,   305,   305,   305,   305,   305,   305,   305,   305,
     1289     305,   306,   306,   306,   307,   308,   308,   309,   309,   310,
     1290     310,   311,   312,   312,   313,   313,   313,   314,   314,   314,
     1291     314,   315,   315,   315,   315,   316,   316,   317,   317,   317,
     1292     318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
     1293     321,   321,   322,   322,   322,   323,   323,   323,   324,   324,
     1294     324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
     1295     328,   328,   328,   328,   329,   329,   330,   330,   330,   331,
     1296     331,   331,   331,   332,   332,   332,   333,   333,   333,   333,
     1297     334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
     1298     337,   337,   337,   337,   338,   338,   339,   339,   339,   340,
     1299     340,   341,   341,   342,   342,   342,   343,   343,   343,   343,
     1300     343,   344,   344,   344,   344,   345,   345,   345,   346,   346,
     1301     346,   347,   347,   347,   347,   348,   348,   348,   349,   349,
     1302     349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
     1303     352,   352,   352,   353,   353,   353,   353,   353,   353,   354,
     1304     354,   354,   355,   355,   355,   355,   355,   356,   356,   356,
     1305     356,   357,   357,   358,   358,   358,   359,   359,   360,   360,
     1306     360,   360,   360,   360,   361,   361,   361,   361,   361,   361,
     1307     361,   361,   361,   361,   362,   362,   362,   362,   363,   363,
     1308     363,   364,   364,   365,   365,   365,   365,   365,   365,   366,
     1309     366,   366,   366,   366,   366,   367,   368,   368,   368,   369,
     1310     369,   370,   370
    13071311};
    13081312
     
    13431347       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
    13441348       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1345        1,     1,     1,     1,     2,     2,     3,     3,     1,     3,
    1346        1,     2,     2,     2,     4,     4,     4,     4,     1,     2,
    1347        2,     3,     1,     2,     2,     1,     2,     2,     3,     1,
    1348        2,     2,     1,     1,     4,     2,     5,     7,     2,     2,
    1349        2,     1,     2,     2,     3,     2,     3,     1,     2,     3,
    1350        2,     2,     4,     0,     1,     2,     2,     1,     0,     1,
    1351        2,     2,     5,     6,     2,     2,     4,     0,     2,     0,
    1352        1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
    1353        1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
    1354        1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
    1355        3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
    1356        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    1357        1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
    1358        3,     4,     2,     2,     1,     2,     1,     2,     5,     5,
    1359        7,     6,     1,     2,     2,     3,     1,     2,     2,     4,
    1360        2,     4,     0,     4,     2,     1,     1,     1,     0,     2,
    1361        5,     5,    13,     1,     1,     3,     3,     2,     3,     3,
    1362        2,     4,     1,     6,     9,     0,    11,     1,     3,     3,
    1363        3,     1,     1,     5,     2,     5,     0,     1,     1,     3,
    1364        0,     1,     1,     1,     1,     0,     6,     2,     1,     2,
    1365        4,     2,     3,     3,     3,     4,     5,     5,     5,     6,
    1366        1,     1,     1,     3,     0,     5,     0,     1,     1,     2,
    1367        6,     1,     3,     0,     1,     4,     1,     1,     1,     1,
     1349       1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
     1350       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
     1351       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
     1352       1,     2,     2,     1,     1,     4,     2,     5,     7,     2,
     1353       2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
     1354       3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
     1355       1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
     1356       0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
     1357       9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
     1358       5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
     1359       1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
     1360       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
     1361       1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
     1362       2,     3,     4,     2,     2,     1,     2,     1,     2,     5,
     1363       5,     7,     6,     1,     2,     2,     3,     1,     2,     2,
     1364       4,     2,     4,     0,     4,     2,     1,     1,     1,     0,
     1365       2,     5,     5,    13,     1,     1,     3,     3,     2,     3,
     1366       3,     2,     4,     1,     6,     9,     0,    11,     1,     3,
     1367       3,     3,     1,     1,     5,     2,     5,     0,     1,     1,
     1368       3,     0,     1,     1,     1,     1,     0,     6,     2,     1,
     1369       2,     4,     2,     3,     3,     3,     4,     5,     5,     5,
     1370       6,     1,     1,     1,     3,     0,     5,     0,     1,     1,
     1371       2,     6,     1,     3,     0,     1,     4,     1,     1,     1,
     1372       1,     2,     1,     2,     2,     1,     3,     2,     3,     3,
     1373       2,     4,     4,     3,     8,     3,     2,     1,     2,     6,
     1374       8,     3,     2,     3,     3,     4,     4,     3,     1,     1,
     1375       1,     4,     6,     3,     2,     3,     3,     4,     4,     3,
    13681376       2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
    1369        4,     4,     3,     8,     3,     2,     1,     2,     6,     8,
    1370        3,     2,     3,     3,     4,     4,     3,     1,     1,     1,
    1371        4,     6,     3,     2,     3,     3,     4,     4,     3,     2,
    1372        1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
    1373        4,     3,     6,     8,     3,     2,     1,     2,     2,     2,
    1374        3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
    1375        1,     2,     2,     1,     1,     2,     3,     3,     2,     4,
    1376        6,     8,     1,     2,     2,     1,     2,     2,     3,     3,
    1377        1,     4,     4,     3,     5,     8,     3,     2,     3,     1,
    1378        5,     5,     6,     6,     1,     2,     2,     1,     2,     2,
    1379        3,     3,     1,     4,     4,     3,     5,     8,     3,     1,
    1380        2,     1,     2,     6,     5,     6,     7,     7,     1,     2,
    1381        2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
    1382        8,     3,     1,     1,     2,     1,     1,     2,     3,     2,
    1383        3,     2,     3,     3,     2,     4,     3,     2,     3,     2,
    1384        4,     3,     2,     6,     6,     6,     7,     1,     2,     1,
    1385        1,     1,     2,     3,     2,     3,     2,     3,     3,     4,
    1386        2,     3,     4,     2,     5,     5,     6,     6,     0,     1,
    1387        0,     2
     1377       4,     4,     3,     6,     8,     3,     2,     1,     2,     2,
     1378       2,     3,     3,     2,     4,     4,     3,     6,     8,     3,
     1379       2,     1,     2,     2,     1,     1,     2,     3,     3,     2,
     1380       4,     6,     8,     1,     2,     2,     1,     2,     2,     3,
     1381       3,     1,     4,     4,     3,     5,     8,     3,     2,     3,
     1382       1,     5,     5,     6,     6,     1,     2,     2,     1,     2,
     1383       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
     1384       1,     2,     1,     2,     6,     5,     6,     7,     7,     1,
     1385       2,     2,     1,     2,     2,     3,     3,     1,     4,     4,
     1386       3,     8,     3,     1,     1,     2,     1,     1,     2,     3,
     1387       2,     3,     2,     3,     3,     2,     4,     3,     2,     3,
     1388       2,     4,     3,     2,     6,     6,     6,     7,     1,     2,
     1389       1,     1,     1,     2,     3,     2,     3,     2,     3,     3,
     1390       4,     2,     3,     4,     2,     5,     5,     6,     6,     0,
     1391       1,     0,     2
    13881392};
    13891393
     
    13951399     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    13961400     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1397      327,   328,   330,   331,   332,   546,   546,   546,     0,     0,
    1398        0,   294,   220,   304,   319,   320,     7,   359,     0,     8,
    1399       14,    15,     0,     2,   294,   564,     9,   524,   522,   247,
    1400        3,   452,     3,   260,     0,     3,     3,     3,   248,     3,
    1401        0,     0,     0,   295,   296,   298,   294,   307,   310,   312,
    1402      340,   286,   333,   338,   287,   348,   288,   355,   352,   362,
    1403        0,     0,   363,   289,   472,   476,     3,     3,     0,     2,
    1404      518,   523,   528,   299,     0,     0,   546,   576,   546,     2,
    1405      587,   588,   589,   294,     0,   730,   731,     0,    12,   294,
    1406        0,    13,   270,   271,     0,   295,   290,   291,   292,   293,
    1407      525,   305,   391,   547,   548,   369,   370,    12,   443,   444,
    1408       11,   439,   442,     0,   502,   497,   488,   443,   444,     0,
    1409        0,   527,   221,     0,   294,     0,     0,     0,     0,     0,
    1410        0,     0,     0,   294,   294,     2,     0,   732,   295,   581,
    1411      593,   736,   729,   727,   734,     0,     0,     0,   254,     2,
    1412        0,   531,   437,   438,   436,     0,     0,     0,     0,   546,
    1413        0,   633,   634,     0,     0,   544,   540,   546,   561,   546,
    1414      546,   541,     2,   542,   546,   600,   546,   546,   603,     0,
    1415        0,     0,   294,   294,   313,   360,     2,   294,   261,   297,
    1416      308,   341,   353,   477,     0,     2,     0,   452,   262,   295,
    1417      334,   349,   356,   473,     0,     2,     0,   311,   335,   342,
    1418      343,     0,   350,   354,   357,   361,   444,   294,   294,   365,
    1419      368,     0,   394,   474,   478,     0,     0,     0,     1,   294,
    1420        2,   529,   575,   577,   294,     2,   740,   295,   743,   544,
    1421      544,   295,     0,     0,     0,   273,   546,   541,     2,   294,
    1422        0,     0,   294,   549,     2,   500,     2,   553,     0,     0,
    1423        0,     0,     0,     0,    18,    59,     4,     5,     6,    16,
    1424        0,     0,     0,   294,     2,     0,   294,    65,    66,    67,
    1425       68,    48,    19,    49,    22,    47,    69,     0,    72,    76,
    1426       79,    82,    87,    90,    92,    94,    96,    98,   100,   105,
    1427      494,   750,   450,   493,     0,   448,   449,     0,   565,   580,
    1428      583,   586,   592,   595,   598,   359,     0,     2,   738,     0,
    1429      294,   741,     2,   294,     3,   424,     0,   432,   295,   294,
    1430      307,   333,   287,   348,   355,     3,     3,   406,   410,   420,
    1431      425,   472,   294,   426,   705,   706,   294,   427,   429,   294,
    1432        2,   582,   594,   728,     2,     2,   249,     2,   457,     0,
    1433      455,   454,   453,   141,     2,     2,   251,     2,     2,   250,
    1434        2,   281,     2,   282,     0,   280,     0,     0,     0,     0,
    1435        0,     0,     0,     0,     0,   566,   605,     0,   452,     2,
    1436      560,   569,   659,   562,   563,   532,   294,     2,   599,   608,
    1437      601,   602,     0,   276,   294,   294,   339,   295,     0,   295,
    1438        0,   294,   733,   737,   735,   533,   294,   544,   255,   263,
    1439      309,     0,     2,   534,   294,   498,   336,   337,   283,   351,
    1440      358,     0,   294,     2,   383,   294,   371,     0,     0,   377,
    1441      727,   294,   748,   397,     0,   475,   499,   252,   253,   519,
    1442      294,   434,     0,   294,   237,     0,     2,   239,     0,   295,
    1443        0,   257,     2,   258,   278,     0,     0,     2,   294,   544,
    1444      294,   485,   487,   486,     0,     0,   750,     0,   294,     0,
    1445      294,   489,   294,   559,   557,   558,   556,     0,   551,   554,
    1446        0,     0,   294,    56,   294,    69,    52,   294,    62,   294,
    1447      294,    50,    51,    64,     2,   127,     0,     0,   446,     0,
    1448      445,   111,   294,    54,    55,    17,     0,    29,    30,    35,
    1449        2,     0,    35,   117,   118,   119,   120,   121,   122,   123,
    1450      124,   125,   126,     0,     0,    53,     0,     0,     0,     0,
     1401     327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
     1402       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
     1403       8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
     1404     247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
     1405       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
     1406     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
     1407     363,     0,     0,   364,   289,   473,   477,     3,     3,     0,
     1408       2,   519,   524,   529,   299,     0,     0,   547,   577,   547,
     1409       2,   588,   589,   590,   294,     0,   731,   732,     0,    12,
     1410     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
     1411     293,   526,   305,   392,   548,   549,   370,   371,    12,   444,
     1412     445,    11,   440,   443,     0,   503,   498,   489,   444,   445,
     1413       0,     0,   528,   221,     0,   294,     0,     0,     0,     0,
     1414       0,     0,     0,     0,   294,   294,     2,     0,   733,   295,
     1415     582,   594,   737,   730,   728,   735,     0,     0,     0,   254,
     1416       2,     0,   532,   438,   439,   437,     0,     0,     0,     0,
     1417     547,     0,   634,   635,     0,     0,   545,   541,   547,   562,
     1418     547,   547,   542,     2,   543,   547,   601,   547,   547,   604,
     1419       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
     1420     297,   308,   342,   354,   478,     0,     2,     0,   453,   262,
     1421     295,   335,   350,   357,   474,     0,     2,     0,   311,   336,
     1422     343,   344,     0,   351,   355,   358,   362,   445,   294,   294,
     1423     366,   369,     0,   395,   475,   479,     0,     0,     0,     1,
     1424     294,     2,   530,   576,   578,   294,     2,   741,   295,   744,
     1425     545,   545,   295,     0,     0,     0,   273,   547,   542,     2,
     1426     294,     0,     0,   294,   550,     2,   501,     2,   554,     0,
     1427       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
     1428      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
     1429      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
     1430      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
     1431     105,   495,   751,   451,   494,     0,   449,   450,     0,   566,
     1432     581,   584,   587,   593,   596,   599,   360,     0,     2,   739,
     1433       0,   294,   742,     2,   294,     3,   425,     0,   433,   295,
     1434     294,   307,   334,   287,   349,   356,     3,     3,   407,   411,
     1435     421,   426,   473,   294,   427,   706,   707,   294,   428,   430,
     1436     294,     2,   583,   595,   729,     2,     2,   249,     2,   458,
     1437       0,   456,   455,   454,   141,     2,     2,   251,     2,     2,
     1438     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
     1439       0,     0,     0,     0,     0,     0,   567,   606,     0,   453,
     1440       2,   561,   570,   660,   563,   564,   533,   294,     2,   600,
     1441     609,   602,   603,     0,   276,   294,   294,   340,   295,     0,
     1442     295,     0,   294,   734,   738,   736,   534,   294,   545,   255,
     1443     263,   309,     0,     2,   535,   294,   499,   337,   338,   283,
     1444     352,   359,     0,   294,     2,   384,   294,   372,     0,     0,
     1445     378,   728,   294,   749,   398,     0,   476,   500,   252,   253,
     1446     520,   294,   435,     0,   294,   237,     0,     2,   239,     0,
     1447     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
     1448     545,   294,   486,   488,   487,     0,     0,   751,     0,   294,
     1449       0,   294,   490,   294,   560,   558,   559,   557,     0,   552,
     1450     555,     0,     0,   294,    56,   294,    69,    52,   294,    62,
     1451     294,   294,    50,    51,    64,     2,   127,     0,     0,   447,
     1452       0,   446,   111,   294,    54,    55,    17,     0,    29,    30,
     1453      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
     1454     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
    14511455       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1452        0,     0,     0,     0,     0,     0,   108,     2,   645,   451,
    1453      642,   546,   546,   650,   479,   294,     2,   584,   585,     0,
    1454      596,   597,     0,     2,   739,   742,   111,   294,     2,   294,
    1455        0,   707,   295,   711,   702,   703,   709,     0,     2,     2,
    1456      667,   546,   750,   616,   546,   546,   750,   546,   630,   546,
    1457      546,   681,   433,   664,   546,   546,   672,   679,   294,   428,
    1458      295,     0,     0,   294,   717,   295,   722,   750,   714,   294,
    1459      719,   750,   294,   294,   294,     0,   111,     0,    18,     5,
    1460        2,     0,    19,     0,   458,   748,     0,     0,   464,   241,
    1461        0,   294,     0,     0,     0,   544,   568,   572,   574,   604,
    1462      607,   611,   614,   567,   606,     0,   284,   657,     0,   294,
    1463      277,     0,     0,     0,     0,   275,     2,     0,   259,   535,
    1464      294,     0,     0,     0,     0,   294,   294,     0,     0,   691,
    1465      381,   384,   388,   546,   388,   696,   387,   688,   546,   546,
    1466      364,   372,   380,   373,   546,   375,   378,   294,   749,     0,
    1467        0,   395,   748,   295,     3,   413,     3,   417,   416,   590,
    1468        0,   530,   294,     3,     3,   294,   432,   295,     3,   426,
    1469      427,     2,     0,     0,     0,   484,   306,   294,   480,   482,
    1470        3,     2,     2,     0,   501,     3,     0,   553,   129,     0,
    1471        0,   222,     0,     0,     0,     2,     0,     0,    36,     0,
    1472        0,   111,   294,    20,     0,    21,     0,   691,   447,     0,
    1473      109,     3,     2,    27,     2,     0,    33,     0,     2,    25,
    1474        0,   106,   107,    73,    74,    75,    77,    78,    80,    81,
    1475       85,    86,    83,    84,    88,    89,    91,    93,    95,    97,
    1476       99,     0,     0,   751,   294,     0,     0,     0,   646,   647,
    1477      643,   644,   496,   495,   294,     0,     3,   294,   713,   294,
    1478      718,   295,   294,   294,   294,   661,   704,   660,     2,   294,
    1479        0,     0,     0,     0,     0,     0,     0,     0,   682,     0,
    1480      668,   619,   635,   669,     2,   615,   622,   430,   617,   618,
    1481      431,     2,   629,   638,   631,   632,   665,   666,   680,   708,
    1482      712,   710,   750,   268,     2,   744,     2,   421,   716,   721,
    1483      422,     0,   400,     3,     3,     3,     3,   452,     3,     0,
    1484        2,   467,   463,   749,     0,   459,   466,     2,   462,   465,
    1485        0,   294,   242,   264,     3,   272,   274,     0,   452,     2,
    1486      570,   571,     2,   609,   610,     0,   658,   536,     3,   345,
    1487      344,   347,   346,   294,   537,     0,   538,   294,   374,   376,
    1488        2,     0,     0,     0,     0,   104,   390,   692,   693,   385,
    1489      389,   386,   689,   690,   379,   383,   366,   397,   392,   398,
    1490        0,     0,     0,   435,   240,     0,     0,     3,     2,   667,
    1491      428,     0,   526,     0,   750,   488,     0,   294,   294,   294,
    1492        0,   550,   552,   130,     0,     0,   215,     0,     0,     0,
    1493      223,   224,    57,     0,    63,   294,     0,    61,    60,     0,
    1494      128,   692,   457,    70,    71,   110,   115,     3,   109,     0,
    1495        0,     0,    24,    35,     3,     0,    32,   102,     0,     3,
    1496      649,   653,   656,   648,     3,   591,     3,   715,   720,     2,
    1497      294,     3,     3,   295,     0,     3,   621,   625,   628,   637,
    1498      671,   675,   678,   294,     3,   620,   636,   670,   294,   294,
    1499      423,   294,   294,   745,     0,     0,     0,     0,   256,     0,
    1500      104,     0,     3,     3,     0,   460,     0,   456,     0,     0,
    1501      245,   294,     0,     0,   129,     0,     0,     0,     0,     0,
    1502      129,     0,     0,   109,   109,     2,     0,     0,     0,     3,
    1503      131,   132,     2,   143,   133,   134,   135,   136,   137,   138,
    1504      145,   147,     0,     0,     0,   285,   294,   294,   546,     0,
    1505      539,   294,   111,   695,   699,   701,   694,   382,   396,   393,
    1506      578,     2,   663,   662,     0,   668,     2,   481,   483,   503,
    1507        3,   511,   512,     0,     2,   507,     3,     3,     0,     0,
    1508      555,   222,     0,     0,     0,   222,     0,     0,     3,    37,
    1509      748,   109,     0,     3,   660,    42,     3,    40,     3,    34,
    1510        0,     3,   101,   103,     0,     2,   651,   652,     0,     0,
    1511      294,     0,     0,     0,     3,   637,     0,     2,   623,   624,
    1512        2,   639,     2,   673,   674,     0,     0,     3,     0,     3,
    1513        3,     3,     3,   408,   407,   411,     2,     2,   747,   746,
    1514      112,     0,     0,     0,     0,     3,   461,     3,     0,   243,
    1515      146,     3,   295,   294,     0,     0,     0,     0,     2,   191,
    1516        0,   189,     0,     0,     0,     0,     0,     0,     0,     0,
    1517      111,     0,   546,   151,   148,   294,     0,     0,   267,   279,
    1518        3,     3,   545,   612,   367,     2,   697,   698,   294,   266,
    1519      294,     0,   514,   491,   294,     0,     0,   490,   505,     0,
    1520        0,     0,   216,     0,   225,    58,   109,     0,     0,   116,
    1521      113,     0,     0,     0,     0,     0,     0,    23,     0,   654,
    1522      294,   579,   265,   723,   724,   725,     0,   676,   294,   294,
    1523      294,     3,     3,     0,   684,     0,     0,     0,     0,   294,
    1524      294,     3,   543,   468,   469,     0,     0,   246,   295,     0,
    1525        0,     0,     0,   294,   192,   190,     0,   187,   193,     0,
    1526        0,     0,     0,   197,   200,   198,   194,     0,   195,    35,
    1527      129,   144,   142,   244,     0,     0,   294,   415,   419,   418,
    1528        0,   508,     2,   509,     2,   510,   504,   294,   228,     0,
    1529      226,     0,   228,     3,   660,    31,   114,     2,    45,     2,
    1530       43,    41,    28,   112,    26,     3,   726,     3,     3,     3,
    1531        0,     0,   683,   685,   626,   640,   269,     2,   405,     3,
    1532      404,     0,   471,   468,   129,     0,     0,   129,     3,     0,
    1533      129,   188,     0,     2,     2,   209,   199,     0,     0,     0,
    1534        0,   140,   573,   613,     3,     2,     0,     0,     2,   229,
    1535        0,     0,   217,     0,     0,     0,     0,     0,     0,     0,
    1536        0,     0,   686,   687,   294,     0,   470,   152,     0,     0,
    1537        2,   165,   129,   154,     0,   182,     0,   129,     0,     2,
    1538      156,     0,     2,     0,     2,     2,     2,   196,    32,     0,
    1539      294,   513,   515,   506,     0,     0,     0,     0,   114,    38,
    1540        3,     3,   655,   627,   641,   677,   409,   129,   158,   161,
    1541        0,   160,   164,     3,   167,   166,     0,   129,   184,   129,
    1542        3,     0,   294,     0,   294,     0,     2,     0,     2,   139,
    1543      700,     2,   230,   231,     0,   227,   218,     0,     0,     0,
    1544      153,     0,     0,   163,   233,   168,     2,   235,   183,     0,
    1545      186,   172,   201,     3,   210,   214,   203,     3,     0,   294,
    1546        0,   294,     0,     0,     0,    39,    46,    44,   159,   162,
    1547      129,     0,   169,   294,   129,   129,     0,   173,     0,     0,
    1548      691,   211,   212,   213,     0,   202,     3,   204,     3,   294,
    1549      219,   232,   149,   170,   155,   129,   236,   185,   180,   178,
    1550      174,   157,   129,     0,   692,     0,     0,     0,     0,   150,
    1551      171,   181,   175,   179,   178,   176,     3,     3,     0,     0,
    1552      492,   177,   205,   207,     3,     3,   206,   208
     1456       0,     0,     0,     0,     0,     0,     0,   108,     2,   646,
     1457     452,   643,   547,   547,   651,   480,   294,     2,   585,   586,
     1458       0,   597,   598,     0,     2,   740,   743,   111,   294,     2,
     1459     294,     0,   708,   295,   712,   703,   704,   710,     0,     2,
     1460       2,   668,   547,   751,   617,   547,   547,   751,   547,   631,
     1461     547,   547,   682,   434,   665,   547,   547,   673,   680,   294,
     1462     429,   295,     0,     0,   294,   718,   295,   723,   751,   715,
     1463     294,   720,   751,   294,   294,   294,     0,   111,     0,    18,
     1464       5,     2,     0,    19,     0,   459,   749,     0,     0,   465,
     1465     241,     0,   294,     0,     0,     0,   545,   569,   573,   575,
     1466     605,   608,   612,   615,   568,   607,     0,   284,   658,     0,
     1467     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
     1468     536,   294,     0,     0,     0,     0,   294,   294,     0,     0,
     1469     692,   382,   385,   389,   547,   389,   697,   388,   689,   547,
     1470     547,   365,   373,   381,   374,   547,   376,   379,   294,   750,
     1471       0,     0,   396,   749,   295,     3,   414,     3,   418,   417,
     1472     591,     0,   531,   294,     3,     3,   294,   433,   295,     3,
     1473     427,   428,     2,     0,     0,     0,   485,   306,   294,   481,
     1474     483,     3,     2,     2,     0,   502,     3,     0,   554,   129,
     1475       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
     1476       0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
     1477       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
     1478      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
     1479      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
     1480      97,    99,     0,     0,   752,   294,     0,     0,     0,   647,
     1481     648,   644,   645,   497,   496,   294,     0,     3,   294,   714,
     1482     294,   719,   295,   294,   294,   294,   662,   705,   661,     2,
     1483     294,     0,     0,     0,     0,     0,     0,     0,     0,   683,
     1484       0,   669,   620,   636,   670,     2,   616,   623,   431,   618,
     1485     619,   432,     2,   630,   639,   632,   633,   666,   667,   681,
     1486     709,   713,   711,   751,   268,     2,   745,     2,   422,   717,
     1487     722,   423,     0,   401,     3,     3,     3,     3,   453,     3,
     1488       0,     2,   468,   464,   750,     0,   460,   467,     2,   463,
     1489     466,     0,   294,   242,   264,     3,   272,   274,     0,   453,
     1490       2,   571,   572,     2,   610,   611,     0,   659,   537,     3,
     1491     346,   345,   348,   347,   294,   538,     0,   539,   294,   375,
     1492     377,     2,     0,     0,     0,     0,   104,   391,   693,   694,
     1493     386,   390,   387,   690,   691,   380,   384,   367,   398,   393,
     1494     399,     0,     0,     0,   436,   240,     0,     0,     3,     2,
     1495     668,   429,     0,   527,     0,   751,   489,     0,   294,   294,
     1496     294,     0,   551,   553,   130,     0,     0,   215,     0,     0,
     1497       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
     1498       0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
     1499       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
     1500       3,   650,   654,   657,   649,     3,   592,     3,   716,   721,
     1501       2,   294,     3,     3,   295,     0,     3,   622,   626,   629,
     1502     638,   672,   676,   679,   294,     3,   621,   637,   671,   294,
     1503     294,   424,   294,   294,   746,     0,     0,     0,     0,   256,
     1504       0,   104,     0,     3,     3,     0,   461,     0,   457,     0,
     1505       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
     1506       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
     1507       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
     1508     138,   145,   147,     0,     0,     0,   285,   294,   294,   547,
     1509       0,   540,   294,   111,   696,   700,   702,   695,   383,   397,
     1510     394,   579,     2,   664,   663,     0,   669,     2,   482,   484,
     1511     504,     3,   512,   513,     0,     2,   508,     3,     3,     0,
     1512       0,   556,   222,     0,     0,     0,   222,     0,     0,     3,
     1513      37,   749,   109,     0,     3,   661,    42,     3,    40,     3,
     1514      34,     0,     3,   101,   103,     0,     2,   652,   653,     0,
     1515       0,   294,     0,     0,     0,     3,   638,     0,     2,   624,
     1516     625,     2,   640,     2,   674,   675,     0,     0,     3,     0,
     1517       3,     3,     3,     3,   409,   408,   412,     2,     2,   748,
     1518     747,   112,     0,     0,     0,     0,     3,   462,     3,     0,
     1519     243,   146,     3,   295,   294,     0,     0,     0,     0,     2,
     1520     191,     0,   189,     0,     0,     0,     0,     0,     0,     0,
     1521       0,   111,     0,   547,   151,   148,   294,     0,     0,   267,
     1522     279,     3,     3,   546,   613,   368,     2,   698,   699,   294,
     1523     266,   294,     0,   515,   492,   294,     0,     0,   491,   506,
     1524       0,     0,     0,   216,     0,   225,    58,   109,     0,     0,
     1525     116,   113,     0,     0,     0,     0,     0,     0,    23,     0,
     1526     655,   294,   580,   265,   724,   725,   726,     0,   677,   294,
     1527     294,   294,     3,     3,     0,   685,     0,     0,     0,     0,
     1528     294,   294,     3,   544,   469,   470,     0,     0,   246,   295,
     1529       0,     0,     0,     0,   294,   192,   190,     0,   187,   193,
     1530       0,     0,     0,     0,   197,   200,   198,   194,     0,   195,
     1531      35,   129,   144,   142,   244,     0,     0,   294,   416,   420,
     1532     419,     0,   509,     2,   510,     2,   511,   505,   294,   228,
     1533       0,   226,     0,   228,     3,   661,    31,   114,     2,    45,
     1534       2,    43,    41,    28,   112,    26,     3,   727,     3,     3,
     1535       3,     0,     0,   684,   686,   627,   641,   269,     2,   406,
     1536       3,   405,     0,   472,   469,   129,     0,     0,   129,     3,
     1537       0,   129,   188,     0,     2,     2,   209,   199,     0,     0,
     1538       0,     0,   140,   574,   614,     3,     2,     0,     0,     2,
     1539     229,     0,     0,   217,     0,     0,     0,     0,     0,     0,
     1540       0,     0,     0,   687,   688,   294,     0,   471,   152,     0,
     1541       0,     2,   165,   129,   154,     0,   182,     0,   129,     0,
     1542       2,   156,     0,     2,     0,     2,     2,     2,   196,    32,
     1543       0,   294,   514,   516,   507,     0,     0,     0,     0,   114,
     1544      38,     3,     3,   656,   628,   642,   678,   410,   129,   158,
     1545     161,     0,   160,   164,     3,   167,   166,     0,   129,   184,
     1546     129,     3,     0,   294,     0,   294,     0,     2,     0,     2,
     1547     139,   701,     2,   230,   231,     0,   227,   218,     0,     0,
     1548       0,   153,     0,     0,   163,   233,   168,     2,   235,   183,
     1549       0,   186,   172,   201,     3,   210,   214,   203,     3,     0,
     1550     294,     0,   294,     0,     0,     0,    39,    46,    44,   159,
     1551     162,   129,     0,   169,   294,   129,   129,     0,   173,     0,
     1552       0,   692,   211,   212,   213,     0,   202,     3,   204,     3,
     1553     294,   219,   232,   149,   170,   155,   129,   236,   185,   180,
     1554     178,   174,   157,   129,     0,   693,     0,     0,     0,     0,
     1555     150,   171,   181,   175,   179,   178,   176,     3,     3,     0,
     1556       0,   493,   177,   205,   207,     3,     3,   206,   208
    15531557};
    15541558
     
    15561560static const yytype_int16 yydefgoto[] =
    15571561{
    1558       -1,   839,   474,   301,    45,   131,   132,   302,   303,   304,
    1559      305,   785,   786,  1146,  1147,   306,   307,   308,   309,   310,
    1560      311,   312,   313,   314,   315,   316,   317,   318,   319,  1051,
    1561      525,   996,   321,   997,   554,   973,  1078,  1542,  1080,  1081,
    1562     1082,  1083,  1543,  1084,  1085,  1459,  1460,  1421,  1422,  1423,
    1563     1521,  1522,  1526,  1527,  1562,  1563,  1086,  1379,  1087,  1088,
    1564     1313,  1314,  1315,  1503,  1089,   143,   979,   980,   981,  1400,
    1565     1484,  1495,  1496,   475,   476,   901,   902,  1059,    48,    49,
    1566       50,    51,    52,   345,   156,    55,    56,    57,    58,    59,
    1567      347,    61,    62,   261,    64,    65,   272,   349,   350,    68,
    1568       69,    70,    71,   116,    73,   202,   352,   117,    76,   118,
    1569       78,    79,    80,   455,   456,   457,   458,   700,   939,   701,
    1570       81,    82,   462,   721,   881,   882,   355,   356,   724,   725,
    1571      726,   357,   358,   359,   360,   472,   339,   133,   134,   529,
    1572      323,   168,   654,   655,   656,   657,   658,    83,   119,    85,
    1573      495,   496,   965,   497,   275,   501,   324,    86,   135,   136,
    1574       87,  1337,  1124,  1125,  1126,  1127,    88,    89,   742,    90,
    1575      271,    91,    92,   185,  1053,   688,   410,   123,    93,   507,
    1576      508,   509,   186,   266,   188,   189,   190,   267,    96,    97,
    1577       98,    99,   100,   101,   102,   193,   194,   195,   196,   197,
    1578      851,   613,   614,   615,   616,   198,   618,   619,   620,   579,
    1579      580,   581,   582,   705,   103,   622,   623,   624,   625,   626,
    1580      627,   938,   707,   708,   709,   603,   363,   364,   365,   366,
    1581      325,   162,   105,   106,   107,   368,   719,   576
     1562      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
     1563     306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
     1564     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
     1565     526,   997,   322,   998,   555,   974,  1079,  1543,  1081,  1082,
     1566    1083,  1084,  1544,  1085,  1086,  1460,  1461,  1422,  1423,  1424,
     1567    1522,  1523,  1527,  1528,  1563,  1564,  1087,  1380,  1088,  1089,
     1568    1314,  1315,  1316,  1504,  1090,   144,   980,   981,   982,  1401,
     1569    1485,  1496,  1497,   476,   477,   902,   903,  1060,    49,    50,
     1570      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
     1571     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
     1572      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
     1573      79,    80,    81,   456,   457,   458,   459,   701,   940,   702,
     1574      82,    83,   463,   722,   882,   883,   356,   357,   725,   726,
     1575     727,   358,   359,   360,   361,   473,   340,   134,   135,   530,
     1576     324,   169,   655,   656,   657,   658,   659,    84,   120,    86,
     1577     496,   497,   966,   498,   276,   502,   325,    87,   136,   137,
     1578      88,  1338,  1125,  1126,  1127,  1128,    89,    90,   743,    91,
     1579     272,    92,    93,   186,  1054,   689,   411,   124,    94,   508,
     1580     509,   510,   187,   267,   189,   190,   191,   268,    97,    98,
     1581      99,   100,   101,   102,   103,   194,   195,   196,   197,   198,
     1582     852,   614,   615,   616,   617,   199,   619,   620,   621,   580,
     1583     581,   582,   583,   706,   104,   623,   624,   625,   626,   627,
     1584     628,   939,   708,   709,   710,   604,   364,   365,   366,   367,
     1585     326,   163,   106,   107,   108,   369,   720,   577
    15821586};
    15831587
    15841588/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15851589   STATE-NUM.  */
    1586 #define YYPACT_NINF -1281
     1590#define YYPACT_NINF -1356
    15871591static const yytype_int16 yypact[] =
    15881592{
    1589     3705,  8889, -1281,   104, -1281, -1281, -1281, -1281, -1281, -1281,
    1590    -1281,    44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1591    -1281, -1281, -1281, -1281, -1281,   155,   155,   155,  1205,   815,
    1592      110,  6006,   222, -1281, -1281, -1281, -1281, -1281,   130, -1281,
    1593    -1281, -1281,  1267,   189,  3199, -1281, -1281, -1281, -1281, -1281,
    1594    -1281,    31,   144, -1281,  1338, -1281, -1281, -1281, -1281,   153,
    1595     1410,   279,    82,  7674, -1281, -1281,  8086,  1234, -1281, -1281,
    1596    -1281,   981,   359,  7231,   925,   669,   981,  1012, -1281, -1281,
    1597      738,   575, -1281,   981,  1119, -1281,   242, -1281,   416,   419,
    1598    -1281, -1281, -1281, -1281,   277,   144,   155, -1281,   155, -1281,
    1599    -1281, -1281, -1281,  9536,  1338, -1281, -1281,  1338, -1281,  9574,
    1600      321, -1281, -1281, -1281,  2195,  9607, -1281,   565,   565,   565,
    1601    -1281, -1281, -1281,   155, -1281, -1281, -1281,   280,   366,   418,
    1602    -1281, -1281, -1281,   425, -1281, -1281, -1281, -1281, -1281,   443,
    1603      475, -1281, -1281,   120,  8972,  3739,   375,   387,   486,   496,
    1604      514,   527,   541,  8273,  7081,   550,   568, -1281,  9460, -1281,
    1605    -1281, -1281, -1281,   602, -1281,   121,  4456,  4456, -1281,   552,
    1606      298, -1281, -1281, -1281, -1281,   634,   302,   306,   327,   155,
    1607      590, -1281, -1281,  1410,  2454,   696, -1281,    90, -1281,   155,
    1608      155,   144, -1281, -1281,   124, -1281,   155,   155, -1281,  2638,
    1609      658,   667,   565,  6993, -1281, -1281,   678,  3199, -1281, -1281,
    1610      981, -1281, -1281, -1281,   144, -1281,  1338,    31, -1281,  8010,
    1611    -1281,   565,   565,   565,   144, -1281,  1205, -1281,  5198, -1281,
    1612    -1281,   673,   565, -1281,   565, -1281,   130,  8972,  9002,   686,
    1613    -1281,   815,   694,   565, -1281,  1205,   728,   736, -1281,  6006,
    1614      544, -1281, -1281, -1281,  9431, -1281, -1281,  3957, -1281,   696,
    1615       79,  9607,  6464,  2195,  2638, -1281,   157, -1281, -1281,  9574,
    1616     1338,   717,  7703, -1281, -1281,   699, -1281, 10744,   783,   831,
    1617     3925,   787,  6306, 10567, -1281,   827, -1281, -1281, -1281, -1281,
    1618    10625, 10625,   544,  8633,   829,  6306,  9085, -1281, -1281, -1281,
    1619    -1281, -1281, -1281,   862, -1281,  1121,  2197,  6306, -1281,   599,
    1620      388,   472,   354,   593,   830,   867,   873,   970,   245, -1281,
    1621    -1281,   874,   650, -1281,   325, -1281, -1281,  3739, -1281, -1281,
    1622      585,   901, -1281,   747,   901,   958,   130, -1281, -1281,   962,
    1623     9536, -1281,   977,  8746, -1281, -1281,   957,   935,  8355,  6993,
    1624      981, -1281,   981,   565,   565, -1281, -1281, -1281, -1281, -1281,
    1625    -1281,   565,  9645,  1338, -1281, -1281,  9683,  1067, -1281,  9123,
    1626    -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,  5315,  6306,
    1627    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1628    -1281, -1281, -1281, -1281,  2195, -1281,   846,   996,   998,  1002,
    1629      864,  1005,  1008,  1026,  2454, -1281, -1281,  1031,    31,  1033,
    1630    -1281, -1281,  1061, -1281, -1281, -1281,  9431, -1281, -1281, -1281,
    1631    -1281, -1281,  2638, -1281,  8972,  8972, -1281,   565,  2195,  7112,
    1632     1338,  8426, -1281, -1281, -1281, -1281,  9431,    79, -1281, -1281,
    1633      981,   144, -1281, -1281,  9431, -1281,  6877, -1281, -1281,   565,
    1634      565,   376,  9716,  1035,  1868,  2111, -1281,   334,   338,   815,
    1635    -1281,  9002,  1059,  1047,   815,   565, -1281, -1281, -1281, -1281,
    1636     9940, -1281,   583,  6755, -1281,   144,  1065, -1281,  2195, 10825,
    1637    10471, -1281, -1281, -1281, -1281,   889,  2638, -1281,  8497,   696,
    1638     7558, -1281, -1281, -1281,  1286,   636,   874,   815,  7703,   868,
    1639     9574, -1281,  7703, -1281, -1281, -1281, -1281,   638, -1281,  1073,
    1640      831,   207,  8633, -1281,  9716, -1281, -1281,  8633, -1281,  8859,
    1641     8633, -1281, -1281, -1281,  1071, -1281,   681,  1077,   668,  1078,
    1642    -1281,  4381,  6724, -1281, -1281, -1281,   328, -1281, -1281, 10490,
    1643    -1281,   385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1644    -1281, -1281, -1281,  6464,  6464, -1281,  6306,  6306,  6306,  6306,
    1645     6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,
    1646     6306,  6306,  6306,  6306,  4789,  6464, -1281,   650,  1062, -1281,
    1647    -1281,   155,   155, -1281, -1281,  8972, -1281, -1281,  1061,   544,
    1648    -1281,  1061, 10548, -1281, -1281, -1281,  5232,  6724,  1079,  9198,
    1649     1080, -1281,  9754, -1281, -1281,   602, -1281,  1082,  1185,  1084,
    1650     1899,   185,   874, -1281,   155,   155,   874,   233, -1281,   155,
    1651      155,  1061, -1281, -1281,   155,   155, -1281,   901,  9792,  1338,
    1652    10968,   234,   509,  9792, -1281,  5821, -1281,   874, -1281,  9645,
    1653    -1281,   293,  5525,  5525,  5525,  1338, -1281,  5054,  1072,   558,
    1654      990,  1016,  1083,  1086, -1281,  1074,  4456,   592, -1281,  1172,
    1655     1338,  5525,   544,  2195,   544,   696,   809,   901, -1281, -1281,
    1656      814,   901, -1281, -1281, -1281,   831, -1281,   901,   144,  9940,
    1657    -1281,   682,  1095,   691,  1099, -1281,  1098,   144, -1281, -1281,
    1658     9431,   144,  1103,   362,   407,  9825,  7200,  1999,  6306,  1917,
    1659    -1281, -1281,  1101,    94,  1101, -1281, -1281, -1281,   155,   155,
    1660    -1281, -1281,   815, -1281,   155, -1281, -1281,  3122,   815,  1107,
    1661     6306, -1281,  1059, 10968, -1281, -1281,  1102, -1281, -1281, -1281,
    1662      544, -1281, 10897,  6306, -1281,  5525,   675,  8355, -1281, -1281,
    1663      602,  1108,  1109,  1286,  3745, -1281, -1281,  7703, -1281, -1281,
    1664     1111, -1281, -1281,  1116, -1281,  1111,  1128, 10744,  6464,   146,
    1665     1113,    53,  1136,  1115,  1137,   829,  1131,  1139, -1281,  1142,
    1666     1143,  1696,  6843, -1281,  6464, -1281,   668,  1691, -1281,  6022,
    1667     6464,  1138, -1281, -1281,   990,   708, -1281,  6464, -1281, -1281,
    1668      727, -1281, -1281, -1281, -1281, -1281,   599,   599,   388,   388,
    1669      472,   472,   472,   472,   354,   354,   593,   830,   867,   873,
    1670      970,  6306,   755, -1281,  9940,  1148,  1149,  1152,  1062, -1281,
    1671    -1281, -1281, -1281, -1281,  9940,   713,  6306,  5525, -1281,  9645,
    1672    -1281,  7319,  9311,  9236,  7081, -1281, -1281, -1281,  1185,  9940,
    1673      951,  1160,  1163,  1165,  1166,  1175,  1176,  1182, -1281,  3532,
    1674     1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1675    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, -1281,
    1676    -1281, -1281,   874, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1677    -1281,  1183, -1281,  1187,  1189, -1281, -1281,    31,  1138,  5054,
    1678    -1281, -1281, -1281,  5315,  1180, -1281, -1281, -1281, -1281, -1281,
    1679      815,  6243,  1272, -1281, -1281, -1281, -1281,  1188,    31, -1281,
    1680    -1281,  1061, -1281, -1281,  1061,    70,  1061, -1281, -1281, -1281,
    1681    -1281, -1281, -1281,  9498, -1281,   144, -1281,  9002, -1281, -1281,
    1682     1201,   818,  1208,  1212,  1213, -1281, -1281,  1917, -1281, -1281,
    1683    -1281, -1281, -1281, -1281, -1281,  1868, -1281,  1047, -1281, -1281,
    1684     1210,  1216,  1211, -1281, -1281,  1218,  1223, -1281,   675,  1777,
    1685    -1281,   562, -1281,  3745,   874, -1281,  1226,  7703,  9863,  8972,
    1686     1230, -1281, -1281,  1225,  1235,  1238, -1281,  6306,   252,    40,
    1687     1231, -1281,  1242,   544,  1242,  6724,  6464, -1281, -1281,  1242,
    1688    -1281,  1691,  5315, -1281, -1281, -1281, -1281,  1236,  6464,  1245,
    1689      544,  5054, -1281, 10490, -1281,   544, -1281, -1281,  6464, -1281,
    1690      850,   901, -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,
    1691     8746, -1281, -1281,  7438,  1249, -1281,   856,   901, -1281,   872,
    1692      904,   901, -1281,   565,  4646, -1281, -1281, -1281,  9940,  9940,
    1693    -1281,  8426,  8426, -1281,  1252,  1255,  1264,  1271, -1281,  1253,
    1694      594,   247,  1138, -1281,   544, -1281,  4456, -1281,  6464,   459,
    1695    -1281,  6603,  1274,  1279, 10343,  1281,  1283,   301,   308,   344,
    1696     6464,  1285,   144,  6464,  6464,  1284,   498,  1282,  1268, -1281,
    1697    -1281, -1281,  1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1698    -1281, -1281,   815,  1296,  6464, -1281,  9940,  9940,   155,  1301,
    1699    -1281,  9349,  4935,   934,   901, -1281, -1281, -1281, -1281, -1281,
    1700    -1281, -1281, -1281, -1281,  1305,  1777, -1281, -1281,  1290, -1281,
    1701     1111, -1281, -1281,  2195,  1309, -1281, -1281, -1281,   734,  1312,
    1702    -1281,    53,  1317,  6306,  1303,    53,    53,  1327,  1323, -1281,
    1703     1074,  6464,  1328,  1236,  1036,   113,  1326, -1281,  1323, -1281,
    1704     1331,  1326, -1281, -1281,  1337, -1281, -1281,  1061,  1340,  1343,
    1705     6962,  1342,  1344,  1350, -1281, -1281,  1353, -1281, -1281,  1061,
    1706    -1281, -1281, -1281, -1281,  1061,  6464,  6464,  6306,  1355, -1281,
    1707    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
    1708    -1281,  6306,  6306,  1356,  1357,  1326, -1281, -1281,   815, -1281,
    1709    -1281, -1281,  7939,  9863,  6464,  6464,  1423,  6464, -1281, -1281,
    1710     1341, -1281,  1345,  6464,  1347,  1358,  6464,  1097,  1360,    74,
    1711     8776,  1197,   155, -1281, -1281,  6243,  1361,   467, -1281, -1281,
    1712    -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, 10467, -1281,
    1713     8497,  1362, -1281, -1281,  9863,   482,   494, -1281,  1372,  1383,
    1714      831,  1394, -1281,    66, -1281, -1281,  6464,  1395,  1393, -1281,
    1715    -1281,  1399,   430,   657,   544,  1400,  1401, -1281,  1406, -1281,
    1716     9940, -1281, -1281, -1281, -1281, -1281,  1412, -1281,  9940,  9940,
    1717     9940, -1281, -1281,  1413, -1281,  1415,  1425,  1427,   623,  8125,
    1718     8240, -1281, -1281,   278, -1281,  1426,  1429, -1281,  8568,   745,
    1719      759,  1430,   769,  6445, -1281, -1281,   502, -1281, -1281,   770,
    1720     1434,  1436,   144,  1487,   911, -1281, -1281,  6464, -1281, 10490,
    1721    10343, -1281, -1281, -1281,  1442,  1444,  9940, -1281, -1281, -1281,
    1722     1437, -1281, -1281, -1281, -1281, -1281, -1281,  9863,   831,   269,
    1723    -1281,  1424,   831,  1236,   373, -1281, -1281, -1281, -1281, -1281,
    1724    -1281, -1281, -1281,  1443, -1281, -1281, -1281, -1281, -1281, -1281,
    1725     1452,  1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1458,
    1726    -1281,  1457, -1281, -1281, 10343,   148,  6464, 10343, -1281,  1462,
    1727     6464, -1281,   171,  1484,  1486, -1281, -1281,  1465,  1476,  1455,
    1728      905, -1281, -1281, -1281, -1281, -1281,  1338,  2195,  1471,   862,
    1729      918,  6306, -1281,   772,  1477,  6464,   544,   544,  1480,  1482,
    1730     1483,  1485, -1281, -1281,  8426,  1472, -1281,  1555,  6306,  1493,
    1731    -1281, -1281, 10254, -1281,   790, -1281,  1467, 10343,  1468, -1281,
    1732    -1281,  1511, -1281,  1513, -1281,  1507,  1529, -1281,  1496,  1519,
    1733     9863, -1281, -1281, -1281,   831,   544,  1520,  1499,  1515, -1281,
    1734     1326,  1326, -1281, -1281, -1281, -1281, -1281, 10343,   258, -1281,
    1735      922, -1281, -1281,  7790, -1281, -1281,  1501,  6464, -1281,  6464,
    1736     7790,   144,  9716,   144,  9716,  1528, -1281,  1530, -1281, -1281,
    1737    -1281,  1524,   862, -1281,   794, -1281, -1281,  6464,  1540,  1542,
    1738    -1281,  6306,  6306, -1281, -1281,  1051,   133, -1281, -1281,  1510,
    1739    -1281,  1051, -1281, -1281,  2099,   544, -1281, -1281,   144,  9716,
    1740      144,  9716,  1546,  1525,   544, -1281, -1281, -1281, -1281, -1281,
    1741    10254,  1541,  1051,  7866,  6464, 10165,  1543,  1051,  1551,  2099,
    1742     2338, -1281, -1281, -1281,  1552, -1281, -1281, -1281, -1281,  8972,
    1743    -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281,  1531,  9979,
    1744    -1281, -1281, 10165,   144,  2338,   144,  1557,  1559,   795, -1281,
    1745    10072, -1281, -1281, -1281,  9979, -1281, -1281, -1281,   144,   144,
    1746    -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281
     1593    5863,  4890, -1356,    65, -1356, -1356, -1356, -1356, -1356, -1356,
     1594   -1356,     9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1595   -1356, -1356, -1356, -1356, -1356, -1356,   139,   139,   139,  1216,
     1596     781,    63,  4761,   238, -1356, -1356, -1356, -1356, -1356,   165,
     1597   -1356, -1356, -1356,   572,   207,  2350, -1356, -1356, -1356, -1356,
     1598   -1356, -1356,    59,   217, -1356,  1506, -1356, -1356, -1356, -1356,
     1599     220,  1734,   341,    66,  7480, -1356, -1356,  9240,  1240, -1356,
     1600   -1356, -1356,  1320,   351,  3183,  1125,   757,  1320,  1149, -1356,
     1601   -1356,  1042,   895, -1356,  1320,  1227, -1356,   243, -1356,   378,
     1602     403, -1356, -1356, -1356, -1356,   303,   217,   139, -1356,   139,
     1603   -1356, -1356, -1356, -1356,  9019,  1506, -1356, -1356,  1506, -1356,
     1604    9774,   314, -1356, -1356, -1356,  1811,  9812, -1356,   726,   726,
     1605     726, -1356, -1356, -1356,   139, -1356, -1356, -1356,   353,   381,
     1606     400, -1356, -1356, -1356,   417, -1356, -1356, -1356, -1356, -1356,
     1607     424,   436, -1356, -1356,    28,  8867,  2398,   371,   447,   459,
     1608     467,   482,   495,   557,  8670,  6999,   468,   584, -1356,  9350,
     1609   -1356, -1356, -1356, -1356,   594, -1356,   335,  4628,  4628, -1356,
     1610     575,   352, -1356, -1356, -1356, -1356,   602,   432,   434,   470,
     1611     139,   624, -1356, -1356,  1734,  1711,   656, -1356,    68, -1356,
     1612     139,   139,   217, -1356, -1356,    93, -1356,   139,   139, -1356,
     1613    2093,   670,   699,   726,  6910, -1356, -1356,   654,  2350, -1356,
     1614   -1356,  1320, -1356, -1356, -1356,   217, -1356,  1506,    59, -1356,
     1615    7819, -1356,   726,   726,   726,   217, -1356,  1216, -1356,  6673,
     1616   -1356, -1356,   659,   726, -1356,   726, -1356,   165,  8867,  8784,
     1617     714, -1356,   781,   740,   726, -1356,  1216,   737,   749, -1356,
     1618    4761,   791, -1356, -1356, -1356,  4061, -1356, -1356,  7390, -1356,
     1619     656,    62,  9812, 10718,  1811,  2093, -1356,   152, -1356, -1356,
     1620    9774,  1506,   770,  7511, -1356, -1356,   269, -1356,  3425,   779,
     1621     827,  3643,   814, 10872, 10930, -1356,   817, -1356, -1356, -1356,
     1622   -1356, 10949, 10949,   791,  8525,   818, 10872,  8981, -1356, -1356,
     1623   -1356, -1356, -1356, -1356,   855, -1356,   889,  2173, 10872, -1356,
     1624     498,   751,   809,   524,   880,   822,   831,   819,   869,     5,
     1625   -1356, -1356,   883,    64, -1356,   116, -1356, -1356,  2398, -1356,
     1626   -1356,   516,   900, -1356,   644,   900,   913,   165, -1356, -1356,
     1627     915,  9019, -1356,   916,  8639, -1356, -1356,  1004,  1539,  8240,
     1628    6910,  1320, -1356,  1320,   726,   726, -1356, -1356, -1356, -1356,
     1629   -1356, -1356,   726,  9885,  1506, -1356, -1356,  9923,  1500, -1356,
     1630    7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   929,  5043,
     1631   10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1632   -1356, -1356, -1356, -1356, -1356,  1811, -1356,   876,   936,   938,
     1633     944,   885,   947,   954,   957,  1711, -1356, -1356,   930,    59,
     1634     960, -1356, -1356,   970, -1356, -1356, -1356,  4061, -1356, -1356,
     1635   -1356, -1356, -1356,  2093, -1356,  8867,  8867, -1356,   726,  1811,
     1636    7030,  1506,  8313, -1356, -1356, -1356, -1356,  4061,    62, -1356,
     1637   -1356,  1320,   217, -1356, -1356,  4061, -1356,  6793, -1356, -1356,
     1638     726,   726,   472,  9953,   974,  1092,  5671, -1356,   521,   543,
     1639     781, -1356,  8784,   976,   959,   781,   726, -1356, -1356, -1356,
     1640   -1356, 10252, -1356,   560,  6550, -1356,   217,   981, -1356,  1811,
     1641   11070, 10776, -1356, -1356, -1356, -1356,   921,  2093, -1356,  8386,
     1642     656,  6061, -1356, -1356, -1356,   820,   612,   883,   781,  7511,
     1643    1338,  9774, -1356,  7511, -1356, -1356, -1356, -1356,   638, -1356,
     1644     994,   827,   255,  8525, -1356,  9953, -1356, -1356,  8525, -1356,
     1645    8753,  8525, -1356, -1356, -1356,   993, -1356,   665,   998,   161,
     1646    1002, -1356,  9490,  6639, -1356, -1356, -1356,   290, -1356, -1356,
     1647   10795, -1356,   366, 10795, -1356, -1356, -1356, -1356, -1356, -1356,
     1648   -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872,
     1649   10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872,
     1650   10872, 10872, 10872, 10872, 10872,  5362, 10718, -1356,    64,  1168,
     1651   -1356, -1356,   139,   139, -1356, -1356,  8867, -1356, -1356,   970,
     1652     791, -1356,   970, 10853, -1356, -1356, -1356,  3524,  6639,  1016,
     1653    9095,  1028, -1356, 10035, -1356, -1356,   594, -1356,  1029,   776,
     1654    1036,  1922,   164,   883, -1356,   139,   139,   883,   174, -1356,
     1655     139,   139,   970, -1356, -1356,   139,   139, -1356,   900, 10065,
     1656    1506, 11215,   233,   347, 10065, -1356, 10214, -1356,   883, -1356,
     1657    9885, -1356,   125,  7935,  7935,  7935,  1506, -1356,  6115,  1033,
     1658     414,   929,  1150,  1037,  1038, -1356,  1054,  4628,   555, -1356,
     1659    1124,  1506,  7935,   791,  1811,   791,   656,   704,   900, -1356,
     1660   -1356,   729,   900, -1356, -1356, -1356,   827, -1356,   900,   217,
     1661   10252, -1356,   666,  1061,   679,  1062, -1356,  1065,   217, -1356,
     1662   -1356,  4061,   217,  1059,   553,   573, 10103,  7119,  1590, 10872,
     1663    1954, -1356, -1356,  1066,    39,  1066, -1356, -1356, -1356,   139,
     1664     139, -1356, -1356,   781, -1356,   139, -1356, -1356,  9630,   781,
     1665    1069, 10872, -1356,   976, 11215, -1356, -1356,  1075, -1356, -1356,
     1666   -1356,   791, -1356, 11143, 10872, -1356,  7935,   588,  8240, -1356,
     1667   -1356,   594,  1072,  1077,   820,  2542, -1356, -1356,  7511, -1356,
     1668   -1356,  1074, -1356, -1356,  1088, -1356,  1074,  1090,  3425, 10718,
     1669     205,  1073,    47,  1094,  1082,  1100,   818,  1102,  1110, -1356,
     1670    1113,  1117,  9661,  6759, -1356, 10718, -1356,   161,  1861, -1356,
     1671    6396, 10718,  1120, -1356, -1356,   929,   689, -1356, 10718, -1356,
     1672   -1356,   865, -1356, -1356, -1356, -1356, -1356,   498,   498,   751,
     1673     751,   809,   809,   809,   809,   524,   524,   880,   822,   831,
     1674     819,   869, 10872,   875, -1356, 10252,  1119,  1140,  1142,  1168,
     1675   -1356, -1356, -1356, -1356, -1356, 10252,   691, 10872,  7935, -1356,
     1676    9885, -1356,  7239,  9209,  8905,  6999, -1356, -1356, -1356,   776,
     1677   10252,   927,  1145,  1152,  1158,  1159,  1162,  1166,  1172, -1356,
     1678    4275,  1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1679   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970,
     1680   -1356, -1356, -1356,   883, -1356, -1356, -1356, -1356, -1356, -1356,
     1681   -1356, -1356,  1176, -1356,  1183,  1185, -1356, -1356,    59,  1120,
     1682    6115, -1356, -1356, -1356,  5043,  1144, -1356, -1356, -1356, -1356,
     1683   -1356,   781,  6242,  1231, -1356, -1356, -1356, -1356,  1165,    59,
     1684   -1356, -1356,   970, -1356, -1356,   970,    29,   970, -1356, -1356,
     1685   -1356, -1356, -1356, -1356,  9380, -1356,   217, -1356,  8784, -1356,
     1686   -1356,  1190,   906,  1187,  1193,  1198, -1356, -1356,  1954, -1356,
     1687   -1356, -1356, -1356, -1356, -1356, -1356,  1092, -1356,   959, -1356,
     1688   -1356,  1195,  1202,  1201, -1356, -1356,  1206,  1210, -1356,   588,
     1689    2182, -1356,   533, -1356,  2542,   883, -1356,  1213,  7511, 10176,
     1690    8867,  1220, -1356, -1356,  1218,  1222,  1224, -1356, 10872,   230,
     1691      -1,  1219, -1356,  1225,   791,  1225,  6639, 10718, -1356, -1356,
     1692    1225, -1356,  1861,  5043, -1356, -1356, -1356, -1356,  1236, 10718,
     1693    1233,   791,  6115, -1356, 10795, -1356,   791, -1356, -1356, 10718,
     1694   -1356,   782,   900, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1695     929,  8639, -1356, -1356,  7359,  1237, -1356,   807,   900, -1356,
     1696     825,   836,   900, -1356,   726,  4460, -1356, -1356, -1356, 10252,
     1697   10252, -1356,  8313,  8313, -1356,  1241,  1248,  1246,  1259, -1356,
     1698    1262,   672,   244,  1120, -1356,   791, -1356,  4628, -1356, 10718,
     1699     578, -1356,  6519,  1267,  1271, 10660,  1272,  1277,   122,   304,
     1700     298, 10718,  1279,   217, 10718, 10718,  1280,   678,  1254,  1261,
     1701   -1356, -1356, -1356,  1284, -1356, -1356, -1356, -1356, -1356, -1356,
     1702   -1356, -1356, -1356,   781,  1290, 10718, -1356, 10252, 10252,   139,
     1703    1292, -1356,  9743,  9520,   847,   900, -1356, -1356, -1356, -1356,
     1704   -1356, -1356, -1356, -1356, -1356,  1293,  2182, -1356, -1356,  1275,
     1705   -1356,  1074, -1356, -1356,  1811,  1296, -1356, -1356, -1356,   706,
     1706    1291, -1356,    47,  1305, 10872,  1288,    47,    47,  1314,  1310,
     1707   -1356,  1054, 10718,  1315,  1236,   711,   214,  1317, -1356,  1310,
     1708   -1356,  1323,  1317, -1356, -1356,  1328, -1356, -1356,   970,  1329,
     1709    1330,  6879,  1331,  1339,  1341, -1356, -1356,  1340, -1356, -1356,
     1710     970, -1356, -1356, -1356, -1356,   970, 10718, 10718, 10872,  1344,
     1711   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1712   -1356, -1356, 10872, 10872,  1347,  1349,  1317, -1356, -1356,   781,
     1713   -1356, -1356, -1356,  7746, 10176, 10718, 10718,  1394, 10718, -1356,
     1714   -1356,  1333, -1356,  1334, 10718,  1335,  1343, 10718,   992,  1345,
     1715      36,  8158,  1229,   139, -1356, -1356,  6242,  1348,   585, -1356,
     1716   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970, 10478,
     1717   -1356,  8386,  1360, -1356, -1356, 10176,   592,   598, -1356,  1356,
     1718    1355,   827,  1366, -1356,   179, -1356, -1356, 10718,  1368,  1363,
     1719   -1356, -1356,  1369,   484,   663,   791,  1376,  1378, -1356,  1380,
     1720   -1356, 10252, -1356, -1356, -1356, -1356, -1356,  1382, -1356, 10252,
     1721   10252, 10252, -1356, -1356,  1386, -1356,  1389,  1392,  1393,   682,
     1722    8008,  8124, -1356, -1356,   370, -1356,  1396,  1397, -1356,  8459,
     1723     715,   725,  1395,   760,  6377, -1356, -1356,   641, -1356, -1356,
     1724     796,  1402,  1403,   217,  1453,   961, -1356, -1356, 10718, -1356,
     1725   10795, 10660, -1356, -1356, -1356,  1406,  1407, 10252, -1356, -1356,
     1726   -1356,  1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176,   827,
     1727     287, -1356,  1388,   827,  1236,   361, -1356, -1356, -1356, -1356,
     1728   -1356, -1356, -1356, -1356,  1408, -1356, -1356, -1356, -1356, -1356,
     1729   -1356,  1411,  1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
     1730    1418, -1356,  1417, -1356, -1356, 10660,   272, 10718, 10660, -1356,
     1731    1422, 10718, -1356,   306,  1438,  1441, -1356, -1356,  1430,  1431,
     1732    1413,   918, -1356, -1356, -1356, -1356, -1356,  1506,  1811,  1433,
     1733     855,   946, 10872, -1356,   801,  1439, 10718,   791,   791,  1442,
     1734    1448,  1449,  1450, -1356, -1356,  8313,  1452, -1356,  1535, 10872,
     1735    1462, -1356, -1356, 10571, -1356,   803, -1356,  1460, 10660,  1463,
     1736   -1356, -1356,  1489, -1356,  1493, -1356,  1511,  1512, -1356,  1480,
     1737    1508, 10176, -1356, -1356, -1356,   827,   791,  1514,  1484,  1509,
     1738   -1356,  1317,  1317, -1356, -1356, -1356, -1356, -1356, 10660,   301,
     1739   -1356,   958, -1356, -1356,  7597, -1356, -1356,  1502, 10718, -1356,
     1740   10718,  7597,   217,  9953,   217,  9953,  1515, -1356,  1522, -1356,
     1741   -1356, -1356,  1520,   855, -1356,   811, -1356, -1356, 10718,  1526,
     1742    1527, -1356, 10872, 10872, -1356, -1356,  1055,   154, -1356, -1356,
     1743    1510, -1356,  1055, -1356, -1356,  1716,   791, -1356, -1356,   217,
     1744    9953,   217,  9953,  1532,  1517,   791, -1356, -1356, -1356, -1356,
     1745   -1356, 10571,  1528,  1055,  7673, 10718, 10482,  1531,  1055,  1537,
     1746    1716,  2045, -1356, -1356, -1356,  1545, -1356, -1356, -1356, -1356,
     1747    8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356,  1529,
     1748   10256, -1356, -1356, 10482,   217,  2045,   217,  1558,  1559,   815,
     1749   -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356,   217,
     1750     217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356
    17471751};
    17481752
     
    17501754static const yytype_int16 yypgoto[] =
    17511755{
    1752    -1281,  4254,  1590, -1281,  1409, -1281,    52,     0,  -229, -1281,
    1753      596,  -527,  -497,  -931,   -99,  4508, -1281,   358,   609,   563,
    1754      518,   591,  1104,  1105,  1110,  1117,  1112, -1281,   613,  -339,
    1755     5346,  -893,  -690,  -919, -1281,   401,  -634,   444, -1281,   753,
    1756    -1281,   449, -1224, -1281, -1281,   191, -1281, -1265,  -724,   305,
    1757    -1281, -1281, -1281, -1281,   129, -1170, -1281, -1281, -1281, -1281,
    1758    -1281, -1281,   382, -1175,    71, -1281,  -381, -1281,   560,   356,
    1759    -1281,   229, -1281,  -338, -1281, -1281, -1281,   632,  -691, -1281,
    1760    -1281,    11, -1000,    10,  2865, -1281, -1281, -1281,  -125, -1281,
    1761      275,   363,  -194,  1416,  4157, -1281, -1281,    24,    25,   374,
    1762     -202,  1621, -1281,  2138, -1281, -1281,   112,  2165, -1281,  2832,
    1763      139, -1281, -1281,  -416,  -434,  1276,  1278,   786,  1028,   400,
    1764    -1281, -1281,  1269,   793,  -513, -1281,  -522,   -57,  -636, -1281,
    1765    -1281,  -959,  -994,   122,   819,  1153,   135, -1281,  1441,   296,
    1766     -299,  -212,  -109,   749,   844, -1281,  1087, -1281,  2859,  1478,
    1767     -462,  1000, -1281, -1281,   778, -1281,  -233, -1281,   -72, -1281,
    1768    -1281, -1281, -1232,   504, -1281, -1281, -1281,  1259, -1281,    68,
    1769    -1281, -1281,  -850,   -96, -1280,   -93,  1665, -1281,  2401, -1281,
    1770      993, -1281,  -164,   689,  -177,  -176,  -170,     2,   -39,   -33,
    1771      -28,  1052,    48,    75,    93,  -100,  -167,  -166,  -153,  -148,
    1772     -277,  -569,  -500,  -490,  -543,  -300,  -514, -1281, -1281,  -506,
    1773     1174,  1177,  1181,  2149,  5126,  -572,  -549,  -544,  -523,  -484,
    1774    -1281,  -427,  -665,  -663,  -660,  -602,  -320,  -271, -1281, -1281,
    1775      102,   140,   -84, -1281,  3728,   128,  -603,  -447
     1756   -1356,  4068,  1513, -1356,  1381, -1356,    41,     0,  -254, -1356,
     1757     593,  -523,  -482,  -960,  -143,  5028, -1356,  -101,   576,   581,
     1758     386,   577,  1101,  1105,  1106,  1099,  1107, -1356,  -593,  -585,
     1759    4966,  -933,  -708,  -942, -1356,  -273,  -719,   379, -1356,  1404,
     1760   -1356,   457, -1092, -1356, -1356,   195, -1356,  -844, -1059,   308,
     1761   -1356, -1356, -1356, -1356,   124, -1118, -1356, -1356, -1356, -1356,
     1762   -1356, -1356,   382, -1355,    53, -1356,  -496, -1356,   558,   349,
     1763   -1356,   226, -1356,  -307, -1356, -1356, -1356,   610,  -832, -1356,
     1764   -1356,    13,  -961,   169,  2725, -1356, -1356, -1356,   -79, -1356,
     1765     189,   845,  -184,  1482,  3902, -1356, -1356,   192,   133,   657,
     1766    -251,  1620, -1356,  1796, -1356, -1356,   156,  2416, -1356,  2575,
     1767     798, -1356, -1356,  -404,  -428,  1252,  1253,   761,  1003,   302,
     1768   -1356, -1356,  1245,   764,  -253, -1356,   -24,  -132,  -469, -1356,
     1769   -1356,  -983,  -881,     4,   862,  1128,   -43, -1356,   561,  -100,
     1770    -262,  -193,  -152,   721,   826, -1356,  1071, -1356,  2692,   907,
     1771    -449,   971, -1356, -1356,   765, -1356,  -227, -1356,   -60, -1356,
     1772   -1356, -1356, -1248,   485, -1356, -1356, -1356,  1242, -1356,    45,
     1773   -1356, -1356,  -846,  -109, -1333,  -138,  3289, -1356,  1880, -1356,
     1774     969, -1356,  -161,   268,  -181,  -177,  -175,     2,   -39,   -35,
     1775     -33,   769,    30,    31,    69,  -146,  -162,  -151,  -147,  -140,
     1776    -277,  -521,  -506,  -484,  -575,  -313,  -516, -1356, -1356,  -528,
     1777    1156,  1157,  1163,  2484,  4688,  -570,  -557,  -534,  -533,  -478,
     1778   -1356,  -432,  -693,  -685,  -681,  -580,  -201,  -236, -1356, -1356,
     1779     265,   180,   -86, -1356,  3600,   232,  -625,  -376
    17761780};
    17771781
     
    17791783   positive, shift that token.  If negative, reduce the rule which
    17801784   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1781 #define YYTABLE_NINF -522
     1785#define YYTABLE_NINF -523
    17821786static const yytype_int16 yytable[] =
    17831787{
    1784       46,   111,    95,   147,   451,   438,   397,   398,   426,   148,
    1785       53,   113,   112,   399,   149,   790,   400,   401,   265,   258,
    1786      405,   711,   767,   604,    66,    67,   870,   706,   111,   111,
    1787      402,    46,   932,    95,   933,   403,   750,   934,   853,   841,
    1788      755,    53,    46,   918,    46,   717,   159,   617,  1185,   748,
    1789      511,  1091,   894,   110,    46,    66,    67,   381,   382,   845,
    1790       46,  1201,   191,    46,   846,   214,    46,   852,   224,   341,
    1791      612,    47,   819,   208,  1151,   504,   218,   217,   678,  1143,
    1792      111,   111,  1183,  1184,   406,   847,   397,   398,   210,   994,
    1793      150,   636,   408,   399,   844,   640,   400,   401,   687,   141,
    1794      405,   778,    47,   423,    46,  1398,   691,    46,   842,   200,
    1795      402,   932,    74,   933,    46,   403,   934,   151,   843,   950,
    1796      883,   883,   883,  1195,   974,   682,   684,   856,    30,   477,
    1797      885,   886,    30,   863,   289,   152,  1317,   166,  1461,   883,
    1798      104,   104,   407,    74,   147,    46,   161,   159,   904,  1134,
    1799      148,   535,   121,    46,   445,   149,  1135,  1465,    46,   201,
    1800      371,   167,    30,   977,   406,   857,   481,   483,   739,   860,
    1801      278,   104,   164,   466,   841,  1341,  -234,  -234,  1009,  1098,
    1802     1218,  1219,  1342,    46,    46,   120,   159,   482,  1014,   175,
    1803      877,  1418,  1419,    30,   880,    30,   676,  1262,   250,    46,
    1804      409,   754,   212,  1025,   409,  1318,   104,    46,  1481,   159,
    1805     1090,   161,  1461,   883,  1418,  1419,    46,   745,   140,    46,
    1806      769,   441,   957,    30,   147,  1263,   111,   535,   279,   439,
    1807      148,   150,   417,   142,   409,   149,   375,   164,   144,   259,
    1808      673,   111,   260,   842,   440,   111,  1185,  -234,  1259,    46,
    1809      111,    95,   376,   843,   212,  1465,   595,   169,   151,    53,
    1810     1465,  1420,   975,    46,    46,   487,   159,   409,   179,   841,
    1811       46,    30,   326,    66,    67,    60,   152,    46,  1037,   604,
    1812     1465,   759,   199,   711,  1429,   341,   823,  1465,   535,   845,
    1813      702,   477,   111,   854,   846,   609,  1185,   212,   665,  1507,
    1814      153,  1549,   471,  1201,   674,   883,    60,  1036,   604,   433,
    1815      617,   477,  1013,   604,  1016,   847,   760,   469,  1153,   477,
    1816       47,  1560,   673,   761,  1024,   830,   680,    46,  1564,   371,
    1817     1183,  1184,   685,   535,  1536,   434,  1538,  1343,   842,   573,
    1818      459,   861,  1191,   609,   523,   873,    46,    46,   843,   874,
    1819      535,   437,   925,  1491,   704,  1550,   856,   245,   212,   936,
    1820     1133,    74,  -290,    46,   114,   326,    74,    46,   879,  1192,
    1821     1200,   433,   108,   210,   574,  1091,   739,  1401,   652,   108,
    1822     1192,   949,  1565,    40,    41,   250,   674,   853,   -10,   104,
    1823       40,    41,  -112,  -112,    46,   530,   212,   434,   161,   108,
    1824      212,   482,  1180,  1181,    46,   489,   371,   157,  -112,   845,
    1825       40,    41,   506,   385,   846,   108,   248,   388,   870,  -517,
    1826     1185,   390,    46,   575,   164,  1040,    40,    41,    46,   386,
    1827       46,   738,  1209,   389,   584,   847,  1215,   391,   782,  1211,
    1828      585,   227,   392,   563,   564,   228,   915,   341,   232,   712,
    1829      234,   262,   739,   714,    46,  1456,   108,   243,   393,   111,
    1830     1230,  1231,  1213,  1201,   111,   713,   256,    40,    41,   715,
    1831     1201,   606,   157,   111,  -440,  1450,  1451,   712,    46,   565,
    1832      566,   175,  -112,   250,   328,   692,    46,   212,   371,  1405,
    1833       46,   585,    95,   928,    46,   788,   329,   111,   637,   111,
    1834       53,   108,   641,  -112,   210,  1120,  1149,   322,   559,   560,
    1835     1106,  1101,    40,    41,    66,    67,   338,  1117,   706,   652,
    1836      397,   398,   714,  1201,    60,   110,  -441,   399,    74,   478,
    1837      400,   401,   978,   274,  1090,   405,   111,  1258,   929,   652,
    1838     1347,   111,   652,  1037,   402,  1171,  1173,   895,    74,   403,
    1839      617,   276,   326,   326,   459,   504,    74,   459,  1018,   561,
    1840      562,    47,   830,   459,  1106,   477,   428,   906,   212,   284,
    1841      432,   766,   908,  1035,  1198,     8,     9,    10,    11,    12,
    1842       40,    41,  1198,   277,   227,   884,   884,   884,   783,   111,
    1843     1199,   766,   727,   789,   766,   330,    46,  1332,  1323,   406,
    1844      322,   454,    74,    30,   884,   331,   520,   954,    46,  1334,
    1845       46,   341,  1380,  1333,   530,   108,   530,   774,   212,   530,
    1846      875,   832,   530,   332,   876,  1335,    40,    41,   326,    46,
    1847      104,    33,   432,  1381,  1355,   494,   333,  -466,  1132,   738,
    1848      516,   471,  1357,  1358,  1359,    46,   108,   326,   137,   138,
    1849      334,   111,   830,   533,   534,   440,   528,    40,    41,   157,
    1850       46,   369,   111,    46,   111,   555,   383,   711,  -466,  1378,
    1851     -466,   896,  -291,   875,  -466,  1048,   370,  1116,   884,     8,
    1852        9,    10,    11,    12,   567,   568,  1035,   341,   241,    94,
    1853     1394,   478,   729,   586,   526,   409,  1095,    46,   730,    46,
    1854      604,   534,   897,   594,   651,  -105,   601,    30,   898,  -105,
    1855      374,   478,   111,   326,   905,   738,   907,   556,   111,   478,
    1856       94,   395,   557,   558,   227,   634,   232,   606,   108,   638,
    1857      111,   146,   338,    94,  1366,    33,  1128,   534,  1367,    40,
    1858       41,   212,   387,    46,    46,   746,  1428,   756,   210,   187,
    1859     1249,   747,    94,   757,  1253,    94,   871,    46,   577,   407,
    1860      409,   606,   210,   736,   872,    60,   424,  1349,   578,   212,
    1861      884,  1520,  1497,   673,   212,   425,   776,  1525,   409,  1497,
    1862      887,   702,   953,   958,  1055,   609,   777,   322,   322,   430,
    1863      773,   919,  1390,   959,  1251,   903,   774,   774,  1545,   461,
    1864      921,   727,    74,  1552,   448,   171,   774,   464,   762,   108,
    1865      763,   137,   236,   764,   227,   454,   770,  1002,   454,   459,
    1866       40,    41,  1015,  1003,   454,   681,   683,   499,   730,   500,
    1867      490,   830,  1546,  1499,    94,  1500,   114,   674,    46,  1175,
    1868      739,  1006,  1003,  1247,    74,   704,   237,    94,   251,   585,
    1869       46,   238,  1291,  1292,  1374,   589,   210,   409,   832,   467,
    1870      774,   494,   212,   322,   932,   494,   933,   468,  1375,   934,
    1871      774,  1008,   396,   187,   774,   528,   212,   528,  1377,  1382,
    1872      528,  1447,   322,   528,   774,   774,   108,  1444,   137,   138,
    1873     1547,   510,   506,   652,   338,   514,    94,    40,    41,  1466,
    1874      111,   652,   978,  1513,  1570,   774,   978,   978,    94,  1514,
    1875      585,    53,   289,   526,   793,   794,   795,   909,   526,   409,
    1876      739,   526,   912,    46,   409,    66,    67,   328,   409,     2,
    1877      204,     4,     5,     6,     7,   519,   727,    46,    94,   108,
    1878      531,   137,   138,   535,   415,    46,   727,  1196,   322,   569,
    1879       40,    41,   485,  1077,   250,   328,   409,   534,  1155,   828,
    1880      409,   727,   601,    46,  1167,   478,   409,   435,  1387,  1388,
    1881      212,   736,   417,   669,   409,   812,   751,   443,  1122,  1121,
    1882     1170,   752,   609,   111,  1182,     2,   204,     4,     5,     6,
    1883        7,   869,   652,    34,   570,    35,   601,   487,   328,   409,
    1884      111,   571,   878,   652,   575,   111,    36,   478,   181,   182,
    1885       39,   337,  1172,    74,   609,  -292,    94,    40,    41,  1438,
    1886     1003,  1339,     8,     9,    10,    11,    12,  1242,    36,   459,
    1887      172,   173,    39,  1444,  1445,  1137,   611,  1492,  1493,    40,
    1888       41,   104,  1235,   608,   409,   609,   527,   736,   440,    34,
    1889       30,    35,  1145,   610,   111,   766,    -3,  1145,   338,   854,
    1890      328,   609,  1446,   572,   652,   370,  -437,   111,   111,   111,
    1891      593,    53,     8,     9,    10,    11,    12,  1532,    33,  1458,
    1892      454,   800,   801,   802,   803,  1203,    67,   108,   596,   137,
    1893      138,   534,   111,   187,  1418,  1419,   160,   326,    40,    41,
    1894       30,   646,   940,   738,   940,   666,  1145,   667,   104,  1399,
    1895      494,   668,   192,  1399,   670,   215,  1077,   671,   225,  1210,
    1896     1212,  1214,  -293,    46,   798,   799,   890,  1106,    33,     8,
    1897        9,    10,    11,    12,   338,   672,   341,   993,    36,   675,
    1898      172,   173,    39,   703,   677,  -112,   695,  -112,   871,    40,
    1899       41,  -112,  1518,  1458,  1310,  1311,  1312,    30,   804,   805,
    1900      727,   727,   212,  1348,  1350,  1351,  -112,  -112,   796,   797,
    1901      577,   255,   409,    74,   718,   374,    60,   720,  -238,    94,
    1902      578,   758,   771,   611,   534,    33,   775,   779,   -12,   893,
    1903      833,   835,  1017,   837,   689,   848,   828,   160,   111,   -13,
    1904      900,   104,   892,   459,   920,   536,   537,   538,   922,   923,
    1905      372,  -414,   208,   218,   217,  1482,   927,   698,   727,   727,
    1906       46,   948,  -521,   962,   969,   652,   747,   210,   731,   539,
    1907      983,   540,  1369,   541,   542,    53,   160,   971,     2,   204,
    1908        4,     5,     6,     7,   976,   982,   984,   986,   987,    66,
    1909       67,   988,   989,   998,  1122,  1121,    36,  1010,  1011,   160,
    1910       39,  1012,   111,   111,   111,   527,   226,    40,    41,  1026,
    1911      527,   442,  1027,   527,  1028,  1029,   127,  1077,   128,   129,
    1912      130,   536,   537,   538,  1030,  1031,   828,    40,    41,   728,
    1913      454,  1032,  1043,   838,  1057,   609,  -402,   840,  -401,   611,
    1914     1092,  1442,    34,   610,    35,   539,  1558,   540,   439,   541,
    1915     1319,   935,  1102,    53,  1145,  1145,  1145,  1103,  1094,   652,
    1916      652,  1104,  1105,   440,  1109,  1110,  1111,  1203,    67,  1112,
    1917      494,  1123,   322,   935,  1113,  1119,   478,    74,    36,  1129,
    1918      774,   212,    39,   104,  1130,  1079,  1136,  1122,  1121,    40,
    1919       41,  1141,   397,   398,  1131,   992,  1144,    36,  1165,   399,
    1920     1328,    39,   400,   401,  1190,   104,   405,  1186,    40,    41,
    1921     1187,   766,  1077,  1188,   652,    42,   402,   652,   534,   372,
    1922     1189,   403,  1204,   869,   104,   145,   931,  1205,   703,  1207,
    1923      673,  1208,   727,  1216,   743,  1220,    46,    46,  1222,  1223,
    1924      727,   727,   727,    -3,   744,  1228,   111,   111,  1531,    36,
    1925     1233,   172,   173,    39,  1239,    74,    63,   115,   499,   516,
    1926       40,    41,   652,  1243,  1007,  1248,  1077,   652,  1250,  1077,
    1927      406,   917,   840,   611,  1252,   736,  1255,   212,  1256,  1260,
    1928      924,  1264,  1267,   104,   926,   111,  1269,    63,   727,  1271,
    1929     1122,  1121,  1272,  1273,   674,  1274,   372,   652,  1145,  1145,
    1930      158,  1275,  1277,   174,   454,   828,  1284,  1293,  1294,  1301,
    1931      139,  1330,  1304,    53,  1077,  1322,  1305,   104,  1307,  1077,
    1932       53,    36,   219,   181,   182,    39,  1336,  1203,    67,  1308,
    1933      147,  1316,    40,    41,  1203,    67,   148,  1483,   728,  1338,
    1934       60,   149,  1050,  1340,    46,   111,  1344,  1345,  1206,  1077,
    1935     1346,  1352,  1353,   174,   111,   736,   174,  1354,   183,   257,
    1936      652,   239,   242,  1356,  1362,   652,  1363,   840,   184,    46,
    1937       46,  1441,   159,    53,  1364,   534,  1365,  1372,  1376,   611,
    1938     1373,   213,  1383,   652,  1384,   652,  1312,  1203,    67,   652,
    1939     1395,  1392,   652,  1393,    46,  1402,   371,  1533,   240,  1405,
    1940      652,   327,   174,  1412,   652,  1413,  1541,  -403,  1416,   257,
    1941      348,  1427,  1077,  1435,  1505,    74,  1505,  1077,   478,  1431,
    1942      104,  1433,    74,   338,  1436,  1443,  1437,  1367,  1448,  1452,
    1943      935,  1453,  1454,   213,  1455,  1077,  1457,  1077,  1467,  1469,
    1944      404,  1077,  1475,   104,  1077,  1299,  1300,  1123,  1302,  1462,
    1945      104,  1505,  1077,  1505,  1306,   422,  1077,  1309,   427,   429,
    1946     1471,  1152,  1473,   158,  1477,   174,   703,  1479,  1480,  1485,
    1947     1486,  1487,  1498,   728,   703,    74,   213,  1508,  1512,  1510,
    1948      165,  1524,   170,   728,   446,   176,   177,   178,   449,   180,
    1949      450,  1516,   611,  1517,  1539,  1544,  1540,  1551,   728,   465,
    1950     1553,  1555,  1561,   104,   231,    63,  1568,   326,  1569,  1079,
    1951      479,  1050,  1221,   806,  1321,   807,   246,   247,  1100,   174,
    1952      486,   808,   463,  1519,   211,   810,   174,  1430,   429,   809,
    1953      122,   125,   126,  1571,   230,  1386,  1254,   213,  1403,  1501,
    1954     1123,     8,     9,    10,    11,    12,     8,     9,    10,    11,
     1788      47,   112,    96,   398,   148,   933,   266,   399,   149,   400,
     1789     150,   452,   176,   934,   113,   382,   383,   935,   259,   427,
     1790     791,   527,   401,   707,   406,   439,   512,   505,   712,   112,
     1791     112,   895,    47,   402,    96,   618,   853,   403,   768,   407,
     1792     975,   854,   111,    47,   404,    47,  1152,   160,   409,   871,
     1793     751,   820,   846,    48,   756,    47,  1092,  1144,   718,  1184,
     1794    1185,    47,   260,   192,    47,   261,   215,    47,   342,   225,
     1795    1091,   613,   995,   151,   152,   847,   848,   142,    31,   279,
     1796     218,   112,   112,   398,   933,    48,  1462,   399,   842,   400,
     1797    1399,   424,   934,   845,   201,  1196,   935,   779,   951,  1318,
     1798     574,  1202,   401,   843,   406,    47,   936,    31,    47,  1135,
     1799     679,   536,   153,   402,   937,    47,  1136,   403,   122,   407,
     1800    1508,   749,   482,   484,   404,   844,   408,   637,   936,   290,
     1801     688,   641,    31,    68,   857,   575,   950,   280,   692,  1099,
     1802     864,  1219,  1220,   605,   202,   148,    47,   121,   160,   149,
     1803     410,   150,   682,   684,    47,  1537,    75,  1539,   978,    47,
     1804    1462,   372,  1186,   683,   685,    68,   167,   446,  1319,    54,
     1805     114,   483,   141,   578,   438,   410,   478,   251,    31,   410,
     1806     105,   105,   517,   579,    47,    47,   467,   160,    75,    61,
     1807     168,    31,    67,  1482,   109,   534,   535,   211,  -234,  -234,
     1808      47,    54,   418,    31,   410,    41,    42,   556,    47,  1260,
     1809     160,   919,   105,    31,   151,   152,   677,    47,   746,  1008,
     1810      47,    61,   442,   842,    67,   148,   585,   112,   490,   149,
     1811    1201,   150,   586,   209,   483,   507,   219,   858,   843,   755,
     1812     527,   861,   112,   535,   674,   527,   112,   105,   527,   143,
     1813      47,   112,    96,   153,  1210,   596,   576,   760,   770,   675,
     1814     844,   488,   878,   410,    47,    47,   881,   160,    95,  -234,
     1815     777,    47,   410,   855,   145,   610,  1037,   165,    47,   535,
     1816     778,  1038,   846,   862,   342,   610,   666,   536,   740,  1342,
     1817     712,  1014,   472,   112,   703,   470,  1343,  1051,   618,  1263,
     1818      95,  1154,   813,    48,   176,   847,   848,  1184,  1185,   705,
     1819     162,   147,   536,    95,   681,  1344,  1419,  1420,   842,   154,
     1820     686,   638,   976,  1025,   824,   642,   674,  1264,    47,   188,
     1821     372,   170,    95,   843,   524,    95,   180,   536,   478,  1134,
     1822    1192,   675,   165,  1202,   200,   874,  1010,    47,    47,   875,
     1823    1419,  1420,  1216,   441,  -290,   844,  1015,   739,   478,   246,
     1824    1186,   831,   109,   857,    47,   761,   478,  1193,    47,   536,
     1825     109,  1026,   762,    41,    42,   162,   109,   327,   249,   653,
     1826    1092,    41,    42,    68,   926,   936,  1421,    41,    42,   440,
     1827     854,   886,   887,  1133,  1091,    47,  1402,  1492,   500,   605,
     1828     501,   783,   846,  -518,   880,    47,    75,   372,  1551,   905,
     1829    1186,    75,   251,   763,    95,   764,  1153,  1214,   765,    54,
     1830    1430,   771,   916,    47,  1193,   847,   848,    95,   605,    47,
     1831     105,    47,  1457,   605,  1550,  1566,  1212,  1521,   109,    61,
     1832     435,   871,    67,  1526,   479,   263,   342,  1451,  1452,    41,
     1833      42,   376,   397,   188,  1561,    47,   794,   795,   796,   876,
     1834     112,  1565,   -10,   877,  1546,   112,  1051,   377,   386,  1553,
     1835     327,  -112,  1381,   434,   112,   728,    95,   789,  1406,    47,
     1836     251,   329,   211,   958,   387,  -112,  -112,    47,    95,   372,
     1837    -441,    47,  -112,    96,  -467,    47,   740,  1041,   112,   535,
     1838     112,  -112,   435,  1202,   460,   896,  1107,   505,   979,  -442,
     1839    1202,   885,   885,   885,   707,   111,  1259,   398,    95,  1121,
     1840     653,   399,  1150,   400,  1102,  -467,   275,  -467,   909,   165,
     1841     885,  -467,   486,   277,  1186,   434,   401,   112,   618,   406,
     1842     653,   936,   112,   653,    48,   278,  1038,   402,   389,  1252,
     1843     391,   403,  1172,  1174,   407,   907,   109,   330,   404,   531,
     1844    1107,   767,   162,  1202,   390,   739,   392,    41,    42,   331,
     1845    1181,  1182,   740,    75,  1036,  1017,   607,   332,   784,  1466,
     1846     370,   767,   693,   790,   767,  1379,   393,   873,   586,  1118,
     1847     112,   140,   333,    75,  1019,  1348,    95,    47,   831,   936,
     1848     936,    75,   394,   888,   885,   334,   479,  1292,  1293,    47,
     1849     342,    47,   478,   211,   564,   565,   612,   557,   904,   884,
     1850     884,   884,   558,   559,    68,   587,   479,   410,  1231,  1232,
     1851      47,   472,  1498,   535,   479,   897,  1250,   713,   884,  1498,
     1852    1254,   739,   240,   243,    37,   876,    47,    75,    40,  1117,
     1853     566,   567,   112,   714,   955,    41,    42,   327,   327,   715,
     1854      54,    47,  1429,   112,    47,   112,   898,   335,   652,   713,
     1855     730,   105,   899,   188,   712,   716,   731,  1466,   737,   994,
     1856      61,    43,  1466,    67,   728,   929,   342,  1036,   831,   715,
     1857     384,   146,  1547,   371,  1199,  1049,   885,   959,    47,   610,
     1858      47,  1199,  1466,   375,   906,   930,   908,   960,  1333,  1466,
     1859    1200,   388,   884,   112,  1335,   507,  1096,  1324,   460,   112,
     1860     408,   460,   747,   704,  1334,   228,   535,   460,   748,   229,
     1861    1336,   112,   233,   327,   235,   109,     8,     9,    10,    11,
     1862      12,   244,  1056,  1129,    47,    47,    41,    42,   757,  1500,
     1863     285,  1501,   327,   590,   758,   410,   396,   775,    47,    95,
     1864    -291,    41,    42,   612,   441,    31,   431,     8,     9,    10,
     1865      11,    12,   954,  1382,  1350,   774,   920,   674,   531,   425,
     1866     531,   775,   775,   531,  -105,   703,   531,   521,  -105,   922,
     1867     833,   449,   675,    34,  1367,   775,    31,  1391,  1368,  1003,
     1868     705,  1016,  1356,   464,   884,  1004,  1548,   731,   426,   936,
     1869    1358,  1359,  1360,   910,   161,   410,  1248,  1447,   327,   728,
     1870     605,  -112,   586,  -112,    34,  1375,   936,  -112,   462,   728,
     1871     193,   775,   607,   216,  1459,  1376,   226,   933,   913,    47,
     1872     410,   775,  -112,  -112,   728,   934,   115,    75,    37,   935,
     1873    1176,    47,    40,   109,   465,   138,   139,   211,  1395,    41,
     1874      42,   872,   213,   109,    41,    42,   607,   831,   228,   468,
     1875    1378,   211,   560,   561,    41,    42,   775,   841,   979,   612,
     1876     479,   469,   979,   979,   491,   839,   737,   610,   511,    75,
     1877     158,  1156,    37,   410,   653,   611,    40,   562,   563,   936,
     1878     936,   112,   653,    41,    42,  1197,  1383,  1519,  1459,   290,
     1879    1183,  1448,   775,  1467,   213,   161,  1168,  1445,   410,   775,
     1880     535,  1514,   479,   515,    47,  1571,   520,  1515,   373,   744,
     1881     532,   586,  1300,  1301,  1171,  1303,   610,   536,    47,   745,
     1882     654,  1307,   570,  1078,  1310,  1173,    47,   610,   572,   257,
     1883     801,   802,   803,   804,   161,   158,  1236,   213,   410,   571,
     1884     740,   517,   737,   573,    47,   211,   932,   109,   704,   138,
     1885     139,   214,   568,   569,   537,   538,   539,   161,    41,    42,
     1886    1007,  1004,  1122,   460,   112,   251,   329,   410,   241,   443,
     1887     323,   775,  1009,   653,   418,   670,   410,  1340,   540,   339,
     1888     541,   112,   542,   543,   653,   941,   112,   941,   228,   242,
     1889     233,   338,   841,   612,   576,  1243,   329,   410,   213,  1388,
     1890    1389,   717,  -438,   214,   594,  1138,   464,   833,   597,   739,
     1891     488,   329,   410,  1439,  1004,    68,   855,   329,   610,   676,
     1892     740,   647,  1146,   728,   728,   767,   667,  1146,   668,   429,
     1893    1311,  1312,  1313,   433,   669,   112,   213,   671,    75,   750,
     1894     213,   754,  1445,  1446,   672,   653,   214,   673,   112,   112,
     1895     112,    54,   678,  1533,  1493,  1494,    37,   535,   173,   174,
     1896      40,   256,   105,   323,   455,  1400,   696,    41,    42,  1400,
     1897     721,    61,   719,   112,    67,  -238,  1146,   373,   228,  1419,
     1898    1420,   728,   728,   759,  1425,   772,  1078,   841,   776,  1211,
     1899    1213,  1215,   780,   371,   109,   433,   138,   237,   495,   612,
     1900    1349,  1351,  1352,  1107,    47,    41,    42,   214,   834,     2,
     1901     205,     4,     5,     6,     7,   342,   797,   798,  1123,   529,
     1902     836,   838,   158,   799,   800,   805,   806,   213,   849,   105,
     1903     -12,   238,  -292,   901,   -13,   893,   239,   441,  1370,     8,
     1904       9,    10,    11,    12,    37,   214,   182,   183,    40,   214,
     1905     894,   921,   923,   928,   373,    41,    42,   924,     8,     9,
     1906      10,    11,    12,   699,   949,  -415,   595,  -522,    31,   602,
     1907     748,  1483,   963,   460,    35,    68,    36,   970,   984,   112,
     1908     972,   698,   327,   410,   983,   977,   704,    31,   635,   699,
     1909     985,   700,   639,   892,   704,   339,    34,   218,    75,   987,
     1910     988,    47,   109,   989,   138,   139,   653,   990,   213,  1011,
     1911    -293,    54,   612,    41,    42,    34,   999,     8,     9,    10,
     1912      11,    12,   105,  1329,     2,   205,     4,     5,     6,     7,
     1913    1012,   479,  1013,   872,  1204,  1027,   214,    -3,  1122,  1058,
     1914    1093,   891,  1028,   112,   112,   112,    31,  1078,  1029,  1030,
     1915     323,   323,  1031,   227,   945,   728,  1032,   578,   213,   410,
     1916     948,  1080,  1033,   728,   728,   728,  1044,   579,   128,  1443,
     1917     129,   130,   131,  -403,    34,  -402,  1095,  1104,   455,    41,
     1918      42,   455,  1103,  1105,  1146,  1146,  1146,   455,  1106,    35,
     1919    1110,    36,  1111,  1559,   537,   538,   539,  1112,  1113,   115,
     1920     653,   653,  1114,  1120,     2,   205,     4,     5,     6,     7,
     1921    1130,   728,  1131,   729,   775,  1137,   211,   214,   540,   993,
     1922     541,  1132,   542,  1320,   495,  1145,   323,  1166,   495,   398,
     1923     737,  1122,  1142,   399,  1442,   400,  1189,  1187,   529,    68,
     1924     529,   767,  1078,   529,  1188,   323,   529,   460,   401,  1190,
     1925     406,  1223,   209,   219,  1191,   653,  1205,   339,   653,   402,
     1926    1206,  1208,    75,   403,   105,   407,  1209,   214,  1217,    35,
     1927     404,    36,  1221,  1224,   674,    54,  1532,    47,    47,    -3,
     1928    1229,   213,  1234,  1240,   500,  1249,   105,   112,   112,   675,
     1929     109,  1244,   138,   139,  1123,    61,  1078,  1251,    67,  1078,
     1930    1253,    41,    42,   653,  1256,   105,  1257,  1261,   653,   213,
     1931     737,   323,   441,  1265,   213,  1268,   175,    68,  1270,  1272,
     1932    1273,  1302,   829,  1274,  1207,   602,   112,   752,  1146,  1146,
     1933    1278,  1275,   753,  1276,  1122,   654,  1285,   172,   653,  1294,
     1934      75,  1295,  1061,  1323,  1078,  1305,  1306,  1308,   440,  1078,
     1935    1331,  1337,  1339,    54,   870,  1309,  1341,  1317,  1346,   602,
     1936    1345,  1347,    64,   116,   105,   879,   175,  1484,  1353,   175,
     1937    1354,   148,  1355,   479,  1357,   149,  1204,   150,  1363,  1078,
     1938     252,  1364,  1365,  1366,  1377,    47,   112,  1123,  1373,  1374,
     1939     214,  1384,  1385,  1313,    64,   112,  1393,  1394,   105,  1396,
     1940    1403,   653,   213,  1413,  1414,  1406,   653,   159,  -404,  1417,
     1941      47,    47,  1428,   160,  1432,   175,   213,  1434,   214,  1436,
     1942    1437,   339,   729,   214,   653,  1438,   653,  1534,  1444,   220,
     1943     653,  1449,  1453,   653,   654,    47,  1542,   372,  1454,  1455,
     1944    1456,   653,  1078,   455,   166,   653,   171,  1078,  1368,   177,
     1945     178,   179,    37,   181,   173,   174,    40,  1458,    37,  1463,
     1946     173,   174,    40,    41,    42,  1078,   258,  1078,   232,    41,
     1947      42,  1078,  1468,   495,  1078,  1470,   416,    68,   175,  1472,
     1948     247,   248,  1078,  1474,    68,  1080,  1078,  1476,  1478,   375,
     1949    1123,    37,  1480,   182,   183,    40,  1487,   339,  1481,   436,
     1950      75,   105,    41,    42,  1486,  1509,  1488,    75,   328,   444,
     1951     213,   214,  1511,    54,  1499,  1513,   258,   349,  1517,  1518,
     1952      54,  1540,  1525,  1545,   105,   214,  1552,  1554,   609,  1541,
     1953     610,   105,   175,   479,  1061,  1556,  1204,    68,   611,   175,
     1954     479,  1562,    37,  1204,   182,   183,    40,   405,  1569,  1570,
     1955    1222,   807,   810,    41,    42,  1018,   808,   729,   809,   829,
     1956      75,   811,   423,  1322,   212,   428,   430,   729,  1520,  1572,
     1957     159,  1431,  1404,    54,   231,  1255,  1387,  1502,   528,   698,
     1958    1392,   410,   729,  1228,   105,   694,   695,  1108,   942,   700,
     1959     723,   447,  1109,   479,  1141,   450,  1204,   451,   826,   965,
     1960    1057,     8,     9,    10,    11,    12,   466,   973,   175,   900,
     1961    1332,  1119,    64,   742,   816,   817,   212,   480,  1506,   214,
     1962    1506,   818,     0,     0,     0,   175,     0,   487,     0,   175,
     1963      31,     0,     0,     0,  1418,   430,     0,  1426,     0,     0,
     1964    1298,     0,     0,     0,     0,     0,     0,     0,     0,   829,
     1965       0,     0,   327,   455,     0,  1506,     0,  1506,    34,   212,
     1966       0,     0,     0,    37,     0,   182,   183,    40,    37,     0,
     1967     182,   183,    40,     0,    41,    42,    73,     0,   486,    41,
     1968      42,     0,  1465,     0,     0,     0,    37,  1469,   182,   183,
     1969      40,     0,   175,   495,  1124,   323,     0,    41,    42,     0,
     1970     184,     0,   213,   258,     0,  1530,   603,   410,    73,     0,
     1971     185,     0,   631,     0,     0,  1531,     0,  1491,     0,     0,
     1972     212,     0,     0,   184,     0,   636,   690,     0,     0,   636,
     1973       0,     0,   258,   185,     0,     0,     0,   601,   608,     0,
     1974       0,     0,     0,   221,     0,     0,   870,     0,     0,   632,
     1975     633,     8,     9,    10,    11,    12,     0,     0,   212,     0,
     1976     732,     0,   212,    37,     0,   182,   183,    40,     0,     0,
     1977       0,     0,     0,     0,    41,    42,     0,     0,   506,   480,
     1978      31,   729,   729,     0,     0,     0,   125,   125,   125,     0,
     1979       0,     0,     0,     0,   349,     0,     0,   528,     0,   480,
     1980     264,     0,   528,  1560,     0,   528,     0,   480,    34,  1560,
     1981     265,   214,     8,     9,    10,    11,    12,     0,     0,     0,
     1982    1560,     0,     0,     0,  1560,     0,     0,   455,   829,     0,
     1983       0,   352,     0,   724,     0,     0,   430,     0,     0,   729,
     1984     729,    31,     0,     0,     8,     9,    10,    11,    12,   212,
     1985     777,   738,   410,    64,     0,     0,     0,   125,   175,   125,
     1986     778,   430,     0,     0,     0,   430,     0,     0,     0,    34,
     1987       0,     0,     0,    31,    37,     0,   182,   183,    40,     0,
     1988       0,   213,     0,     0,   274,    41,    42,     0,     0,     0,
     1989       0,   175,     0,     0,   258,   349,     0,     0,     0,     0,
     1990       0,    34,     0,     0,     0,   448,    37,   175,   182,   183,
     1991      40,   609,     0,   610,     0,     0,     0,    41,    42,     0,
     1992       0,   611,   175,     0,     0,     0,    73,     0,     0,     0,
     1993     212,    73,     0,     0,     0,     8,     9,    10,    11,    12,
     1994     125,   819,     0,   698,     0,   410,   339,   212,   125,     0,
     1995     125,   125,     0,   700,     0,   125,     0,   125,   125,   636,
     1996     832,     0,   603,   918,    31,     0,     0,     0,     0,     0,
     1997    1124,     0,   925,   851,     0,     0,   927,   213,     0,     0,
     1998     212,  1330,     0,     8,     9,    10,    11,    12,     0,     0,
     1999     214,   603,    34,     0,     0,     0,   603,    37,     0,   182,
     2000     183,    40,   636,     0,     0,   349,   349,   349,    41,    42,
     2001       0,     0,    31,   729,     0,     0,     0,     0,     0,   175,
     2002       0,   729,   729,   729,   349,     0,   221,   125,     0,     0,
     2003       0,     0,     0,     0,  1530,     0,   410,     0,     0,     0,
     2004      34,     0,   724,     0,  1531,    37,     0,   182,   183,    40,
     2005       0,     0,     0,   480,     0,     0,    41,    42,   258,   738,
     2006       0,     0,   938,  1124,     0,     0,     0,     0,     0,   729,
     2007       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
     2008       0,     0,   264,     0,     0,     0,   214,     0,     0,     0,
     2009       0,     0,   265,    73,     0,   480,     0,     0,   349,     0,
     2010       0,    31,     0,   212,     0,     0,     0,   964,   352,     0,
     2011     430,     0,     0,    73,     0,     0,     0,     0,   952,     0,
     2012     953,    73,     0,     0,     0,     0,     0,   956,   957,    34,
     2013       0,   212,   962,     0,   258,   738,   212,     0,     0,     0,
     2014     992,     0,     0,     0,   967,     0,     0,   352,     0,   971,
     2015     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
     2016       0,     0,     0,     0,     0,   352,  1124,    73,     0,     0,
     2017       0,   959,     0,   610,     0,  1000,     0,   724,     0,     0,
     2018       0,   960,     0,     0,   554,   175,     0,   724,     0,     0,
     2019     349,     0,   636,     0,     0,  1024,   636,   832,  1505,     0,
     2020    1505,     0,   724,     0,     0,     0,     0,     0,     0,   352,
     2021    1101,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
     2022     601,     0,     0,     0,   212,     0,     0,     0,     0,     0,
     2023       0,     0,     0,     0,     0,  1505,     0,  1505,   212,     0,
     2024       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2025      18,    19,    20,    21,    22,    23,    24,    25,   506,     0,
     2026      26,    27,    28,     0,    64,   323,     0,     0,     0,    31,
     2027       0,     0,     0,     0,   352,     0,     0,  1045,  1046,  1047,
     2028    1048,     0,  1050,     0,     0,     0,   636,     0,     8,     9,
     2029      10,    11,    12,     0,     0,     0,    76,    34,  1094,     0,
     2030       0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
     2031       0,     0,  1100,    41,    42,     0,     0,    31,     0,   352,
     2032     352,   352,  1116,     0,     0,     0,     0,     0,    76,     0,
     2033     430,   116,   212,     0,     0,     0,     0,     0,   352,    43,
     2034       0,   156,   125,   125,     0,    34,     0,     0,   349,    45,
     2035      37,  1115,     0,     0,    40,     0,   352,  1218,     0,     0,
     2036       0,    41,    42,   222,     0,     0,     0,    73,     0,     0,
     2037       0,     0,   125,   352,     0,   125,   125,     0,   125,     0,
     2038     125,   125,     0,   603,     0,   125,   125,    43,     0,     0,
     2039       0,  1143,     0,     0,     0,     0,   428,   146,  1151,     0,
     2040       0,   724,   724,  1155,   349,   349,     0,     0,  1159,    73,
     2041    1160,     0,   352,     0,  1162,  1163,  1164,     0,     0,  1167,
     2042       0,     0,     0,     0,  1203,     0,     0,     0,  1179,     0,
     2043       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
     2044       0,     0,     0,     0,     0,     0,  1194,  1195,     0,   352,
     2045       0,   354,     0,     0,     0,    78,     0,     0,     0,   724,
     2046     724,    31,     0,     0,   125,   636,     0,     0,     0,   125,
     2047     125,     0,     0,  1225,     0,   125,  1227,     0,     0,     0,
     2048       0,     0,   175,     0,     0,     0,     0,    78,     0,    34,
     2049       0,   352,     0,     0,    37,     0,     0,     0,    40,     0,
     2050       0,   352,     0,     0,   352,    41,    42,     0,     0,   221,
     2051       0,   352,     0,     0,  1242,     0,   352,     0,     0,     0,
     2052    1246,  1247,   223,   738,   212,     0,     0,     0,     0,     0,
     2053       0,   744,  1258,     0,     0,     0,     0,  1262,     0,     0,
     2054    1266,   745,  1267,     0,     0,  1269,    76,     0,     0,     0,
     2055       0,    76,   412,     0,     0,     0,     0,     0,  1277,   420,
     2056       0,     0,     0,     0,     0,     0,  1299,     0,     0,     0,
     2057       0,  1284,    85,  1286,  1287,  1288,  1289,     0,    73,     0,
     2058       0,     0,     0,   258,     0,     0,     0,     0,    64,  1296,
     2059       0,  1297,     0,     0,     0,   171,     0,  1386,     0,     0,
     2060       0,   724,     0,   738,    85,    55,    55,   116,     0,     0,
     2061     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2062       0,     0,     0,     0,  1325,  1326,     0,     0,     0,     0,
     2063       0,   412,     0,   724,     0,     0,     0,    55,     0,   224,
     2064       0,   724,   724,   724,     0,     0,   222,     0,     0,     0,
     2065       0,     0,   349,   349,     0,     0,     0,     0,   175,     0,
     2066       0,     0,   352,     0,     0,     0,  1203,     0,     0,    55,
     2067       0,     0,    55,     0,     0,  1361,  1362,     0,     0,     0,
     2068       0,     0,     0,     0,     0,  1372,     0,   584,     0,   724,
     2069       0,     0,     0,     0,     0,   588,     0,     0,   591,     0,
     2070     116,     0,     0,   212,     0,    78,     0,     0,     0,     0,
     2071      78,     0,     0,    76,     0,   352,   352,     0,   352,   352,
     2072       0,     0,     0,     0,     0,     0,     0,   362,   354,     0,
     2073       0,     0,     0,    76,     0,     0,     0,  1405,    73,     0,
     2074       0,    76,     0,     0,     0,     0,     0,     0,     0,  1409,
     2075       0,  1410,  1411,  1412,     0,     0,  1503,     0,  1507,     0,
     2076     347,   412,     0,  1416,     0,   420,     0,   354,     0,     0,
     2077       0,     0,  1427,   352,   352,     0,     0,   349,     0,     0,
     2078       0,     0,     0,     0,     0,   354,     0,    76,  1440,     0,
     2079       0,     0,     0,  1536,     0,  1538,     0,     0,     0,   212,
     2080       0,     0,     0,   116,     0,   223,     0,     0,     0,     0,
     2081       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2082       0,     0,    85,     0,     0,    55,  1203,    85,     0,   354,
     2083       0,     0,     0,  1203,     0,     0,     0,   352,  1567,     0,
     2084    1568,     0,     0,     0,  1489,  1490,     0,     0,     0,     0,
     2085     412,     0,     0,  1575,  1576,    55,     0,  1495,     0,   125,
     2086       0,     0,     0,     0,  1495,     0,     0,     0,     0,     0,
     2087       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
     2088     221,     0,     0,     0,     0,     0,  1203,   355,     0,     0,
     2089       0,     0,    78,  1555,   354,     0,     0,  1529,     0,     0,
     2090      78,  1535,    73,     0,     0,     0,     0,     0,     0,     0,
     2091       0,     0,     0,     0,     0,   352,     0,   352,     0,     0,
     2092       0,     0,   224,     0,     0,     0,   355,     0,     0,     0,
     2093    1557,     0,  1558,     0,     0,     0,     0,     0,     0,   354,
     2094     354,   354,   584,   584,   355,     0,    78,   352,     0,     0,
     2095       0,     0,     0,     0,     0,   352,   352,   352,   354,     0,
     2096    1573,  1574,     0,     0,     0,     0,   352,   352,  1577,  1578,
     2097       0,     0,     0,     0,     0,     0,   354,     0,     0,     0,
     2098      73,     0,     0,   125,     0,     0,     0,    76,   355,    85,
     2099       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
     2100       0,     0,     0,   352,   362,     0,     0,     0,     0,    85,
     2101       0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
     2102       0,     0,     0,     0,     0,     0,     0,     0,     0,    76,
     2103       0,   911,   354,     0,     0,   914,     0,   347,     0,     0,
     2104       0,     0,     0,   362,     0,     0,     0,     0,     0,     0,
     2105       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
     2106       0,   362,     0,    85,     0,     0,     0,     0,   412,   354,
     2107       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2108      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2109      25,   352,     0,     0,     0,     0,    55,     0,   355,   355,
     2110     355,     0,    31,     0,     0,   362,     0,     0,     0,     0,
     2111       0,   354,     0,     0,     0,     0,     0,   355,     0,     0,
     2112       0,   354,     0,     0,   354,     0,     0,     0,     0,   222,
     2113      34,   354,     0,     0,     0,   355,   354,     0,   347,     0,
     2114      73,     0,     0,     0,     0,     0,    78,    73,     0,     0,
     2115       0,     0,   355,     0,     0,     0,     0,     0,     0,     0,
     2116       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2117     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2118       0,     0,     0,   584,     0,     0,     0,     0,    78,     0,
     2119       0,   355,     0,     0,     0,   123,   126,   127,    76,     0,
     2120      73,     0,     0,   347,     0,     0,     0,     0,     0,     0,
     2121       0,     0,     0,     0,     0,   362,   362,   362,     0,     0,
     2122       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
     2123       0,     0,     0,     0,   362,     0,     0,     0,     0,     0,
     2124       0,     0,     0,     0,     0,     0,     0,     0,   347,   347,
     2125     347,     0,   362,     0,     0,     0,     0,     0,     0,     0,
     2126       0,     0,     0,    85,     0,     0,   253,   347,   254,   362,
     2127     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2128     355,     0,   354,   355,     0,     0,     0,     0,   223,     0,
     2129     355,     0,     0,     0,     0,   355,   412,     0,     0,     0,
     2130       0,     0,     0,     0,     0,    85,     0,     0,   362,     2,
     2131     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2132      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2133      23,    24,    25,     0,     0,   354,   354,     0,   354,   354,
     2134       0,   347,     0,     0,    31,   362,     0,     0,     0,   395,
     2135       0,     0,     0,     0,     0,     0,     0,    78,    76,   414,
     2136     415,     0,     0,     0,   419,     0,   421,   422,     0,     0,
     2137       0,     0,    34,     0,    35,  1157,    36,    37,     0,   173,
     2138     174,    40,     0,     0,     0,     0,     0,   362,    41,    42,
     2139       0,  1169,     0,   354,   354,     0,     0,   362,     0,     0,
     2140     362,     0,     0,     0,     0,   224,     0,   362,     0,     0,
     2141       0,     0,   362,     0,     8,     9,    10,    11,    12,    13,
     2142      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2143      24,    25,  -294,   347,    26,    27,    28,     0,     0,     0,
     2144     347,   355,     0,    31,     0,     0,     0,     0,     0,     0,
     2145       0,     0,     0,     0,     0,     0,     0,   354,     0,     0,
     2146       0,     0,     0,     0,     0,     0,     0,     0,  1237,     0,
     2147       0,    34,     0,     0,    85,     0,    37,     0,   336,   337,
     2148      40,     0,  -294,     0,     0,     0,     0,    41,    42,     0,
     2149       0,     0,     0,     0,   355,   355,     0,   355,   355,     0,
     2150     222,     0,     0,     0,     0,     0,     0,    55,     0,     0,
     2151       0,     0,     0,   643,     0,   338,     0,    78,     0,     0,
     2152       0,     0,    76,   634,     0,   164,     0,     0,     0,     0,
     2153       0,     0,     0,     0,     0,   354,     0,   354,     0,     0,
     2154       0,     0,     0,     0,   217,     0,     0,     0,     0,     0,
     2155       0,     0,   355,   355,     0,     0,     0,     0,   362,     0,
     2156     281,   282,     0,   283,     0,     0,     0,   354,     0,     0,
     2157       0,     0,     0,     0,    55,   354,   354,   354,     0,     0,
     2158       0,     0,     0,     0,     0,     0,   354,   354,     0,   284,
     2159     164,   347,     0,     0,     0,   285,   271,     0,     0,   286,
     2160      76,     0,   287,   288,   289,   290,    41,    42,     0,   291,
     2161     292,   362,   362,     0,   362,   362,   355,   293,     0,     0,
     2162       0,     0,     0,   354,     0,   164,     0,     0,     0,     0,
     2163       0,     0,   513,     0,    85,   368,     0,     0,     0,   374,
     2164       0,   296,   380,   298,   299,   300,   301,   347,   347,     0,
     2165       0,     0,     0,     0,     0,     0,     0,     0,     0,   223,
     2166       0,     0,     0,     0,     0,     0,     0,    55,     0,   362,
     2167     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2168       0,    78,     0,     0,     0,     0,     0,     0,   164,     0,
     2169       0,     0,     0,     0,   355,     0,   355,     0,     0,     0,
     2170     217,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2171       0,   354,     0,     0,     0,     0,     0,     0,   164,   461,
     2172       0,     0,     0,     0,     0,     0,   355,     0,     0,     0,
     2173       0,     0,     0,   362,   355,   355,   355,     0,     0,     0,
     2174       0,     0,   374,     0,     0,   355,   355,     0,     0,     0,
     2175     164,   821,   822,     0,     0,     0,     0,     0,     0,    78,
     2176      76,     0,     0,     0,     0,     0,     0,    76,     0,     0,
     2177       0,     0,     0,     0,   461,     0,   224,   164,     0,     0,
     2178       0,   856,   355,     0,   859,   860,     0,   863,     0,   865,
     2179     866,     0,     0,     0,   867,   868,     0,     0,    85,     0,
     2180       0,     0,     0,     0,     0,     0,     0,     0,    55,    55,
     2181       0,   362,     0,   362,     0,     0,     0,     0,     0,     0,
     2182      76,     0,     0,     0,   606,     0,     0,     0,     0,   630,
     2183       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
     2184       0,     0,     0,   362,     0,     0,   210,     0,     0,     0,
     2185      55,   362,   362,   362,     0,     0,   230,     0,   234,     0,
     2186     236,     0,   362,   362,     0,     0,     0,   245,     0,     0,
     2187     355,     0,     0,     0,     0,     0,    85,     0,   943,   944,
     2188       0,     0,     0,     0,   946,     0,     0,     0,     0,     0,
     2189       0,     0,     0,     0,     0,   347,   347,     0,   210,   362,
     2190     234,   236,   245,     0,    55,   164,   164,     0,     0,    55,
     2191       0,     0,   368,     0,     0,     0,     0,     0,     0,    78,
     2192       0,     0,     0,     0,     0,     0,    78,     0,     0,     0,
     2193       0,     0,     0,   461,     0,     0,   461,     0,     0,     0,
     2194       0,   210,   461,    55,   474,     2,   205,     4,     5,     6,
     2195       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2196      17,    18,    19,    20,    21,    22,    23,    24,    25,   741,
     2197       0,    26,    27,    28,     0,     0,     0,     0,     0,    78,
     2198      31,   164,     0,     0,     0,     0,     0,   362,     0,     0,
     2199       0,     0,   155,   461,     0,   461,     0,     0,   461,     0,
     2200     164,   461,   210,     0,   234,   236,   245,     0,    34,     0,
     2201      35,     0,    36,   368,     0,    38,    39,     0,     0,     0,
     2202     347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2203       0,     0,     0,     0,     0,     0,    85,     0,   250,     0,
     2204     210,     0,     0,    85,   210,     0,    55,     0,   255,     0,
     2205       0,     0,     0,     0,     0,    -3,     0,     0,     0,     0,
     2206     504,     0,     0,     0,     0,     0,   164,     0,     0,    55,
     2207       0,     0,     0,     0,     0,     0,    55,     0,   368,     0,
     2208     606,     0,     0,   837,     0,     0,     0,     0,     0,     0,
     2209       0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
     2210       0,     0,     0,     0,   155,     0,     0,     0,     0,   606,
     2211     210,     0,     0,     0,   606,     0,     0,     0,   385,     0,
     2212       0,     0,     0,   368,   368,   368,     0,     0,     0,    55,
     2213       0,   210,     0,     0,     0,     0,   234,   236,     0,     0,
     2214       0,   417,   368,     0,   245,     0,     0,     0,     0,     0,
     2215       0,     0,     0,     0,     0,   432,     0,     0,     0,     0,
     2216       0,     0,  1034,     0,   437,     8,     9,    10,    11,    12,
     2217       0,     0,     0,     0,   445,     0,     0,   741,     0,     0,
     2218       0,     0,     0,     0,     0,     0,     0,   210,     0,     0,
     2219       0,     0,   281,   282,    31,   283,     0,     0,   461,   471,
     2220       0,     0,     0,     0,   481,   210,     0,     0,     0,     0,
     2221     210,     0,   210,     0,     0,     0,   368,   489,   961,     0,
     2222       0,   284,    34,   499,     0,   503,     0,   285,     0,   210,
     2223       0,   286,   210,   210,   287,   288,   289,   290,    41,    42,
     2224       0,   291,   292,   533,     0,     0,     0,     0,   210,   293,
     2225       0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
     2226       0,     0,   210,     0,   294,     0,   378,     0,  1233,   210,
     2227       0,     0,     0,   296,   827,   298,   299,   300,   301,     0,
     2228       0,     0,     0,     0,     0,     0,   593,     0,     0,     0,
     2229       0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
     2230       0,     0,     0,     0,     0,     0,     0,     0,   368,     0,
     2231       0,     0,   630,     0,     0,   368,     0,     0,     0,   644,
     2232       0,     0,     0,   645,   646,     0,   648,     0,     0,     0,
     2233       0,     0,     0,   660,   661,     0,   662,   663,     0,   664,
     2234       0,   665,     0,     0,     0,     0,     0,  1177,     0,     0,
     2235       8,     9,    10,    11,    12,     0,     0,     0,   593,     0,
     2236       0,     0,     0,     0,     0,     0,   680,     0,     0,     0,
     2237       0,     0,     0,     0,     0,     0,     0,   281,   282,    31,
     2238     283,     0,     0,     0,     0,   210,     0,     0,     0,     0,
     2239       0,   691,  1321,     0,     0,     0,     0,     0,     0,     0,
     2240       0,     0,   697,     0,     0,     0,   284,    34,   461,     0,
     2241       0,     0,   285,   210,     0,     0,   286,     0,   210,   287,
     2242     288,   289,   290,    41,    42,   733,   291,   292,     0,     0,
     2243       0,   736,     0,     0,   293,     0,   471,     0,     0,     0,
     2244       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
     2245     164,   378,     0,     0,     0,     0,     0,     0,   296,  1178,
     2246     298,   299,   300,   301,     0,     0,   368,     0,     0,     0,
     2247       0,     0,     0,   773,     0,     0,     0,     0,     0,     0,
     2248       0,     0,     0,     0,     0,     0,     0,     0,     0,   788,
     2249       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2250       0,   606,     0,     0,     0,     0,   210,     0,     0,     0,
     2251       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2252     210,     0,   368,   368,     0,     0,   815,     0,     0,     0,
     2253       0,     0,     0,     0,     0,   825,     0,     0,     0,     0,
     2254     504,     0,   828,     0,     0,   281,   282,   835,   283,     0,
     2255       0,     0,     0,     0,     0,     0,     0,     0,   850,     0,
     2256       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2257       0,     0,     0,     0,   284,     0,     0,     0,     0,     0,
     2258     285,     0,   461,     0,   286,     0,     0,   287,   288,   289,
     2259     290,    41,    42,     0,   291,   292,     0,     0,     0,   890,
     2260       0,   210,   293,     0,     0,     0,     0,     0,     0,     0,
     2261       0,     0,     0,     0,   210,     0,     0,   294,     0,   378,
     2262       0,     0,   379,     0,     0,     0,   296,   380,   298,   299,
     2263     300,   301,     0,   210,     0,   835,     0,     0,     0,     0,
     2264       0,   741,     0,     0,     1,     2,     3,     4,     5,     6,
     2265       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2266      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2267       0,    26,    27,    28,    29,     0,     0,    30,     0,     0,
     2268      31,    32,     0,   217,     0,     0,     0,     0,     0,     0,
     2269     250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2270     968,   969,     0,     0,     0,    33,     0,     0,    34,     0,
     2271      35,     0,    36,    37,   986,    38,    39,    40,     0,     0,
     2272     210,   741,   341,   363,    41,    42,     0,     0,     0,     0,
     2273       0,  1001,     0,  1002,     0,     0,     0,  1006,     0,     0,
     2274       0,     0,     0,     0,     0,     0,   210,     0,     0,     0,
     2275      43,     0,    44,     0,     0,     0,   413,     0,     0,     0,
     2276      45,     0,     0,   413,     0,     0,     0,     0,     0,     0,
     2277     368,   368,     0,     0,   210,     0,     0,     0,     0,   217,
     2278       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2279      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2280      26,    27,    28,  1039,     0,     0,   210,     0,     0,    31,
     2281    1040,     0,     0,     0,     0,     0,     0,   210,     0,     0,
     2282       0,     0,     0,  1042,     0,  1043,     0,     0,     0,     0,
     2283       0,     0,     0,     0,     0,   413,     0,    34,     0,  1055,
     2284       0,     0,   109,     0,    38,    39,  1059,     0,     0,     0,
     2285       0,     0,     0,    41,    42,     0,     0,     0,  1097,     0,
     2286       0,  1098,     0,     0,     0,     0,     0,     0,     0,     0,
     2287       0,     0,     0,     0,     0,     0,     0,     0,     0,   598,
     2288       0,    44,     0,     0,     0,     0,     0,     0,     0,   110,
     2289       0,   413,     0,     0,     0,   368,     0,     0,   210,   413,
     2290     589,     0,   413,   592,     0,     0,     0,     0,     0,     0,
     2291       0,     0,   363,     0,     0,     0,   622,     0,     0,     0,
     2292       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2293       0,     0,     0,     0,     0,   640,     0,     0,   341,     0,
     2294       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2295       0,     0,     0,   461,     0,   461,     0,     0,     0,     0,
     2296     281,   282,     0,   283,     0,   413,     0,     0,  1161,   413,
     2297       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2298       0,     0,     0,     0,     0,   210,     0,     0,     0,   284,
     2299     461,   321,   461,     0,     0,   649,     0,   138,   139,   286,
     2300     363,   345,   287,   650,   289,   290,    41,    42,     0,   291,
     2301     292,     0,     0,   381,   381,     0,     0,   293,     0,     0,
     2302     164,     0,     0,   413,   533,     0,     0,     0,     0,     0,
     2303       0,  1226,   294,     0,   651,     0,   652,   379,     0,     0,
     2304       0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
     2305       0,     0,     0,     0,   413,     0,     0,   363,     0,     0,
     2306    1239,     0,     0,     0,     0,  1241,     0,     0,     0,     0,
     2307       0,     0,     0,  1245,     0,     0,     0,     0,     0,     0,
     2308       0,   210,     0,     0,   321,     0,     0,     0,     0,     0,
     2309       0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
     2310     341,   363,     0,     0,  1271,     0,     0,     0,     0,   485,
     2311       0,     0,     0,     0,     0,     0,  1279,     0,     0,  1280,
     2312       0,  1281,     0,     0,     0,     0,     0,     0,     0,     0,
     2313       0,     0,     0,     0,     0,  1290,  1291,     0,     0,     0,
     2314       0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
     2315       0,     0,     0,     0,     0,     0,     0,  1304,     0,     0,
     2316       0,     0,     0,     0,     0,   830,   363,     0,   363,     0,
     2317       0,     0,     0,     0,     0,     0,     0,   622,     0,   622,
     2318     622,     0,     0,     0,  1327,     0,   622,     0,     0,   514,
     2319       0,   516,   519,     0,     0,     0,   869,   363,     0,   522,
     2320     523,     0,   363,     0,   516,   516,     0,     0,     0,     0,
     2321       0,   363,   363,   363,     0,     0,   516,     0,     0,     0,
     2322       0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
     2323     363,     0,     0,     0,     0,   413,   912,     0,     0,   413,
     2324     915,     0,     0,     0,     0,     0,   917,     0,     0,     0,
     2325       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
     2326       0,     0,     0,     0,   341,   363,   413,     0,   413,     0,
     2327       0,     0,   413,     0,     0,     0,     0,     0,     0,   281,
     2328     282,  1397,   283,  1398,     0,     0,     0,     0,   516,     0,
     2329       0,     0,     0,     0,     0,     0,  1407,     0,  1408,     0,
     2330       0,     0,     0,     0,   363,   622,     0,     0,   284,     0,
     2331       0,     0,     0,     0,   285,     0,  1415,     0,   286,     0,
     2332       0,   287,   288,   289,   290,    41,    42,   735,   291,   292,
     2333       0,     0,  1433,  1435,     0,     0,   293,   210,     0,     0,
     2334     341,   363,     0,     0,  1441,   413,   413,  1245,     0,     0,
     2335       0,   294,     0,   378,     0,     0,     0,     0,     0,   812,
     2336     296,   380,   298,   299,   300,   301,   769,     0,     0,  1464,
     2337       0,     0,     0,     0,     0,     0,     0,     0,  1471,   782,
     2338       0,  1473,     0,  1475,  1477,  1479,   769,   413,     0,   769,
     2339       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
     2340     792,   793,   830,   363,     0,     0,     0,   622,     0,   622,
     2341       0,     0,     0,     0,     0,     0,     0,     0,     0,   622,
     2342       0,     0,   814,     0,     0,  1510,     0,  1512,     0,     0,
     2343    1245,     0,   823,     0,     0,     0,     0,     0,     0,   345,
     2344       0,     0,     0,     0,   782,  1524,     0,     0,     0,     0,
     2345       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2346       0,     0,     0,     0,     0,   516,   516,   516,   516,   516,
     2347     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
     2348     516,   516,   516,     0,     0,     0,     0,     0,     0,     0,
     2349       0,     0,   830,     0,   889,     0,     0,     0,     0,     0,
     2350     413,     0,     0,   381,     0,     0,   413,     0,   516,     0,
     2351       0,     0,     0,     0,   413,     0,     0,     0,     0,     0,
     2352       0,     0,     0,     0,     0,     0,     0,   622,   622,     0,
     2353       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2354       0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
     2355       0,     0,     0,     0,   363,     0,     0,     0,     0,     0,
     2356     413,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2357      17,    18,    19,    20,    21,    22,    23,    24,    25,   413,
     2358    1158,    26,    27,    28,     0,     0,     0,     0,     0,   363,
     2359      31,   453,     0,     0,     0,   413,  1170,     0,   622,   622,
     2360    1175,     0,     0,     0,     0,     0,     0,   516,     0,     0,
     2361     363,   363,     0,     0,     0,     0,     0,     0,    34,   782,
     2362       0,   991,     0,     0,     0,    38,    39,   996,     0,   516,
     2363       0,     0,     0,     0,  1005,     0,     0,     0,     0,     0,
     2364       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
     2365       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2366       0,     0,   454,     0,     0,     0,   711,     0,     0,     0,
     2367     110,   830,   413,  1238,     0,     0,     0,     0,  1022,  1023,
     2368       0,   345,     0,     0,   622,     0,     0,     0,   516,     0,
     2369       0,     0,     0,     0,     0,     0,   345,     0,     0,     0,
     2370       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2371       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2372     516,     0,     0,     0,     0,     0,     0,     0,     0,   363,
     2373       0,     0,     0,     0,     0,   516,  1053,     0,     0,     0,
     2374     381,     0,     0,  -517,     0,     0,     1,     2,     3,     4,
     2375       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2376      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2377      25,     0,     0,    26,    27,    28,    29,     0,     0,    30,
     2378       0,     0,    31,    32,     0,     0,     0,     0,     0,   341,
     2379       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2380       0,     0,     0,     0,     0,     0,     0,    33,     0,   363,
     2381      34,     0,    35,     0,    36,    37,   321,    38,    39,    40,
     2382       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
     2383       0,     0,  1139,  1140,     0,     0,     0,     0,     0,   381,
     2384       0,     0,     0,     0,     0,   996,     0,     0,  1149,     0,
     2385     769,     0,    43,     0,    44,     0,     0,     0,   363,   363,
     2386       0,     0,    45,     0,     0,     0,     0,     0,     0,     0,
     2387    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2388       0,  1180,     0,     0,     0,     0,   516,     0,     0,     0,
     2389       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2390       0,     0,     0,   381,     0,  1198,     0,     0,     0,     0,
     2391       0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
     2392     996,   996,     0,     0,     0,     0,     0,     0,     0,   516,
     2393       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2394       0,  1230,     0,     0,     1,     2,     3,     4,     5,     6,
     2395       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2396      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2397     516,    26,    27,    28,    29,     0,     0,    30,     0,     0,
     2398      31,    32,     0,   363,     0,     0,     0,     0,   996,     0,
     2399       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2400       0,     0,     0,     0,     0,    33,     0,   889,    34,     0,
     2401      35,     0,    36,    37,     0,    38,    39,    40,     0,     0,
     2402       0,     0,  1282,  1283,    41,    42,     0,     0,     0,     0,
     2403       0,     0,   281,   282,     0,   283,     0,     0,     0,     0,
     2404       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
     2405      43,     0,    44,     0,     0,     0,  -521,     0,     0,     0,
     2406      45,   284,     0,     0,     0,     0,     0,   285,     0,     0,
     2407       0,   286,     0,   413,   287,   288,   289,   290,    41,    42,
     2408       0,   291,   292,     0,     0,     0,   516,     0,     0,   293,
     2409       0,     0,     0,     0,     0,     0,     0,     0,   413,   413,
     2410     516,   516,     0,   996,   294,     0,   378,     0,     0,     0,
     2411       0,   781,     0,   296,   380,   298,   299,   300,   301,     0,
     2412       0,     0,     0,   413,     0,     1,     2,   205,     4,     5,
     2413       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2414      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2415       0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
     2416     282,    31,  1062,  1063,  1390,  1064,   769,     0,  1065,  1066,
     2417    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
     2418       0,     0,     0,  1074,  1075,     0,    33,     0,   284,    34,
     2419       0,    35,     0,    36,   649,     0,    38,    39,   286,     0,
     2420       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2421       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     2422       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2423       0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
     2424     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
     2425    1077,     0,  1450,     0,  -129,     0,     0,     0,     0,     0,
     2426       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
     2427      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2428      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2429      29,     0,     0,    30,   281,   282,    31,   283,     0,     0,
     2430       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2431     516,     0,     0,   281,   282,     0,   283,     0,     0,     0,
     2432       0,     0,     0,   284,    34,     0,    35,   516,    36,   285,
     2433       0,    38,    39,   286,  1516,     0,   287,   288,   289,   290,
     2434      41,    42,   284,   291,   292,     0,     0,     0,   285,     0,
     2435       0,   293,   286,     0,     0,   287,   288,   289,   290,    41,
     2436      42,     0,   291,   292,     0,     0,   294,     0,  1076,     0,
     2437     293,     0,     0,     0,     0,   296,   297,   298,   299,   300,
     2438     301,     0,     0,     0,     0,   294,   321,   378,     0,  -129,
     2439     993,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2440     516,   516,     1,     2,   205,     4,     5,     6,     7,     8,
     2441       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2442      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2443      27,    28,    29,     0,     0,    30,   281,   282,    31,   283,
     2444       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2445      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2446      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2447      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2448     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2449       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2450       0,     0,   109,     0,    38,    39,     0,     0,   294,     0,
     2451      44,     0,     0,    41,    42,     0,     0,   296,   297,   298,
     2452     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2453       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2454      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2455      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2456       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2457      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2458      25,  -294,     0,     0,     0,   284,    34,     0,    35,     0,
     2459      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
     2460     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2461       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2462      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2463     343,  -294,     0,     0,     0,   781,     0,   296,   344,   298,
     2464     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2465       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2466      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2467      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2468       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2469      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2470      25,  -295,     0,     0,     0,   284,    34,     0,    35,     0,
     2471      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
     2472     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2473       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2474      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2475     931,  -295,     0,     0,     0,   781,     0,   296,   344,   298,
     2476     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2477       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2478      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2479      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2480       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2481      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2482      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2483      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2484     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2485       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2486       0,     0,     0,     0,    38,    39,     0,     0,   294,     0,
     2487     931,     0,     0,     0,     0,   781,     0,   296,   600,   298,
     2488     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2489       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2490      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2491      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2492       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2493      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2494      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2495      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2496     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2497       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2498       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
     2499     343,     0,     0,     0,     0,     0,     0,   296,   344,   298,
     2500     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2501       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2502      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2503      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2504       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2505       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2506       0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
     2507      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2508     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2509       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2510       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2511     931,     0,     0,     0,     0,     0,     0,   296,   344,   298,
     2512     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2513       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2514      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2515      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2516       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2517       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2518       0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
     2519      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
     2520     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2521       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2522       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2523    1020,     0,     0,     0,     0,     0,     0,   296,  1021,   298,
     2524     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
     2525       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2526      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2527      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2528       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2529      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2530      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
     2531      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
     2532     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2533       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2534       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
     2535     378,     0,     0,     0,     0,     0,     0,   296,   380,   298,
     2536     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
     2537       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2538      18,    19,    20,    21,    22,    23,    24,    25,     0,   270,
     2539      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2540       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2541      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2542       0,    26,    27,    28,   492,   493,   494,    34,     0,    35,
     2543      31,    36,    37,     0,   206,    39,    40,     0,     0,     0,
     2544       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
     2545       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2546       0,     0,     0,     0,     0,    38,    39,     0,     0,    43,
     2547       0,   207,     0,     0,     0,     0,     0,     0,     0,   208,
     2548       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
     2549      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2550      21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
     2551      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
     2552       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2553       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2554       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
     2555       0,    38,    39,     0,     0,  -294,     1,     2,   205,     4,
     2556       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2557      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2558      25,     0,     0,    26,    27,    28,    29,     0,    44,    30,
     2559       0,     0,    31,     0,     0,     0,   110,     0,     0,     0,
     2560       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2561       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2562      34,     0,    35,     0,    36,     0,     0,    38,    39,   204,
     2563       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    19552564      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    1956       22,    23,    24,  -294,  1227,    25,    26,    27,   693,    30,
    1957      694,  1107,   941,   722,    30,   213,   211,  1056,   478,   213,
    1958     1108,  1140,   825,  1118,   899,   478,   935,   964,  1331,   741,
    1959      972,   815,     0,     0,   816,   174,   257,    33,   817,   602,
    1960        0,   252,    33,   253,  1391,   630,     0,     0,     0,    37,
    1961       38,     0,   174,  -294,     0,     0,   174,  1424,   635,   211,
    1962        0,     0,   635,     0,     0,   257,     0,     8,     9,    10,
    1963       11,    12,     0,     0,     0,     0,     0,     0,   478,   776,
    1964        0,   409,     0,  1123,   935,   935,   337,     0,     0,   777,
    1965        0,     0,     0,     0,   109,    30,     0,     0,  1417,   653,
    1966        0,  1425,     0,     0,     0,  1217,   213,     0,     0,     0,
    1967        0,     0,   479,     0,     0,  1504,     0,  1504,     0,   174,
    1968      211,     0,     0,    33,   394,     0,     0,   348,     0,     0,
    1969        0,     0,   479,     0,   413,   414,     0,   728,   728,   418,
    1970      479,   420,   421,     0,     0,     0,  1464,     0,     0,     0,
    1971        0,  1468,  1504,     0,  1504,     0,     0,     0,   211,     0,
    1972        0,     0,   211,     0,     0,   958,   723,   609,     0,   429,
    1973        0,     0,     0,     0,     0,   959,     0,     0,   505,     0,
    1974      716,  1490,   322,     0,   737,   463,    63,   213,     0,     8,
    1975        9,    10,    11,    12,   429,   728,   728,     0,   429,     0,
    1976        0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
    1977       11,    12,     0,   600,   607,     0,     0,    30,   749,    36,
    1978      753,   181,   182,    39,     0,   631,   632,   257,   348,     0,
    1979       40,    41,     0,     0,     0,    30,     0,   213,     0,     0,
    1980        0,     0,     0,     0,     0,    33,     0,     0,     0,   211,
    1981       36,     0,   181,   182,    39,     0,   697,     0,   409,     0,
    1982        0,    40,    41,    33,   698,     0,   699,  1559,    36,     0,
    1983      181,   182,    39,  1559,   818,     0,     0,     0,     0,    40,
    1984       41,     0,     0,     0,  1559,   174,     0,   608,  1559,   609,
    1985        0,     0,   635,   831,   935,   602,     0,   610,     0,     0,
    1986        0,     0,     0,     0,     0,   697,   850,   409,     0,     0,
    1987        0,   935,     0,     0,     0,   699,     0,     0,   174,     0,
    1988        0,     0,     0,     0,   602,     0,     0,     0,     0,   602,
    1989      211,     0,     0,     0,   174,   635,     0,  1329,   348,   348,
    1990      348,     0,     0,     0,     0,  1385,     0,   211,     0,   174,
    1991       36,     0,   181,   182,    39,     0,     0,   348,     0,     0,
    1992      213,    40,    41,     0,     0,     0,     0,     0,     0,   728,
    1993        0,     0,   891,     0,     0,   723,     0,   728,   728,   728,
    1994      211,     0,     0,     0,   935,   935,   479,   697,   213,   409,
    1995        0,   257,   737,   213,     0,   937,     0,   699,     0,     0,
    1996        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    1997       17,    18,    19,    20,    21,    22,    23,    24,    72,     0,
    1998       25,    26,    27,     0,     0,   728,     0,     0,   479,    30,
    1999      452,   348,     0,   944,     0,     0,     0,     0,     0,   947,
    2000      963,     0,     0,   429,     0,    75,   174,     0,     0,    72,
    2001       36,     0,   181,   182,    39,     0,     0,    33,     0,     0,
    2002        0,    40,    41,     0,    37,    38,     0,   257,   737,     0,
    2003        0,     0,     0,   991,     0,     0,    75,     0,     0,     0,
    2004        0,   213,     0,     0,   220,     0,     0,  1529,     0,   409,
    2005        0,     0,     0,     0,     0,   213,     0,  1530,   485,     0,
    2006        0,   453,     0,   211,  1502,   710,  1506,     0,     0,   109,
    2007      723,   221,     0,     0,     0,     0,     0,     0,     0,     0,
    2008      723,     0,     0,   348,     0,   635,   820,   821,  1023,   635,
    2009      831,   211,     0,     0,     0,   723,   211,     0,     0,     0,
    2010        0,  1535,     0,  1537,     0,  1034,    36,     0,   181,   182,
    2011       39,     0,     0,     0,     0,     0,   855,    40,    41,   858,
    2012      859,     0,   862,     0,   864,   865,     0,     0,     0,   866,
    2013      867,     0,   351,   543,   544,   545,   546,   547,   548,   549,
    2014      550,   551,   552,   263,     0,     0,  1566,     0,  1567,   213,
    2015        0,     0,     0,   264,   951,     0,   952,    63,     0,   353,
    2016        0,  1574,  1575,   955,   956,     0,     0,   553,   961,     0,
    2017        0,     0,   174,     0,   653,     0,   411,     0,     0,   635,
    2018      966,  1060,     0,   419,   211,   970,     0,     0,     8,     9,
    2019       10,    11,    12,     0,     0,     0,     0,     0,   211,     0,
    2020        0,     0,     0,     0,     0,     0,   447,     0,     0,     0,
    2021        0,   999,     0,   942,   943,  1115,    30,     0,   505,   945,
    2022        0,     0,     0,   429,   115,     0,     0,    72,     0,     0,
    2023        0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
    2024        0,   348,     0,     0,    33,     0,     0,     0,     0,    36,
    2025        0,   181,   182,    39,    75,   411,   600,     0,     0,    75,
    2026       40,    41,     0,     0,     0,     0,   124,   124,   124,     0,
    2027        0,     0,     0,   653,     0,     0,   602,     0,     0,     0,
    2028        0,     0,     0,     0,     0,     0,  1529,     0,   409,   427,
    2029        0,     0,   211,     0,   723,   723,  1530,   348,   348,     0,
    2030        0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
    2031        0,   583,     0,  1044,  1045,  1046,  1047,  1202,  1049,   587,
    2032        0,     0,   590,     0,     0,     0,     0,   220,     0,     0,
    2033        0,     0,    30,     0,  1093,     0,     0,   124,     0,   124,
    2034        0,   213,     0,     0,     0,     0,     0,     0,  1099,     0,
    2035        0,     0,   723,   723,   221,     0,     0,     0,   635,     0,
    2036       33,     0,     0,     0,   273,    36,     0,   181,   182,    39,
    2037        0,     0,     0,  1060,     0,     0,    40,    41,     0,     0,
    2038        0,     0,     0,     0,     0,   411,     0,  1114,     0,   419,
    2039        0,     0,     0,     0,    72,     0,     0,     0,     0,     0,
    2040        0,     0,   183,     0,     0,     0,     0,     0,     0,   351,
    2041        0,     0,   184,     0,    72,     0,   737,     0,     0,     0,
    2042      124,    75,    72,     0,     0,     0,     0,  1142,   124,     0,
    2043      124,   124,     0,     0,  1150,   124,   353,   124,   124,  1154,
    2044        0,    75,     0,     0,  1158,     0,  1159,     0,   351,    75,
    2045     1161,  1162,  1163,     0,     0,  1166,     0,     0,     0,  1298,
    2046        0,     0,     0,     0,  1178,     0,   351,     0,    72,   174,
    2047        0,     0,     0,     0,   411,   353,   257,     0,     0,  1297,
    2048        0,    63,  1193,  1194,   211,     0,     0,     0,     8,     9,
    2049       10,    11,    12,   353,   723,    75,   737,     0,     0,     0,
    2050      115,     0,     0,     0,     0,     0,     0,   124,     0,  1224,
    2051      351,     0,  1226,     0,     0,     0,    30,     0,     0,     0,
    2052      213,     0,     0,     0,     0,     0,   723,     0,     0,     0,
    2053        0,     0,     0,     0,   723,   723,   723,   353,     0,     0,
    2054        0,     0,     0,     0,    33,   348,   348,     0,     0,    36,
    2055     1241,   181,   182,    39,     0,     0,  1245,  1246,     0,  1202,
    2056       40,    41,     0,     0,     0,     0,   583,   583,  1257,     0,
    2057        0,     0,     0,  1261,     0,   351,  1265,     0,  1266,     0,
    2058        0,  1268,   723,     0,     0,     0,   263,     0,     0,     0,
    2059        0,     0,     0,   115,  1276,     0,   264,     0,     0,     0,
    2060        0,     0,   353,  1232,     0,     0,     0,  1283,     0,  1285,
    2061     1286,  1287,  1288,     0,     0,     0,   213,     0,     0,     0,
    2062      351,   351,   351,     0,     0,  1295,     0,  1296,     0,     0,
    2063        0,   170,     0,     0,     0,     0,     0,     0,     0,   351,
    2064        0,     0,     0,     0,     0,   174,     0,   353,   353,   353,
    2065        0,     0,     0,     0,     0,   910,     0,   351,     0,   913,
    2066     1324,  1325,     0,   211,     0,     0,   353,     0,    72,     0,
    2067      348,     0,    77,     0,   351,     0,     0,     0,     0,     0,
    2068        0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
    2069        0,     0,   411,     0,     0,    75,   115,     0,     0,    84,
    2070        0,   353,     0,    77,     0,    54,    54,     0,     0,     0,
    2071       72,  1360,  1361,   351,     0,     0,     0,     0,     0,  1202,
    2072        0,  1371,     0,     0,     0,     0,  1202,  1320,     0,     0,
    2073       84,     0,     0,     0,     0,     0,    54,    75,   222,     0,
    2074      353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2075      351,     0,     0,     0,     0,     0,     0,     0,     0,   211,
    2076        0,     0,     0,     0,     0,   223,     0,     0,    54,     0,
    2077        0,    54,     0,  1404,     0,     0,     0,   353,     0,  1202,
    2078        0,     0,     0,     0,     0,  1408,  1554,  1409,  1410,  1411,
    2079        0,     0,   351,     0,     0,     0,     0,     0,     0,  1415,
    2080        0,     0,   351,     0,     0,   351,     0,   583,  1426,     0,
    2081      220,     0,   351,     0,     0,     0,     0,   351,     0,   353,
    2082        0,     0,   124,   124,  1439,     0,   354,     0,     0,   353,
    2083        0,     0,   353,     0,     0,     0,     0,   221,     0,   353,
    2084        0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
    2085        0,     0,   124,   361,     0,   124,   124,     0,   124,   346,
    2086      124,   124,     0,     0,     0,   124,   124,     0,     0,     0,
    2087        0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
    2088     1488,  1489,     0,     0,     0,     0,     0,     0,     0,     0,
    2089        0,     0,     0,  1494,     0,     0,     0,     0,     0,     0,
    2090     1494,     0,     0,     0,     0,     0,    75,     0,     0,     0,
     2565      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2566       0,     0,     0,     0,    44,    31,     0,     0,     0,     0,
     2567       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
    20912568       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2092      411,    77,     0,     0,    54,     0,    77,     0,     0,     0,
    2093        0,     0,     0,  1528,     0,     0,     0,  1534,     0,     0,
    2094        0,     0,     0,     0,   124,     0,     0,     0,    84,   124,
    2095      124,     0,     0,    84,    54,   124,     0,     0,     0,     0,
    2096        0,     0,     0,   351,     0,     0,  1556,     0,  1557,     0,
     2569       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
     2570     206,    39,     0,     2,   205,     4,     5,     6,     7,     8,
     2571       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2572      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2573      27,    28,     0,     0,     0,     0,     0,   207,    31,     0,
     2574       0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
     2575       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2576       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
     2577      36,    37,     0,   206,    39,    40,     0,     0,     0,     0,
     2578       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
     2579       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2580       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
     2581     207,     0,     0,     0,     0,     0,     0,     0,   208,     2,
     2582     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2583      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2584      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2585       0,     0,     0,     0,    31,     0,     0,     0,     0,     8,
     2586       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2587      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2588      27,    28,    34,     0,    35,     0,    36,     0,    31,    38,
     2589      39,     0,     2,   205,     4,     5,     6,     7,     8,     9,
     2590      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2591      20,    21,    22,    23,    24,    25,    34,     0,    26,    27,
     2592      28,     0,     0,    38,    39,  -400,   687,    31,     0,     0,
     2593       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
     2594       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2595       0,     0,     0,     0,     0,    34,     0,    35,   643,    36,
     2596     338,     0,    38,    39,     0,     0,     0,     0,   110,     0,
     2597       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2598       0,     0,     0,     0,  1369,     0,     0,     0,     0,     0,
     2599       0,     0,     0,     0,     0,     0,     0,     0,     0,   687,
     2600       0,     0,     0,     0,     0,     0,     0,   634,     2,   205,
     2601       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2602      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2603      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2604       0,     0,     0,    31,     0,     0,     0,     0,     8,     9,
     2605      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2606      20,    21,    22,    23,    24,    25,  -294,     0,    26,    27,
     2607      28,    34,     0,    35,     0,    36,     0,    31,    38,    39,
     2608       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2609       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2610    1371,     0,     0,     0,     0,    34,     0,     0,     0,     0,
     2611      37,     0,   336,   337,    40,   687,  -294,     0,     0,     0,
     2612       0,    41,    42,   634,     2,   205,     4,     5,     6,     7,
     2613       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2614      18,    19,    20,    21,    22,    23,    24,    25,     0,   338,
     2615      26,    27,    28,     0,     0,     0,     0,   110,     0,    31,
     2616       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2617       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2618       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
     2619       0,    36,     0,     0,   206,    39,     0,     2,   205,     4,
     2620       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2621      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2622      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2623       0,   269,    31,     0,     0,     0,     0,     0,     0,   629,
     2624       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2625       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2626      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
     2627       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
     2628      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2629      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2630       0,     0,     0,     0,   687,    31,     0,     0,     0,     0,
     2631       0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
     2632       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2633       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
     2634      38,    39,     0,     2,   205,     4,     5,     6,     7,     8,
     2635       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2636      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2637      27,    28,     0,     0,     0,     0,     0,   599,    31,     0,
     2638       0,     0,     0,     0,     0,   634,     0,     0,     0,     0,
     2639       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2640       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
     2641      36,     0,     0,   206,    39,     8,     9,    10,    11,    12,
     2642      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2643      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2644       0,     0,   281,   282,    31,   283,     0,     0,     0,     0,
     2645     207,     0,     0,     0,     0,     0,     0,     0,   270,     0,
     2646       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2647       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
     2648      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2649       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
     2650       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2651       0,     0,     0,     0,   294,     0,   525,     0,     0,   170,
     2652       0,     0,     0,   296,   297,   298,   299,   300,   301,     8,
     2653       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2654      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2655      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2656       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2657      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2658      26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
     2659       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2660     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2661       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2662       0,     0,    37,     0,   336,   337,    40,     0,   294,     0,
     2663     599,    -3,     0,    41,    42,     0,     0,   296,   600,   298,
     2664     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
     2665      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2666      25,   338,     0,    26,    27,    28,     0,     0,     0,   110,
     2667     281,   282,    31,   283,     8,     9,    10,    11,    12,    13,
     2668      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2669      24,    25,     0,     0,    26,    27,    28,     0,     0,   284,
     2670      34,     0,     0,    31,   453,   649,     0,    38,    39,   286,
     2671       0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
     2672     292,     0,     0,     0,     0,     0,     0,   293,     0,     0,
     2673       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
     2674       0,     0,   294,   -35,   766,     0,     0,     0,     0,     0,
     2675       0,   296,   297,   298,   299,   300,   301,     8,     9,    10,
     2676      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2677      21,    22,    23,    24,    25,   454,     0,    26,    27,    28,
     2678       0,     0,     0,   110,   281,   282,    31,   283,     0,     0,
     2679       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2680      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2681      23,    24,    25,   284,    34,    26,    27,    28,     0,   285,
     2682       0,    38,    39,   286,    31,     0,   287,   288,   289,   290,
     2683      41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
     2684       0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
     2685       0,     0,    34,     0,     0,     0,   294,     0,   295,    38,
     2686      39,     0,     0,     0,     0,   296,   297,   298,   299,   300,
     2687     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2688      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2689       0,    26,    27,    28,   643,     0,   338,     0,   281,   282,
     2690      31,   283,     0,     0,   634,     0,     0,     0,     0,     8,
     2691       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2692      19,    20,    21,    22,    23,    24,    25,   284,    34,    26,
     2693      27,    28,     0,   285,     0,    38,    39,   286,    31,     0,
     2694     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
     2695       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
     2696       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
     2697     294,     0,   156,    38,    39,     0,     0,     0,     0,   296,
     2698     297,   298,   299,   300,   301,     8,     9,    10,    11,    12,
     2699      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2700      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2701     256,     0,   281,   282,    31,   283,     0,     0,   110,     0,
     2702       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2703       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2704       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
     2705      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2706       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
     2707       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2708       0,     0,     0,     0,   294,     0,   599,     0,     0,     0,
     2709       0,     0,     0,   296,   600,   298,   299,   300,   301,     8,
     2710       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2711      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2712      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
     2713       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2714      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2715      26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
     2716       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
     2717     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2718       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
     2719       0,     0,    37,     0,    38,    39,    40,     0,   294,     0,
     2720     378,     0,     0,    41,    42,     0,     0,   296,   380,   298,
     2721     299,   300,   301,     0,     0,     0,     0,     0,     0,     0,
     2722       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
     2723       0,    44,     0,     0,     0,     0,     0,     0,     0,    45,
     2724       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2725      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2726      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2727       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2728      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2729      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
     2730       0,     0,    37,     0,   206,    39,    40,     0,     0,     0,
     2731       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
     2732       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
     2733       0,     0,    37,     0,   336,   337,    40,     0,     0,    43,
     2734       0,   269,     0,    41,    42,     0,     0,     0,     0,   208,
     2735       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2736       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
     2737       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
     2738       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2739      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
     2740      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2741       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2742      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
     2743      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
     2744       0,     0,     0,     0,    38,    39,     0,     0,  -294,     0,
     2745       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2746       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
     2747       0,     0,     0,     0,    38,    39,     0,     0,  -294,   643,
     2748       0,   338,     0,     0,     0,     0,     0,     0,     0,   110,
     2749       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2750       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
     2751       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
     2752       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2753      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2754      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2755     453,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2756      17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
     2757       0,    26,    27,    28,     0,     0,     0,    34,     0,     0,
     2758      31,     0,     0,     0,    38,    39,     0,     0,     0,     0,
     2759       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2760       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2761       0,     0,     0,     0,     0,    38,    39,     0,     0,  -294,
     2762       0,   454,     0,     0,     0,   947,     0,     0,     0,   110,
     2763       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2764      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2765      25,     0,   338,    26,    27,    28,     0,     0,     0,     0,
     2766     110,     0,    31,   453,     8,     9,    10,    11,    12,    13,
     2767      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2768      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2769      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
    20972770       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2098       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2099      353,    25,    26,    27,     0,     0,  1572,  1573,     0,  1156,
    2100       30,   452,     0,     0,  1576,  1577,     0,     0,     0,     0,
    2101        0,     0,     0,     0,     0,  1168,   351,   351,     0,   351,
    2102      351,   222,     0,     0,     0,     0,     0,     0,    33,     0,
    2103        0,     0,     0,     0,     0,    37,    38,     0,     0,    72,
    2104        0,     0,     0,   353,   353,     0,   353,   353,   223,     8,
     2771      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2772       0,    34,    26,    27,    28,     0,     0,     0,    38,    39,
     2773       0,    31,     0,     0,   454,     0,     0,     0,  1235,     0,
     2774       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
     2775       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
     2776       0,     0,     0,     0,     0,   156,   206,    39,     0,     0,
     2777       0,     0,     0,   110,     0,     8,     9,    10,    11,    12,
     2778      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2779      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2780       0,     0,     0,   269,    31,     0,     0,     0,     0,     0,
     2781       0,   270,     0,     8,     9,    10,    11,    12,    13,    14,
     2782      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2783      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
     2784      39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
     2785      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2786      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2787      34,     0,    31,     0,     0,     0,   256,    38,    39,     0,
     2788       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
     2789       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2790      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
     2791       0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
     2792       0,     0,   634,     0,     0,     8,     9,    10,    11,    12,
     2793      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2794      23,    24,    25,     0,   454,    26,    27,    28,     0,     0,
     2795       0,     0,   110,     0,    31,     8,     9,    10,    11,    12,
     2796      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2797      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2798       0,     0,    34,     0,    31,     0,     0,     0,     0,   206,
     2799      39,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2800      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2801      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
     2802      39,     0,    31,     0,     0,     0,   269,     0,     0,     0,
     2803       0,     0,     0,     0,   629,     0,     0,     0,     0,     0,
     2804       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2805      34,     0,     0,     0,     0,     0,   599,    38,    39,     0,
     2806       0,     0,     0,     0,   634,     0,     8,     9,    10,    11,
     2807      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2808      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
     2809       0,     0,     0,     0,   338,    31,     0,     0,     0,     0,
     2810       0,     0,   110,     0,     8,     9,    10,    11,    12,    13,
     2811      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2812      24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
     2813      38,    39,     0,    31,     0,     0,     2,   205,     4,     5,
     2814       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2815      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2816       0,    34,    26,    27,    28,     0,     0,    44,   206,    39,
     2817       0,    31,     0,   281,   282,   110,   283,  1063,     0,  1064,
     2818       0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
     2819       0,     0,  1549,  1073,     0,     0,     0,  1074,  1075,    34,
     2820      33,    35,   284,    36,     0,     0,    38,    39,   649,     0,
     2821       0,     0,   286,   629,     0,   287,   288,   289,   290,    41,
     2822      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
     2823     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2824       0,     0,  -413,     0,     0,   294,     0,   378,     0,     0,
     2825     170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
     2826       0,     0,     0,     0,  1077,     0,   281,   282,  -129,   283,
     2827    1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,  1069,
     2828    1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,     0,
     2829    1074,  1075,     0,    33,     0,   284,     0,     0,     0,     0,
     2830       0,   649,     0,     0,     0,   286,     0,     0,   287,   288,
     2831     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
     2832       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
     2833       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
     2834     378,     0,     0,   170,     0,     0,     0,   296,   380,   298,
     2835     299,   300,   301,     0,     0,     0,     0,  1077,     0,     0,
     2836       0,  -129,     2,   205,     4,     5,     6,     7,     8,     9,
     2837      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2838      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2839      28,     0,     0,     0,     0,     0,     0,    31,     0,   281,
     2840     282,     0,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,
     2841    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1549,  1073,
     2842       0,     0,     0,  1074,  1075,    34,    33,    35,   284,    36,
     2843       0,     0,    38,    39,   649,     0,     0,     0,   286,     0,
     2844       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2845       0,     0,     0,     0,  1328,     0,   293,     0,     0,     0,
     2846       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2847       0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
     2848     296,   380,   298,   299,   300,   301,     0,     0,   281,   282,
     2849    1077,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,  1067,
     2850    1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,
     2851       0,     0,  1074,  1075,     0,    33,     0,   284,     0,     0,
     2852       0,     0,     0,   649,     0,     0,     0,   286,     0,     0,
     2853     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
     2854       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
     2855       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2856     294,     0,   378,     0,     0,   170,     0,     0,     0,   296,
     2857     380,   298,   299,   300,   301,     0,     0,   281,   282,  1077,
     2858     283,  1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,
     2859    1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,
     2860       0,  1074,  1075,     0,    33,     0,   284,     0,     0,     0,
     2861       0,     0,   649,     0,     0,     0,   286,     0,     0,   287,
     2862     288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
     2863       0,     0,     0,     0,   293,   281,   282,     0,   283,     0,
     2864       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
     2865       0,   378,     0,     0,   170,     0,     0,     0,   296,   380,
     2866     298,   299,   300,   301,   284,     0,     0,     0,  1077,     0,
     2867     285,     0,     0,     0,   286,     0,     0,   287,   288,   289,
     2868     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
     2869       0,     0,   293,   281,   282,     0,   283,     0,     0,     0,
     2870       0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
     2871       0,     0,   281,   282,     0,   283,   296,   380,   298,   299,
     2872     300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
     2873       0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
     2874      42,   284,   291,   292,     0,     0,     0,   649,     0,     0,
     2875     293,   286,     0,     0,   287,   288,   289,   290,    41,    42,
     2876       0,   291,   292,     0,     0,   294,     0,   378,     0,   293,
     2877     281,   282,     0,   283,   296,   734,   298,   299,   300,   301,
     2878       0,     0,     0,     0,   294,     0,   785,     0,     0,   281,
     2879     282,     0,   283,   296,   380,   298,   299,   300,   301,   284,
     2880       0,     0,     0,     0,     0,   285,     0,     0,     0,   286,
     2881       0,     0,   287,   288,   289,   290,    41,    42,   284,   291,
     2882     292,     0,     0,     0,   285,     0,     0,   293,   286,     0,
     2883       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
     2884       0,     0,   294,     0,   378,     0,   293,   281,   282,     0,
     2885     283,   296,   827,   298,   299,   300,   301,     0,     0,     0,
     2886       0,   294,     0,     0,     0,     0,   281,   282,     0,   283,
     2887     296,   380,   298,   299,   300,   301,   284,     0,     0,     0,
     2888       0,     0,   285,     0,     0,     0,   286,     0,     0,   287,
     2889     288,   289,   290,    41,    42,   284,   291,   292,     0,     0,
     2890       0,   285,     0,     0,   293,   286,     0,     0,   287,   288,
     2891     289,   290,    41,    42,     0,   291,   292,     0,     0,   518,
     2892       0,     0,     0,   293,     0,     0,     0,     0,   296,   380,
     2893     298,   299,   300,   301,     0,     0,     0,     0,   521,     0,
     2894       0,     0,     0,     0,     0,     0,     0,   296,   380,   298,
     2895     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
     2896       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2897      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2898      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2899       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2900       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2901       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
     2902       0,    36,     0,     0,   206,    39,   474,     2,   205,     4,
     2903       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2904      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2905      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2906       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
     2907       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2908       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2909      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
     2910     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2911      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2912      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2913       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
     2914       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2915       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2916       0,     0,    34,     0,    35,     0,    36,     0,     0,   206,
     2917      39
     2918};
     2919
     2920#define yypact_value_is_default(yystate) \
     2921  ((yystate) == (-1356))
     2922
     2923#define yytable_value_is_error(yytable_value) \
     2924  YYID (0)
     2925
     2926static const yytype_int16 yycheck[] =
     2927{
     2928       0,     1,     0,   184,    43,   698,   115,   184,    43,   184,
     2929      43,   238,    55,   698,     1,   167,   168,   698,   104,   203,
     2930     543,   294,   184,   455,   185,   218,   280,   278,   456,    29,
     2931      30,   656,    32,   184,    32,   348,   611,   184,   520,   185,
     2932     759,   611,     1,    43,   184,    45,  1006,    45,   186,   629,
     2933     499,   579,   609,     0,   503,    55,   902,   999,   462,  1042,
     2934    1043,    61,   105,    61,    64,   108,    64,    67,   154,    67,
     2935     902,   348,   780,    43,    43,   609,   609,    32,    39,    51,
     2936      67,    81,    82,   264,   777,    32,  1419,   264,   609,   264,
     2937    1338,   200,   777,   609,    28,  1055,   777,   529,   723,    63,
     2938      95,  1062,   264,   609,   265,   105,   699,    39,   108,   110,
     2939     417,    82,    43,   264,   699,   115,   117,   264,   109,   265,
     2940    1475,   497,   260,   261,   264,   609,    64,   363,   721,    82,
     2941     437,   367,    39,     0,   612,   130,   721,   109,   445,   110,
     2942     618,  1074,  1075,   344,    78,   184,   146,    82,   146,   184,
     2943     111,   184,   425,   426,   154,  1510,     0,  1512,   111,   159,
     2944    1493,   159,  1043,   425,   426,    32,   107,   227,   132,     0,
     2945       1,   109,   109,   109,   217,   111,   255,   109,    39,   111,
     2946       0,     1,   283,   119,   184,   185,   246,   185,    32,     0,
     2947     131,    39,     0,  1441,    72,   296,   297,    64,    44,    45,
     2948     200,    32,   109,    39,   111,    83,    84,   308,   208,  1142,
     2949     208,   680,    32,    39,   184,   184,   409,   217,   495,   812,
     2950     220,    32,   220,   744,    32,   264,   110,   227,   271,   264,
     2951    1062,   264,   116,    64,   109,   278,    67,   613,   744,   501,
     2952     513,   617,   242,   344,   405,   518,   246,    67,   521,    11,
     2953     250,   251,   250,   184,   132,   341,   131,   511,   520,   405,
     2954     744,   109,   638,   111,   264,   265,   642,   265,     0,   115,
     2955     109,   271,   111,   109,   109,   111,   851,    45,   278,   380,
     2956     119,   851,   839,   109,   370,   111,   395,    82,   489,   110,
     2957     718,   819,   251,   293,   455,   250,   117,   890,   611,    85,
     2958      32,  1009,   575,   250,   347,   839,   839,  1290,  1291,   455,
     2959      45,    43,    82,    45,   423,  1257,    44,    45,   839,   112,
     2960     429,   364,   117,   839,   586,   368,   487,   113,   328,    61,
     2961     328,   114,    64,   839,   293,    67,   116,    82,   417,   109,
     2962      96,   487,   110,  1304,     3,   112,   815,   347,   348,   116,
     2963      44,    45,  1071,   220,     3,   839,   825,   489,   437,   116,
     2964    1241,   597,    72,   841,   364,   110,   445,   123,   368,    82,
     2965      72,   840,   117,    83,    84,   110,    72,   145,     0,   379,
     2966    1226,    83,    84,   250,   691,   978,   114,    83,    84,   220,
     2967     960,   644,   645,   978,  1226,   395,   109,    96,   129,   600,
     2968     131,   111,   959,     0,   640,   405,   250,   405,  1526,   662,
     2969    1291,   255,   109,   513,   146,   515,  1009,   119,   518,   250,
     2970     114,   521,   676,   423,   123,   959,   959,   159,   629,   429,
     2971     250,   431,  1415,   634,  1526,  1553,   132,  1496,    72,   250,
     2972     208,  1021,   250,  1502,   255,   131,   532,  1407,  1408,    83,
     2973      84,   116,   184,   185,  1546,   455,   557,   558,   559,   112,
     2974     460,  1553,   109,   116,  1523,   465,  1059,   132,   116,  1528,
     2975     238,   110,  1304,   208,   474,   471,   208,   111,   117,   479,
     2976     109,   110,   349,   736,   132,   115,   116,   487,   220,   487,
     2977     109,   491,   131,   491,    80,   495,   697,   873,   498,   600,
     2978     500,   131,   270,  1464,   239,   657,   938,   758,   762,   109,
     2979    1471,   643,   644,   645,   946,   474,  1141,   698,   250,   968,
     2980     520,   698,  1004,   698,   928,   111,   109,   113,   666,   297,
     2981     662,   117,   264,   109,  1415,   270,   698,   537,   851,   700,
     2982     540,  1134,   542,   543,   491,   109,  1116,   698,   116,  1134,
     2983     116,   698,  1030,  1031,   700,   664,    72,   110,   698,   294,
     2984     992,   520,   297,  1524,   132,   697,   132,    83,    84,   110,
     2985    1039,  1040,   773,   417,   851,   828,   344,   110,   537,  1423,
     2986     112,   540,   110,   542,   543,  1304,   116,   630,   116,   965,
     2987     590,    30,   110,   437,   830,   111,   328,   597,   834,  1192,
     2988    1193,   445,   132,   646,   736,   110,   417,  1192,  1193,   609,
     2989     696,   611,   691,   480,    90,    91,   348,   119,   661,   643,
     2990     644,   645,   124,   125,   491,   109,   437,   111,  1097,  1098,
     2991     630,   590,  1464,   734,   445,    80,  1132,   116,   662,  1471,
     2992    1136,   773,    81,    82,    72,   112,   646,   491,    76,   116,
     2993     126,   127,   652,   132,   733,    83,    84,   425,   426,   116,
     2994     491,   661,  1381,   663,   664,   665,   111,   110,   113,   116,
     2995     110,   491,   117,   405,  1102,   132,   116,  1521,   489,   780,
     2996     491,   109,  1526,   491,   680,   132,   772,   964,   924,   116,
     2997     115,   119,  1524,   109,   116,   888,   828,   109,   698,   111,
     2998     700,   116,  1546,   109,   663,   132,   665,   119,   116,  1553,
     2999     132,   109,   736,   713,   116,   758,   909,   132,   453,   719,
     3000      64,   456,   110,   455,   132,    68,   827,   462,   116,    72,
     3001     132,   731,    75,   501,    77,    72,    10,    11,    12,    13,
     3002      14,    84,   894,   970,   744,   745,    83,    84,   110,  1468,
     3003      72,  1470,   520,   109,   116,   111,   132,   116,   758,   491,
     3004       3,    83,    84,   495,   631,    39,   112,    10,    11,    12,
     3005      13,    14,   731,   132,   111,   110,   110,   938,   513,   109,
     3006     515,   116,   116,   518,   112,   946,   521,   109,   116,   110,
     3007     598,   132,   938,    67,   112,   116,    39,  1320,   116,   110,
     3008     946,   110,  1271,   242,   828,   116,  1525,   116,   109,  1402,
     3009    1279,  1280,  1281,   109,    45,   111,   110,  1402,   586,   815,
     3010    1021,   110,   116,   112,    67,   110,  1419,   116,   114,   825,
     3011      61,   116,   600,    64,  1419,   110,    67,  1530,   109,   839,
     3012     111,   116,   131,   132,   840,  1530,     1,   691,    72,  1530,
     3013    1034,   851,    76,    72,   114,    74,    75,   724,  1327,    83,
     3014      84,   629,    64,    72,    83,    84,   634,  1103,   211,   132,
     3015     110,   738,   121,   122,    83,    84,   116,   609,  1132,   611,
     3016     691,   132,  1136,  1137,   114,   109,   697,   111,   109,   733,
     3017      45,   109,    72,   111,   894,   119,    76,    88,    89,  1492,
     3018    1493,   901,   902,    83,    84,  1057,   110,  1492,  1493,    82,
     3019    1042,   110,   116,   110,   116,   146,   109,   116,   111,   116,
     3020    1021,   110,   733,   109,   924,   110,   109,   116,   159,   109,
     3021     112,   116,  1205,  1206,   109,  1208,   111,    82,   938,   119,
     3022     379,  1214,   120,   902,  1217,   109,   946,   111,   129,   104,
     3023     564,   565,   566,   567,   185,   110,   109,   159,   111,   128,
     3024    1161,  1062,   773,    94,   964,   832,   698,    72,   700,    74,
     3025      75,    64,    92,    93,    85,    86,    87,   208,    83,    84,
     3026     115,   116,   969,   718,   984,   109,   110,   111,    81,   220,
     3027     145,   116,   117,   993,   109,   110,   111,  1251,   109,   154,
     3028     111,  1001,   113,   114,  1004,   703,  1006,   705,   351,   114,
     3029     353,   111,   744,   745,   131,  1124,   110,   111,   220,    58,
     3030      59,   460,   109,   116,   109,   984,   465,   835,   112,  1161,
     3031     109,   110,   111,   115,   116,   902,   109,   110,   111,   109,
     3032    1241,   112,  1001,  1039,  1040,  1004,   110,  1006,   110,   204,
     3033      58,    59,    60,   208,   110,  1055,   258,   110,   902,   498,
     3034     262,   500,   116,   117,   110,  1065,   159,   110,  1068,  1069,
     3035    1070,   902,   112,  1505,   116,   117,    72,  1178,    74,    75,
     3036      76,   111,   902,   238,   239,  1339,   112,    83,    84,  1343,
     3037     131,   902,   116,  1093,   902,   114,  1055,   328,   441,    44,
     3038      45,  1097,  1098,   109,  1377,   112,  1065,   839,   110,  1068,
     3039    1069,  1070,   110,   109,    72,   270,    74,    75,   273,   851,
     3040    1263,  1264,  1265,  1555,  1124,    83,    84,   220,   112,     4,
     3041       5,     6,     7,     8,     9,  1221,   560,   561,   969,   294,
     3042     112,   112,   297,   562,   563,   568,   569,   349,   112,   969,
     3043     117,   109,     3,    29,   117,   117,   114,  1024,  1290,    10,
     3044      11,    12,    13,    14,    72,   258,    74,    75,    76,   262,
     3045     116,   110,   110,   114,   405,    83,    84,   112,    10,    11,
     3046      12,    13,    14,   117,   115,   110,   341,   115,    39,   344,
     3047     116,  1445,   115,   928,    69,  1062,    71,   109,   116,  1199,
     3048     110,   109,   970,   111,   110,   132,   938,    39,   363,   117,
     3049     110,   119,   367,   652,   946,   370,    67,  1204,  1062,   117,
     3050     110,  1221,    72,   110,    74,    75,  1226,   110,   430,   110,
     3051       3,  1062,   964,    83,    84,    67,   116,    10,    11,    12,
     3052      13,    14,  1062,  1239,     4,     5,     6,     7,     8,     9,
     3053     110,  1062,   110,  1021,  1062,   110,   349,   132,  1245,   115,
     3054      29,   111,   110,  1263,  1264,  1265,    39,  1226,   110,   110,
     3055     425,   426,   110,    33,   713,  1271,   110,   109,   480,   111,
     3056     719,   902,   110,  1279,  1280,  1281,   110,   119,    72,  1398,
     3057      74,    75,    76,   110,    67,   110,   131,   110,   453,    83,
     3058      84,   456,   112,   110,  1263,  1264,  1265,   462,   110,    69,
     3059     115,    71,   110,  1540,    85,    86,    87,   116,   112,   474,
     3060    1320,  1321,   112,   110,     4,     5,     6,     7,     8,     9,
     3061     110,  1327,   110,   471,   116,   116,  1203,   430,   109,   114,
     3062     111,   117,   113,   114,   499,   112,   501,   110,   503,  1530,
     3063    1161,  1338,   116,  1530,  1397,  1530,   110,   116,   513,  1226,
     3064     515,  1320,  1321,   518,   116,   520,   521,  1102,  1530,   110,
     3065    1531,   117,  1203,  1204,   112,  1375,   109,   532,  1378,  1530,
     3066     109,   109,  1226,  1530,  1204,  1531,   109,   480,   109,    69,
     3067    1530,    71,   112,   132,  1555,  1226,  1505,  1397,  1398,   115,
     3068     110,   603,   110,   110,   129,   114,  1226,  1407,  1408,  1555,
     3069      72,   115,    74,    75,  1245,  1226,  1375,   112,  1226,  1378,
     3070     132,    83,    84,  1423,   110,  1245,   116,   112,  1428,   631,
     3071    1241,   586,  1299,   116,   636,   112,    55,  1304,   110,   110,
     3072     110,    47,   597,   112,  1065,   600,  1446,   109,  1407,  1408,
     3073     110,   112,   114,   112,  1441,   894,   112,    53,  1458,   112,
     3074    1304,   112,   901,   115,  1423,   132,   132,   132,  1299,  1428,
     3075     110,   115,   117,  1304,   629,   132,   110,   132,   115,   634,
     3076     112,   112,     0,     1,  1304,   640,   105,  1446,   112,   108,
     3077     112,  1530,   112,  1304,   112,  1530,  1304,  1530,   112,  1458,
     3078      96,   112,   110,   110,   109,  1505,  1506,  1338,   112,   112,
     3079     603,   109,   109,    60,    32,  1515,   110,   110,  1338,   114,
     3080     132,  1521,   724,   112,   112,   117,  1526,    45,   110,   112,
     3081    1530,  1531,   110,  1531,    96,   154,   738,    96,   631,   109,
     3082     109,   696,   680,   636,  1544,   132,  1546,  1506,   115,    67,
     3083    1550,   112,   110,  1553,   993,  1555,  1515,  1555,   110,   110,
     3084     110,  1561,  1521,   718,    51,  1565,    53,  1526,   116,    56,
     3085      57,    58,    72,    60,    74,    75,    76,    42,    72,   117,
     3086      74,    75,    76,    83,    84,  1544,   104,  1546,    75,    83,
     3087      84,  1550,   132,   748,  1553,   132,   192,  1464,   217,   110,
     3088      87,    88,  1561,   110,  1471,  1226,  1565,    96,    96,   109,
     3089    1441,    72,   132,    74,    75,    76,   132,   772,   110,   215,
     3090    1464,  1441,    83,    84,   110,   110,   117,  1471,   146,   225,
     3091     832,   724,   110,  1464,   132,   115,   154,   155,   112,   112,
     3092    1471,   109,   132,   115,  1464,   738,   115,   110,   109,   132,
     3093     111,  1471,   271,  1464,  1093,   110,  1464,  1524,   119,   278,
     3094    1471,   132,    72,  1471,    74,    75,    76,   185,   110,   110,
     3095    1077,   570,   573,    83,    84,   830,   571,   815,   572,   834,
     3096    1524,   574,   200,  1226,    64,   203,   204,   825,  1493,  1565,
     3097     208,  1383,  1343,  1524,    74,  1137,  1314,  1471,   294,   109,
     3098    1321,   111,   840,  1093,  1524,   453,   453,   946,   705,   119,
     3099     465,   229,   948,  1524,   993,   233,  1524,   235,   590,   748,
     3100     894,    10,    11,    12,    13,    14,   244,   758,   347,   658,
     3101    1245,   966,   250,   491,   578,   578,   116,   255,  1473,   832,
     3102    1475,   578,    -1,    -1,    -1,   364,    -1,   265,    -1,   368,
     3103      39,    -1,    -1,    -1,  1375,   273,    -1,  1378,    -1,    -1,
     3104    1199,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   924,
     3105      -1,    -1,  1540,   928,    -1,  1510,    -1,  1512,    67,   159,
     3106      -1,    -1,    -1,    72,    -1,    74,    75,    76,    72,    -1,
     3107      74,    75,    76,    -1,    83,    84,     0,    -1,  1530,    83,
     3108      84,    -1,  1423,    -1,    -1,    -1,    72,  1428,    74,    75,
     3109      76,    -1,   431,   968,   969,   970,    -1,    83,    84,    -1,
     3110     109,    -1,  1024,   341,    -1,   109,   344,   111,    32,    -1,
     3111     119,    -1,   350,    -1,    -1,   119,    -1,  1458,    -1,    -1,
     3112     220,    -1,    -1,   109,    -1,   363,   442,    -1,    -1,   367,
     3113      -1,    -1,   370,   119,    -1,    -1,    -1,   344,   345,    -1,
     3114      -1,    -1,    -1,    67,    -1,    -1,  1021,    -1,    -1,   356,
     3115     357,    10,    11,    12,    13,    14,    -1,    -1,   258,    -1,
     3116     476,    -1,   262,    72,    -1,    74,    75,    76,    -1,    -1,
     3117      -1,    -1,    -1,    -1,    83,    84,    -1,    -1,   278,   417,
     3118      39,  1039,  1040,    -1,    -1,    -1,    26,    27,    28,    -1,
     3119      -1,    -1,    -1,    -1,   432,    -1,    -1,   513,    -1,   437,
     3120     109,    -1,   518,  1544,    -1,   521,    -1,   445,    67,  1550,
     3121     119,  1024,    10,    11,    12,    13,    14,    -1,    -1,    -1,
     3122    1561,    -1,    -1,    -1,  1565,    -1,    -1,  1102,  1103,    -1,
     3123      -1,   155,    -1,   471,    -1,    -1,   474,    -1,    -1,  1097,
     3124    1098,    39,    -1,    -1,    10,    11,    12,    13,    14,   349,
     3125     109,   489,   111,   491,    -1,    -1,    -1,    97,   597,    99,
     3126     119,   499,    -1,    -1,    -1,   503,    -1,    -1,    -1,    67,
     3127      -1,    -1,    -1,    39,    72,    -1,    74,    75,    76,    -1,
     3128      -1,  1203,    -1,    -1,   124,    83,    84,    -1,    -1,    -1,
     3129      -1,   630,    -1,    -1,   532,   533,    -1,    -1,    -1,    -1,
     3130      -1,    67,    -1,    -1,    -1,   229,    72,   646,    74,    75,
     3131      76,   109,    -1,   111,    -1,    -1,    -1,    83,    84,    -1,
     3132      -1,   119,   661,    -1,    -1,    -1,   250,    -1,    -1,    -1,
     3133     430,   255,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3134     180,   579,    -1,   109,    -1,   111,  1221,   447,   188,    -1,
     3135     190,   191,    -1,   119,    -1,   195,    -1,   197,   198,   597,
     3136     598,    -1,   600,   679,    39,    -1,    -1,    -1,    -1,    -1,
     3137    1245,    -1,   688,   611,    -1,    -1,   692,  1299,    -1,    -1,
     3138     480,  1239,    -1,    10,    11,    12,    13,    14,    -1,    -1,
     3139    1203,   629,    67,    -1,    -1,    -1,   634,    72,    -1,    74,
     3140      75,    76,   640,    -1,    -1,   643,   644,   645,    83,    84,
     3141      -1,    -1,    39,  1271,    -1,    -1,    -1,    -1,    -1,   758,
     3142      -1,  1279,  1280,  1281,   662,    -1,   350,   267,    -1,    -1,
     3143      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
     3144      67,    -1,   680,    -1,   119,    72,    -1,    74,    75,    76,
     3145      -1,    -1,    -1,   691,    -1,    -1,    83,    84,   696,   697,
     3146      -1,    -1,   700,  1338,    -1,    -1,    -1,    -1,    -1,  1327,
     3147      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
     3148      -1,    -1,   109,    -1,    -1,    -1,  1299,    -1,    -1,    -1,
     3149      -1,    -1,   119,   417,    -1,   733,    -1,    -1,   736,    -1,
     3150      -1,    39,    -1,   603,    -1,    -1,    -1,   745,   432,    -1,
     3151     748,    -1,    -1,   437,    -1,    -1,    -1,    -1,   725,    -1,
     3152     727,   445,    -1,    -1,    -1,    -1,    -1,   734,   735,    67,
     3153      -1,   631,   739,    -1,   772,   773,   636,    -1,    -1,    -1,
     3154     778,    -1,    -1,    -1,   751,    -1,    -1,   471,    -1,   756,
     3155      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
     3156      -1,    -1,    -1,    -1,    -1,   489,  1441,   491,    -1,    -1,
     3157      -1,   109,    -1,   111,    -1,   782,    -1,   815,    -1,    -1,
     3158      -1,   119,    -1,    -1,   131,   924,    -1,   825,    -1,    -1,
     3159     828,    -1,   830,    -1,    -1,   833,   834,   835,  1473,    -1,
     3160    1475,    -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   533,
     3161     926,    -1,   850,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3162     827,    -1,    -1,    -1,   724,    -1,    -1,    -1,    -1,    -1,
     3163      -1,    -1,    -1,    -1,    -1,  1510,    -1,  1512,   738,    -1,
     3164      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3165      20,    21,    22,    23,    24,    25,    26,    27,   758,    -1,
     3166      30,    31,    32,    -1,   902,  1540,    -1,    -1,    -1,    39,
     3167      -1,    -1,    -1,    -1,   598,    -1,    -1,   884,   885,   886,
     3168     887,    -1,   889,    -1,    -1,    -1,   924,    -1,    10,    11,
     3169      12,    13,    14,    -1,    -1,    -1,     0,    67,   905,    -1,
     3170      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
     3171      -1,    -1,   919,    83,    84,    -1,    -1,    39,    -1,   643,
     3172     644,   645,   960,    -1,    -1,    -1,    -1,    -1,    32,    -1,
     3173     968,   969,   832,    -1,    -1,    -1,    -1,    -1,   662,   109,
     3174      -1,   111,   582,   583,    -1,    67,    -1,    -1,   986,   119,
     3175      72,   958,    -1,    -1,    76,    -1,   680,  1073,    -1,    -1,
     3176      -1,    83,    84,    67,    -1,    -1,    -1,   691,    -1,    -1,
     3177      -1,    -1,   612,   697,    -1,   615,   616,    -1,   618,    -1,
     3178     620,   621,    -1,  1021,    -1,   625,   626,   109,    -1,    -1,
     3179      -1,   998,    -1,    -1,    -1,    -1,  1034,   119,  1005,    -1,
     3180      -1,  1039,  1040,  1010,  1042,  1043,    -1,    -1,  1015,   733,
     3181    1017,    -1,   736,    -1,  1021,  1022,  1023,    -1,    -1,  1026,
     3182      -1,    -1,    -1,    -1,  1062,    -1,    -1,    -1,  1035,    -1,
     3183      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
     3184      -1,    -1,    -1,    -1,    -1,    -1,  1053,  1054,    -1,   773,
     3185      -1,   155,    -1,    -1,    -1,     0,    -1,    -1,    -1,  1097,
     3186    1098,    39,    -1,    -1,   704,  1103,    -1,    -1,    -1,   709,
     3187     710,    -1,    -1,  1080,    -1,   715,  1083,    -1,    -1,    -1,
     3188      -1,    -1,  1221,    -1,    -1,    -1,    -1,    32,    -1,    67,
     3189      -1,   815,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
     3190      -1,   825,    -1,    -1,   828,    83,    84,    -1,    -1,   833,
     3191      -1,   835,    -1,    -1,  1121,    -1,   840,    -1,    -1,    -1,
     3192    1127,  1128,    67,  1161,  1024,    -1,    -1,    -1,    -1,    -1,
     3193      -1,   109,  1139,    -1,    -1,    -1,    -1,  1144,    -1,    -1,
     3194    1147,   119,  1149,    -1,    -1,  1152,   250,    -1,    -1,    -1,
     3195      -1,   255,   188,    -1,    -1,    -1,    -1,    -1,  1165,   195,
     3196      -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,
     3197      -1,  1178,     0,  1180,  1181,  1182,  1183,    -1,   902,    -1,
     3198      -1,    -1,    -1,  1221,    -1,    -1,    -1,    -1,  1226,  1196,
     3199      -1,  1198,    -1,    -1,    -1,  1202,    -1,  1313,    -1,    -1,
     3200      -1,  1239,    -1,  1241,    32,     0,     1,  1245,    -1,    -1,
     3201     155,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3202      -1,    -1,    -1,    -1,  1231,  1232,    -1,    -1,    -1,    -1,
     3203      -1,   267,    -1,  1271,    -1,    -1,    -1,    32,    -1,    67,
     3204      -1,  1279,  1280,  1281,    -1,    -1,   350,    -1,    -1,    -1,
     3205      -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,  1397,    -1,
     3206      -1,    -1,   986,    -1,    -1,    -1,  1304,    -1,    -1,    64,
     3207      -1,    -1,    67,    -1,    -1,  1282,  1283,    -1,    -1,    -1,
     3208      -1,    -1,    -1,    -1,    -1,  1292,    -1,   323,    -1,  1327,
     3209      -1,    -1,    -1,    -1,    -1,   331,    -1,    -1,   334,    -1,
     3210    1338,    -1,    -1,  1203,    -1,   250,    -1,    -1,    -1,    -1,
     3211     255,    -1,    -1,   417,    -1,  1039,  1040,    -1,  1042,  1043,
     3212      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   432,    -1,
     3213      -1,    -1,    -1,   437,    -1,    -1,    -1,  1344,  1062,    -1,
     3214      -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1356,
     3215      -1,  1358,  1359,  1360,    -1,    -1,  1472,    -1,  1474,    -1,
     3216     155,   397,    -1,  1370,    -1,   401,    -1,   471,    -1,    -1,
     3217      -1,    -1,  1379,  1097,  1098,    -1,    -1,  1415,    -1,    -1,
     3218      -1,    -1,    -1,    -1,    -1,   489,    -1,   491,  1395,    -1,
     3219      -1,    -1,    -1,  1509,    -1,  1511,    -1,    -1,    -1,  1299,
     3220      -1,    -1,    -1,  1441,    -1,   350,    -1,    -1,    -1,    -1,
     3221      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3222      -1,    -1,   250,    -1,    -1,   220,  1464,   255,    -1,   533,
     3223      -1,    -1,    -1,  1471,    -1,    -1,    -1,  1161,  1554,    -1,
     3224    1556,    -1,    -1,    -1,  1451,  1452,    -1,    -1,    -1,    -1,
     3225     486,    -1,    -1,  1569,  1570,   250,    -1,  1464,    -1,  1099,
     3226      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,    -1,
     3227      -1,    -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3228    1204,    -1,    -1,    -1,    -1,    -1,  1524,   432,    -1,    -1,
     3229      -1,    -1,   437,  1531,   598,    -1,    -1,  1504,    -1,    -1,
     3230     445,  1508,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3231      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
     3232      -1,    -1,   350,    -1,    -1,    -1,   471,    -1,    -1,    -1,
     3233    1537,    -1,  1539,    -1,    -1,    -1,    -1,    -1,    -1,   643,
     3234     644,   645,   578,   579,   489,    -1,   491,  1271,    -1,    -1,
     3235      -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,   662,    -1,
     3236    1567,  1568,    -1,    -1,    -1,    -1,  1290,  1291,  1575,  1576,
     3237      -1,    -1,    -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,
     3238    1304,    -1,    -1,  1223,    -1,    -1,    -1,   691,   533,   417,
     3239      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
     3240      -1,    -1,    -1,  1327,   432,    -1,    -1,    -1,    -1,   437,
     3241      -1,    -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,
     3242      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,
     3243      -1,   667,   736,    -1,    -1,   671,    -1,   432,    -1,    -1,
     3244      -1,    -1,    -1,   471,    -1,    -1,    -1,    -1,    -1,    -1,
     3245      -1,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
     3246      -1,   489,    -1,   491,    -1,    -1,    -1,    -1,   704,   773,
     3247      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3248      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3249      27,  1415,    -1,    -1,    -1,    -1,   491,    -1,   643,   644,
     3250     645,    -1,    39,    -1,    -1,   533,    -1,    -1,    -1,    -1,
     3251      -1,   815,    -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,
     3252      -1,   825,    -1,    -1,   828,    -1,    -1,    -1,    -1,   833,
     3253      67,   835,    -1,    -1,    -1,   680,   840,    -1,   533,    -1,
     3254    1464,    -1,    -1,    -1,    -1,    -1,   691,  1471,    -1,    -1,
     3255      -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3256      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3257     598,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3258      -1,    -1,    -1,   819,    -1,    -1,    -1,    -1,   733,    -1,
     3259      -1,   736,    -1,    -1,    -1,    26,    27,    28,   902,    -1,
     3260    1524,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
     3261      -1,    -1,    -1,    -1,    -1,   643,   644,   645,    -1,    -1,
     3262      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   773,    -1,
     3263      -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,
     3264      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   643,   644,
     3265     645,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3266      -1,    -1,    -1,   691,    -1,    -1,    97,   662,    99,   697,
     3267     815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3268     825,    -1,   986,   828,    -1,    -1,    -1,    -1,   833,    -1,
     3269     835,    -1,    -1,    -1,    -1,   840,   932,    -1,    -1,    -1,
     3270      -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,   736,     4,
     3271       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3272      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3273      25,    26,    27,    -1,    -1,  1039,  1040,    -1,  1042,  1043,
     3274      -1,   736,    -1,    -1,    39,   773,    -1,    -1,    -1,   180,
     3275      -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,  1062,   190,
     3276     191,    -1,    -1,    -1,   195,    -1,   197,   198,    -1,    -1,
     3277      -1,    -1,    67,    -1,    69,  1011,    71,    72,    -1,    74,
     3278      75,    76,    -1,    -1,    -1,    -1,    -1,   815,    83,    84,
     3279      -1,  1027,    -1,  1097,  1098,    -1,    -1,   825,    -1,    -1,
     3280     828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,    -1,
     3281      -1,    -1,   840,    -1,    10,    11,    12,    13,    14,    15,
     3282      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3283      26,    27,    28,   828,    30,    31,    32,    -1,    -1,    -1,
     3284     835,   986,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
     3285      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,    -1,    -1,
     3286      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1104,    -1,
     3287      -1,    67,    -1,    -1,   902,    -1,    72,    -1,    74,    75,
     3288      76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,
     3289      -1,    -1,    -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,
     3290    1204,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,    -1,
     3291      -1,    -1,    -1,   109,    -1,   111,    -1,  1062,    -1,    -1,
     3292      -1,    -1,  1226,   119,    -1,    45,    -1,    -1,    -1,    -1,
     3293      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
     3294      -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
     3295      -1,    -1,  1097,  1098,    -1,    -1,    -1,    -1,   986,    -1,
     3296      37,    38,    -1,    40,    -1,    -1,    -1,  1271,    -1,    -1,
     3297      -1,    -1,    -1,    -1,   969,  1279,  1280,  1281,    -1,    -1,
     3298      -1,    -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,    66,
     3299     110,   986,    -1,    -1,    -1,    72,   116,    -1,    -1,    76,
     3300    1304,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3301      87,  1039,  1040,    -1,  1042,  1043,  1161,    94,    -1,    -1,
     3302      -1,    -1,    -1,  1327,    -1,   145,    -1,    -1,    -1,    -1,
     3303      -1,    -1,   109,    -1,  1062,   155,    -1,    -1,    -1,   159,
     3304      -1,   118,   119,   120,   121,   122,   123,  1042,  1043,    -1,
     3305      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,
     3306      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,    -1,  1097,
     3307    1098,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3308      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,   208,    -1,
     3309      -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,    -1,
     3310     220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3311      -1,  1415,    -1,    -1,    -1,    -1,    -1,    -1,   238,   239,
     3312      -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,    -1,    -1,
     3313      -1,    -1,    -1,  1161,  1279,  1280,  1281,    -1,    -1,    -1,
     3314      -1,    -1,   262,    -1,    -1,  1290,  1291,    -1,    -1,    -1,
     3315     270,   582,   583,    -1,    -1,    -1,    -1,    -1,    -1,  1304,
     3316    1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,
     3317      -1,    -1,    -1,    -1,   294,    -1,  1204,   297,    -1,    -1,
     3318      -1,   612,  1327,    -1,   615,   616,    -1,   618,    -1,   620,
     3319     621,    -1,    -1,    -1,   625,   626,    -1,    -1,  1226,    -1,
     3320      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1203,  1204,
     3321      -1,  1239,    -1,  1241,    -1,    -1,    -1,    -1,    -1,    -1,
     3322    1524,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,   349,
     3323      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3324      -1,    -1,    -1,  1271,    -1,    -1,    64,    -1,    -1,    -1,
     3325    1245,  1279,  1280,  1281,    -1,    -1,    74,    -1,    76,    -1,
     3326      78,    -1,  1290,  1291,    -1,    -1,    -1,    85,    -1,    -1,
     3327    1415,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   709,   710,
     3328      -1,    -1,    -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,
     3329      -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,   116,  1327,
     3330     118,   119,   120,    -1,  1299,   425,   426,    -1,    -1,  1304,
     3331      -1,    -1,   432,    -1,    -1,    -1,    -1,    -1,    -1,  1464,
     3332      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,
     3333      -1,    -1,    -1,   453,    -1,    -1,   456,    -1,    -1,    -1,
     3334      -1,   159,   462,  1338,     3,     4,     5,     6,     7,     8,
    21053335       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2106       19,    20,    21,    22,    23,    24,    75,     0,    25,    26,
    2107       27,     0,   453,     0,   351,   351,   946,    30,     0,     0,
    2108      109,     0,     0,     0,     0,     0,     0,     0,    77,     0,
    2109        0,     0,  1236,     0,     0,     0,     0,     0,     0,     0,
    2110        0,   353,   353,   354,     0,    33,     0,     0,    77,     0,
    2111       36,     0,    37,    38,    39,    84,    77,     0,     0,     0,
    2112        0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
    2113      361,     0,     0,     0,     0,    84,   346,     0,   351,     0,
    2114        0,     0,   354,    84,     0,     0,     0,    42,     0,   155,
    2115        0,     0,     0,     0,     0,     0,     0,    44,     0,     0,
    2116      354,     0,    77,     0,     0,   353,     0,     0,     0,   361,
    2117        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2118        0,   220,     0,     0,     0,     0,     0,   361,     0,    84,
    2119        0,     0,     0,     0,     0,    54,     0,     0,     0,     0,
    2120        0,     0,     0,    72,   354,     0,     0,     0,   221,     0,
    2121        0,     0,     0,     0,     0,     0,   351,     0,   351,     0,
    2122        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2123       75,   361,     0,     0,     0,     0,     0,   346,     0,     0,
    2124        0,     0,     0,   353,     0,   353,     0,     0,   351,     0,
    2125        0,     0,     0,     0,     0,     0,   351,   351,   351,     0,
    2126        0,     0,     0,     0,     0,     0,     0,   351,   351,   354,
    2127        0,     0,     0,     0,     0,   353,     0,     0,     0,     0,
    2128        0,    72,     0,   353,   353,   353,     0,     0,     0,     0,
    2129        0,     0,     0,     0,   353,   353,   361,     0,     0,     0,
    2130        0,     0,   346,     0,   351,     0,     0,     0,    75,     0,
    2131        0,     0,     0,     0,   354,   354,   354,     0,     0,     0,
    2132        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2133        0,   353,     0,   354,     0,     0,     0,     0,     0,   124,
    2134        0,   361,   361,   361,     0,     0,     0,   346,   346,   346,
    2135        0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
    2136      361,     0,    77,     0,     0,     0,   346,     0,   354,     0,
    2137        0,     0,     0,     0,     0,     0,     0,     0,   361,  1033,
    2138        0,     0,     8,     9,    10,    11,    12,     0,     0,    84,
    2139        0,     0,   351,     0,     0,   361,     0,     0,     0,     0,
    2140        0,     0,     0,     0,    77,     0,     0,   354,   280,   281,
    2141       30,   282,     0,     0,     0,     0,     0,     0,     0,   353,
    2142        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2143        0,    84,     0,     0,   361,     0,     0,   283,    33,     0,
    2144      346,    72,     0,   284,   354,     0,     0,   285,    72,     0,
    2145      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2146        0,     0,     0,   124,     0,   292,     0,     0,    75,     0,
    2147        0,   361,     0,     0,     0,    75,     0,     0,     0,     0,
    2148      293,     0,   377,     0,     0,     0,   354,     0,     0,   295,
    2149      826,   297,   298,   299,   300,     0,   354,     0,     0,   354,
    2150        0,    72,     0,     0,   222,     0,   354,     0,     0,     0,
    2151        0,   354,     0,   361,     0,     0,     0,     0,     0,     0,
    2152        0,     0,     0,   361,     0,     0,   361,     0,    75,     0,
    2153        0,   223,   346,   361,     0,     0,     0,     0,   361,   346,
    2154        0,     0,     0,     0,     0,  -516,     0,     0,     1,     2,
     3336      19,    20,    21,    22,    23,    24,    25,    26,    27,   489,
     3337      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1524,
     3338      39,   501,    -1,    -1,    -1,    -1,    -1,  1415,    -1,    -1,
     3339      -1,    -1,    44,   513,    -1,   515,    -1,    -1,   518,    -1,
     3340     520,   521,   220,    -1,   222,   223,   224,    -1,    67,    -1,
     3341      69,    -1,    71,   533,    -1,    74,    75,    -1,    -1,    -1,
     3342    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3343      -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,    90,    -1,
     3344     258,    -1,    -1,  1471,   262,    -1,  1441,    -1,   100,    -1,
     3345      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,
     3346     278,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,  1464,
     3347      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,   598,    -1,
     3348     600,    -1,    -1,   603,    -1,    -1,    -1,    -1,    -1,    -1,
     3349      -1,    -1,    -1,    -1,    -1,    -1,  1524,    -1,    -1,    -1,
     3350      -1,    -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,   629,
     3351     328,    -1,    -1,    -1,   634,    -1,    -1,    -1,   170,    -1,
     3352      -1,    -1,    -1,   643,   644,   645,    -1,    -1,    -1,  1524,
     3353      -1,   349,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,
     3354      -1,   193,   662,    -1,   362,    -1,    -1,    -1,    -1,    -1,
     3355      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
     3356      -1,    -1,     7,    -1,   216,    10,    11,    12,    13,    14,
     3357      -1,    -1,    -1,    -1,   226,    -1,    -1,   697,    -1,    -1,
     3358      -1,    -1,    -1,    -1,    -1,    -1,    -1,   405,    -1,    -1,
     3359      -1,    -1,    37,    38,    39,    40,    -1,    -1,   718,   251,
     3360      -1,    -1,    -1,    -1,   256,   423,    -1,    -1,    -1,    -1,
     3361     428,    -1,   430,    -1,    -1,    -1,   736,   269,   738,    -1,
     3362      -1,    66,    67,   275,    -1,   277,    -1,    72,    -1,   447,
     3363      -1,    76,   450,   451,    79,    80,    81,    82,    83,    84,
     3364      -1,    86,    87,   295,    -1,    -1,    -1,    -1,   466,    94,
     3365      -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,    -1,
     3366      -1,    -1,   480,    -1,   109,    -1,   111,    -1,  1099,   487,
     3367      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
     3368      -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
     3369      -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3370      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,
     3371      -1,    -1,   832,    -1,    -1,   835,    -1,    -1,    -1,   371,
     3372      -1,    -1,    -1,   375,   376,    -1,   378,    -1,    -1,    -1,
     3373      -1,    -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,
     3374      -1,   393,    -1,    -1,    -1,    -1,    -1,     7,    -1,    -1,
     3375      10,    11,    12,    13,    14,    -1,    -1,    -1,   410,    -1,
     3376      -1,    -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,
     3377      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    39,
     3378      40,    -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,    -1,
     3379      -1,   443,  1223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3380      -1,    -1,   454,    -1,    -1,    -1,    66,    67,   928,    -1,
     3381      -1,    -1,    72,   631,    -1,    -1,    76,    -1,   636,    79,
     3382      80,    81,    82,    83,    84,   477,    86,    87,    -1,    -1,
     3383      -1,   483,    -1,    -1,    94,    -1,   488,    -1,    -1,    -1,
     3384      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3385     970,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
     3386     120,   121,   122,   123,    -1,    -1,   986,    -1,    -1,    -1,
     3387      -1,    -1,    -1,   525,    -1,    -1,    -1,    -1,    -1,    -1,
     3388      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   541,
     3389      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3390      -1,  1021,    -1,    -1,    -1,    -1,   724,    -1,    -1,    -1,
     3391      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3392     738,    -1,  1042,  1043,    -1,    -1,   578,    -1,    -1,    -1,
     3393      -1,    -1,    -1,    -1,    -1,   587,    -1,    -1,    -1,    -1,
     3394     758,    -1,   594,    -1,    -1,    37,    38,   599,    40,    -1,
     3395      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   610,    -1,
     3396      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3397      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
     3398      72,    -1,  1102,    -1,    76,    -1,    -1,    79,    80,    81,
     3399      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,   651,
     3400      -1,   819,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3401      -1,    -1,    -1,    -1,   832,    -1,    -1,   109,    -1,   111,
     3402      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
     3403     122,   123,    -1,   851,    -1,   687,    -1,    -1,    -1,    -1,
     3404      -1,  1161,    -1,    -1,     3,     4,     5,     6,     7,     8,
     3405       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3406      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3407      -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
     3408      39,    40,    -1,  1203,    -1,    -1,    -1,    -1,    -1,    -1,
     3409     742,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3410     752,   753,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
     3411      69,    -1,    71,    72,   766,    74,    75,    76,    -1,    -1,
     3412     938,  1241,   154,   155,    83,    84,    -1,    -1,    -1,    -1,
     3413      -1,   783,    -1,   785,    -1,    -1,    -1,   789,    -1,    -1,
     3414      -1,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
     3415     109,    -1,   111,    -1,    -1,    -1,   188,    -1,    -1,    -1,
     3416     119,    -1,    -1,   195,    -1,    -1,    -1,    -1,    -1,    -1,
     3417    1290,  1291,    -1,    -1,   992,    -1,    -1,    -1,    -1,  1299,
     3418      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3419      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3420      30,    31,    32,   855,    -1,    -1,  1024,    -1,    -1,    39,
     3421     862,    -1,    -1,    -1,    -1,    -1,    -1,  1035,    -1,    -1,
     3422      -1,    -1,    -1,   875,    -1,   877,    -1,    -1,    -1,    -1,
     3423      -1,    -1,    -1,    -1,    -1,   267,    -1,    67,    -1,   891,
     3424      -1,    -1,    72,    -1,    74,    75,   898,    -1,    -1,    -1,
     3425      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,   910,    -1,
     3426      -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3427      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,
     3428      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3429      -1,   323,    -1,    -1,    -1,  1415,    -1,    -1,  1116,   331,
     3430     332,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
     3431      -1,    -1,   344,    -1,    -1,    -1,   348,    -1,    -1,    -1,
     3432      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3433      -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,   370,    -1,
     3434      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3435      -1,    -1,    -1,  1473,    -1,  1475,    -1,    -1,    -1,    -1,
     3436      37,    38,    -1,    40,    -1,   397,    -1,    -1,  1020,   401,
     3437      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3438      -1,    -1,    -1,    -1,    -1,  1203,    -1,    -1,    -1,    66,
     3439    1510,   145,  1512,    -1,    -1,    72,    -1,    74,    75,    76,
     3440     432,   155,    79,    80,    81,    82,    83,    84,    -1,    86,
     3441      87,    -1,    -1,   167,   168,    -1,    -1,    94,    -1,    -1,
     3442    1540,    -1,    -1,   455,  1076,    -1,    -1,    -1,    -1,    -1,
     3443      -1,  1083,   109,    -1,   111,    -1,   113,   114,    -1,    -1,
     3444      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
     3445      -1,    -1,    -1,    -1,   486,    -1,    -1,   489,    -1,    -1,
     3446    1112,    -1,    -1,    -1,    -1,  1117,    -1,    -1,    -1,    -1,
     3447      -1,    -1,    -1,  1125,    -1,    -1,    -1,    -1,    -1,    -1,
     3448      -1,  1299,    -1,    -1,   238,    -1,    -1,    -1,    -1,    -1,
     3449      -1,    -1,    -1,    -1,    -1,    -1,    -1,   529,    -1,    -1,
     3450     532,   533,    -1,    -1,  1156,    -1,    -1,    -1,    -1,   263,
     3451      -1,    -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,  1171,
     3452      -1,  1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3453      -1,    -1,    -1,    -1,    -1,  1187,  1188,    -1,    -1,    -1,
     3454      -1,    -1,    -1,    -1,    -1,    -1,   578,   579,    -1,    -1,
     3455      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1209,    -1,    -1,
     3456      -1,    -1,    -1,    -1,    -1,   597,   598,    -1,   600,    -1,
     3457      -1,    -1,    -1,    -1,    -1,    -1,    -1,   609,    -1,   611,
     3458     612,    -1,    -1,    -1,  1236,    -1,   618,    -1,    -1,   281,
     3459      -1,   283,   284,    -1,    -1,    -1,   628,   629,    -1,   291,
     3460     292,    -1,   634,    -1,   296,   297,    -1,    -1,    -1,    -1,
     3461      -1,   643,   644,   645,    -1,    -1,   308,    -1,    -1,    -1,
     3462      -1,    -1,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
     3463     662,    -1,    -1,    -1,    -1,   667,   668,    -1,    -1,   671,
     3464     672,    -1,    -1,    -1,    -1,    -1,   678,    -1,    -1,    -1,
     3465      -1,    -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3466      -1,    -1,    -1,    -1,   696,   697,   698,    -1,   700,    -1,
     3467      -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    37,
     3468      38,  1333,    40,  1335,    -1,    -1,    -1,    -1,   380,    -1,
     3469      -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,
     3470      -1,    -1,    -1,    -1,   736,   737,    -1,    -1,    66,    -1,
     3471      -1,    -1,    -1,    -1,    72,    -1,  1368,    -1,    76,    -1,
     3472      -1,    79,    80,    81,    82,    83,    84,   481,    86,    87,
     3473      -1,    -1,  1384,  1385,    -1,    -1,    94,  1555,    -1,    -1,
     3474     772,   773,    -1,    -1,  1396,   777,   778,  1399,    -1,    -1,
     3475      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
     3476     118,   119,   120,   121,   122,   123,   520,    -1,    -1,  1421,
     3477      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1430,   533,
     3478      -1,  1433,    -1,  1435,  1436,  1437,   540,   819,    -1,   543,
     3479      -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,    -1,    -1,
     3480     554,   555,   834,   835,    -1,    -1,    -1,   839,    -1,   841,
     3481      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   851,
     3482      -1,    -1,   576,    -1,    -1,  1477,    -1,  1479,    -1,    -1,
     3483    1482,    -1,   586,    -1,    -1,    -1,    -1,    -1,    -1,   593,
     3484      -1,    -1,    -1,    -1,   598,  1497,    -1,    -1,    -1,    -1,
     3485      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3486      -1,    -1,    -1,    -1,    -1,   557,   558,   559,   560,   561,
     3487     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
     3488     572,   573,   574,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3489      -1,    -1,   924,    -1,   648,    -1,    -1,    -1,    -1,    -1,
     3490     932,    -1,    -1,   657,    -1,    -1,   938,    -1,   600,    -1,
     3491      -1,    -1,    -1,    -1,   946,    -1,    -1,    -1,    -1,    -1,
     3492      -1,    -1,    -1,    -1,    -1,    -1,    -1,   959,   960,    -1,
     3493      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3494      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
     3495      -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,    -1,
     3496     992,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3497      19,    20,    21,    22,    23,    24,    25,    26,    27,  1011,
     3498    1012,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1021,
     3499      39,    40,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
     3500    1032,    -1,    -1,    -1,    -1,    -1,    -1,   699,    -1,    -1,
     3501    1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    67,   773,
     3502      -1,   775,    -1,    -1,    -1,    74,    75,   781,    -1,   721,
     3503      -1,    -1,    -1,    -1,   788,    -1,    -1,    -1,    -1,    -1,
     3504      -1,    -1,   734,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3505      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3506      -1,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
     3507     119,  1103,  1104,  1105,    -1,    -1,    -1,    -1,   832,   833,
     3508      -1,   835,    -1,    -1,  1116,    -1,    -1,    -1,   780,    -1,
     3509      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
     3510      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3511      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3512     812,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,
     3513      -1,    -1,    -1,    -1,    -1,   827,   890,    -1,    -1,    -1,
     3514     894,    -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,
     3515       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3516      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3517      27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,
     3518      -1,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,  1221,
     3519      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3520      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,  1241,
     3521      67,    -1,    69,    -1,    71,    72,   970,    74,    75,    76,
     3522      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
     3523      -1,    -1,   986,   987,    -1,    -1,    -1,    -1,    -1,   993,
     3524      -1,    -1,    -1,    -1,    -1,   999,    -1,    -1,  1002,    -1,
     3525    1004,    -1,   109,    -1,   111,    -1,    -1,    -1,  1290,  1291,
     3526      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3527    1024,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3528      -1,  1035,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,
     3529      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3530      -1,    -1,    -1,  1057,    -1,  1059,    -1,    -1,    -1,    -1,
     3531      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1009,    -1,    -1,
     3532    1074,  1075,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1021,
     3533      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3534      -1,  1095,    -1,    -1,     3,     4,     5,     6,     7,     8,
     3535       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3536      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3537    1062,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
     3538      39,    40,    -1,  1415,    -1,    -1,    -1,    -1,  1142,    -1,
     3539      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3540      -1,    -1,    -1,    -1,    -1,    64,    -1,  1161,    67,    -1,
     3541      69,    -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,
     3542      -1,    -1,  1176,  1177,    83,    84,    -1,    -1,    -1,    -1,
     3543      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
     3544      -1,    -1,  1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3545     109,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
     3546     119,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
     3547      -1,    76,    -1,  1505,    79,    80,    81,    82,    83,    84,
     3548      -1,    86,    87,    -1,    -1,    -1,  1178,    -1,    -1,    94,
     3549      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1530,  1531,
     3550    1192,  1193,    -1,  1257,   109,    -1,   111,    -1,    -1,    -1,
     3551      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
     3552      -1,    -1,    -1,  1555,    -1,     3,     4,     5,     6,     7,
     3553       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3554      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3555      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
     3556      38,    39,    40,    41,  1318,    43,  1320,    -1,    46,    47,
     3557      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
     3558      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    67,
     3559      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3560      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3561      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     3562      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3563      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
     3564     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
     3565     128,    -1,  1406,    -1,   132,    -1,    -1,    -1,    -1,    -1,
    21553566       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    21563567      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2157       23,    24,     0,    77,    25,    26,    27,    28,     0,     0,
    2158       29,     0,     0,    30,    31,     0,     0,     0,     0,     8,
    2159        9,    10,    11,    12,     0,     8,     9,    10,    11,    12,
    2160       84,     0,     0,     0,     0,     0,    54,     0,    32,     0,
    2161        0,    33,   163,    34,     0,    35,    36,    30,    37,    38,
    2162       39,     0,     0,    30,     0,     0,     0,    40,    41,     0,
    2163        0,   216,     0,     0,     0,     0,     0,     0,     0,     0,
    2164        0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
    2165       36,    33,     0,    42,    39,    43,    36,   354,     0,     0,
    2166       39,    40,    41,    44,     0,     0,     0,    40,    41,     0,
    2167        0,     0,     0,    54,     0,     0,     0,   163,     0,     0,
    2168        0,     0,     0,   270,   361,     0,     0,    42,     0,     0,
    2169      346,     0,     0,   743,     0,     0,     0,   145,     0,     0,
    2170        0,     0,     0,   744,     0,     0,     0,     0,     0,     0,
    2171      354,   354,   163,   354,   354,     0,     0,     0,     0,     0,
    2172        0,     0,   367,     0,     0,     0,   373,     0,     0,     0,
    2173        0,     0,     0,    77,     0,     0,     0,   361,   361,     0,
    2174      361,   361,     0,     0,     0,     0,   346,   346,     0,     0,
    2175        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2176       84,     0,     0,     0,     0,     0,    54,     0,   354,   354,
    2177        0,     0,     0,     0,     0,   163,     0,     0,     0,     0,
    2178        0,     0,     0,     0,     0,     0,     0,   216,     0,     0,
    2179        0,     0,     0,     0,     0,   361,   361,     0,     0,     0,
    2180        0,   280,   281,     0,   282,   163,   460,     8,     9,    10,
     3568      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3569      33,    -1,    -1,    36,    37,    38,    39,    40,    -1,    -1,
     3570      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3571    1402,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
     3572      -1,    -1,    -1,    66,    67,    -1,    69,  1419,    71,    72,
     3573      -1,    74,    75,    76,  1488,    -1,    79,    80,    81,    82,
     3574      83,    84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,
     3575      -1,    94,    76,    -1,    -1,    79,    80,    81,    82,    83,
     3576      84,    -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,
     3577      94,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
     3578     123,    -1,    -1,    -1,    -1,   109,  1540,   111,    -1,   132,
     3579     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     3580    1492,  1493,     3,     4,     5,     6,     7,     8,     9,    10,
    21813581      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2182       21,    22,    23,    24,     0,     0,    25,    26,    27,   373,
    2183      283,     0,   354,     0,     0,    30,   284,   163,     0,     0,
    2184      285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
    2185      290,   291,     0,     0,     0,     0,     0,     0,   292,   361,
    2186        0,   460,     0,    33,   163,     0,     0,     0,     0,     0,
    2187      205,    38,     0,   512,     0,   222,     0,     0,     0,     0,
    2188        0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
    2189        0,     0,     0,     0,     0,     0,     0,    77,     0,     0,
    2190        0,     0,   223,     0,     0,     0,     0,    54,    54,     0,
    2191      354,   605,   354,     0,     0,   269,   629,     0,     0,     0,
    2192        0,     0,     0,     0,    84,     0,     0,     0,     0,     0,
    2193       54,     0,     0,     0,     0,     0,     0,   361,     0,   361,
    2194        0,     0,   354,     0,     0,     0,     0,     0,     0,    54,
    2195      354,   354,   354,     0,     0,     0,     0,     0,     0,     0,
    2196        0,   354,   354,     0,     0,     0,     0,     0,     0,   361,
    2197        0,     0,     0,     0,     0,    77,     0,   361,   361,   361,
    2198        0,     0,     0,     0,     0,     0,     0,     0,   361,   361,
    2199        0,     0,   163,   163,   346,   346,     0,     0,   354,   367,
    2200        0,     0,    84,    54,     0,     0,     0,     0,    54,     0,
    2201        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2202      460,     0,     0,   460,     0,   361,     0,     0,     0,   460,
    2203        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2204        0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
    2205        0,     0,     0,     0,     0,     0,   740,     0,     0,     0,
    2206      209,     0,     0,     0,     0,     0,     0,     0,   163,     0,
    2207      229,     0,   233,     0,   235,     0,     0,     0,     0,     0,
    2208      460,   244,   460,     0,     0,   460,   354,   163,   460,     0,
    2209        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2210      367,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2211        0,     0,   209,   361,   233,   235,   244,     0,     0,   346,
    2212        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2213        0,     0,     0,     0,     0,    77,     0,   154,     0,     0,
    2214        0,     0,    77,     0,     0,    54,     0,     0,     0,     0,
    2215        0,     0,     0,   163,     0,   209,     0,     0,     0,     0,
    2216        0,     0,    84,     0,     0,   367,     0,   605,    54,    84,
    2217      836,     0,     0,     0,     0,    54,     0,     0,     0,     0,
    2218        0,     0,     0,   249,     0,     0,     0,     0,     0,     0,
    2219        0,     0,     0,   254,     0,    77,   605,     0,     0,     0,
    2220        0,   605,     0,     0,     0,     0,     0,     0,     0,     0,
    2221      367,   367,   367,     0,     0,     0,   209,     0,   233,   235,
    2222      244,     0,    84,     0,     0,     0,     0,     0,    54,   367,
    2223        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2224       17,    18,    19,    20,    21,    22,    23,    24,  -294,   154,
    2225       25,    26,    27,     0,   209,     0,     0,     0,   209,    30,
    2226        0,     0,     0,   384,   740,     0,     0,     0,     0,     0,
    2227        0,     0,     0,     0,   503,     0,     0,     0,     0,     0,
    2228        0,     0,     0,     0,     0,   460,   416,    33,     0,     0,
    2229        0,     0,     0,     0,    37,    38,     0,     0,  -294,     0,
    2230      431,     0,     0,   367,     0,   960,     0,     0,     0,   436,
    2231        0,     0,     0,     0,     0,     0,     0,     0,     0,   444,
    2232        0,     0,     0,     0,   209,     0,     0,     0,     0,   642,
    2233        0,   337,   280,   281,     0,   282,     0,     0,     0,   109,
    2234      740,     0,     0,     0,   470,   209,     0,     0,     0,   480,
    2235      233,   235,     0,     0,     0,     0,     0,     0,   244,     0,
    2236        0,   283,   488,     0,     0,     0,     0,   284,   498,     0,
    2237      502,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2238        0,   290,   291,     0,     0,     0,     0,     0,   532,   292,
    2239        0,     0,     0,     0,     0,   367,     0,     0,     0,   629,
    2240        0,   209,   367,     0,   293,     0,   377,     0,     0,   378,
    2241        0,     0,     0,   295,   379,   297,   298,   299,   300,   209,
    2242        0,     0,     0,     0,   209,     0,   209,     0,     0,     0,
    2243        0,   592,     0,     0,     0,     0,   597,     0,     0,     0,
    2244        0,     0,     0,   209,     0,     0,   209,   209,     0,     0,
    2245        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2246        0,     0,   209,     0,   643,     0,     0,     0,   644,   645,
    2247        0,   647,     0,     0,     0,     0,   209,     0,   659,   660,
    2248        0,   661,   662,   209,   663,     0,   664,     0,     0,     0,
    2249        0,     0,     0,  1176,     0,   460,     8,     9,    10,    11,
    2250       12,     0,     0,   592,     0,     0,     0,     0,     0,     0,
    2251        0,   679,     0,     0,     0,     0,     0,     0,     0,     0,
    2252        0,     0,   280,   281,    30,   282,     0,     0,     0,     0,
    2253        0,     0,     0,     0,     0,     0,   690,   163,     0,     0,
    2254        0,     0,     0,     0,     0,     0,     0,   696,     0,     0,
    2255        0,   283,    33,   367,     0,     0,     0,   284,     0,     0,
    2256        0,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2257      732,   290,   291,     0,     0,     0,   735,     0,     0,   292,
    2258        0,   470,     0,     0,     0,     0,     0,     0,   605,     0,
    2259        0,     0,     0,     0,   293,     0,   377,     0,     0,   209,
    2260        0,     0,     0,   295,  1177,   297,   298,   299,   300,   367,
    2261      367,     0,     0,     0,     0,     0,     0,     0,   772,     0,
    2262        0,     0,     0,     0,     0,     0,     0,   209,   513,     0,
    2263      515,   518,   209,     0,   787,     0,     0,     0,   521,   522,
    2264        0,     0,     0,   515,   515,     0,     0,     0,     0,     0,
    2265        0,     0,     0,     0,     0,   515,     0,     0,     0,     0,
    2266        0,     0,     0,     0,     0,   280,   281,     0,   282,   460,
    2267        0,   814,     0,     0,     0,     0,     0,     0,     0,     0,
    2268      824,     0,     0,     0,     0,     0,     0,   827,     0,     0,
    2269        0,   515,   834,     0,   283,     0,     0,     0,     0,     0,
    2270      284,     0,     0,   849,   285,     0,     0,   286,   287,   288,
    2271      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2272      209,     0,   292,     0,     0,     0,     0,   515,   740,     0,
    2273        0,     0,     0,     0,   209,     0,     0,   293,     0,   377,
    2274        0,     0,     0,     0,   889,   811,   295,   379,   297,   298,
    2275      299,   300,     0,     0,   503,     0,     0,     0,     0,     0,
    2276        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2277      216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2278      834,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     3582      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3583      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
     3584      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3585      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3586      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3587      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3588      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3589      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3590      -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
     3591     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
     3592     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3593      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3594      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3595      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3596      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3597      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3598      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3599      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
     3600      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3601      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3602      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3603     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
     3604     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3605      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3606      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3607      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3608      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3609      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3610      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3611      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
     3612      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3613      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3614      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3615     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
     3616     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3617      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3618      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3619      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3620      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3621      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3622      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3623      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3624      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3625      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3626      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3627     111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
     3628     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3629      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3630      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3631      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3632      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3633      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3634      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3635      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3636      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3637      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3638      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3639     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3640     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3641      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3642      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3643      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3644      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3645      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3646      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3647      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3648      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3649      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3650      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3651     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3652     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3653      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3654      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3655      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3656      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3657      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3658      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3659      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3660      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3661      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3662      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3663     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3664     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
     3665      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3666      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3667      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3668      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3669      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3670      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
     3671      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3672      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3673      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3674      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3675     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     3676     121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
     3677      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3678      20,    21,    22,    23,    24,    25,    26,    27,    -1,   119,
     3679      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3680      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3681      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3682      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
     3683      39,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
     3684      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
     3685      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     3686      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
     3687      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3688       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    22793689      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2280       23,    24,  -294,     0,    25,    26,    27,     0,   740,     0,
    2281        0,     0,     0,    30,     0,   209,     0,     0,     0,     0,
    2282        0,     0,     0,     0,     0,     0,     0,     0,   209,     0,
    2283        0,     0,     0,     0,     0,   249,     0,     0,     0,     0,
    2284        0,    33,     0,     0,     0,   967,   968,   209,    37,    38,
    2285        0,     0,  -294,     0,     0,     0,     0,   367,   367,   985,
    2286        0,     0,     0,     0,     0,     0,   216,     0,     0,     0,
    2287        0,     0,     0,     0,     0,     0,  1000,     0,  1001,     0,
    2288        0,     0,  1005,   642,     0,   337,     0,     0,     0,     0,
    2289        0,     0,     0,   633,     0,     0,     0,     0,     0,     0,
    2290        0,     0,     0,     0,   515,   515,   515,   515,   515,   515,
    2291      515,   515,   515,   515,   515,   515,   515,   515,   515,   515,
    2292      515,   515,     0,     0,     0,     0,     0,     0,     0,     0,
    2293      280,   281,     0,   282,   209,     0,     0,     0,     0,     0,
    2294        0,     0,     0,     0,     0,     0,     0,   515,  1038,     0,
    2295        0,     0,     0,     0,     0,  1039,     0,     0,     0,   283,
    2296      209,     0,     0,     0,     0,   284,     0,     0,  1041,   285,
    2297     1042,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2298      291,     0,   367,     0,  1054,     0,     0,   292,   209,     0,
    2299        0,  1058,     0,     0,     0,     0,     0,     0,     0,     0,
    2300        0,     0,   293,  1096,   377,     0,  1097,     0,     0,   780,
    2301        0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
    2302      209,     0,     0,     0,   597,     0,     0,     0,     0,     0,
    2303        0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
    2304      460,     0,   460,     0,     0,     0,   515,     0,     8,     9,
    2305       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2306       20,    21,    22,    23,    24,  -294,     0,     0,   515,     0,
    2307        0,     0,     0,     0,     0,     0,    30,   460,     0,   460,
    2308        0,   515,     8,     9,    10,    11,    12,    13,    14,    15,
    2309       16,    17,    18,    19,    20,    21,    22,    23,    24,  -294,
    2310        0,    25,    26,    27,    33,     0,     0,   163,     0,     0,
    2311       30,     0,   209,  1160,     0,  -294,     0,     0,     0,   340,
    2312      362,     0,     0,     0,     0,     0,     0,   515,     0,     0,
    2313        0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
    2314        0,     0,     0,    36,     0,   335,   336,    39,     0,  -294,
    2315        0,     0,     0,   412,    40,    41,     0,     0,     0,   515,
    2316      412,     0,     0,     0,     0,     0,     0,     0,     0,   532,
    2317        0,     0,     0,     0,   515,     0,  1225,     0,     0,     0,
    2318      642,     0,   337,     0,     0,     0,     0,     0,     0,     0,
    2319      633,   280,   281,     0,   282,     0,     0,     0,     0,   209,
    2320        0,     0,     0,     0,     0,  1238,     0,     0,     0,     0,
    2321     1240,     0,     0,     0,     0,     0,     0,     0,  1244,     0,
    2322      283,     0,     0,     0,     0,     0,   648,     0,   137,   138,
    2323      285,     0,   412,   286,   649,   288,   289,    40,    41,     0,
    2324      290,   291,     0,     0,     0,     0,     0,     0,   292,  1270,
    2325        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2326        0,  1278,     0,   293,  1279,   650,  1280,   651,   378,     0,
    2327        0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
    2328     1289,  1290,     0,     0,     0,     0,     0,     0,   412,     0,
    2329        0,     0,     0,     0,     0,   209,   412,   588,     0,   412,
    2330      591,     0,  1303,     0,     0,     0,     0,     0,     0,   362,
    2331        0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
    2332        0,     0,     0,     0,     0,   515,     0,     0,     0,  1326,
    2333      320,     0,   639,     0,     0,   340,     0,     0,     0,     0,
    2334      344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2335        0,     0,   380,   380,     0,     0,   515,     0,     0,     0,
    2336        0,     0,   412,     0,     0,     0,   412,     0,   515,     2,
    2337      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2338       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2339       23,    24,     0,     0,    25,    26,    27,   362,     0,     0,
    2340        0,     0,     0,    30,     0,     0,     0,     0,     0,   515,
    2341        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2342      412,     0,     0,   320,     0,     0,  1396,     0,  1397,     0,
    2343        0,    33,     0,    34,     0,    35,     0,     0,    37,    38,
    2344        0,  1406,     0,  1407,     0,     0,     0,     0,   484,     0,
    2345        0,   412,     0,     0,   362,     0,     0,     0,     0,     0,
    2346        0,  1414,     0,     0,     0,     0,     0,     0,     0,     0,
    2347        0,     0,     0,     0,  -399,   686,     0,  1432,  1434,     0,
    2348        0,   515,     0,   633,     0,     0,     0,     0,     0,  1440,
    2349        0,     0,  1244,     0,   412,     0,     0,   340,   362,     0,
    2350        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2351        0,     0,     0,     0,  1463,     0,     0,     0,     0,     0,
    2352        0,     0,     0,  1470,     0,   515,  1472,     0,  1474,  1476,
    2353     1478,     0,     0,     0,     0,     0,     0,     0,     0,   515,
    2354      515,     0,     0,   412,   412,     0,     0,     0,     0,     0,
    2355        0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
    2356        0,     0,   829,   362,   380,   362,     0,     0,     0,     0,
    2357     1509,     0,  1511,     0,   621,  1244,   621,   621,     0,     0,
    2358        0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
    2359     1523,     0,     0,   868,   362,     0,     0,     0,     0,   362,
    2360        0,     0,     0,     0,     0,     0,     0,     0,   362,   362,
    2361      362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2362        0,     0,     0,     0,     0,     0,     0,   362,     0,     0,
    2363        0,     0,   412,   911,     0,     0,   412,   914,     0,     0,
    2364        0,     0,     0,   916,     0,     0,     0,     0,     0,     0,
    2365        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2366        0,   340,   362,   412,     0,   412,   734,     0,     0,   412,
    2367        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2368       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2369       25,    26,    27,     0,     0,     0,     0,     0,     0,    30,
    2370        0,   362,   621,     0,     0,   768,     0,     0,     0,     0,
    2371        0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
    2372        0,     0,     0,     0,     0,   768,     0,    33,   768,     0,
    2373        0,     0,     0,     0,   205,    38,     0,   340,   362,   791,
    2374      792,     0,   412,   412,     0,     0,     0,     0,     0,   515,
    2375        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2376        0,   813,     0,     0,     0,     0,   515,     0,     0,     0,
    2377        0,   822,     0,     0,     0,     0,     0,     0,   344,   628,
    2378        0,     0,     0,   781,   412,     0,     0,     0,     0,     0,
    2379        0,     0,     0,   362,     0,     0,     0,     0,     0,   829,
    2380      362,     0,     0,     0,   621,     0,   621,     0,     0,     0,
    2381        0,     0,     0,     0,     0,     0,   621,     0,     0,     0,
    2382        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2383        0,     0,     0,   888,     0,     0,     0,     0,     0,   515,
    2384      515,     0,   380,     0,     0,     0,     0,     0,     0,     1,
    2385        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    2386       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2387       22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
    2388        0,    29,   344,     0,    30,    31,     0,     0,     0,   829,
    2389        0,     0,     0,     0,     0,     0,     0,   412,   280,   281,
    2390        0,   282,     0,   412,     0,     0,     0,     0,     0,    32,
    2391        0,   412,    33,     0,    34,     0,    35,    36,     0,    37,
    2392       38,    39,     0,     0,   621,   621,     0,   283,    40,    41,
    2393        0,     0,     0,   284,     0,     0,     0,   285,     0,     0,
    2394      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2395        0,   362,     0,     0,    42,   292,    43,   412,   781,     0,
    2396      990,     0,     0,     0,    44,     0,   995,     0,     0,     0,
    2397      293,     0,   377,  1004,     0,   992,   412,  1157,     0,   295,
    2398      379,   297,   298,   299,   300,     0,   362,     0,     0,     0,
    2399        0,     0,   412,  1169,     0,   621,   621,  1174,     0,     0,
    2400        0,     0,     0,     0,     0,     0,     0,   362,   362,     0,
    2401        0,     0,     0,     0,     0,     0,     0,  1021,  1022,     0,
    2402      344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2403        0,     0,     0,     0,     0,   344,     0,     0,     0,     0,
    2404        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2405        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2406        0,     0,     0,     0,     0,     0,     0,     0,   829,   412,
    2407     1237,     0,     0,     0,     0,  1052,     0,     0,     0,   380,
    2408        0,   621,     0,     0,     0,     0,     1,     2,   204,     4,
     3690      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
     3691      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
     3692      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3693      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3694      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
     3695      -1,    74,    75,    -1,    -1,    78,     3,     4,     5,     6,
     3696       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3697      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3698      27,    -1,    -1,    30,    31,    32,    33,    -1,   111,    36,
     3699      -1,    -1,    39,    -1,    -1,    -1,   119,    -1,    -1,    -1,
     3700      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3701      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3702      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     3,
     3703       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3704      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3705      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3706      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3707      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3708      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3709      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
     3710      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
     3711      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3712      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3713      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
     3714      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3715      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3716      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
     3717      71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
     3718      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
     3719      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3720      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3721     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,
    24093722       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    24103723      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2411        0,     0,    25,    26,    27,    28,     0,     0,    29,   280,
    2412      281,    30,  1061,  1062,     0,  1063,   362,     0,  1064,  1065,
    2413     1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
    2414        0,     0,     0,  1073,  1074,     0,    32,     0,   283,    33,
    2415        0,    34,     0,    35,   648,   320,    37,    38,   285,     0,
    2416        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2417        0,  1138,  1139,     0,     0,     0,   292,     0,   380,     0,
    2418        0,     0,   280,   281,   995,   282,   340,  1148,     0,   768,
    2419        0,   293,     0,  1075,     0,     0,   169,     0,     0,     0,
    2420      295,   296,   297,   298,   299,   300,   362,     0,     0,  1164,
    2421     1076,   283,     0,     0,  -129,     0,     0,   284,     0,     0,
    2422     1179,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2423        0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
    2424        0,     0,   380,     0,  1197,     0,     0,     0,     0,     0,
    2425        0,     0,     0,     0,   293,   362,   362,     0,     0,   995,
    2426      995,     0,     0,   295,   379,   297,   298,   299,   300,     0,
    2427        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2428     1229,     0,     0,     0,     0,     0,     0,     0,     1,     2,
    2429      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3724      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3725      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,
     3726      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3727      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3728      31,    32,    67,    -1,    69,    -1,    71,    -1,    39,    74,
     3729      75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
     3730      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3731      22,    23,    24,    25,    26,    27,    67,    -1,    30,    31,
     3732      32,    -1,    -1,    74,    75,   110,   111,    39,    -1,    -1,
     3733      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3734      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3735      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,   109,    71,
     3736     111,    -1,    74,    75,    -1,    -1,    -1,    -1,   119,    -1,
     3737      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3738      -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,
     3739      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
     3740      -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,
     3741       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3742      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3743      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3744      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,    11,
     3745      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3746      22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
     3747      32,    67,    -1,    69,    -1,    71,    -1,    39,    74,    75,
     3748      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3749      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3750      96,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
     3751      72,    -1,    74,    75,    76,   111,    78,    -1,    -1,    -1,
     3752      -1,    83,    84,   119,     4,     5,     6,     7,     8,     9,
     3753      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3754      20,    21,    22,    23,    24,    25,    26,    27,    -1,   111,
     3755      30,    31,    32,    -1,    -1,    -1,    -1,   119,    -1,    39,
     3756      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3757      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3758      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     3759      -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,     6,
     3760       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3761      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3762      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3763      -1,   111,    39,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3764      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3765      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3766      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
     3767       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3768      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3769      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3770      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3771      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3772      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3773      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
     3774      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
     3775      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3776      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3777      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
     3778      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
     3779      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3780      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
     3781      71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
     3782      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3783      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3784      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
     3785     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
     3786      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3787      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3788      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3789      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3790      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3791      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
     3792      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
     3793      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3794      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3795      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3796      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3797      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3798      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
     3799      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3800      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3801      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3802      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
     3803     111,   112,    -1,    83,    84,    -1,    -1,   118,   119,   120,
     3804     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
     3805      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3806      27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,   119,
     3807      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
     3808      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3809      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
     3810      67,    -1,    -1,    39,    40,    72,    -1,    74,    75,    76,
     3811      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3812      87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
     3813      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
     3814      -1,    -1,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
     3815      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
    24303816      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2431       23,    24,     0,     0,    25,    26,    27,    28,     0,     0,
    2432       29,   280,   281,    30,   282,     0,     0,   995,     0,     0,
    2433        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2434      280,   281,     0,   282,     0,     0,   888,     0,     0,     0,
    2435      283,    33,     0,    34,     0,    35,   284,     0,    37,    38,
    2436      285,  1281,  1282,   286,   287,   288,   289,    40,    41,   283,
    2437      290,   291,     0,     0,     0,   284,     0,     0,   292,   285,
    2438      362,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2439      291,     0,     0,   293,     0,  1075,     0,   292,     0,     0,
    2440        0,     0,   295,   296,   297,   298,   299,   300,     0,     0,
    2441        0,     0,   293,     0,   377,     0,  -129,     0,     0,     0,
    2442        0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
    2443        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2444        0,     0,   995,     0,     0,     0,     1,     2,   204,     4,
     3817      23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
     3818      -1,    -1,    -1,   119,    37,    38,    39,    40,    -1,    -1,
     3819      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3820      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3821      25,    26,    27,    66,    67,    30,    31,    32,    -1,    72,
     3822      -1,    74,    75,    76,    39,    -1,    79,    80,    81,    82,
     3823      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
     3824      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3825      -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
     3826      75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
     3827     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3828      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3829      -1,    30,    31,    32,   109,    -1,   111,    -1,    37,    38,
     3830      39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,    10,
     3831      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3832      21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
     3833      31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
     3834      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3835      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
     3836      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
     3837     109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
     3838     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
     3839      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3840      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3841     111,    -1,    37,    38,    39,    40,    -1,    -1,   119,    -1,
     3842      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3843      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3844      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3845      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3846      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3847      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3848      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
     3849      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
     3850      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3851      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3852      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3853      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3854      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3855      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
     3856      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3857      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3858      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
     3859      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
     3860     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
     3861     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3862      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3863      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3864      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3865      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3866      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3867      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3868      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3869      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
     3870      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
     3871      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
     3872      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     3873      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,   109,
     3874      -1,   111,    -1,    83,    84,    -1,    -1,    -1,    -1,   119,
     3875      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3876      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3877      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3878      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3879      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
     3880      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3881      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3882      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
     3883      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
     3884      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
     3885      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3886      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     3887      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,   109,
     3888      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3889      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3890      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3891      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
     3892      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3893      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3894      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3895      40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3896      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3897      -1,    30,    31,    32,    -1,    -1,    -1,    67,    -1,    -1,
     3898      39,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
     3899      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3900      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     3901      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,
     3902      -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,   119,
     3903      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3904      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3905      27,    -1,   111,    30,    31,    32,    -1,    -1,    -1,    -1,
     3906     119,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
     3907      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3908      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3909      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
     3910      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3911      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3912      -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,    75,
     3913      -1,    39,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
     3914      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3915      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
     3916      -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,    -1,
     3917      -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
     3918      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3919      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3920      -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,    -1,
     3921      -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
     3922      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3923      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
     3924      75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
     3925      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3926      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3927      67,    -1,    39,    -1,    -1,    -1,   111,    74,    75,    -1,
     3928      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3929      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3930      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     3931      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
     3932      -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
     3933      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3934      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
     3935      -1,    -1,   119,    -1,    39,    10,    11,    12,    13,    14,
     3936      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3937      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     3938      -1,    -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,
     3939      75,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3940      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3941      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
     3942      75,    -1,    39,    -1,    -1,    -1,   111,    -1,    -1,    -1,
     3943      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     3944      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3945      67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,
     3946      -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,
     3947      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3948      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
     3949      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3950      -1,    -1,   119,    -1,    10,    11,    12,    13,    14,    15,
     3951      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3952      26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
     3953      74,    75,    -1,    39,    -1,    -1,     4,     5,     6,     7,
     3954       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3955      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3956      -1,    67,    30,    31,    32,    -1,    -1,   111,    74,    75,
     3957      -1,    39,    -1,    37,    38,   119,    40,    41,    -1,    43,
     3958      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
     3959      -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,
     3960      64,    69,    66,    71,    -1,    -1,    74,    75,    72,    -1,
     3961      -1,    -1,    76,   119,    -1,    79,    80,    81,    82,    83,
     3962      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3963      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3964      -1,    -1,   110,    -1,    -1,   109,    -1,   111,    -1,    -1,
     3965     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
     3966      -1,    -1,    -1,    -1,   128,    -1,    37,    38,   132,    40,
     3967      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
     3968      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
     3969      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
     3970      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
     3971      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3972      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
     3973      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3974     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
     3975     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
     3976      -1,   132,     4,     5,     6,     7,     8,     9,    10,    11,
     3977      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3978      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3979      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,
     3980      38,    -1,    40,    41,    -1,    43,    44,    45,    46,    47,
     3981      48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
     3982      -1,    -1,    -1,    61,    62,    67,    64,    69,    66,    71,
     3983      -1,    -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,
     3984      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3985      -1,    -1,    -1,    -1,    96,    -1,    94,    -1,    -1,    -1,
     3986      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3987      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
     3988     118,   119,   120,   121,   122,   123,    -1,    -1,    37,    38,
     3989     128,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
     3990      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
     3991      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
     3992      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
     3993      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3994      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
     3995      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3996     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
     3997     119,   120,   121,   122,   123,    -1,    -1,    37,    38,   128,
     3998      40,    41,    -1,    43,    -1,    -1,    46,    47,    48,    49,
     3999      50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
     4000      -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,
     4001      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
     4002      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     4003      -1,    -1,    -1,    -1,    94,    37,    38,    -1,    40,    -1,
     4004      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     4005      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
     4006     120,   121,   122,   123,    66,    -1,    -1,    -1,   128,    -1,
     4007      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
     4008      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     4009      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
     4010      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
     4011      -1,    -1,    37,    38,    -1,    40,   118,   119,   120,   121,
     4012     122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
     4013      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
     4014      84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,    -1,
     4015      94,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     4016      -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,    94,
     4017      37,    38,    -1,    40,   118,   119,   120,   121,   122,   123,
     4018      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,
     4019      38,    -1,    40,   118,   119,   120,   121,   122,   123,    66,
     4020      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
     4021      -1,    -1,    79,    80,    81,    82,    83,    84,    66,    86,
     4022      87,    -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,
     4023      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     4024      -1,    -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,
     4025      40,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
     4026      -1,   109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
     4027     118,   119,   120,   121,   122,   123,    66,    -1,    -1,    -1,
     4028      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
     4029      80,    81,    82,    83,    84,    66,    86,    87,    -1,    -1,
     4030      -1,    72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,
     4031      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,   109,
     4032      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,
     4033     120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,
     4034      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
     4035     121,   122,   123,     3,     4,     5,     6,     7,     8,     9,
     4036      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     4037      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     4038      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     4039      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4040      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4041      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     4042      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
     4043       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     4044      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     4045      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     4046      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4047      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4048      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4049      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
    24454050       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    24464051      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2447      412,     0,    25,    26,    27,    28,     0,     0,    29,   280,
    2448      281,    30,   282,     0,     0,     0,     0,     0,     0,     0,
    2449        0,     0,     0,     0,     0,   412,   412,     0,     0,     0,
    2450        0,     0,     0,  1389,     0,   768,     0,     0,   283,    33,
    2451        0,    34,     0,    35,   284,     0,    37,    38,   285,     0,
    2452      412,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2453        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2454        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2455        0,   293,     0,    43,     0,     0,     0,     0,     0,     0,
    2456      295,   296,   297,   298,   299,   300,     0,     0,     2,   204,
    2457        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2458       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2459       24,  1449,     0,    25,    26,    27,     0,     0,     0,     0,
    2460      280,   281,    30,   282,     0,     8,     9,    10,    11,    12,
    2461       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2462       23,    24,     0,     0,    25,    26,    27,     0,     0,   283,
    2463       33,     0,    34,    30,    35,   284,     0,    37,    38,   285,
    2464        0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2465      291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
    2466        0,    33,     0,     0,     0,     0,   108,     0,    37,    38,
    2467        0,     0,   293,  1515,   342,     0,     0,    40,    41,   780,
    2468        0,   295,   343,   297,   298,   299,   300,     2,   204,     4,
    2469        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2470       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2471        0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
    2472      281,    30,   282,     0,     0,   320,     0,     8,     9,    10,
    2473       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2474       21,    22,    23,    24,  -295,     0,     0,     0,   283,    33,
    2475        0,    34,     0,    35,   284,    30,    37,    38,   285,     0,
    2476        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2477        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2478        0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
    2479        0,   293,     0,   930,  -295,     0,     0,     0,   780,     0,
    2480      295,   343,   297,   298,   299,   300,     2,   204,     4,     5,
    2481        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2482       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2483        0,    25,    26,    27,     0,     0,     0,     0,   280,   281,
    2484       30,   282,     0,     8,     9,    10,    11,    12,    13,    14,
    2485       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2486        0,     0,    25,    26,    27,     0,     0,   283,    33,     0,
    2487       34,    30,    35,   284,     0,    37,    38,   285,     0,     0,
    2488      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2489        0,     0,     0,     0,     0,   292,     0,     0,     0,    33,
    2490        0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
    2491      293,     0,   930,     0,     0,     0,     0,   780,     0,   295,
    2492      599,   297,   298,   299,   300,     2,   204,     4,     5,     6,
    2493        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2494       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2495       25,    26,    27,     0,     0,     0,     0,   280,   281,    30,
    2496      282,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2497       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2498        0,    25,    26,    27,     0,     0,   283,    33,     0,    34,
    2499       30,    35,   284,     0,    37,    38,   285,     0,     0,   286,
    2500      287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
    2501        0,     0,     0,     0,   292,     0,     0,     0,    33,     0,
    2502        0,     0,     0,     0,     0,   205,    38,     0,     0,   293,
    2503        0,   342,     0,     0,     0,     0,     0,     0,   295,   343,
    2504      297,   298,   299,   300,     2,   204,     4,     5,     6,     7,
    2505        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2506       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2507       26,    27,     0,     0,     0,     0,   280,   281,    30,   282,
    2508        0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2509       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2510        0,     0,     0,     0,     0,   283,    33,     0,    34,    30,
    2511       35,   284,     0,    37,    38,   285,     0,     0,   286,   287,
    2512      288,   289,    40,    41,     0,   290,   291,     0,     0,     0,
    2513        0,     0,     0,   292,     0,     0,     0,    33,     0,     0,
    2514        0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
    2515      930,     0,     0,     0,     0,     0,     0,   295,   343,   297,
    2516      298,   299,   300,     2,   204,     4,     5,     6,     7,     8,
    2517        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2518       19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
    2519       27,     0,     0,     0,     0,   280,   281,    30,   282,     0,
    2520        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2521        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2522        0,     0,     0,     0,   283,    33,     0,    34,     0,    35,
    2523      284,     0,   205,    38,   285,     0,     0,   286,   287,   288,
    2524      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2525        0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
    2526        0,     0,     0,     0,     0,     0,     0,   293,     0,  1019,
    2527        0,     0,     0,     0,     0,     0,   295,  1020,   297,   298,
    2528      299,   300,     2,   204,     4,     5,     6,     7,     8,     9,
    2529       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2530       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2531        0,     0,     0,     0,   280,   281,    30,   282,     0,     0,
    2532        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2533        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2534        0,     0,     0,   283,    33,     0,    34,     0,    35,   284,
    2535        0,   205,    38,   285,     0,     0,   286,   287,   288,   289,
    2536       40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
    2537        0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
    2538        0,     0,     0,     0,     0,     0,   293,     0,   377,     0,
    2539        0,     0,     0,     0,     0,   295,   379,   297,   298,   299,
    2540      300,     1,     2,     3,     4,     5,     6,     7,     8,     9,
    2541       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2542       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2543       28,     0,     0,    29,     0,     0,    30,    31,     0,     0,
    2544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2545        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2546        0,    32,     0,     0,    33,     0,    34,     0,    35,    36,
    2547        0,    37,    38,    39,     0,     0,     0,     0,     0,     0,
    2548       40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
    2549        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2550        0,     0,     0,     0,     0,     0,    42,     0,    43,     0,
    2551        0,     0,  -520,     0,     0,     0,    44,   203,     2,   204,
    2552        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2553       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2554       24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
    2555        0,     0,    30,     8,     9,    10,    11,    12,    13,    14,
    2556       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2557        0,     0,    25,    26,    27,   491,   492,   493,     0,     0,
    2558       33,    30,    34,     0,    35,    36,     0,   205,    38,    39,
    2559        0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
    2560        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2561        0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
    2562        0,     0,    42,     0,   206,     0,     0,     0,     0,     0,
    2563        0,     0,   207,     1,     2,   204,     4,     5,     6,     7,
    2564        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2565       18,    19,    20,    21,    22,    23,    24,  -294,     0,    25,
    2566       26,    27,    28,     0,     0,    29,     0,     0,    30,     0,
    2567        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2568        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2569        0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
    2570       35,     0,     0,    37,    38,     0,     0,  -294,     0,     1,
    2571        2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
    2572       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2573       22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
    2574       43,    29,     0,     0,    30,     0,     0,     0,   109,     0,
    2575        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2576        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2577        0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
    2578       38,     0,   203,     2,   204,     4,     5,     6,     7,     8,
    2579        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2580       19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
    2581       27,     0,     0,     0,     0,     0,    43,    30,     0,     0,
    2582        0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
    2583        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2584        0,     0,     0,     0,     0,    33,     0,    34,     0,    35,
    2585        0,     0,   205,    38,     2,   204,     4,     5,     6,     7,
    2586        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2587       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2588       26,    27,     0,     0,     0,     0,     0,     0,    30,   206,
    2589        0,     0,     0,     0,     0,     0,     0,   269,     0,     0,
    2590        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2591        0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
    2592       35,    36,     0,   205,    38,    39,     0,     0,     0,     0,
    2593        0,     0,    40,    41,     0,     0,     8,     9,    10,    11,
    2594       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2595       22,    23,    24,     0,     0,    25,    26,    27,    42,     0,
    2596      206,     0,     0,     0,    30,     0,     0,     0,   207,     2,
    2597      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2598       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2599       23,    24,    33,     0,    25,    26,    27,    36,     0,    37,
    2600       38,    39,     0,    30,     0,     0,     0,     0,    40,    41,
    2601        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2602        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2603        0,    33,     0,    34,    42,    35,    43,     0,    37,    38,
    2604        0,     0,     0,     0,    44,     0,     0,     0,     0,     0,
    2605        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2606     1368,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2607        0,     0,     0,     0,     0,   686,     0,     0,     0,     0,
    2608        0,     0,     0,   633,     2,   204,     4,     5,     6,     7,
    2609        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2610       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2611       26,    27,     0,     0,     0,     0,     0,     0,    30,     0,
    2612        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
    2613       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2614        0,     0,    25,    26,    27,     0,    33,     0,    34,     0,
    2615       35,    30,     0,    37,    38,     0,     0,     0,     0,     0,
    2616        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2617        0,     0,     0,     0,     0,  1370,     0,     0,     0,    33,
    2618        0,     0,     0,     0,    36,     0,   335,   336,    39,     0,
    2619      686,     0,     0,     0,     0,    40,    41,     0,   633,     2,
    2620      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2621       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2622       23,    24,     0,   337,    25,    26,    27,     0,     0,     0,
    2623        0,   109,     0,    30,     0,     0,     0,     0,     0,     0,
    2624        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2625        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2626        0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
    2627        2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
    2628       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2629       22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
    2630        0,     0,     0,     0,    30,   268,     0,     0,     0,     0,
    2631        0,     0,     0,   628,     0,     0,     0,     0,     0,     0,
    2632        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2633        0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
    2634       38,     2,   204,     4,     5,     6,     7,     8,     9,    10,
    2635       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2636       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2637        0,     0,     0,     0,     0,    30,   686,     0,     0,     0,
    2638        0,     0,     0,     0,   633,     0,     0,     0,     0,     0,
    2639        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2640        0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
    2641       37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
    2642       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2643       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2644        0,     0,     0,     0,     0,     0,    30,   598,     0,     0,
    2645        0,     0,     0,     0,     0,   633,     0,     0,     0,     0,
    2646        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2647        0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
    2648        0,   205,    38,     8,     9,    10,    11,    12,    13,    14,
    2649       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2650        0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
    2651      281,    30,   282,     0,     0,     0,     0,     0,   206,     0,
    2652        0,     0,     0,     0,     0,     0,   269,     0,     0,     0,
    2653        0,     0,     0,     0,     0,     0,     0,     0,   283,    33,
    2654        0,     0,     0,     0,   284,     0,    37,    38,   285,     0,
    2655        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2656        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2657        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2658        0,   293,     0,   524,     0,     0,   169,     0,     0,     0,
    2659      295,   296,   297,   298,   299,   300,     8,     9,    10,    11,
    2660       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2661       22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
    2662        0,     0,   280,   281,    30,   282,     8,     9,    10,    11,
    2663       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2664       22,    23,    24,  -294,     0,    25,    26,    27,     0,     0,
    2665        0,   283,    33,     0,    30,     0,     0,   284,     0,    37,
    2666       38,   285,     0,     0,   286,   287,   288,   289,    40,    41,
    2667        0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
    2668        0,     0,    33,     0,     0,     0,     0,    36,     0,   335,
    2669      336,    39,     0,  -294,   293,     0,   598,    -3,    40,    41,
    2670        0,     0,     0,   295,   599,   297,   298,   299,   300,     8,
    2671        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2672       19,    20,    21,    22,    23,    24,   337,     0,    25,    26,
    2673       27,     0,     0,     0,   109,   280,   281,    30,   282,     8,
    2674        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2675       19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
    2676       27,     0,     0,     0,   283,    33,     0,    30,     0,     0,
    2677      648,     0,    37,    38,   285,     0,     0,   286,   287,   288,
    2678      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2679        0,     0,   292,     0,     0,    33,     0,     0,     0,     0,
    2680      108,     0,    37,    38,     0,     0,     0,   293,   -35,   765,
    2681        0,    40,    41,     0,     0,     0,   295,   296,   297,   298,
    2682      299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
    2683       16,    17,    18,    19,    20,    21,    22,    23,    24,    43,
    2684        0,    25,    26,    27,     0,     0,     0,   109,   280,   281,
    2685       30,   282,     8,     9,    10,    11,    12,    13,    14,    15,
    2686       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2687        0,    25,    26,    27,     0,     0,     0,   283,    33,     0,
    2688       30,   452,     0,   284,     0,    37,    38,   285,     0,     0,
    2689      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2690        0,     0,     0,     0,     0,   292,     0,     0,    33,     0,
    2691        0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
    2692      293,     0,   294,     0,     0,     0,     0,     0,     0,   295,
    2693      296,   297,   298,   299,   300,     8,     9,    10,    11,    12,
    2694       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2695       23,    24,   453,     0,    25,    26,    27,     0,     0,     0,
    2696      109,   280,   281,    30,   282,     0,     0,     0,     0,     0,
    2697        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
    2698       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2699      283,    33,    25,    26,    27,     0,   284,     0,    37,    38,
    2700      285,    30,     0,   286,   287,   288,   289,    40,    41,     0,
    2701      290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
    2702        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2703        0,     0,     0,   293,     0,   155,    37,    38,     0,     0,
    2704        0,     0,   295,   296,   297,   298,   299,   300,     8,     9,
    2705       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2706       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2707        0,   642,     0,   337,   280,   281,    30,   282,     0,     0,
    2708        0,   109,     0,     0,     0,     0,     8,     9,    10,    11,
    2709       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2710       22,    23,    24,   283,    33,    25,    26,    27,     0,   284,
    2711        0,    37,    38,   285,    30,     0,   286,   287,   288,   289,
    2712       40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
    2713        0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
    2714        0,     0,    33,     0,     0,     0,   293,     0,   598,    37,
    2715       38,     0,     0,     0,     0,   295,   599,   297,   298,   299,
    2716      300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2717       17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
    2718       25,    26,    27,     0,   642,     0,   337,   280,   281,    30,
    2719      282,     0,     0,     0,   633,     0,     0,     0,     0,     8,
    2720        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2721       19,    20,    21,    22,    23,    24,   283,    33,    25,    26,
    2722       27,     0,   284,     0,    37,    38,   285,    30,   452,   286,
    2723      287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
    2724        0,     0,     0,     0,   292,     0,     0,     0,     0,     0,
    2725        0,     0,     0,     0,     0,    33,     0,     0,     0,   293,
    2726        0,   377,    37,    38,     0,     0,     0,     0,   295,   379,
    2727      297,   298,   299,   300,   473,     2,   204,     4,     5,     6,
    2728        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2729       17,    18,    19,    20,    21,    22,    23,    24,     0,   453,
    2730       25,    26,    27,  1234,     0,     0,     0,   109,     0,    30,
    2731        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2732       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2733       26,    27,     0,     0,     0,     0,     0,    33,    30,    34,
    2734        0,    35,     0,     0,    37,    38,     0,     0,     8,     9,
    2735       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2736       20,    21,    22,    23,    24,     0,    33,    25,    26,    27,
    2737        0,    36,     0,   205,    38,    39,    30,     0,     0,     0,
    2738        0,     0,    40,    41,    -3,     0,     8,     9,    10,    11,
    2739       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2740       22,    23,    24,     0,    33,    25,    26,    27,    42,    36,
    2741      268,   335,   336,    39,    30,     0,     0,     0,   207,     0,
    2742       40,    41,     0,     0,     8,     9,    10,    11,    12,    13,
    2743       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2744       24,     0,    33,    25,    26,    27,   642,     0,   337,    37,
    2745       38,     0,    30,     0,     0,     0,   633,     8,     9,    10,
    2746       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2747       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2748       33,     0,     0,     0,     0,    30,   255,    37,    38,     0,
    2749        0,     0,     0,     0,   109,     8,     9,    10,    11,    12,
    2750       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2751       23,    24,     0,    33,    25,    26,    27,     0,     0,     0,
    2752      205,    38,     0,    30,   155,     0,     0,     0,     0,     0,
    2753        0,     0,   109,     8,     9,    10,    11,    12,    13,    14,
    2754       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2755        0,    33,    25,    26,    27,     0,     0,   268,    37,    38,
    2756        0,    30,     0,     0,     0,   269,     8,     9,    10,    11,
    2757       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2758       22,    23,    24,     0,     0,    25,    26,    27,     0,    33,
    2759        0,     0,     0,     0,    30,   255,    37,    38,     0,     0,
    2760        0,     0,     0,   633,     8,     9,    10,    11,    12,    13,
    2761       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2762       24,     0,    33,    25,    26,    27,     0,     0,     0,    37,
    2763       38,     0,    30,   337,     0,     0,     0,     0,     0,     0,
    2764        0,   633,     8,     9,    10,    11,    12,    13,    14,    15,
    2765       16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
    2766       33,    25,    26,    27,     0,     0,   453,   205,    38,     0,
    2767       30,     0,     0,     0,   109,     8,     9,    10,    11,    12,
    2768       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2769       23,    24,     0,     0,    25,    26,    27,     0,    33,     0,
    2770        0,     0,     0,    30,   268,    37,    38,     0,     0,     0,
    2771        0,     0,   628,     8,     9,    10,    11,    12,    13,    14,
    2772       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2773        0,    33,    25,    26,    27,     0,     0,     0,    37,    38,
    2774        0,    30,   598,     0,     0,     0,     0,     0,     0,     0,
    2775      633,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2776        0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
    2777        0,     0,     0,     0,     0,   337,    37,    38,     0,     0,
    2778        0,     0,     0,   109,     2,   204,     4,     5,     6,     7,
    2779        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2780       18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
    2781       26,    27,     0,    43,     0,     0,     0,     0,    30,     0,
    2782        0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
    2783        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2784        0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
    2785       35,     0,     0,    37,    38,   280,   281,     0,   282,  1062,
    2786        0,  1063,     0,     0,  1064,  1065,  1066,  1067,  1068,  1069,
    2787     1070,  1071,     0,     0,  1548,  1072,     0,     0,     0,  1073,
    2788     1074,     0,    32,     0,   283,     0,     0,     0,     0,  -412,
    2789      648,     0,     0,     0,   285,     0,     0,   286,   287,   288,
    2790      289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
    2791        0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
    2792        0,     0,     0,     0,     0,     0,     0,   293,     0,   377,
    2793        0,     0,   169,     0,     0,     0,   295,   379,   297,   298,
    2794      299,   300,     0,     0,     0,     0,  1076,     0,   280,   281,
    2795     -129,   282,  1062,     0,  1063,     0,     0,  1064,  1065,  1066,
    2796     1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,     0,
    2797        0,     0,  1073,  1074,     0,    32,     0,   283,     0,     0,
    2798        0,     0,     0,   648,     0,     0,     0,   285,     0,     0,
    2799      286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
    2800        0,     0,     0,     0,     0,   292,     0,     0,     0,     0,
    2801        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2802      293,     0,   377,     0,     0,   169,     0,     0,     0,   295,
    2803      379,   297,   298,   299,   300,     0,     0,     0,     0,  1076,
    2804        0,   280,   281,  -129,   282,  1062,     0,  1063,  1418,  1419,
    2805     1064,  1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,
    2806     1548,  1072,     0,     0,     0,  1073,  1074,     0,    32,     0,
    2807      283,     0,     0,     0,     0,     0,   648,     0,     0,     0,
    2808      285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
    2809      290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
    2810        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2811        0,     0,     0,   293,     0,   377,     0,     0,   169,     0,
    2812        0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
    2813      280,   281,  1076,   282,  1062,     0,  1063,  1418,  1419,  1064,
    2814     1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,
    2815     1072,     0,     0,     0,  1073,  1074,     0,    32,     0,   283,
    2816        0,     0,     0,     0,     0,   648,     0,     0,     0,   285,
    2817        0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
    2818      291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
    2819        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2820        0,     0,   293,     0,   377,     0,     0,   169,     0,     0,
    2821        0,   295,   379,   297,   298,   299,   300,     0,     0,   280,
    2822      281,  1076,   282,  1062,     0,  1063,     0,     0,  1064,  1065,
    2823     1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
    2824        0,     0,     0,  1073,  1074,     0,    32,     0,   283,     0,
    2825        0,     0,     0,     0,   648,     0,     0,     0,   285,     0,
    2826        0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
    2827        0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
    2828        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2829        0,   293,     0,   377,     0,     0,   169,     0,     0,     0,
    2830      295,   379,   297,   298,   299,   300,     0,     0,     0,     0,
    2831     1076,     2,   204,     4,     5,     6,     7,     8,     9,    10,
    2832       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2833       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2834        0,     0,     0,     0,     0,    30,     0,   280,   281,     0,
    2835      282,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2836        0,     0,     0,     0,     0,     0,   280,   281,     0,   282,
    2837        0,     0,     0,    33,     0,    34,   283,    35,     0,     0,
    2838       37,    38,   284,     0,     0,     0,   285,     0,     0,   286,
    2839      287,   288,   289,    40,    41,   283,   290,   291,     0,     0,
    2840        0,   648,  1327,     0,   292,   285,     0,     0,   286,   287,
    2841      288,   289,    40,    41,     0,   290,   291,     0,     0,   293,
    2842        0,   377,     0,   292,   280,   281,     0,   282,   295,   733,
    2843      297,   298,   299,   300,     0,     0,     0,     0,   293,     0,
    2844      784,     0,     0,   280,   281,     0,   282,   295,   379,   297,
    2845      298,   299,   300,   283,     0,     0,     0,     0,     0,   284,
    2846        0,     0,     0,   285,     0,     0,   286,   287,   288,   289,
    2847       40,    41,   283,   290,   291,     0,     0,     0,   284,     0,
    2848        0,   292,   285,     0,     0,   286,   287,   288,   289,    40,
    2849       41,     0,   290,   291,     0,     0,   293,     0,   377,     0,
    2850      292,   280,   281,     0,   282,   295,   826,   297,   298,   299,
    2851      300,     0,     0,     0,     0,   517,     0,     0,     0,     0,
    2852        0,     0,     0,     0,   295,   379,   297,   298,   299,   300,
    2853      283,     0,     0,     0,     0,     0,   284,     0,     0,     0,
    2854      285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
    2855      290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
    2856        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2857        0,     0,     0,   520,     0,     0,     0,     0,     0,     0,
    2858        0,     0,   295,   379,   297,   298,   299,   300,     2,   204,
    2859        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2860       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2861       24,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2862        0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
    2863        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2864        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2865       33,     0,    34,     0,    35,    36,     0,   172,   173,    39,
    2866        0,     0,     0,     0,     0,     0,    40,    41,   203,     2,
    2867      204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2868       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2869       23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
    2870        0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
    2871        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2872        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2873        0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
    2874      473,     2,   204,     4,     5,     6,     7,     8,     9,    10,
    2875       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2876       21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
    2877        0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
    2878        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2879        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2880        0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
    2881       37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
    2882       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2883       20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
    2884        0,     0,     0,     0,     0,     0,    30,     0,     0,     0,
    2885        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2886        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2887        0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
    2888        0,   205,    38
    2889 };
    2890 
    2891 #define yypact_value_is_default(yystate) \
    2892   ((yystate) == (-1281))
    2893 
    2894 #define yytable_value_is_error(yytable_value) \
    2895   YYID (0)
    2896 
    2897 static const yytype_int16 yycheck[] =
    2898 {
    2899        0,     1,     0,    42,   237,   217,   183,   183,   202,    42,
    2900        0,     1,     1,   183,    42,   542,   183,   183,   114,   103,
    2901      184,   455,   519,   343,     0,     0,   628,   454,    28,    29,
    2902      183,    31,   697,    31,   697,   183,   498,   697,   610,   608,
    2903      502,    31,    42,   679,    44,   461,    44,   347,  1042,   496,
    2904      279,   901,   655,     1,    54,    31,    31,   166,   167,   608,
    2905       60,  1061,    60,    63,   608,    63,    66,   610,    66,   153,
    2906      347,     0,   578,    63,  1005,   277,    66,    66,   416,   998,
    2907       80,    81,  1041,  1042,   184,   608,   263,   263,    63,   779,
    2908       42,   362,   185,   263,   608,   366,   263,   263,   436,    31,
    2909      264,   528,    31,   199,   104,  1337,   444,   107,   608,    27,
    2910      263,   776,     0,   776,   114,   263,   776,    42,   608,   722,
    2911      642,   643,   644,  1054,   758,   424,   425,   611,    38,   254,
    2912      643,   644,    38,   617,    81,    42,    62,   106,  1418,   661,
    2913        0,     1,    63,    31,   183,   145,    44,   145,   661,   109,
    2914      183,    81,   108,   153,   226,   183,   116,  1422,   158,    77,
    2915      158,   130,    38,   110,   264,   612,   259,   260,   488,   616,
    2916       50,    31,    44,   245,   743,   109,    43,    44,   814,   109,
    2917     1073,  1074,   116,   183,   184,    81,   184,   108,   824,    54,
    2918      637,    43,    44,    38,   641,    38,   408,    84,   108,   199,
    2919      110,   500,    63,   839,   110,   131,    66,   207,  1440,   207,
    2920      901,   109,  1492,   735,    43,    44,   216,   494,   108,   219,
    2921      519,   219,   735,    38,   263,   112,   226,    81,   108,   219,
    2922      263,   183,   108,    11,   110,   263,   115,   109,   108,   104,
    2923      404,   241,   107,   743,   219,   245,  1240,   114,  1141,   249,
    2924      250,   249,   131,   743,   115,  1520,   340,   113,   183,   249,
    2925     1525,   113,   116,   263,   264,   108,   264,   110,   115,   838,
    2926      270,    38,   144,   249,   249,     0,   183,   277,   850,   599,
    2927     1545,   510,     3,   717,   113,   369,   585,  1552,    81,   838,
    2928      454,   416,   292,   108,   838,   110,  1290,   158,   394,  1474,
    2929      111,  1525,   250,  1303,   404,   827,    31,   850,   628,   207,
    2930      610,   436,   818,   633,   827,   838,   109,   249,  1008,   444,
    2931      249,  1545,   486,   116,   838,   596,   422,   327,  1552,   327,
    2932     1289,  1290,   428,    81,  1509,   207,  1511,  1256,   838,    94,
    2933      238,   108,    95,   110,   292,   111,   346,   347,   838,   115,
    2934       81,   216,   690,    95,   454,  1525,   840,   115,   219,   698,
    2935      108,   249,     3,   363,     1,   237,   254,   367,   639,   122,
    2936     1061,   269,    71,   348,   129,  1225,   696,   108,   378,    71,
    2937      122,   720,  1552,    82,    83,   108,   486,   959,   108,   249,
    2938       82,    83,   114,   115,   394,   293,   257,   269,   296,    71,
    2939      261,   108,  1038,  1039,   404,   270,   404,    44,   130,   958,
    2940       82,    83,   277,   115,   958,    71,     0,   115,  1020,     0,
    2941     1414,   115,   422,   130,   296,   872,    82,    83,   428,   131,
    2942      430,   488,   131,   131,   109,   958,  1070,   131,   110,   131,
    2943      115,    67,   115,    89,    90,    71,   675,   531,    74,   115,
    2944       76,   130,   772,   115,   454,  1414,    71,    83,   131,   459,
    2945     1096,  1097,   118,  1463,   464,   131,   103,    82,    83,   131,
    2946     1470,   343,   109,   473,   108,  1406,  1407,   115,   478,   125,
    2947      126,   346,   109,   108,   109,   109,   486,   348,   486,   116,
    2948      490,   115,   490,   131,   494,   110,   109,   497,   363,   499,
    2949      490,    71,   367,   130,   479,   967,  1003,   144,   120,   121,
    2950      937,   927,    82,    83,   490,   490,   153,   964,   945,   519,
    2951      697,   697,   115,  1523,   249,   473,   108,   697,   416,   254,
    2952      697,   697,   761,   108,  1225,   699,   536,  1140,   131,   539,
    2953      110,   541,   542,  1115,   697,  1029,  1030,   656,   436,   697,
    2954      850,   108,   424,   425,   452,   757,   444,   455,   829,    87,
    2955       88,   490,   833,   461,   991,   690,   203,   663,   429,    71,
    2956      207,   519,   665,   850,   115,    10,    11,    12,    13,    14,
    2957       82,    83,   115,   108,   210,   642,   643,   644,   536,   589,
    2958      131,   539,   470,   541,   542,   109,   596,   115,   131,   699,
    2959      237,   238,   490,    38,   661,   109,   108,   732,   608,   115,
    2960      610,   695,  1303,   131,   512,    71,   514,   115,   479,   517,
    2961      111,   597,   520,   109,   115,   131,    82,    83,   500,   629,
    2962      490,    66,   269,   131,  1270,   272,   109,    79,   977,   696,
    2963      282,   589,  1278,  1279,  1280,   645,    71,   519,    73,    74,
    2964      109,   651,   923,   295,   296,   630,   293,    82,    83,   296,
    2965      660,   111,   662,   663,   664,   307,   114,  1101,   110,  1303,
    2966      112,    79,     3,   111,   116,   887,   108,   115,   735,    10,
    2967       11,    12,    13,    14,    91,    92,   963,   771,   113,     0,
    2968     1326,   416,   109,   108,   293,   110,   908,   697,   115,   699,
    2969     1020,   343,   110,   340,   112,   111,   343,    38,   116,   115,
    2970      108,   436,   712,   585,   662,   772,   664,   118,   718,   444,
    2971       31,   131,   123,   124,   350,   362,   352,   599,    71,   366,
    2972      730,    42,   369,    44,   111,    66,   969,   379,   115,    82,
    2973       83,   602,   108,   743,   744,   109,  1380,   109,   723,    60,
    2974     1131,   115,    63,   115,  1135,    66,   628,   757,   108,    63,
    2975      110,   633,   737,   488,   629,   490,   108,   110,   118,   630,
    2976      827,  1495,  1463,   937,   635,   108,   108,  1501,   110,  1470,
    2977      645,   945,   730,   108,   893,   110,   118,   424,   425,   111,
    2978      109,   109,  1319,   118,  1133,   660,   115,   115,  1522,   113,
    2979      109,   679,   690,  1527,   131,    52,   115,   113,   512,    71,
    2980      514,    73,    74,   517,   440,   452,   520,   109,   455,   717,
    2981       82,    83,   109,   115,   461,   424,   425,   128,   115,   130,
    2982      113,  1102,  1523,  1467,   145,  1469,   473,   937,   838,  1033,
    2983     1160,   114,   115,   109,   732,   945,   108,   158,    95,   115,
    2984      850,   113,  1191,  1192,   109,   108,   831,   110,   834,   131,
    2985      115,   498,   723,   500,  1529,   502,  1529,   131,   109,  1529,
    2986      115,   116,   183,   184,   115,   512,   737,   514,   109,   109,
    2987      517,   109,   519,   520,   115,   115,    71,   115,    73,    74,
    2988     1524,   108,   757,   893,   531,   108,   207,    82,    83,   109,
    2989      900,   901,  1131,   109,   109,   115,  1135,  1136,   219,   115,
    2990      115,   901,    81,   512,   556,   557,   558,   108,   517,   110,
    2991     1240,   520,   108,   923,   110,   901,   901,   109,   110,     4,
    2992        5,     6,     7,     8,     9,   108,   814,   937,   249,    71,
    2993      111,    73,    74,    81,   191,   945,   824,  1056,   585,   119,
    2994       82,    83,   263,   901,   108,   109,   110,   599,   108,   596,
    2995      110,   839,   599,   963,   108,   690,   110,   214,    57,    58,
    2996      831,   696,   108,   109,   110,   574,   108,   224,   968,   968,
    2997      108,   113,   110,   983,  1041,     4,     5,     6,     7,     8,
    2998        9,   628,   992,    68,   127,    70,   633,   108,   109,   110,
    2999     1000,   128,   639,  1003,   130,  1005,    71,   732,    73,    74,
    3000       75,   110,   108,   901,   110,     3,   327,    82,    83,   114,
    3001      115,  1250,    10,    11,    12,    13,    14,  1123,    71,   927,
    3002       73,    74,    75,   115,   116,   983,   347,   115,   116,    82,
    3003       83,   901,   108,   108,   110,   110,   293,   772,  1023,    68,
    3004       38,    70,  1000,   118,  1054,  1003,   131,  1005,   695,   108,
    3005      109,   110,  1401,    93,  1064,   108,   108,  1067,  1068,  1069,
    3006      108,  1061,    10,    11,    12,    13,    14,  1504,    66,  1418,
    3007      717,   563,   564,   565,   566,  1061,  1061,    71,   111,    73,
    3008       74,   733,  1092,   404,    43,    44,    44,   969,    82,    83,
    3009       38,   111,   702,  1160,   704,   109,  1054,   109,   968,  1338,
    3010      747,   109,    60,  1342,   109,    63,  1064,   109,    66,  1067,
    3011     1068,  1069,     3,  1123,   561,   562,   110,  1554,    66,    10,
    3012       11,    12,    13,    14,   771,   109,  1220,   779,    71,   108,
    3013       73,    74,    75,   454,   111,   109,   111,   111,  1020,    82,
    3014       83,   115,  1491,  1492,    57,    58,    59,    38,   567,   568,
    3015     1038,  1039,  1023,  1262,  1263,  1264,   130,   131,   559,   560,
    3016      108,   110,   110,  1061,   115,   108,   901,   130,   113,   490,
    3017      118,   108,   111,   494,   826,    66,   109,   109,   116,   115,
    3018      111,   111,   829,   111,   441,   111,   833,   145,  1198,   116,
    3019       28,  1061,   116,  1101,   109,    84,    85,    86,   109,   111,
    3020      158,   109,  1202,  1203,  1203,  1444,   113,   116,  1096,  1097,
    3021     1220,   114,   114,   114,   108,  1225,   115,  1202,   475,   108,
    3022      115,   110,  1289,   112,   113,  1225,   184,   109,     4,     5,
    3023        6,     7,     8,     9,   131,   109,   109,   116,   109,  1225,
    3024     1225,   109,   109,   115,  1244,  1244,    71,   109,   109,   207,
    3025       75,   109,  1262,  1263,  1264,   512,    32,    82,    83,   109,
    3026      517,   219,   109,   520,   109,   109,    71,  1225,    73,    74,
    3027       75,    84,    85,    86,   109,   109,   923,    82,    83,   470,
    3028      927,   109,   109,   108,   114,   110,   109,   608,   109,   610,
    3029       28,  1397,    68,   118,    70,   108,  1539,   110,  1298,   112,
    3030      113,   698,   111,  1303,  1262,  1263,  1264,   109,   130,  1319,
    3031     1320,   109,   109,  1298,   114,   109,   115,  1303,  1303,   111,
    3032      967,   968,   969,   720,   111,   109,  1061,  1225,    71,   109,
    3033      115,  1202,    75,  1203,   109,   901,   115,  1337,  1337,    82,
    3034       83,   115,  1529,  1529,   116,   113,   111,    71,   109,  1529,
    3035     1238,    75,  1529,  1529,   111,  1225,  1530,   115,    82,    83,
    3036      115,  1319,  1320,   109,  1374,   108,  1529,  1377,  1020,   327,
    3037      109,  1529,   108,  1020,  1244,   118,   697,   108,   699,   108,
    3038     1554,   108,  1270,   108,   108,   111,  1396,  1397,   116,   131,
    3039     1278,  1279,  1280,   114,   118,   109,  1406,  1407,  1504,    71,
    3040      109,    73,    74,    75,   109,  1303,     0,     1,   128,  1061,
    3041       82,    83,  1422,   114,   811,   113,  1374,  1427,   111,  1377,
    3042     1530,   678,   743,   744,   131,  1160,   109,  1298,   115,   111,
    3043      687,   115,   111,  1303,   691,  1445,   109,    31,  1326,   109,
    3044     1440,  1440,   109,   111,  1554,   111,   404,  1457,  1406,  1407,
    3045       44,   111,   109,    54,  1101,  1102,   111,   111,   111,    46,
    3046       29,   109,   131,  1463,  1422,   114,   131,  1337,   131,  1427,
    3047     1470,    71,    66,    73,    74,    75,   114,  1463,  1463,   131,
    3048     1529,   131,    82,    83,  1470,  1470,  1529,  1445,   679,   116,
    3049     1225,  1529,   889,   109,  1504,  1505,   111,   114,  1064,  1457,
    3050      111,   111,   111,   104,  1514,  1240,   107,   111,   108,   103,
    3051     1520,    80,    81,   111,   111,  1525,   111,   838,   118,  1529,
    3052     1530,  1396,  1530,  1523,   109,  1177,   109,   111,   108,   850,
    3053      111,    63,   108,  1543,   108,  1545,    59,  1523,  1523,  1549,
    3054      113,   109,  1552,   109,  1554,   131,  1554,  1505,    80,   116,
    3055     1560,   145,   153,   111,  1564,   111,  1514,   109,   111,   153,
    3056      154,   109,  1520,   108,  1472,  1463,  1474,  1525,  1303,    95,
    3057     1440,    95,  1470,  1220,   108,   114,   131,   115,   111,   109,
    3058      977,   109,   109,   115,   109,  1543,    41,  1545,   131,   131,
    3059      184,  1549,    95,  1463,  1552,  1204,  1205,  1244,  1207,   116,
    3060     1470,  1509,  1560,  1511,  1213,   199,  1564,  1216,   202,   203,
    3061      109,  1008,   109,   207,    95,   216,   937,   131,   109,   109,
    3062      131,   116,   131,   814,   945,  1523,   158,   109,   114,   109,
    3063       50,   131,    52,   824,   228,    55,    56,    57,   232,    59,
    3064      234,   111,   963,   111,   108,   114,   131,   114,   839,   243,
    3065      109,   109,   131,  1523,    74,   249,   109,  1539,   109,  1225,
    3066      254,  1058,  1076,   569,  1225,   570,    86,    87,   925,   270,
    3067      264,   571,   241,  1492,    63,   573,   277,  1382,   272,   572,
    3068       25,    26,    27,  1564,    73,  1313,  1136,   219,  1342,  1470,
    3069     1337,    10,    11,    12,    13,    14,    10,    11,    12,    13,
    3070       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3071       24,    25,    26,    27,  1092,    29,    30,    31,   452,    38,
    3072      452,   945,   704,   464,    38,   257,   115,   893,  1463,   261,
    3073      947,   992,   589,   965,   657,  1470,  1133,   747,  1244,   490,
    3074      757,   577,    -1,    -1,   577,   346,   340,    66,   577,   343,
    3075       -1,    96,    66,    98,  1320,   349,    -1,    -1,    -1,    73,
    3076       74,    -1,   363,    77,    -1,    -1,   367,  1376,   362,   158,
    3077       -1,    -1,   366,    -1,    -1,   369,    -1,    10,    11,    12,
    3078       13,    14,    -1,    -1,    -1,    -1,    -1,    -1,  1523,   108,
    3079       -1,   110,    -1,  1440,  1191,  1192,   110,    -1,    -1,   118,
    3080       -1,    -1,    -1,    -1,   118,    38,    -1,    -1,  1374,   378,
    3081       -1,  1377,    -1,    -1,    -1,  1072,   348,    -1,    -1,    -1,
    3082       -1,    -1,   416,    -1,    -1,  1472,    -1,  1474,    -1,   430,
    3083      219,    -1,    -1,    66,   179,    -1,    -1,   431,    -1,    -1,
    3084       -1,    -1,   436,    -1,   189,   190,    -1,  1038,  1039,   194,
    3085      444,   196,   197,    -1,    -1,    -1,  1422,    -1,    -1,    -1,
    3086       -1,  1427,  1509,    -1,  1511,    -1,    -1,    -1,   257,    -1,
    3087       -1,    -1,   261,    -1,    -1,   108,   470,   110,    -1,   473,
    3088       -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,   277,    -1,
    3089      459,  1457,  1539,    -1,   488,   464,   490,   429,    -1,    10,
    3090       11,    12,    13,    14,   498,  1096,  1097,    -1,   502,    -1,
    3091       -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
    3092       13,    14,    -1,   343,   344,    -1,    -1,    38,   497,    71,
    3093      499,    73,    74,    75,    -1,   355,   356,   531,   532,    -1,
    3094       82,    83,    -1,    -1,    -1,    38,    -1,   479,    -1,    -1,
    3095       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   348,
    3096       71,    -1,    73,    74,    75,    -1,   108,    -1,   110,    -1,
    3097       -1,    82,    83,    66,   116,    -1,   118,  1543,    71,    -1,
    3098       73,    74,    75,  1549,   578,    -1,    -1,    -1,    -1,    82,
    3099       83,    -1,    -1,    -1,  1560,   596,    -1,   108,  1564,   110,
    3100       -1,    -1,   596,   597,  1401,   599,    -1,   118,    -1,    -1,
    3101       -1,    -1,    -1,    -1,    -1,   108,   610,   110,    -1,    -1,
    3102       -1,  1418,    -1,    -1,    -1,   118,    -1,    -1,   629,    -1,
    3103       -1,    -1,    -1,    -1,   628,    -1,    -1,    -1,    -1,   633,
    3104      429,    -1,    -1,    -1,   645,   639,    -1,  1238,   642,   643,
    3105      644,    -1,    -1,    -1,    -1,  1312,    -1,   446,    -1,   660,
    3106       71,    -1,    73,    74,    75,    -1,    -1,   661,    -1,    -1,
    3107      602,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
    3108       -1,    -1,   651,    -1,    -1,   679,    -1,  1278,  1279,  1280,
    3109      479,    -1,    -1,    -1,  1491,  1492,   690,   108,   630,   110,
    3110       -1,   695,   696,   635,    -1,   699,    -1,   118,    -1,    -1,
    3111       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3112       19,    20,    21,    22,    23,    24,    25,    26,     0,    -1,
    3113       29,    30,    31,    -1,    -1,  1326,    -1,    -1,   732,    38,
    3114       39,   735,    -1,   712,    -1,    -1,    -1,    -1,    -1,   718,
    3115      744,    -1,    -1,   747,    -1,     0,   757,    -1,    -1,    31,
    3116       71,    -1,    73,    74,    75,    -1,    -1,    66,    -1,    -1,
    3117       -1,    82,    83,    -1,    73,    74,    -1,   771,   772,    -1,
    3118       -1,    -1,    -1,   777,    -1,    -1,    31,    -1,    -1,    -1,
    3119       -1,   723,    -1,    -1,    66,    -1,    -1,   108,    -1,   110,
    3120       -1,    -1,    -1,    -1,    -1,   737,    -1,   118,  1529,    -1,
    3121       -1,   110,    -1,   602,  1471,   114,  1473,    -1,    -1,   118,
    3122      814,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3123      824,    -1,    -1,   827,    -1,   829,   581,   582,   832,   833,
    3124      834,   630,    -1,    -1,    -1,   839,   635,    -1,    -1,    -1,
    3125       -1,  1508,    -1,  1510,    -1,   849,    71,    -1,    73,    74,
    3126       75,    -1,    -1,    -1,    -1,    -1,   611,    82,    83,   614,
    3127      615,    -1,   617,    -1,   619,   620,    -1,    -1,    -1,   624,
    3128      625,    -1,   154,    96,    97,    98,    99,   100,   101,   102,
    3129      103,   104,   105,   108,    -1,    -1,  1553,    -1,  1555,   831,
    3130       -1,    -1,    -1,   118,   724,    -1,   726,   901,    -1,   154,
    3131       -1,  1568,  1569,   733,   734,    -1,    -1,   130,   738,    -1,
    3132       -1,    -1,   923,    -1,   893,    -1,   187,    -1,    -1,   923,
    3133      750,   900,    -1,   194,   723,   755,    -1,    -1,    10,    11,
    3134       12,    13,    14,    -1,    -1,    -1,    -1,    -1,   737,    -1,
    3135       -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,    -1,    -1,
    3136       -1,   781,    -1,   708,   709,   959,    38,    -1,   757,   714,
    3137       -1,    -1,    -1,   967,   968,    -1,    -1,   249,    -1,    -1,
    3138       -1,    -1,   254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3139       -1,   985,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,
    3140       -1,    73,    74,    75,   249,   266,   826,    -1,    -1,   254,
    3141       82,    83,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,
    3142       -1,    -1,    -1,   992,    -1,    -1,  1020,    -1,    -1,    -1,
    3143       -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,  1033,
    3144       -1,    -1,   831,    -1,  1038,  1039,   118,  1041,  1042,    -1,
    3145       -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
    3146       -1,   322,    -1,   883,   884,   885,   886,  1061,   888,   330,
    3147       -1,    -1,   333,    -1,    -1,    -1,    -1,   349,    -1,    -1,
    3148       -1,    -1,    38,    -1,   904,    -1,    -1,    96,    -1,    98,
    3149       -1,  1023,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,
    3150       -1,    -1,  1096,  1097,   349,    -1,    -1,    -1,  1102,    -1,
    3151       66,    -1,    -1,    -1,   123,    71,    -1,    73,    74,    75,
    3152       -1,    -1,    -1,  1092,    -1,    -1,    82,    83,    -1,    -1,
    3153       -1,    -1,    -1,    -1,    -1,   396,    -1,   957,    -1,   400,
    3154       -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
    3155       -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,   431,
    3156       -1,    -1,   118,    -1,   436,    -1,  1160,    -1,    -1,    -1,
    3157      179,   416,   444,    -1,    -1,    -1,    -1,   997,   187,    -1,
    3158      189,   190,    -1,    -1,  1004,   194,   431,   196,   197,  1009,
    3159       -1,   436,    -1,    -1,  1014,    -1,  1016,    -1,   470,   444,
    3160     1020,  1021,  1022,    -1,    -1,  1025,    -1,    -1,    -1,  1203,
    3161       -1,    -1,    -1,    -1,  1034,    -1,   488,    -1,   490,  1220,
    3162       -1,    -1,    -1,    -1,   485,   470,  1220,    -1,    -1,  1198,
    3163       -1,  1225,  1052,  1053,  1023,    -1,    -1,    -1,    10,    11,
    3164       12,    13,    14,   488,  1238,   490,  1240,    -1,    -1,    -1,
    3165     1244,    -1,    -1,    -1,    -1,    -1,    -1,   266,    -1,  1079,
    3166      532,    -1,  1082,    -1,    -1,    -1,    38,    -1,    -1,    -1,
    3167     1202,    -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,
    3168       -1,    -1,    -1,    -1,  1278,  1279,  1280,   532,    -1,    -1,
    3169       -1,    -1,    -1,    -1,    66,  1289,  1290,    -1,    -1,    71,
    3170     1120,    73,    74,    75,    -1,    -1,  1126,  1127,    -1,  1303,
    3171       82,    83,    -1,    -1,    -1,    -1,   577,   578,  1138,    -1,
    3172       -1,    -1,    -1,  1143,    -1,   597,  1146,    -1,  1148,    -1,
    3173       -1,  1151,  1326,    -1,    -1,    -1,   108,    -1,    -1,    -1,
    3174       -1,    -1,    -1,  1337,  1164,    -1,   118,    -1,    -1,    -1,
    3175       -1,    -1,   597,  1098,    -1,    -1,    -1,  1177,    -1,  1179,
    3176     1180,  1181,  1182,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
    3177      642,   643,   644,    -1,    -1,  1195,    -1,  1197,    -1,    -1,
    3178       -1,  1201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,
    3179       -1,    -1,    -1,    -1,    -1,  1396,    -1,   642,   643,   644,
    3180       -1,    -1,    -1,    -1,    -1,   666,    -1,   679,    -1,   670,
    3181     1230,  1231,    -1,  1202,    -1,    -1,   661,    -1,   690,    -1,
    3182     1414,    -1,     0,    -1,   696,    -1,    -1,    -1,    -1,    -1,
    3183       -1,    -1,    -1,    -1,   679,    -1,    -1,    -1,    -1,    -1,
    3184       -1,    -1,   703,    -1,    -1,   690,  1440,    -1,    -1,     0,
    3185       -1,   696,    -1,    31,    -1,     0,     1,    -1,    -1,    -1,
    3186      732,  1281,  1282,   735,    -1,    -1,    -1,    -1,    -1,  1463,
    3187       -1,  1291,    -1,    -1,    -1,    -1,  1470,  1222,    -1,    -1,
    3188       31,    -1,    -1,    -1,    -1,    -1,    31,   732,    66,    -1,
    3189      735,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3190      772,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1298,
    3191       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    63,    -1,
    3192       -1,    66,    -1,  1343,    -1,    -1,    -1,   772,    -1,  1523,
    3193       -1,    -1,    -1,    -1,    -1,  1355,  1530,  1357,  1358,  1359,
    3194       -1,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,  1369,
    3195       -1,    -1,   824,    -1,    -1,   827,    -1,   818,  1378,    -1,
    3196      832,    -1,   834,    -1,    -1,    -1,    -1,   839,    -1,   814,
    3197       -1,    -1,   581,   582,  1394,    -1,   154,    -1,    -1,   824,
    3198       -1,    -1,   827,    -1,    -1,    -1,    -1,   832,    -1,   834,
    3199       -1,    -1,    -1,    -1,   839,    -1,    -1,    -1,    -1,    -1,
    3200       -1,    -1,   611,   154,    -1,   614,   615,    -1,   617,   154,
    3201      619,   620,    -1,    -1,    -1,   624,   625,    -1,    -1,    -1,
    3202       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   901,
    3203     1450,  1451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3204       -1,    -1,    -1,  1463,    -1,    -1,    -1,    -1,    -1,    -1,
    3205     1470,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
    3206       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3207      931,   249,    -1,    -1,   219,    -1,   254,    -1,    -1,    -1,
    3208       -1,    -1,    -1,  1503,    -1,    -1,    -1,  1507,    -1,    -1,
    3209       -1,    -1,    -1,    -1,   703,    -1,    -1,    -1,   249,   708,
    3210      709,    -1,    -1,   254,   249,   714,    -1,    -1,    -1,    -1,
    3211       -1,    -1,    -1,   985,    -1,    -1,  1536,    -1,  1538,    -1,
    3212       -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3213       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3214      985,    29,    30,    31,    -1,    -1,  1566,  1567,    -1,  1010,
    3215       38,    39,    -1,    -1,  1574,  1575,    -1,    -1,    -1,    -1,
    3216       -1,    -1,    -1,    -1,    -1,  1026,  1038,  1039,    -1,  1041,
    3217     1042,   349,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
    3218       -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,  1061,
    3219       -1,    -1,    -1,  1038,  1039,    -1,  1041,  1042,   349,    10,
    3220       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3221       21,    22,    23,    24,    25,    26,  1061,    -1,    29,    30,
    3222       31,    -1,   110,    -1,  1096,  1097,   114,    38,    -1,    -1,
    3223      118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
    3224       -1,    -1,  1103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3225       -1,  1096,  1097,   431,    -1,    66,    -1,    -1,   436,    -1,
    3226       71,    -1,    73,    74,    75,   416,   444,    -1,    -1,    -1,
    3227       -1,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3228      431,    -1,    -1,    -1,    -1,   436,   431,    -1,  1160,    -1,
    3229       -1,    -1,   470,   444,    -1,    -1,    -1,   108,    -1,   110,
    3230       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
    3231      488,    -1,   490,    -1,    -1,  1160,    -1,    -1,    -1,   470,
    3232       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3233       -1,  1203,    -1,    -1,    -1,    -1,    -1,   488,    -1,   490,
    3234       -1,    -1,    -1,    -1,    -1,   490,    -1,    -1,    -1,    -1,
    3235       -1,    -1,    -1,  1225,   532,    -1,    -1,    -1,  1203,    -1,
    3236       -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,    -1,
    3237       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3238     1225,   532,    -1,    -1,    -1,    -1,    -1,   532,    -1,    -1,
    3239       -1,    -1,    -1,  1238,    -1,  1240,    -1,    -1,  1270,    -1,
    3240       -1,    -1,    -1,    -1,    -1,    -1,  1278,  1279,  1280,    -1,
    3241       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,   597,
    3242       -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
    3243       -1,  1303,    -1,  1278,  1279,  1280,    -1,    -1,    -1,    -1,
    3244       -1,    -1,    -1,    -1,  1289,  1290,   597,    -1,    -1,    -1,
    3245       -1,    -1,   597,    -1,  1326,    -1,    -1,    -1,  1303,    -1,
    3246       -1,    -1,    -1,    -1,   642,   643,   644,    -1,    -1,    -1,
    3247       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3248       -1,  1326,    -1,   661,    -1,    -1,    -1,    -1,    -1,  1098,
    3249       -1,   642,   643,   644,    -1,    -1,    -1,   642,   643,   644,
    3250       -1,   679,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3251      661,    -1,   690,    -1,    -1,    -1,   661,    -1,   696,    -1,
    3252       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,     7,
    3253       -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,   690,
    3254       -1,    -1,  1414,    -1,    -1,   696,    -1,    -1,    -1,    -1,
    3255       -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    36,    37,
    3256       38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1414,
    3257       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3258       -1,   732,    -1,    -1,   735,    -1,    -1,    65,    66,    -1,
    3259      735,  1463,    -1,    71,   772,    -1,    -1,    75,  1470,    -1,
    3260       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3261       -1,    -1,    -1,  1222,    -1,    93,    -1,    -1,  1463,    -1,
    3262       -1,   772,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
    3263      108,    -1,   110,    -1,    -1,    -1,   814,    -1,    -1,   117,
    3264      118,   119,   120,   121,   122,    -1,   824,    -1,    -1,   827,
    3265       -1,  1523,    -1,    -1,   832,    -1,   834,    -1,    -1,    -1,
    3266       -1,   839,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,
    3267       -1,    -1,    -1,   824,    -1,    -1,   827,    -1,  1523,    -1,
    3268       -1,   832,   827,   834,    -1,    -1,    -1,    -1,   839,   834,
    3269       -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,
    3270        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3271       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3272       25,    26,    -1,   901,    29,    30,    31,    32,    -1,    -1,
    3273       35,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    10,
    3274       11,    12,    13,    14,    -1,    10,    11,    12,    13,    14,
    3275      901,    -1,    -1,    -1,    -1,    -1,   901,    -1,    63,    -1,
    3276       -1,    66,    44,    68,    -1,    70,    71,    38,    73,    74,
    3277       75,    -1,    -1,    38,    -1,    -1,    -1,    82,    83,    -1,
    3278       -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3279       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
    3280       71,    66,    -1,   108,    75,   110,    71,   985,    -1,    -1,
    3281       75,    82,    83,   118,    -1,    -1,    -1,    82,    83,    -1,
    3282       -1,    -1,    -1,   968,    -1,    -1,    -1,   109,    -1,    -1,
    3283       -1,    -1,    -1,   115,   985,    -1,    -1,   108,    -1,    -1,
    3284      985,    -1,    -1,   108,    -1,    -1,    -1,   118,    -1,    -1,
    3285       -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
    3286     1038,  1039,   144,  1041,  1042,    -1,    -1,    -1,    -1,    -1,
    3287       -1,    -1,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,
    3288       -1,    -1,    -1,  1061,    -1,    -1,    -1,  1038,  1039,    -1,
    3289     1041,  1042,    -1,    -1,    -1,    -1,  1041,  1042,    -1,    -1,
    3290       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3291     1061,    -1,    -1,    -1,    -1,    -1,  1061,    -1,  1096,  1097,
    3292       -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
    3293       -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,
    3294       -1,    -1,    -1,    -1,    -1,  1096,  1097,    -1,    -1,    -1,
    3295       -1,    36,    37,    -1,    39,   237,   238,    10,    11,    12,
    3296       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3297       23,    24,    25,    26,    -1,    -1,    29,    30,    31,   261,
    3298       65,    -1,  1160,    -1,    -1,    38,    71,   269,    -1,    -1,
    3299       75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3300       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1160,
    3301       -1,   293,    -1,    66,   296,    -1,    -1,    -1,    -1,    -1,
    3302       73,    74,    -1,   108,    -1,  1203,    -1,    -1,    -1,    -1,
    3303       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3304       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1225,    -1,    -1,
    3305       -1,    -1,  1203,    -1,    -1,    -1,    -1,  1202,  1203,    -1,
    3306     1238,   343,  1240,    -1,    -1,   118,   348,    -1,    -1,    -1,
    3307       -1,    -1,    -1,    -1,  1225,    -1,    -1,    -1,    -1,    -1,
    3308     1225,    -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,
    3309       -1,    -1,  1270,    -1,    -1,    -1,    -1,    -1,    -1,  1244,
    3310     1278,  1279,  1280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3311       -1,  1289,  1290,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
    3312       -1,    -1,    -1,    -1,    -1,  1303,    -1,  1278,  1279,  1280,
    3313       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,
    3314       -1,    -1,   424,   425,  1289,  1290,    -1,    -1,  1326,   431,
    3315       -1,    -1,  1303,  1298,    -1,    -1,    -1,    -1,  1303,    -1,
    3316       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3317      452,    -1,    -1,   455,    -1,  1326,    -1,    -1,    -1,   461,
    3318       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3319       -1,    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3320       -1,    -1,    -1,    -1,    -1,    -1,   488,    -1,    -1,    -1,
    3321       63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   500,    -1,
    3322       73,    -1,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
    3323      512,    84,   514,    -1,    -1,   517,  1414,   519,   520,    -1,
    3324       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3325      532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3326       -1,    -1,   115,  1414,   117,   118,   119,    -1,    -1,  1414,
    3327       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3328       -1,    -1,    -1,    -1,    -1,  1463,    -1,    43,    -1,    -1,
    3329       -1,    -1,  1470,    -1,    -1,  1440,    -1,    -1,    -1,    -1,
    3330       -1,    -1,    -1,   585,    -1,   158,    -1,    -1,    -1,    -1,
    3331       -1,    -1,  1463,    -1,    -1,   597,    -1,   599,  1463,  1470,
    3332      602,    -1,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
    3333       -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,
    3334       -1,    -1,    -1,    99,    -1,  1523,   628,    -1,    -1,    -1,
    3335       -1,   633,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3336      642,   643,   644,    -1,    -1,    -1,   219,    -1,   221,   222,
    3337      223,    -1,  1523,    -1,    -1,    -1,    -1,    -1,  1523,   661,
    3338       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3339       19,    20,    21,    22,    23,    24,    25,    26,    27,   155,
    3340       29,    30,    31,    -1,   257,    -1,    -1,    -1,   261,    38,
    3341       -1,    -1,    -1,   169,   696,    -1,    -1,    -1,    -1,    -1,
    3342       -1,    -1,    -1,    -1,   277,    -1,    -1,    -1,    -1,    -1,
    3343       -1,    -1,    -1,    -1,    -1,   717,   192,    66,    -1,    -1,
    3344       -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,
    3345      206,    -1,    -1,   735,    -1,   737,    -1,    -1,    -1,   215,
    3346       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
    3347       -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,    -1,   108,
    3348       -1,   110,    36,    37,    -1,    39,    -1,    -1,    -1,   118,
    3349      772,    -1,    -1,    -1,   250,   348,    -1,    -1,    -1,   255,
    3350      353,   354,    -1,    -1,    -1,    -1,    -1,    -1,   361,    -1,
    3351       -1,    65,   268,    -1,    -1,    -1,    -1,    71,   274,    -1,
    3352      276,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3353       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,   294,    93,
    3354       -1,    -1,    -1,    -1,    -1,   827,    -1,    -1,    -1,   831,
    3355       -1,   404,   834,    -1,   108,    -1,   110,    -1,    -1,   113,
    3356       -1,    -1,    -1,   117,   118,   119,   120,   121,   122,   422,
    3357       -1,    -1,    -1,    -1,   427,    -1,   429,    -1,    -1,    -1,
    3358       -1,   337,    -1,    -1,    -1,    -1,   342,    -1,    -1,    -1,
    3359       -1,    -1,    -1,   446,    -1,    -1,   449,   450,    -1,    -1,
    3360       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3361       -1,    -1,   465,    -1,   370,    -1,    -1,    -1,   374,   375,
    3362       -1,   377,    -1,    -1,    -1,    -1,   479,    -1,   384,   385,
    3363       -1,   387,   388,   486,   390,    -1,   392,    -1,    -1,    -1,
    3364       -1,    -1,    -1,     7,    -1,   927,    10,    11,    12,    13,
    3365       14,    -1,    -1,   409,    -1,    -1,    -1,    -1,    -1,    -1,
    3366       -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3367       -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
    3368       -1,    -1,    -1,    -1,    -1,    -1,   442,   969,    -1,    -1,
    3369       -1,    -1,    -1,    -1,    -1,    -1,    -1,   453,    -1,    -1,
    3370       -1,    65,    66,   985,    -1,    -1,    -1,    71,    -1,    -1,
    3371       -1,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3372      476,    85,    86,    -1,    -1,    -1,   482,    -1,    -1,    93,
    3373       -1,   487,    -1,    -1,    -1,    -1,    -1,    -1,  1020,    -1,
    3374       -1,    -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   602,
    3375       -1,    -1,    -1,   117,   118,   119,   120,   121,   122,  1041,
    3376     1042,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   524,    -1,
    3377       -1,    -1,    -1,    -1,    -1,    -1,    -1,   630,   280,    -1,
    3378      282,   283,   635,    -1,   540,    -1,    -1,    -1,   290,   291,
    3379       -1,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
    3380       -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,    -1,
    3381       -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,  1101,
    3382       -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3383      586,    -1,    -1,    -1,    -1,    -1,    -1,   593,    -1,    -1,
    3384       -1,   343,   598,    -1,    65,    -1,    -1,    -1,    -1,    -1,
    3385       71,    -1,    -1,   609,    75,    -1,    -1,    78,    79,    80,
    3386       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3387      723,    -1,    93,    -1,    -1,    -1,    -1,   379,  1160,    -1,
    3388       -1,    -1,    -1,    -1,   737,    -1,    -1,   108,    -1,   110,
    3389       -1,    -1,    -1,    -1,   650,   116,   117,   118,   119,   120,
    3390      121,   122,    -1,    -1,   757,    -1,    -1,    -1,    -1,    -1,
    3391       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3392     1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3393      686,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3394       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3395       25,    26,    27,    -1,    29,    30,    31,    -1,  1240,    -1,
    3396       -1,    -1,    -1,    38,    -1,   818,    -1,    -1,    -1,    -1,
    3397       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,    -1,
    3398       -1,    -1,    -1,    -1,    -1,   741,    -1,    -1,    -1,    -1,
    3399       -1,    66,    -1,    -1,    -1,   751,   752,   850,    73,    74,
    3400       -1,    -1,    77,    -1,    -1,    -1,    -1,  1289,  1290,   765,
    3401       -1,    -1,    -1,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
    3402       -1,    -1,    -1,    -1,    -1,    -1,   782,    -1,   784,    -1,
    3403       -1,    -1,   788,   108,    -1,   110,    -1,    -1,    -1,    -1,
    3404       -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
    3405       -1,    -1,    -1,    -1,   556,   557,   558,   559,   560,   561,
    3406      562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
    3407      572,   573,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3408       36,    37,    -1,    39,   937,    -1,    -1,    -1,    -1,    -1,
    3409       -1,    -1,    -1,    -1,    -1,    -1,    -1,   599,   854,    -1,
    3410       -1,    -1,    -1,    -1,    -1,   861,    -1,    -1,    -1,    65,
    3411      963,    -1,    -1,    -1,    -1,    71,    -1,    -1,   874,    75,
    3412      876,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3413       86,    -1,  1414,    -1,   890,    -1,    -1,    93,   991,    -1,
    3414       -1,   897,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3415       -1,    -1,   108,   909,   110,    -1,   912,    -1,    -1,   115,
    3416       -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
    3417     1023,    -1,    -1,    -1,   930,    -1,    -1,    -1,    -1,    -1,
    3418       -1,  1034,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3419     1472,    -1,  1474,    -1,    -1,    -1,   698,    -1,    10,    11,
    3420       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3421       22,    23,    24,    25,    26,    27,    -1,    -1,   720,    -1,
    3422       -1,    -1,    -1,    -1,    -1,    -1,    38,  1509,    -1,  1511,
    3423       -1,   733,    10,    11,    12,    13,    14,    15,    16,    17,
    3424       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3425       -1,    29,    30,    31,    66,    -1,    -1,  1539,    -1,    -1,
    3426       38,    -1,  1115,  1019,    -1,    77,    -1,    -1,    -1,   153,
    3427      154,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,    -1,
    3428       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
    3429       -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,    77,
    3430       -1,    -1,    -1,   187,    82,    83,    -1,    -1,    -1,   811,
    3431      194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1075,
    3432       -1,    -1,    -1,    -1,   826,    -1,  1082,    -1,    -1,    -1,
    3433      108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3434      118,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,  1202,
    3435       -1,    -1,    -1,    -1,    -1,  1111,    -1,    -1,    -1,    -1,
    3436     1116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1124,    -1,
    3437       65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
    3438       75,    -1,   266,    78,    79,    80,    81,    82,    83,    -1,
    3439       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1155,
    3440       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3441       -1,  1167,    -1,   108,  1170,   110,  1172,   112,   113,    -1,
    3442       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3443     1186,  1187,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
    3444       -1,    -1,    -1,    -1,    -1,  1298,   330,   331,    -1,   333,
    3445      334,    -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,   343,
    3446       -1,    -1,    -1,   347,    -1,    -1,    -1,    -1,    -1,    -1,
    3447       -1,    -1,    -1,    -1,    -1,   977,    -1,    -1,    -1,  1235,
    3448      144,    -1,   366,    -1,    -1,   369,    -1,    -1,    -1,    -1,
    3449      154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3450       -1,    -1,   166,   167,    -1,    -1,  1008,    -1,    -1,    -1,
    3451       -1,    -1,   396,    -1,    -1,    -1,   400,    -1,  1020,     4,
    3452        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3453       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3454       25,    26,    -1,    -1,    29,    30,    31,   431,    -1,    -1,
    3455       -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,  1061,
    3456       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3457      454,    -1,    -1,   237,    -1,    -1,  1332,    -1,  1334,    -1,
    3458       -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
    3459       -1,  1347,    -1,  1349,    -1,    -1,    -1,    -1,   262,    -1,
    3460       -1,   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,    -1,
    3461       -1,  1367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3462       -1,    -1,    -1,    -1,   109,   110,    -1,  1383,  1384,    -1,
    3463       -1,  1133,    -1,   118,    -1,    -1,    -1,    -1,    -1,  1395,
    3464       -1,    -1,  1398,    -1,   528,    -1,    -1,   531,   532,    -1,
    3465       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3466       -1,    -1,    -1,    -1,  1420,    -1,    -1,    -1,    -1,    -1,
    3467       -1,    -1,    -1,  1429,    -1,  1177,  1432,    -1,  1434,  1435,
    3468     1436,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1191,
    3469     1192,    -1,    -1,   577,   578,    -1,    -1,    -1,    -1,    -1,
    3470       -1,  1554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3471       -1,    -1,   596,   597,   378,   599,    -1,    -1,    -1,    -1,
    3472     1476,    -1,  1478,    -1,   608,  1481,   610,   611,    -1,    -1,
    3473       -1,    -1,    -1,   617,    -1,    -1,    -1,    -1,    -1,    -1,
    3474     1496,    -1,    -1,   627,   628,    -1,    -1,    -1,    -1,   633,
    3475       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   642,   643,
    3476      644,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3477       -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,
    3478       -1,    -1,   666,   667,    -1,    -1,   670,   671,    -1,    -1,
    3479       -1,    -1,    -1,   677,    -1,    -1,    -1,    -1,    -1,    -1,
    3480       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3481       -1,   695,   696,   697,    -1,   699,   480,    -1,    -1,   703,
    3482       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3483       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3484       29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,
    3485       -1,   735,   736,    -1,    -1,   519,    -1,    -1,    -1,    -1,
    3486       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   532,    -1,
    3487       -1,    -1,    -1,    -1,    -1,   539,    -1,    66,   542,    -1,
    3488       -1,    -1,    -1,    -1,    73,    74,    -1,   771,   772,   553,
    3489      554,    -1,   776,   777,    -1,    -1,    -1,    -1,    -1,  1401,
    3490       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3491       -1,   575,    -1,    -1,    -1,    -1,  1418,    -1,    -1,    -1,
    3492       -1,   585,    -1,    -1,    -1,    -1,    -1,    -1,   592,   118,
    3493       -1,    -1,    -1,   597,   818,    -1,    -1,    -1,    -1,    -1,
    3494       -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,   833,
    3495      834,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,    -1,
    3496       -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
    3497       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3498       -1,    -1,    -1,   647,    -1,    -1,    -1,    -1,    -1,  1491,
    3499     1492,    -1,   656,    -1,    -1,    -1,    -1,    -1,    -1,     3,
    3500        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3501       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3502       24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
    3503       -1,    35,   696,    -1,    38,    39,    -1,    -1,    -1,   923,
    3504       -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,    36,    37,
    3505       -1,    39,    -1,   937,    -1,    -1,    -1,    -1,    -1,    63,
    3506       -1,   945,    66,    -1,    68,    -1,    70,    71,    -1,    73,
    3507       74,    75,    -1,    -1,   958,   959,    -1,    65,    82,    83,
    3508       -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
    3509       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3510       -1,   985,    -1,    -1,   108,    93,   110,   991,   772,    -1,
    3511      774,    -1,    -1,    -1,   118,    -1,   780,    -1,    -1,    -1,
    3512      108,    -1,   110,   787,    -1,   113,  1010,  1011,    -1,   117,
    3513      118,   119,   120,   121,   122,    -1,  1020,    -1,    -1,    -1,
    3514       -1,    -1,  1026,  1027,    -1,  1029,  1030,  1031,    -1,    -1,
    3515       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1041,  1042,    -1,
    3516       -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,   832,    -1,
    3517      834,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3518       -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,    -1,    -1,
     4052      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     4053      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
    35194054      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    35204055      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3521       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,
    3522     1104,    -1,    -1,    -1,    -1,   889,    -1,    -1,    -1,   893,
    3523       -1,  1115,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
    3524        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3525       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3526       -1,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
    3527       37,    38,    39,    40,    -1,    42,  1160,    -1,    45,    46,
    3528       47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
    3529       -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    66,
    3530       -1,    68,    -1,    70,    71,   969,    73,    74,    75,    -1,
    3531       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3532       -1,   985,   986,    -1,    -1,    -1,    93,    -1,   992,    -1,
    3533       -1,    -1,    36,    37,   998,    39,  1220,  1001,    -1,  1003,
    3534       -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
    3535      117,   118,   119,   120,   121,   122,  1240,    -1,    -1,  1023,
    3536      127,    65,    -1,    -1,   131,    -1,    -1,    71,    -1,    -1,
    3537     1034,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3538       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
    3539       -1,    -1,  1056,    -1,  1058,    -1,    -1,    -1,    -1,    -1,
    3540       -1,    -1,    -1,    -1,   108,  1289,  1290,    -1,    -1,  1073,
    3541     1074,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
    3542       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3543     1094,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
    3544        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3545       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3546       25,    26,    -1,    -1,    29,    30,    31,    32,    -1,    -1,
    3547       35,    36,    37,    38,    39,    -1,    -1,  1141,    -1,    -1,
    3548       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3549       36,    37,    -1,    39,    -1,    -1,  1160,    -1,    -1,    -1,
    3550       65,    66,    -1,    68,    -1,    70,    71,    -1,    73,    74,
    3551       75,  1175,  1176,    78,    79,    80,    81,    82,    83,    65,
    3552       85,    86,    -1,    -1,    -1,    71,    -1,    -1,    93,    75,
    3553     1414,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3554       86,    -1,    -1,   108,    -1,   110,    -1,    93,    -1,    -1,
    3555       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3556       -1,    -1,   108,    -1,   110,    -1,   131,    -1,    -1,    -1,
    3557       -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
    3558       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3559       -1,    -1,  1256,    -1,    -1,    -1,     3,     4,     5,     6,
    3560        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3561       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3562     1504,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
    3563       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3564       -1,    -1,    -1,    -1,    -1,  1529,  1530,    -1,    -1,    -1,
    3565       -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    65,    66,
    3566       -1,    68,    -1,    70,    71,    -1,    73,    74,    75,    -1,
    3567     1554,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3568       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3569       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3570       -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
    3571      117,   118,   119,   120,   121,   122,    -1,    -1,     4,     5,
    3572        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3573       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3574       26,  1405,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
    3575       36,    37,    38,    39,    -1,    10,    11,    12,    13,    14,
    3576       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3577       25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    65,
    3578       66,    -1,    68,    38,    70,    71,    -1,    73,    74,    75,
    3579       -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3580       86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
    3581       -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
    3582       -1,    -1,   108,  1487,   110,    -1,    -1,    82,    83,   115,
    3583       -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
    3584        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3585       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3586       -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
    3587       37,    38,    39,    -1,    -1,  1539,    -1,    10,    11,    12,
    3588       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3589       23,    24,    25,    26,    27,    -1,    -1,    -1,    65,    66,
    3590       -1,    68,    -1,    70,    71,    38,    73,    74,    75,    -1,
    3591       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3592       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3593       -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
    3594       -1,   108,    -1,   110,    77,    -1,    -1,    -1,   115,    -1,
    3595      117,   118,   119,   120,   121,   122,     4,     5,     6,     7,
    3596        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3597       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3598       -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,
    3599       38,    39,    -1,    10,    11,    12,    13,    14,    15,    16,
    3600       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3601       -1,    -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,
    3602       68,    38,    70,    71,    -1,    73,    74,    75,    -1,    -1,
    3603       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3604       -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,
    3605       -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
    3606      108,    -1,   110,    -1,    -1,    -1,    -1,   115,    -1,   117,
    3607      118,   119,   120,   121,   122,     4,     5,     6,     7,     8,
    3608        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3609       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3610       29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
    3611       39,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3612       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3613       -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,    68,
    3614       38,    70,    71,    -1,    73,    74,    75,    -1,    -1,    78,
    3615       79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
    3616       -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,
    3617       -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,   108,
    3618       -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
    3619      119,   120,   121,   122,     4,     5,     6,     7,     8,     9,
    3620       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3621       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3622       30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,
    3623       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3624       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3625       -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    38,
    3626       70,    71,    -1,    73,    74,    75,    -1,    -1,    78,    79,
    3627       80,    81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,
    3628       -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,    -1,
    3629       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
    3630      110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,
    3631      120,   121,   122,     4,     5,     6,     7,     8,     9,    10,
    3632       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3633       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
    3634       31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
    3635       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3636       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3637       -1,    -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,
    3638       71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
    3639       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3640       -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3641       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
    3642       -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
    3643      121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
    3644       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3645       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3646       -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,    -1,
    3647       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3648       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3649       -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,    71,
    3650       -1,    73,    74,    75,    -1,    -1,    78,    79,    80,    81,
    3651       82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
    3652       -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3653       -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
    3654       -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
    3655      122,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    3656       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3657       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3658       32,    -1,    -1,    35,    -1,    -1,    38,    39,    -1,    -1,
    3659       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3660       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3661       -1,    63,    -1,    -1,    66,    -1,    68,    -1,    70,    71,
    3662       -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
    3663       82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3664       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3665       -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
    3666       -1,    -1,   114,    -1,    -1,    -1,   118,     3,     4,     5,
    3667        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3668       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3669       26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
    3670       -1,    -1,    38,    10,    11,    12,    13,    14,    15,    16,
    3671       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3672       -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
    3673       66,    38,    68,    -1,    70,    71,    -1,    73,    74,    75,
    3674       -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,    -1,
    3675       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3676       -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
    3677       -1,    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,
    3678       -1,    -1,   118,     3,     4,     5,     6,     7,     8,     9,
    3679       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3680       20,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
    3681       30,    31,    32,    -1,    -1,    35,    -1,    -1,    38,    -1,
    3682       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3683       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3684       -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
    3685       70,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,     3,
    3686        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3687       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3688       24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
    3689      110,    35,    -1,    -1,    38,    -1,    -1,    -1,   118,    -1,
    3690       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3691       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3692       -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
    3693       74,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
    3694       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3695       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
    3696       31,    -1,    -1,    -1,    -1,    -1,   110,    38,    -1,    -1,
    3697       -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
    3698       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3699       -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
    3700       -1,    -1,    73,    74,     4,     5,     6,     7,     8,     9,
    3701       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3702       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3703       30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,   110,
    3704       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
    3705       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3706       -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
    3707       70,    71,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
    3708       -1,    -1,    82,    83,    -1,    -1,    10,    11,    12,    13,
    3709       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3710       24,    25,    26,    -1,    -1,    29,    30,    31,   108,    -1,
    3711      110,    -1,    -1,    -1,    38,    -1,    -1,    -1,   118,     4,
    3712        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3713       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3714       25,    26,    66,    -1,    29,    30,    31,    71,    -1,    73,
    3715       74,    75,    -1,    38,    -1,    -1,    -1,    -1,    82,    83,
    3716       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3717       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3718       -1,    66,    -1,    68,   108,    70,   110,    -1,    73,    74,
    3719       -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
    3720       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3721       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3722       -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
    3723       -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
    3724       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3725       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3726       30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
    3727       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3728       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3729       -1,    -1,    29,    30,    31,    -1,    66,    -1,    68,    -1,
    3730       70,    38,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
    3731       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3732       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    66,
    3733       -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
    3734      110,    -1,    -1,    -1,    -1,    82,    83,    -1,   118,     4,
    3735        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3736       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3737       25,    26,    -1,   110,    29,    30,    31,    -1,    -1,    -1,
    3738       -1,   118,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
    3739       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3740       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3741       -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
    3742        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3743       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3744       24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
    3745       -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,    -1,
    3746       -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
    3747       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3748       -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
    3749       74,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3750       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3751       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3752       -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,
    3753       -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
    3754       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3755       -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
    3756       73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
    3757       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3758       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3759       -1,    -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,
    3760       -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,
    3761       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3762       -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
    3763       -1,    73,    74,    10,    11,    12,    13,    14,    15,    16,
    3764       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3765       -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
    3766       37,    38,    39,    -1,    -1,    -1,    -1,    -1,   110,    -1,
    3767       -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,
    3768       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
    3769       -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
    3770       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3771       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3772       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3773       -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
    3774      117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
    3775       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3776       24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
    3777       -1,    -1,    36,    37,    38,    39,    10,    11,    12,    13,
    3778       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3779       24,    25,    26,    27,    -1,    29,    30,    31,    -1,    -1,
    3780       -1,    65,    66,    -1,    38,    -1,    -1,    71,    -1,    73,
    3781       74,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
    3782       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
    3783       -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,
    3784       74,    75,    -1,    77,   108,    -1,   110,   111,    82,    83,
    3785       -1,    -1,    -1,   117,   118,   119,   120,   121,   122,    10,
    3786       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3787       21,    22,    23,    24,    25,    26,   110,    -1,    29,    30,
    3788       31,    -1,    -1,    -1,   118,    36,    37,    38,    39,    10,
    3789       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3790       21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
    3791       31,    -1,    -1,    -1,    65,    66,    -1,    38,    -1,    -1,
    3792       71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
    3793       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3794       -1,    -1,    93,    -1,    -1,    66,    -1,    -1,    -1,    -1,
    3795       71,    -1,    73,    74,    -1,    -1,    -1,   108,   109,   110,
    3796       -1,    82,    83,    -1,    -1,    -1,   117,   118,   119,   120,
    3797      121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
    3798       18,    19,    20,    21,    22,    23,    24,    25,    26,   110,
    3799       -1,    29,    30,    31,    -1,    -1,    -1,   118,    36,    37,
    3800       38,    39,    10,    11,    12,    13,    14,    15,    16,    17,
    3801       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3802       -1,    29,    30,    31,    -1,    -1,    -1,    65,    66,    -1,
    3803       38,    39,    -1,    71,    -1,    73,    74,    75,    -1,    -1,
    3804       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3805       -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    66,    -1,
    3806       -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    -1,
    3807      108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,
    3808      118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
    3809       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3810       25,    26,   110,    -1,    29,    30,    31,    -1,    -1,    -1,
    3811      118,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
    3812       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3813       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3814       65,    66,    29,    30,    31,    -1,    71,    -1,    73,    74,
    3815       75,    38,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3816       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
    3817       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3818       -1,    -1,    -1,   108,    -1,   110,    73,    74,    -1,    -1,
    3819       -1,    -1,   117,   118,   119,   120,   121,   122,    10,    11,
    3820       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3821       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3822       -1,   108,    -1,   110,    36,    37,    38,    39,    -1,    -1,
    3823       -1,   118,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3824       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3825       24,    25,    26,    65,    66,    29,    30,    31,    -1,    71,
    3826       -1,    73,    74,    75,    38,    -1,    78,    79,    80,    81,
    3827       82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
    3828       -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3829       -1,    -1,    66,    -1,    -1,    -1,   108,    -1,   110,    73,
    3830       74,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
    3831      122,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3832       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
    3833       29,    30,    31,    -1,   108,    -1,   110,    36,    37,    38,
    3834       39,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    10,
    3835       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3836       21,    22,    23,    24,    25,    26,    65,    66,    29,    30,
    3837       31,    -1,    71,    -1,    73,    74,    75,    38,    39,    78,
    3838       79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
    3839       -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
    3840       -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   108,
    3841       -1,   110,    73,    74,    -1,    -1,    -1,    -1,   117,   118,
    3842      119,   120,   121,   122,     3,     4,     5,     6,     7,     8,
    3843        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3844       19,    20,    21,    22,    23,    24,    25,    26,    -1,   110,
    3845       29,    30,    31,   114,    -1,    -1,    -1,   118,    -1,    38,
    3846       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3847       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3848       30,    31,    -1,    -1,    -1,    -1,    -1,    66,    38,    68,
    3849       -1,    70,    -1,    -1,    73,    74,    -1,    -1,    10,    11,
    3850       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3851       22,    23,    24,    25,    26,    -1,    66,    29,    30,    31,
    3852       -1,    71,    -1,    73,    74,    75,    38,    -1,    -1,    -1,
    3853       -1,    -1,    82,    83,   113,    -1,    10,    11,    12,    13,
    3854       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3855       24,    25,    26,    -1,    66,    29,    30,    31,   108,    71,
    3856      110,    73,    74,    75,    38,    -1,    -1,    -1,   118,    -1,
    3857       82,    83,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3858       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3859       26,    -1,    66,    29,    30,    31,   108,    -1,   110,    73,
    3860       74,    -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,
    3861       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3862       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3863       66,    -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,
    3864       -1,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
    3865       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3866       25,    26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,
    3867       73,    74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,
    3868       -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
    3869       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3870       -1,    66,    29,    30,    31,    -1,    -1,   110,    73,    74,
    3871       -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,    13,
    3872       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3873       24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    66,
    3874       -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,
    3875       -1,    -1,    -1,   118,    10,    11,    12,    13,    14,    15,
    3876       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3877       26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,
    3878       74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,
    3879       -1,   118,    10,    11,    12,    13,    14,    15,    16,    17,
    3880       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
    3881       66,    29,    30,    31,    -1,    -1,   110,    73,    74,    -1,
    3882       38,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
    3883       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3884       25,    26,    -1,    -1,    29,    30,    31,    -1,    66,    -1,
    3885       -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,    -1,
    3886       -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
    3887       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3888       -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,    74,
    3889       -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3890      118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3891       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3892       -1,    -1,    -1,    -1,    -1,   110,    73,    74,    -1,    -1,
    3893       -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
    3894       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3895       20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
    3896       30,    31,    -1,   110,    -1,    -1,    -1,    -1,    38,    -1,
    3897       -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3898       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3899       -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
    3900       70,    -1,    -1,    73,    74,    36,    37,    -1,    39,    40,
    3901       -1,    42,    -1,    -1,    45,    46,    47,    48,    49,    50,
    3902       51,    52,    -1,    -1,    55,    56,    -1,    -1,    -1,    60,
    3903       61,    -1,    63,    -1,    65,    -1,    -1,    -1,    -1,   109,
    3904       71,    -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,
    3905       81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
    3906       -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3907       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
    3908       -1,    -1,   113,    -1,    -1,    -1,   117,   118,   119,   120,
    3909      121,   122,    -1,    -1,    -1,    -1,   127,    -1,    36,    37,
    3910      131,    39,    40,    -1,    42,    -1,    -1,    45,    46,    47,
    3911       48,    49,    50,    51,    52,    -1,    -1,    -1,    56,    -1,
    3912       -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
    3913       -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
    3914       78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
    3915       -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
    3916       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3917      108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,   117,
    3918      118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
    3919       -1,    36,    37,   131,    39,    40,    -1,    42,    43,    44,
    3920       45,    46,    47,    48,    49,    50,    51,    52,    -1,    -1,
    3921       55,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
    3922       65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
    3923       75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3924       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
    3925       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3926       -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,
    3927       -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
    3928       36,    37,   127,    39,    40,    -1,    42,    43,    44,    45,
    3929       46,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
    3930       56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
    3931       -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
    3932       -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
    3933       86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
    3934       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3935       -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,
    3936       -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    36,
    3937       37,   127,    39,    40,    -1,    42,    -1,    -1,    45,    46,
    3938       47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
    3939       -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
    3940       -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,
    3941       -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
    3942       -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
    3943       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3944       -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
    3945      117,   118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,
    3946      127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3947       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3948       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3949       -1,    -1,    -1,    -1,    -1,    38,    -1,    36,    37,    -1,
    3950       39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3951       -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
    3952       -1,    -1,    -1,    66,    -1,    68,    65,    70,    -1,    -1,
    3953       73,    74,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,
    3954       79,    80,    81,    82,    83,    65,    85,    86,    -1,    -1,
    3955       -1,    71,    95,    -1,    93,    75,    -1,    -1,    78,    79,
    3956       80,    81,    82,    83,    -1,    85,    86,    -1,    -1,   108,
    3957       -1,   110,    -1,    93,    36,    37,    -1,    39,   117,   118,
    3958      119,   120,   121,   122,    -1,    -1,    -1,    -1,   108,    -1,
    3959      110,    -1,    -1,    36,    37,    -1,    39,   117,   118,   119,
    3960      120,   121,   122,    65,    -1,    -1,    -1,    -1,    -1,    71,
    3961       -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,    81,
    3962       82,    83,    65,    85,    86,    -1,    -1,    -1,    71,    -1,
    3963       -1,    93,    75,    -1,    -1,    78,    79,    80,    81,    82,
    3964       83,    -1,    85,    86,    -1,    -1,   108,    -1,   110,    -1,
    3965       93,    36,    37,    -1,    39,   117,   118,   119,   120,   121,
    3966      122,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,
    3967       -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
    3968       65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
    3969       75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
    3970       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
    3971       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3972       -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,
    3973       -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
    3974        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3975       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3976       26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3977       -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3978       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3979       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3980       66,    -1,    68,    -1,    70,    71,    -1,    73,    74,    75,
    3981       -1,    -1,    -1,    -1,    -1,    -1,    82,    83,     3,     4,
    3982        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3983       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3984       25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
    3985       -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
    3986       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3987       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3988       -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
    3989        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3990       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3991       23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
    3992       -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,
    3993       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3994       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3995       -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
    3996       73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
    3997       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3998       22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
    3999       -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
    4000       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4001       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4002       -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
    4003       -1,    73,    74
     4056      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
     4057      75
    40044058};
    40054059
     
    40104064       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    40114065      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    4012       22,    23,    24,    25,    26,    29,    30,    31,    32,    35,
    4013       38,    39,    63,    66,    68,    70,    71,    73,    74,    75,
    4014       82,    83,   108,   110,   118,   136,   139,   196,   210,   211,
     4066      22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
     4067      36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
     4068      76,    83,    84,   109,   111,   119,   137,   140,   197,   211,
    40154069     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
    4016      222,   223,   224,   225,   226,   227,   229,   230,   231,   232,
    4017      233,   234,   235,   236,   238,   239,   240,   241,   242,   243,
    4018      244,   252,   253,   279,   280,   281,   289,   292,   298,   299,
    4019      301,   303,   304,   310,   315,   319,   320,   321,   322,   323,
    4020      324,   325,   326,   346,   363,   364,   365,   366,    71,   118,
    4021      138,   139,   213,   215,   223,   225,   235,   239,   241,   280,
    4022       81,   108,   308,   309,   310,   308,   308,    71,    73,    74,
    4023       75,   137,   138,   269,   270,   290,   291,    73,    74,   270,
    4024      108,   301,    11,   197,   108,   118,   315,   320,   321,   322,
    4025      324,   325,   326,   111,   133,   110,   216,   223,   225,   319,
    4026      323,   362,   363,   366,   367,   134,   106,   130,   273,   113,
    4027      134,   171,    73,    74,   136,   268,   134,   134,   134,   115,
    4028      134,    73,    74,   108,   118,   305,   314,   315,   316,   317,
    4029      318,   319,   323,   327,   328,   329,   330,   331,   337,     3,
    4030       27,    77,   237,     3,     5,    73,   110,   118,   215,   226,
    4031      230,   233,   242,   281,   319,   323,   366,   213,   215,   225,
    4032      235,   239,   241,   280,   319,   323,    32,   231,   231,   226,
    4033      233,   134,   231,   226,   231,   226,    74,   108,   113,   270,
    4034      281,   113,   270,   231,   226,   115,   134,   134,     0,   133,
    4035      108,   171,   308,   308,   133,   110,   223,   225,   364,   268,
    4036      268,   225,   130,   108,   118,   305,   315,   319,   110,   118,
    4037      366,   302,   228,   310,   108,   286,   108,   108,    50,   108,
    4038       36,    37,    39,    65,    71,    75,    78,    79,    80,    81,
    4039       85,    86,    93,   108,   110,   117,   118,   119,   120,   121,
    4040      122,   135,   139,   140,   141,   142,   147,   148,   149,   150,
     4070     222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
     4071     233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
     4072     244,   245,   253,   254,   280,   281,   282,   290,   293,   299,
     4073     300,   302,   304,   305,   311,   316,   320,   321,   322,   323,
     4074     324,   325,   326,   327,   347,   364,   365,   366,   367,    72,
     4075     119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
     4076     281,    82,   109,   309,   310,   311,   309,   309,    72,    74,
     4077      75,    76,   138,   139,   270,   271,   291,   292,    74,    75,
     4078     271,   109,   302,    11,   198,   109,   119,   316,   321,   322,
     4079     323,   325,   326,   327,   112,   134,   111,   217,   224,   226,
     4080     320,   324,   363,   364,   367,   368,   135,   107,   131,   274,
     4081     114,   135,   172,    74,    75,   137,   269,   135,   135,   135,
     4082     116,   135,    74,    75,   109,   119,   306,   315,   316,   317,
     4083     318,   319,   320,   324,   328,   329,   330,   331,   332,   338,
     4084       3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
     4085     227,   231,   234,   243,   282,   320,   324,   367,   214,   216,
     4086     226,   236,   240,   242,   281,   320,   324,    33,   232,   232,
     4087     227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
     4088     271,   282,   114,   271,   232,   227,   116,   135,   135,     0,
     4089     134,   109,   172,   309,   309,   134,   111,   224,   226,   365,
     4090     269,   269,   226,   131,   109,   119,   306,   316,   320,   111,
     4091     119,   367,   303,   229,   311,   109,   287,   109,   109,    51,
     4092     109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
     4093      82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
     4094     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
    40414095     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    4042      162,   164,   223,   272,   288,   362,   367,   225,   109,   109,
    4043      109,   109,   109,   109,   109,    73,    74,   110,   223,   268,
    4044      346,   364,   110,   118,   162,   215,   216,   222,   225,   229,
    4045      230,   235,   238,   239,   241,   258,   259,   263,   264,   265,
    4046      266,   280,   346,   358,   359,   360,   361,   366,   367,   111,
    4047      108,   319,   323,   366,   108,   115,   131,   110,   113,   118,
    4048      162,   274,   274,   114,   133,   115,   131,   108,   115,   131,
    4049      115,   131,   115,   131,   308,   131,   315,   316,   317,   318,
    4050      328,   329,   330,   331,   225,   314,   327,    63,   307,   110,
    4051      308,   345,   346,   308,   308,   171,   133,   108,   308,   345,
    4052      308,   308,   225,   305,   108,   108,   224,   225,   223,   225,
    4053      111,   133,   223,   362,   367,   171,   133,   268,   273,   215,
    4054      230,   319,   323,   171,   133,   290,   225,   235,   131,   225,
    4055      225,   288,    39,   110,   223,   245,   246,   247,   248,   362,
    4056      366,   113,   254,   270,   113,   225,   290,   131,   131,   301,
    4057      133,   138,   267,     3,   134,   205,   206,   220,   222,   225,
    4058      133,   307,   108,   307,   162,   315,   225,   108,   133,   268,
    4059      113,    32,    33,    34,   223,   282,   283,   285,   133,   128,
    4060      130,   287,   133,   226,   232,   233,   268,   311,   312,   313,
    4061      108,   140,   108,   147,   108,   147,   149,   108,   147,   108,
    4062      108,   147,   147,   138,   110,   162,   167,   171,   223,   271,
    4063      362,   111,   133,   149,   149,    81,    84,    85,    86,   108,
    4064      110,   112,   113,    96,    97,    98,    99,   100,   101,   102,
    4065      103,   104,   105,   130,   166,   149,   118,   123,   124,   120,
    4066      121,    87,    88,    89,    90,   125,   126,    91,    92,   119,
    4067      127,   128,    93,    94,   129,   130,   369,   108,   118,   341,
    4068      342,   343,   344,   345,   109,   115,   108,   345,   346,   108,
    4069      345,   346,   133,   108,   223,   364,   111,   133,   110,   118,
    4070      134,   223,   225,   357,   358,   366,   367,   134,   108,   110,
    4071      118,   315,   332,   333,   334,   335,   336,   337,   338,   339,
    4072      340,   346,   347,   348,   349,   350,   351,   352,   118,   366,
    4073      225,   134,   134,   118,   223,   225,   359,   268,   223,   346,
    4074      359,   268,   108,   133,   133,   133,   111,   133,    71,    79,
    4075      110,   112,   139,   270,   274,   275,   276,   277,   278,   133,
    4076      133,   133,   133,   133,   133,   305,   109,   109,   109,   109,
    4077      109,   109,   109,   314,   327,   108,   273,   111,   205,   133,
    4078      305,   167,   272,   167,   272,   305,   110,   205,   307,   171,
    4079      133,   205,   109,   247,   248,   111,   133,   108,   116,   118,
    4080      249,   251,   314,   315,   327,   345,   353,   354,   355,   356,
    4081      114,   246,   115,   131,   115,   131,   270,   245,   115,   368,
    4082      130,   255,   254,   225,   260,   261,   262,   265,   266,   109,
    4083      115,   171,   133,   118,   162,   133,   222,   225,   259,   358,
    4084      366,   299,   300,   108,   118,   332,   109,   115,   369,   270,
    4085      282,   108,   113,   270,   272,   282,   109,   115,   108,   140,
    4086      109,   116,   271,   271,   271,   110,   138,   144,   162,   272,
    4087      271,   111,   133,   109,   115,   109,   108,   118,   353,   109,
    4088      115,   162,   110,   138,   110,   143,   144,   133,   110,   138,
    4089      143,   162,   162,   149,   149,   149,   150,   150,   151,   151,
    4090      152,   152,   152,   152,   153,   153,   154,   155,   156,   157,
    4091      158,   116,   167,   162,   133,   342,   343,   344,   225,   341,
    4092      308,   308,   162,   272,   133,   267,   118,   133,   223,   346,
    4093      359,   225,   229,   111,   133,   111,   366,   111,   108,   133,
    4094      315,   333,   334,   335,   338,   348,   349,   350,   111,   133,
    4095      225,   332,   336,   347,   108,   308,   351,   369,   308,   308,
    4096      369,   108,   308,   351,   308,   308,   308,   308,   346,   223,
    4097      357,   367,   268,   111,   115,   111,   115,   369,   223,   359,
    4098      369,   256,   257,   258,   259,   256,   256,   268,   162,   133,
    4099      110,   270,   116,   115,   368,   274,    79,   110,   116,   278,
    4100       28,   207,   208,   268,   256,   138,   305,   138,   307,   108,
    4101      345,   346,   108,   345,   346,   140,   346,   171,   260,   109,
    4102      109,   109,   109,   111,   171,   205,   171,   113,   131,   131,
    4103      110,   315,   354,   355,   356,   160,   161,   225,   353,   250,
    4104      251,   250,   308,   308,   270,   308,   114,   270,   114,   161,
    4105      368,   134,   134,   138,   220,   134,   134,   256,   108,   118,
    4106      366,   134,   114,   225,   283,   284,   134,   133,   133,   108,
    4107      134,   109,   312,   167,   168,   116,   131,   110,   140,   198,
    4108      199,   200,   109,   115,   109,   133,   116,   109,   109,   109,
    4109      162,   225,   113,   149,   164,   162,   163,   165,   115,   134,
    4110      133,   133,   109,   115,   162,   133,   114,   160,   116,   260,
    4111      109,   109,   109,   341,   260,   109,   256,   223,   359,   110,
    4112      118,   162,   162,   225,   338,   260,   109,   109,   109,   109,
    4113      109,   109,   109,     7,   225,   332,   336,   347,   133,   133,
    4114      369,   133,   133,   109,   134,   134,   134,   134,   273,   134,
    4115      160,   161,   162,   306,   133,   274,   276,   114,   133,   209,
    4116      270,    39,    40,    42,    45,    46,    47,    48,    49,    50,
    4117       51,    52,    56,    60,    61,   110,   127,   138,   168,   169,
    4118      170,   171,   172,   173,   175,   176,   188,   190,   191,   196,
    4119      210,   304,    28,   134,   130,   273,   133,   133,   109,   134,
    4120      171,   245,   111,   109,   109,   109,   353,   249,   255,   114,
    4121      109,   115,   111,   111,   134,   225,   115,   369,   286,   109,
    4122      282,   213,   215,   223,   294,   295,   296,   297,   288,   109,
    4123      109,   116,   161,   108,   109,   116,   115,   138,   162,   162,
    4124      275,   115,   134,   165,   111,   138,   145,   146,   162,   144,
    4125      134,   145,   160,   164,   134,   108,   345,   346,   134,   134,
    4126      133,   134,   134,   134,   162,   109,   134,   108,   345,   346,
    4127      108,   351,   108,   351,   346,   224,     7,   118,   134,   162,
    4128      260,   260,   259,   263,   263,   264,   115,   115,   109,   109,
    4129      111,    95,   122,   134,   134,   145,   274,   162,   115,   131,
    4130      210,   214,   225,   229,   108,   108,   169,   108,   108,   131,
    4131      138,   131,   138,   118,   138,   168,   108,   171,   163,   163,
    4132      111,   142,   116,   131,   134,   133,   134,   209,   109,   162,
    4133      260,   260,   308,   109,   114,   108,   345,   346,   133,   109,
    4134      133,   134,   305,   114,   133,   134,   134,   109,   113,   198,
    4135      111,   161,   131,   198,   200,   109,   115,   134,   368,   163,
    4136      111,   134,    84,   112,   115,   134,   134,   111,   134,   109,
    4137      133,   109,   109,   111,   111,   111,   134,   109,   133,   133,
    4138      133,   162,   162,   134,   111,   134,   134,   134,   134,   133,
    4139      133,   161,   161,   111,   111,   134,   134,   270,   225,   167,
    4140      167,    46,   167,   133,   131,   131,   167,   131,   131,   167,
    4141       57,    58,    59,   192,   193,   194,   131,    62,   131,   113,
    4142      308,   173,   114,   131,   134,   134,   133,    95,   265,   266,
    4143      109,   295,   115,   131,   115,   131,   114,   293,   116,   140,
    4144      109,   109,   116,   165,   111,   114,   111,   110,   146,   110,
    4145      146,   146,   111,   111,   111,   260,   111,   260,   260,   260,
    4146      134,   134,   111,   111,   109,   109,   111,   115,    95,   259,
    4147       95,   134,   111,   111,   109,   109,   108,   109,   168,   189,
    4148      210,   131,   109,   108,   108,   171,   194,    57,    58,   162,
    4149      143,   169,   109,   109,   260,   113,   133,   133,   294,   140,
    4150      201,   108,   131,   201,   134,   116,   133,   133,   134,   134,
    4151      134,   134,   111,   111,   133,   134,   111,   169,    43,    44,
    4152      113,   179,   180,   181,   167,   169,   134,   109,   168,   113,
    4153      181,    95,   133,    95,   133,   108,   108,   131,   114,   134,
    4154      133,   268,   305,   114,   115,   116,   161,   109,   111,   162,
    4155      145,   145,   109,   109,   109,   109,   263,    41,   161,   177,
    4156      178,   306,   116,   133,   169,   179,   109,   131,   169,   131,
    4157      133,   109,   133,   109,   133,    95,   133,    95,   133,   131,
    4158      109,   294,   140,   138,   202,   109,   131,   116,   134,   134,
    4159      169,    95,   115,   116,   134,   203,   204,   210,   131,   168,
    4160      168,   203,   171,   195,   223,   362,   171,   195,   109,   133,
    4161      109,   133,   114,   109,   115,   162,   111,   111,   161,   177,
    4162      180,   182,   183,   133,   131,   180,   184,   185,   134,   108,
    4163      118,   305,   353,   138,   134,   171,   195,   171,   195,   108,
    4164      131,   138,   169,   174,   114,   180,   210,   168,    55,   174,
    4165      187,   114,   180,   109,   225,   109,   134,   134,   288,   169,
    4166      174,   131,   186,   187,   174,   187,   171,   171,   109,   109,
    4167      109,   186,   134,   134,   171,   171,   134,   134
     4096     161,   163,   165,   224,   273,   289,   363,   368,   226,   110,
     4097     110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
     4098     269,   347,   365,   111,   119,   163,   216,   217,   223,   226,
     4099     230,   231,   236,   239,   240,   242,   259,   260,   264,   265,
     4100     266,   267,   281,   347,   359,   360,   361,   362,   367,   368,
     4101     112,   109,   320,   324,   367,   109,   116,   132,   111,   114,
     4102     119,   163,   275,   275,   115,   134,   116,   132,   109,   116,
     4103     132,   116,   132,   116,   132,   309,   132,   316,   317,   318,
     4104     319,   329,   330,   331,   332,   226,   315,   328,    64,   308,
     4105     111,   309,   346,   347,   309,   309,   172,   134,   109,   309,
     4106     346,   309,   309,   226,   306,   109,   109,   225,   226,   224,
     4107     226,   112,   134,   224,   363,   368,   172,   134,   269,   274,
     4108     216,   231,   320,   324,   172,   134,   291,   226,   236,   132,
     4109     226,   226,   289,    40,   111,   224,   246,   247,   248,   249,
     4110     363,   367,   114,   255,   271,   114,   226,   291,   132,   132,
     4111     302,   134,   139,   268,     3,   135,   206,   207,   221,   223,
     4112     226,   134,   308,   109,   308,   163,   316,   226,   109,   134,
     4113     269,   114,    33,    34,    35,   224,   283,   284,   286,   134,
     4114     129,   131,   288,   134,   227,   233,   234,   269,   312,   313,
     4115     314,   109,   141,   109,   148,   109,   148,   150,   109,   148,
     4116     109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
     4117     272,   363,   112,   134,   150,   150,    82,    85,    86,    87,
     4118     109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
     4119     103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
     4120     121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
     4121     120,   128,   129,    94,    95,   130,   131,   370,   109,   119,
     4122     342,   343,   344,   345,   346,   110,   116,   109,   346,   347,
     4123     109,   346,   347,   134,   109,   224,   365,   112,   134,   111,
     4124     119,   135,   224,   226,   358,   359,   367,   368,   135,   109,
     4125     111,   119,   316,   333,   334,   335,   336,   337,   338,   339,
     4126     340,   341,   347,   348,   349,   350,   351,   352,   353,   119,
     4127     367,   226,   135,   135,   119,   224,   226,   360,   269,   224,
     4128     347,   360,   269,   109,   134,   134,   134,   112,   134,    72,
     4129      80,   111,   113,   140,   271,   275,   276,   277,   278,   279,
     4130     134,   134,   134,   134,   134,   134,   306,   110,   110,   110,
     4131     110,   110,   110,   110,   315,   328,   109,   274,   112,   206,
     4132     134,   306,   168,   273,   168,   273,   306,   111,   206,   308,
     4133     172,   134,   206,   110,   248,   249,   112,   134,   109,   117,
     4134     119,   250,   252,   315,   316,   328,   346,   354,   355,   356,
     4135     357,   115,   247,   116,   132,   116,   132,   271,   246,   116,
     4136     369,   131,   256,   255,   226,   261,   262,   263,   266,   267,
     4137     110,   116,   172,   134,   119,   163,   134,   223,   226,   260,
     4138     359,   367,   300,   301,   109,   119,   333,   110,   116,   370,
     4139     271,   283,   109,   114,   271,   273,   283,   110,   116,   109,
     4140     141,   110,   117,   272,   272,   272,   111,   139,   145,   163,
     4141     273,   272,   112,   134,   110,   116,   110,   109,   119,   354,
     4142     110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
     4143     139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
     4144     152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
     4145     158,   159,   117,   168,   163,   134,   343,   344,   345,   226,
     4146     342,   309,   309,   163,   273,   134,   268,   119,   134,   224,
     4147     347,   360,   226,   230,   112,   134,   112,   367,   112,   109,
     4148     134,   316,   334,   335,   336,   339,   349,   350,   351,   112,
     4149     134,   226,   333,   337,   348,   109,   309,   352,   370,   309,
     4150     309,   370,   109,   309,   352,   309,   309,   309,   309,   347,
     4151     224,   358,   368,   269,   112,   116,   112,   116,   370,   224,
     4152     360,   370,   257,   258,   259,   260,   257,   257,   269,   163,
     4153     134,   111,   271,   117,   116,   369,   275,    80,   111,   117,
     4154     279,    29,   208,   209,   269,   257,   139,   306,   139,   308,
     4155     109,   346,   347,   109,   346,   347,   141,   347,   172,   261,
     4156     110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
     4157     132,   111,   316,   355,   356,   357,   161,   162,   226,   354,
     4158     251,   252,   251,   309,   309,   271,   309,   115,   271,   115,
     4159     162,   369,   135,   135,   139,   221,   135,   135,   257,   109,
     4160     119,   367,   135,   115,   226,   284,   285,   135,   134,   134,
     4161     109,   135,   110,   313,   168,   169,   117,   132,   111,   141,
     4162     199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
     4163     110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
     4164     135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
     4165     261,   110,   110,   110,   342,   261,   110,   257,   224,   360,
     4166     111,   119,   163,   163,   226,   339,   261,   110,   110,   110,
     4167     110,   110,   110,   110,     7,   226,   333,   337,   348,   134,
     4168     134,   370,   134,   134,   110,   135,   135,   135,   135,   274,
     4169     135,   161,   162,   163,   307,   134,   275,   277,   115,   134,
     4170     210,   271,    40,    41,    43,    46,    47,    48,    49,    50,
     4171      51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
     4172     170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
     4173     197,   211,   305,    29,   135,   131,   274,   134,   134,   110,
     4174     135,   172,   246,   112,   110,   110,   110,   354,   250,   256,
     4175     115,   110,   116,   112,   112,   135,   226,   116,   370,   287,
     4176     110,   283,   214,   216,   224,   295,   296,   297,   298,   289,
     4177     110,   110,   117,   162,   109,   110,   117,   116,   139,   163,
     4178     163,   276,   116,   135,   166,   112,   139,   146,   147,   163,
     4179     145,   135,   146,   161,   165,   135,   109,   346,   347,   135,
     4180     135,   134,   135,   135,   135,   163,   110,   135,   109,   346,
     4181     347,   109,   352,   109,   352,   347,   225,     7,   119,   135,
     4182     163,   261,   261,   260,   264,   264,   265,   116,   116,   110,
     4183     110,   112,    96,   123,   135,   135,   146,   275,   163,   116,
     4184     132,   211,   215,   226,   230,   109,   109,   170,   109,   109,
     4185     132,   139,   132,   139,   119,   139,   169,   109,   172,   164,
     4186     164,   112,   143,   117,   132,   135,   134,   135,   210,   110,
     4187     163,   261,   261,   309,   110,   115,   109,   346,   347,   134,
     4188     110,   134,   135,   306,   115,   134,   135,   135,   110,   114,
     4189     199,   112,   162,   132,   199,   201,   110,   116,   135,   369,
     4190     164,   112,   135,    85,   113,   116,   135,   135,   112,   135,
     4191     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
     4192     134,   134,   163,   163,   135,   112,   135,   135,   135,   135,
     4193     134,   134,   162,   162,   112,   112,   135,   135,   271,   226,
     4194     168,   168,    47,   168,   134,   132,   132,   168,   132,   132,
     4195     168,    58,    59,    60,   193,   194,   195,   132,    63,   132,
     4196     114,   309,   174,   115,   132,   135,   135,   134,    96,   266,
     4197     267,   110,   296,   116,   132,   116,   132,   115,   294,   117,
     4198     141,   110,   110,   117,   166,   112,   115,   112,   111,   147,
     4199     111,   147,   147,   112,   112,   112,   261,   112,   261,   261,
     4200     261,   135,   135,   112,   112,   110,   110,   112,   116,    96,
     4201     260,    96,   135,   112,   112,   110,   110,   109,   110,   169,
     4202     190,   211,   132,   110,   109,   109,   172,   195,    58,    59,
     4203     163,   144,   170,   110,   110,   261,   114,   134,   134,   295,
     4204     141,   202,   109,   132,   202,   135,   117,   134,   134,   135,
     4205     135,   135,   135,   112,   112,   134,   135,   112,   170,    44,
     4206      45,   114,   180,   181,   182,   168,   170,   135,   110,   169,
     4207     114,   182,    96,   134,    96,   134,   109,   109,   132,   115,
     4208     135,   134,   269,   306,   115,   116,   117,   162,   110,   112,
     4209     163,   146,   146,   110,   110,   110,   110,   264,    42,   162,
     4210     178,   179,   307,   117,   134,   170,   180,   110,   132,   170,
     4211     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
     4212     132,   110,   295,   141,   139,   203,   110,   132,   117,   135,
     4213     135,   170,    96,   116,   117,   135,   204,   205,   211,   132,
     4214     169,   169,   204,   172,   196,   224,   363,   172,   196,   110,
     4215     134,   110,   134,   115,   110,   116,   163,   112,   112,   162,
     4216     178,   181,   183,   184,   134,   132,   181,   185,   186,   135,
     4217     109,   119,   306,   354,   139,   135,   172,   196,   172,   196,
     4218     109,   132,   139,   170,   175,   115,   181,   211,   169,    56,
     4219     175,   188,   115,   181,   110,   226,   110,   135,   135,   289,
     4220     170,   175,   132,   187,   188,   175,   188,   172,   172,   110,
     4221     110,   110,   187,   135,   135,   172,   172,   135,   135
    41684222};
    41694223
     
    50025056
    50035057/* Line 1806 of yacc.c  */
    5004 #line 290 "parser.yy"
     5058#line 292 "parser.yy"
    50055059    {
    50065060                        typedefTable.enterScope();
     
    50115065
    50125066/* Line 1806 of yacc.c  */
    5013 #line 296 "parser.yy"
     5067#line 298 "parser.yy"
    50145068    {
    50155069                        typedefTable.leaveScope();
     
    50205074
    50215075/* Line 1806 of yacc.c  */
    5022 #line 305 "parser.yy"
     5076#line 307 "parser.yy"
    50235077    { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
    50245078    break;
     
    50275081
    50285082/* Line 1806 of yacc.c  */
    5029 #line 306 "parser.yy"
     5083#line 308 "parser.yy"
    50305084    { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
    50315085    break;
     
    50345088
    50355089/* Line 1806 of yacc.c  */
    5036 #line 307 "parser.yy"
     5090#line 309 "parser.yy"
    50375091    { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
    50385092    break;
     
    50415095
    50425096/* Line 1806 of yacc.c  */
    5043 #line 332 "parser.yy"
     5097#line 334 "parser.yy"
    50445098    { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
    50455099    break;
     
    50485102
    50495103/* Line 1806 of yacc.c  */
    5050 #line 333 "parser.yy"
     5104#line 335 "parser.yy"
    50515105    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
    50525106    break;
    50535107
    50545108  case 18:
    5055 
    5056 /* Line 1806 of yacc.c  */
    5057 #line 340 "parser.yy"
    5058     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    5059     break;
    5060 
    5061   case 19:
    50625109
    50635110/* Line 1806 of yacc.c  */
     
    50665113    break;
    50675114
     5115  case 19:
     5116
     5117/* Line 1806 of yacc.c  */
     5118#line 344 "parser.yy"
     5119    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5120    break;
     5121
    50685122  case 20:
    50695123
    50705124/* Line 1806 of yacc.c  */
    5071 #line 344 "parser.yy"
     5125#line 346 "parser.yy"
    50725126    { (yyval.en) = (yyvsp[(2) - (3)].en); }
    50735127    break;
     
    50765130
    50775131/* Line 1806 of yacc.c  */
    5078 #line 346 "parser.yy"
     5132#line 348 "parser.yy"
    50795133    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
    50805134    break;
     
    50835137
    50845138/* Line 1806 of yacc.c  */
    5085 #line 356 "parser.yy"
     5139#line 358 "parser.yy"
    50865140    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
    50875141    break;
     
    50905144
    50915145/* Line 1806 of yacc.c  */
    5092 #line 358 "parser.yy"
     5146#line 360 "parser.yy"
    50935147    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
    50945148    break;
     
    50975151
    50985152/* Line 1806 of yacc.c  */
    5099 #line 362 "parser.yy"
     5153#line 364 "parser.yy"
    51005154    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51015155    break;
     
    51045158
    51055159/* Line 1806 of yacc.c  */
    5106 #line 365 "parser.yy"
     5160#line 367 "parser.yy"
    51075161    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51085162    break;
     
    51115165
    51125166/* Line 1806 of yacc.c  */
    5113 #line 368 "parser.yy"
     5167#line 370 "parser.yy"
    51145168    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
    51155169    break;
     
    51185172
    51195173/* Line 1806 of yacc.c  */
    5120 #line 370 "parser.yy"
     5174#line 372 "parser.yy"
    51215175    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
    51225176    break;
     
    51255179
    51265180/* Line 1806 of yacc.c  */
    5127 #line 372 "parser.yy"
     5181#line 374 "parser.yy"
    51285182    { (yyval.en) = 0; }
    51295183    break;
     
    51325186
    51335187/* Line 1806 of yacc.c  */
    5134 #line 374 "parser.yy"
     5188#line 376 "parser.yy"
    51355189    {
    51365190                        Token fn; fn.str = new std::string( "?{}" ); // location undefined
     
    51425196
    51435197/* Line 1806 of yacc.c  */
    5144 #line 383 "parser.yy"
     5198#line 385 "parser.yy"
    51455199    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    51465200    break;
     
    51495203
    51505204/* Line 1806 of yacc.c  */
    5151 #line 388 "parser.yy"
     5205#line 390 "parser.yy"
    51525206    { (yyval.en) = 0; }
    51535207    break;
     
    51565210
    51575211/* Line 1806 of yacc.c  */
    5158 #line 391 "parser.yy"
     5212#line 393 "parser.yy"
    51595213    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
    51605214    break;
     
    51635217
    51645218/* Line 1806 of yacc.c  */
    5165 #line 396 "parser.yy"
     5219#line 398 "parser.yy"
    51665220    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
    51675221    break;
     
    51705224
    51715225/* Line 1806 of yacc.c  */
    5172 #line 398 "parser.yy"
     5226#line 400 "parser.yy"
    51735227    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
    51745228    break;
     
    51775231
    51785232/* Line 1806 of yacc.c  */
    5179 #line 403 "parser.yy"
     5233#line 405 "parser.yy"
    51805234    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    51815235    break;
     
    51845238
    51855239/* Line 1806 of yacc.c  */
    5186 #line 408 "parser.yy"
     5240#line 410 "parser.yy"
    51875241    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    51885242    break;
     
    51915245
    51925246/* Line 1806 of yacc.c  */
    5193 #line 412 "parser.yy"
     5247#line 414 "parser.yy"
    51945248    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    51955249    break;
     
    51985252
    51995253/* Line 1806 of yacc.c  */
    5200 #line 414 "parser.yy"
     5254#line 416 "parser.yy"
    52015255    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    52025256    break;
     
    52055259
    52065260/* Line 1806 of yacc.c  */
    5207 #line 416 "parser.yy"
     5261#line 418 "parser.yy"
    52085262    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    52095263    break;
     
    52125266
    52135267/* Line 1806 of yacc.c  */
    5214 #line 418 "parser.yy"
     5268#line 420 "parser.yy"
    52155269    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    52165270    break;
    52175271
    52185272  case 48:
    5219 
    5220 /* Line 1806 of yacc.c  */
    5221 #line 426 "parser.yy"
    5222     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    5223     break;
    5224 
    5225   case 49:
    52265273
    52275274/* Line 1806 of yacc.c  */
     
    52305277    break;
    52315278
     5279  case 49:
     5280
     5281/* Line 1806 of yacc.c  */
     5282#line 430 "parser.yy"
     5283    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     5284    break;
     5285
    52325286  case 50:
    52335287
    52345288/* Line 1806 of yacc.c  */
    5235 #line 430 "parser.yy"
     5289#line 432 "parser.yy"
    52365290    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
    52375291    break;
     
    52405294
    52415295/* Line 1806 of yacc.c  */
    5242 #line 432 "parser.yy"
     5296#line 434 "parser.yy"
    52435297    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
    52445298    break;
     
    52475301
    52485302/* Line 1806 of yacc.c  */
    5249 #line 434 "parser.yy"
     5303#line 436 "parser.yy"
    52505304    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    52515305    break;
     
    52545308
    52555309/* Line 1806 of yacc.c  */
    5256 #line 436 "parser.yy"
     5310#line 438 "parser.yy"
    52575311    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    52585312    break;
     
    52615315
    52625316/* Line 1806 of yacc.c  */
    5263 #line 438 "parser.yy"
     5317#line 440 "parser.yy"
    52645318    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
    52655319    break;
     
    52685322
    52695323/* Line 1806 of yacc.c  */
    5270 #line 440 "parser.yy"
     5324#line 442 "parser.yy"
    52715325    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
    52725326    break;
     
    52755329
    52765330/* Line 1806 of yacc.c  */
    5277 #line 446 "parser.yy"
     5331#line 448 "parser.yy"
    52785332    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
    52795333    break;
     
    52825336
    52835337/* Line 1806 of yacc.c  */
    5284 #line 448 "parser.yy"
     5338#line 450 "parser.yy"
    52855339    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    52865340    break;
     
    52895343
    52905344/* Line 1806 of yacc.c  */
    5291 #line 450 "parser.yy"
     5345#line 452 "parser.yy"
    52925346    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
    52935347    break;
     
    52965350
    52975351/* Line 1806 of yacc.c  */
    5298 #line 452 "parser.yy"
     5352#line 454 "parser.yy"
    52995353    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
    53005354    break;
     
    53035357
    53045358/* Line 1806 of yacc.c  */
    5305 #line 454 "parser.yy"
     5359#line 456 "parser.yy"
    53065360    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    53075361    break;
     
    53105364
    53115365/* Line 1806 of yacc.c  */
    5312 #line 456 "parser.yy"
     5366#line 458 "parser.yy"
    53135367    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
    53145368    break;
     
    53175371
    53185372/* Line 1806 of yacc.c  */
    5319 #line 458 "parser.yy"
     5373#line 460 "parser.yy"
    53205374    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
    53215375    break;
     
    53245378
    53255379/* Line 1806 of yacc.c  */
    5326 #line 460 "parser.yy"
     5380#line 462 "parser.yy"
    53275381    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
    53285382    break;
     
    53315385
    53325386/* Line 1806 of yacc.c  */
    5333 #line 462 "parser.yy"
     5387#line 464 "parser.yy"
    53345388    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
    53355389    break;
     
    53385392
    53395393/* Line 1806 of yacc.c  */
    5340 #line 466 "parser.yy"
     5394#line 468 "parser.yy"
    53415395    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
    53425396    break;
     
    53455399
    53465400/* Line 1806 of yacc.c  */
    5347 #line 467 "parser.yy"
     5401#line 469 "parser.yy"
    53485402    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
    53495403    break;
     
    53525406
    53535407/* Line 1806 of yacc.c  */
    5354 #line 468 "parser.yy"
     5408#line 470 "parser.yy"
    53555409    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
    53565410    break;
     
    53595413
    53605414/* Line 1806 of yacc.c  */
    5361 #line 469 "parser.yy"
     5415#line 471 "parser.yy"
    53625416    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
    53635417    break;
    53645418
    53655419  case 70:
    5366 
    5367 /* Line 1806 of yacc.c  */
    5368 #line 475 "parser.yy"
    5369     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    5370     break;
    5371 
    5372   case 71:
    53735420
    53745421/* Line 1806 of yacc.c  */
     
    53775424    break;
    53785425
     5426  case 71:
     5427
     5428/* Line 1806 of yacc.c  */
     5429#line 479 "parser.yy"
     5430    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5431    break;
     5432
    53795433  case 73:
    53805434
    53815435/* Line 1806 of yacc.c  */
    5382 #line 483 "parser.yy"
     5436#line 485 "parser.yy"
    53835437    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    53845438    break;
     
    53875441
    53885442/* Line 1806 of yacc.c  */
    5389 #line 485 "parser.yy"
     5443#line 487 "parser.yy"
    53905444    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    53915445    break;
     
    53945448
    53955449/* Line 1806 of yacc.c  */
    5396 #line 487 "parser.yy"
     5450#line 489 "parser.yy"
    53975451    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    53985452    break;
     
    54015455
    54025456/* Line 1806 of yacc.c  */
    5403 #line 493 "parser.yy"
     5457#line 495 "parser.yy"
    54045458    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54055459    break;
     
    54085462
    54095463/* Line 1806 of yacc.c  */
    5410 #line 495 "parser.yy"
     5464#line 497 "parser.yy"
    54115465    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54125466    break;
     
    54155469
    54165470/* Line 1806 of yacc.c  */
    5417 #line 501 "parser.yy"
     5471#line 503 "parser.yy"
    54185472    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54195473    break;
     
    54225476
    54235477/* Line 1806 of yacc.c  */
    5424 #line 503 "parser.yy"
     5478#line 505 "parser.yy"
    54255479    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54265480    break;
     
    54295483
    54305484/* Line 1806 of yacc.c  */
    5431 #line 509 "parser.yy"
     5485#line 511 "parser.yy"
    54325486    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54335487    break;
     
    54365490
    54375491/* Line 1806 of yacc.c  */
    5438 #line 511 "parser.yy"
     5492#line 513 "parser.yy"
    54395493    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54405494    break;
     
    54435497
    54445498/* Line 1806 of yacc.c  */
    5445 #line 513 "parser.yy"
     5499#line 515 "parser.yy"
    54465500    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54475501    break;
     
    54505504
    54515505/* Line 1806 of yacc.c  */
    5452 #line 515 "parser.yy"
     5506#line 517 "parser.yy"
    54535507    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54545508    break;
     
    54575511
    54585512/* Line 1806 of yacc.c  */
    5459 #line 521 "parser.yy"
     5513#line 523 "parser.yy"
    54605514    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54615515    break;
     
    54645518
    54655519/* Line 1806 of yacc.c  */
    5466 #line 523 "parser.yy"
     5520#line 525 "parser.yy"
    54675521    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54685522    break;
     
    54715525
    54725526/* Line 1806 of yacc.c  */
    5473 #line 529 "parser.yy"
     5527#line 531 "parser.yy"
    54745528    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54755529    break;
     
    54785532
    54795533/* Line 1806 of yacc.c  */
    5480 #line 535 "parser.yy"
     5534#line 537 "parser.yy"
    54815535    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54825536    break;
     
    54855539
    54865540/* Line 1806 of yacc.c  */
    5487 #line 541 "parser.yy"
     5541#line 543 "parser.yy"
    54885542    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54895543    break;
     
    54925546
    54935547/* Line 1806 of yacc.c  */
    5494 #line 547 "parser.yy"
     5548#line 549 "parser.yy"
    54955549    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54965550    break;
     
    54995553
    55005554/* Line 1806 of yacc.c  */
    5501 #line 553 "parser.yy"
     5555#line 555 "parser.yy"
    55025556    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55035557    break;
     
    55065560
    55075561/* Line 1806 of yacc.c  */
    5508 #line 559 "parser.yy"
     5562#line 561 "parser.yy"
    55095563    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55105564    break;
     
    55135567
    55145568/* Line 1806 of yacc.c  */
    5515 #line 561 "parser.yy"
     5569#line 563 "parser.yy"
    55165570    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    55175571    break;
     
    55205574
    55215575/* Line 1806 of yacc.c  */
    5522 #line 563 "parser.yy"
     5576#line 565 "parser.yy"
    55235577    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55245578    break;
     
    55275581
    55285582/* Line 1806 of yacc.c  */
    5529 #line 574 "parser.yy"
     5583#line 576 "parser.yy"
    55305584    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55315585    break;
     
    55345588
    55355589/* Line 1806 of yacc.c  */
    5536 #line 576 "parser.yy"
     5590#line 578 "parser.yy"
    55375591    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55385592    break;
     
    55415595
    55425596/* Line 1806 of yacc.c  */
    5543 #line 578 "parser.yy"
     5597#line 580 "parser.yy"
    55445598    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    55455599    break;
     
    55485602
    55495603/* Line 1806 of yacc.c  */
    5550 #line 583 "parser.yy"
     5604#line 585 "parser.yy"
    55515605    { (yyval.en) = new NullExprNode; }
    55525606    break;
     
    55555609
    55565610/* Line 1806 of yacc.c  */
    5557 #line 591 "parser.yy"
     5611#line 593 "parser.yy"
    55585612    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
    55595613    break;
     
    55625616
    55635617/* Line 1806 of yacc.c  */
    5564 #line 593 "parser.yy"
     5618#line 595 "parser.yy"
    55655619    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
    55665620    break;
     
    55695623
    55705624/* Line 1806 of yacc.c  */
    5571 #line 595 "parser.yy"
     5625#line 597 "parser.yy"
    55725626    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
    55735627    break;
     
    55765630
    55775631/* Line 1806 of yacc.c  */
    5578 #line 597 "parser.yy"
     5632#line 599 "parser.yy"
    55795633    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
    55805634    break;
     
    55835637
    55845638/* Line 1806 of yacc.c  */
    5585 #line 603 "parser.yy"
     5639#line 605 "parser.yy"
    55865640    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    55875641    break;
     
    55905644
    55915645/* Line 1806 of yacc.c  */
    5592 #line 607 "parser.yy"
     5646#line 609 "parser.yy"
    55935647    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
    55945648    break;
     
    55975651
    55985652/* Line 1806 of yacc.c  */
    5599 #line 608 "parser.yy"
     5653#line 610 "parser.yy"
    56005654    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
    56015655    break;
     
    56045658
    56055659/* Line 1806 of yacc.c  */
    5606 #line 609 "parser.yy"
     5660#line 611 "parser.yy"
    56075661    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
    56085662    break;
     
    56115665
    56125666/* Line 1806 of yacc.c  */
    5613 #line 610 "parser.yy"
     5667#line 612 "parser.yy"
    56145668    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    56155669    break;
     
    56185672
    56195673/* Line 1806 of yacc.c  */
    5620 #line 611 "parser.yy"
     5674#line 613 "parser.yy"
    56215675    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
    56225676    break;
     
    56255679
    56265680/* Line 1806 of yacc.c  */
    5627 #line 612 "parser.yy"
     5681#line 614 "parser.yy"
    56285682    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    56295683    break;
     
    56325686
    56335687/* Line 1806 of yacc.c  */
    5634 #line 613 "parser.yy"
     5688#line 615 "parser.yy"
    56355689    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
    56365690    break;
     
    56395693
    56405694/* Line 1806 of yacc.c  */
    5641 #line 614 "parser.yy"
     5695#line 616 "parser.yy"
    56425696    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
    56435697    break;
     
    56465700
    56475701/* Line 1806 of yacc.c  */
    5648 #line 615 "parser.yy"
     5702#line 617 "parser.yy"
    56495703    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    56505704    break;
     
    56535707
    56545708/* Line 1806 of yacc.c  */
    5655 #line 616 "parser.yy"
     5709#line 618 "parser.yy"
    56565710    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    56575711    break;
     
    56605714
    56615715/* Line 1806 of yacc.c  */
    5662 #line 622 "parser.yy"
     5716#line 624 "parser.yy"
    56635717    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    56645718    break;
     
    56675721
    56685722/* Line 1806 of yacc.c  */
    5669 #line 627 "parser.yy"
     5723#line 629 "parser.yy"
    56705724    { (yyval.en) = 0; }
    56715725    break;
     
    56745728
    56755729/* Line 1806 of yacc.c  */
    5676 #line 636 "parser.yy"
     5730#line 638 "parser.yy"
    56775731    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    56785732    break;
     
    56815735
    56825736/* Line 1806 of yacc.c  */
    5683 #line 643 "parser.yy"
     5737#line 645 "parser.yy"
    56845738    {
    56855739                        Token fn; fn.str = new std::string( "^?{}" ); // location undefined
     
    56925746
    56935747/* Line 1806 of yacc.c  */
    5694 #line 652 "parser.yy"
     5748#line 654 "parser.yy"
    56955749    {
    56965750                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    57015755
    57025756/* Line 1806 of yacc.c  */
    5703 #line 659 "parser.yy"
     5757#line 661 "parser.yy"
    57045758    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
    57055759    break;
     
    57085762
    57095763/* Line 1806 of yacc.c  */
    5710 #line 666 "parser.yy"
     5764#line 668 "parser.yy"
    57115765    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    57125766    break;
     
    57155769
    57165770/* Line 1806 of yacc.c  */
    5717 #line 672 "parser.yy"
     5771#line 674 "parser.yy"
    57185772    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    57195773    break;
     
    57225776
    57235777/* Line 1806 of yacc.c  */
    5724 #line 677 "parser.yy"
     5778#line 679 "parser.yy"
    57255779    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57265780    break;
     
    57295783
    57305784/* Line 1806 of yacc.c  */
    5731 #line 679 "parser.yy"
     5785#line 681 "parser.yy"
    57325786    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
    57335787    break;
     
    57365790
    57375791/* Line 1806 of yacc.c  */
    5738 #line 681 "parser.yy"
     5792#line 683 "parser.yy"
    57395793    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57405794    break;
     
    57435797
    57445798/* Line 1806 of yacc.c  */
    5745 #line 688 "parser.yy"
     5799#line 690 "parser.yy"
    57465800    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    57475801    break;
     
    57505804
    57515805/* Line 1806 of yacc.c  */
    5752 #line 693 "parser.yy"
     5806#line 695 "parser.yy"
    57535807    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    57545808    break;
     
    57575811
    57585812/* Line 1806 of yacc.c  */
    5759 #line 699 "parser.yy"
     5813#line 701 "parser.yy"
    57605814    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57615815    break;
     
    57645818
    57655819/* Line 1806 of yacc.c  */
    5766 #line 701 "parser.yy"
     5820#line 703 "parser.yy"
    57675821    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    57685822    break;
     
    57715825
    57725826/* Line 1806 of yacc.c  */
    5773 #line 703 "parser.yy"
     5827#line 705 "parser.yy"
    57745828    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57755829    break;
     
    57785832
    57795833/* Line 1806 of yacc.c  */
    5780 #line 705 "parser.yy"
     5834#line 707 "parser.yy"
    57815835    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
    57825836    break;
     
    57855839
    57865840/* Line 1806 of yacc.c  */
    5787 #line 710 "parser.yy"
     5841#line 712 "parser.yy"
    57885842    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    57895843    break;
     
    57925846
    57935847/* Line 1806 of yacc.c  */
    5794 #line 712 "parser.yy"
     5848#line 714 "parser.yy"
    57955849    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
    57965850    break;
     
    57995853
    58005854/* Line 1806 of yacc.c  */
    5801 #line 719 "parser.yy"
     5855#line 721 "parser.yy"
    58025856    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    58035857    break;
     
    58065860
    58075861/* Line 1806 of yacc.c  */
    5808 #line 721 "parser.yy"
     5862#line 723 "parser.yy"
    58095863    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    58105864    break;
     
    58135867
    58145868/* Line 1806 of yacc.c  */
    5815 #line 728 "parser.yy"
     5869#line 730 "parser.yy"
    58165870    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    58175871    break;
     
    58205874
    58215875/* Line 1806 of yacc.c  */
    5822 #line 732 "parser.yy"
     5876#line 734 "parser.yy"
    58235877    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    58245878    break;
     
    58275881
    58285882/* Line 1806 of yacc.c  */
    5829 #line 733 "parser.yy"
     5883#line 735 "parser.yy"
    58305884    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    58315885    break;
     
    58345888
    58355889/* Line 1806 of yacc.c  */
    5836 #line 739 "parser.yy"
     5890#line 741 "parser.yy"
    58375891    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    58385892    break;
     
    58415895
    58425896/* Line 1806 of yacc.c  */
    5843 #line 743 "parser.yy"
     5897#line 745 "parser.yy"
    58445898    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58455899    break;
     
    58485902
    58495903/* Line 1806 of yacc.c  */
    5850 #line 748 "parser.yy"
     5904#line 750 "parser.yy"
    58515905    { (yyval.sn) = 0; }
    58525906    break;
     
    58555909
    58565910/* Line 1806 of yacc.c  */
    5857 #line 754 "parser.yy"
     5911#line 756 "parser.yy"
    58585912    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58595913    break;
     
    58625916
    58635917/* Line 1806 of yacc.c  */
    5864 #line 756 "parser.yy"
     5918#line 758 "parser.yy"
    58655919    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    58665920    break;
     
    58695923
    58705924/* Line 1806 of yacc.c  */
    5871 #line 761 "parser.yy"
     5925#line 763 "parser.yy"
    58725926    { (yyval.sn) = 0; }
    58735927    break;
     
    58765930
    58775931/* Line 1806 of yacc.c  */
    5878 #line 767 "parser.yy"
     5932#line 769 "parser.yy"
    58795933    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58805934    break;
     
    58835937
    58845938/* Line 1806 of yacc.c  */
    5885 #line 769 "parser.yy"
     5939#line 771 "parser.yy"
    58865940    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    58875941    break;
     
    58905944
    58915945/* Line 1806 of yacc.c  */
    5892 #line 771 "parser.yy"
     5946#line 773 "parser.yy"
    58935947    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    58945948    break;
     
    58975951
    58985952/* Line 1806 of yacc.c  */
    5899 #line 773 "parser.yy"
     5953#line 775 "parser.yy"
    59005954    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
    59015955    break;
     
    59045958
    59055959/* Line 1806 of yacc.c  */
    5906 #line 778 "parser.yy"
     5960#line 780 "parser.yy"
    59075961    { (yyval.sn) = 0; }
    59085962    break;
     
    59115965
    59125966/* Line 1806 of yacc.c  */
    5913 #line 783 "parser.yy"
     5967#line 785 "parser.yy"
    59145968    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    59155969    break;
     
    59185972
    59195973/* Line 1806 of yacc.c  */
    5920 #line 784 "parser.yy"
     5974#line 786 "parser.yy"
    59215975    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    59225976    break;
     
    59255979
    59265980/* Line 1806 of yacc.c  */
    5927 #line 789 "parser.yy"
     5981#line 791 "parser.yy"
    59285982    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59295983    break;
     
    59325986
    59335987/* Line 1806 of yacc.c  */
    5934 #line 791 "parser.yy"
     5988#line 793 "parser.yy"
    59355989    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    59365990    break;
     
    59395993
    59405994/* Line 1806 of yacc.c  */
    5941 #line 793 "parser.yy"
     5995#line 795 "parser.yy"
    59425996    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    59435997    break;
     
    59466000
    59476001/* Line 1806 of yacc.c  */
    5948 #line 798 "parser.yy"
     6002#line 800 "parser.yy"
    59496003    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    59506004    break;
     
    59536007
    59546008/* Line 1806 of yacc.c  */
    5955 #line 800 "parser.yy"
     6009#line 802 "parser.yy"
    59566010    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    59576011    break;
     
    59606014
    59616015/* Line 1806 of yacc.c  */
    5962 #line 805 "parser.yy"
     6016#line 807 "parser.yy"
    59636017    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    59646018    break;
     
    59676021
    59686022/* Line 1806 of yacc.c  */
    5969 #line 809 "parser.yy"
     6023#line 811 "parser.yy"
    59706024    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    59716025    break;
     
    59746028
    59756029/* Line 1806 of yacc.c  */
    5976 #line 812 "parser.yy"
     6030#line 814 "parser.yy"
    59776031    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    59786032    break;
     
    59816035
    59826036/* Line 1806 of yacc.c  */
    5983 #line 816 "parser.yy"
     6037#line 818 "parser.yy"
    59846038    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    59856039    break;
     
    59886042
    59896043/* Line 1806 of yacc.c  */
    5990 #line 819 "parser.yy"
     6044#line 821 "parser.yy"
    59916045    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    59926046    break;
     
    59956049
    59966050/* Line 1806 of yacc.c  */
    5997 #line 823 "parser.yy"
     6051#line 825 "parser.yy"
    59986052    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    59996053    break;
     
    60026056
    60036057/* Line 1806 of yacc.c  */
    6004 #line 825 "parser.yy"
     6058#line 827 "parser.yy"
    60056059    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    60066060    break;
     
    60096063
    60106064/* Line 1806 of yacc.c  */
    6011 #line 827 "parser.yy"
     6065#line 829 "parser.yy"
    60126066    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    60136067    break;
     
    60166070
    60176071/* Line 1806 of yacc.c  */
    6018 #line 831 "parser.yy"
     6072#line 833 "parser.yy"
    60196073    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    60206074    break;
     
    60236077
    60246078/* Line 1806 of yacc.c  */
    6025 #line 833 "parser.yy"
     6079#line 835 "parser.yy"
    60266080    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    60276081    break;
    60286082
    60296083  case 197:
    6030 
    6031 /* Line 1806 of yacc.c  */
    6032 #line 840 "parser.yy"
    6033     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    6034     break;
    6035 
    6036   case 198:
    60376084
    60386085/* Line 1806 of yacc.c  */
     
    60416088    break;
    60426089
     6090  case 198:
     6091
     6092/* Line 1806 of yacc.c  */
     6093#line 844 "parser.yy"
     6094    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     6095    break;
     6096
    60436097  case 199:
    60446098
    60456099/* Line 1806 of yacc.c  */
    6046 #line 844 "parser.yy"
     6100#line 846 "parser.yy"
    60476101    {
    60486102                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    60546108
    60556109/* Line 1806 of yacc.c  */
    6056 #line 855 "parser.yy"
     6110#line 857 "parser.yy"
    60576111    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    60586112    break;
     
    60616115
    60626116/* Line 1806 of yacc.c  */
    6063 #line 857 "parser.yy"
     6117#line 859 "parser.yy"
    60646118    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    60656119    break;
     
    60686122
    60696123/* Line 1806 of yacc.c  */
    6070 #line 859 "parser.yy"
     6124#line 861 "parser.yy"
    60716125    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    60726126    break;
     
    60756129
    60766130/* Line 1806 of yacc.c  */
    6077 #line 861 "parser.yy"
     6131#line 863 "parser.yy"
    60786132    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    60796133    break;
     
    60826136
    60836137/* Line 1806 of yacc.c  */
    6084 #line 866 "parser.yy"
     6138#line 868 "parser.yy"
    60856139    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    60866140    break;
     
    60896143
    60906144/* Line 1806 of yacc.c  */
    6091 #line 868 "parser.yy"
     6145#line 870 "parser.yy"
    60926146    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    60936147    break;
     
    60966150
    60976151/* Line 1806 of yacc.c  */
    6098 #line 870 "parser.yy"
     6152#line 872 "parser.yy"
    60996153    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    61006154    break;
     
    61036157
    61046158/* Line 1806 of yacc.c  */
    6105 #line 872 "parser.yy"
     6159#line 874 "parser.yy"
    61066160    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    61076161    break;
     
    61106164
    61116165/* Line 1806 of yacc.c  */
    6112 #line 877 "parser.yy"
     6166#line 879 "parser.yy"
    61136167    {
    61146168                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    61206174
    61216175/* Line 1806 of yacc.c  */
    6122 #line 891 "parser.yy"
     6176#line 893 "parser.yy"
    61236177    {
    61246178                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61306184
    61316185/* Line 1806 of yacc.c  */
    6132 #line 896 "parser.yy"
     6186#line 898 "parser.yy"
    61336187    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    61346188    break;
     
    61376191
    61386192/* Line 1806 of yacc.c  */
    6139 #line 898 "parser.yy"
     6193#line 900 "parser.yy"
    61406194    {
    61416195                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61476201
    61486202/* Line 1806 of yacc.c  */
    6149 #line 907 "parser.yy"
     6203#line 909 "parser.yy"
    61506204    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    61516205    break;
     
    61546208
    61556209/* Line 1806 of yacc.c  */
    6156 #line 909 "parser.yy"
     6210#line 911 "parser.yy"
    61576211    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    61586212    break;
     
    61616215
    61626216/* Line 1806 of yacc.c  */
    6163 #line 911 "parser.yy"
     6217#line 913 "parser.yy"
    61646218    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    61656219    break;
     
    61686222
    61696223/* Line 1806 of yacc.c  */
    6170 #line 913 "parser.yy"
     6224#line 915 "parser.yy"
    61716225    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
    61726226    break;
     
    61756229
    61766230/* Line 1806 of yacc.c  */
    6177 #line 915 "parser.yy"
     6231#line 917 "parser.yy"
    61786232    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
    61796233    break;
     
    61826236
    61836237/* Line 1806 of yacc.c  */
    6184 #line 920 "parser.yy"
     6238#line 922 "parser.yy"
    61856239    { (yyval.flag) = false; }
    61866240    break;
     
    61896243
    61906244/* Line 1806 of yacc.c  */
    6191 #line 922 "parser.yy"
     6245#line 924 "parser.yy"
    61926246    { (yyval.flag) = true; }
    61936247    break;
     
    61966250
    61976251/* Line 1806 of yacc.c  */
    6198 #line 927 "parser.yy"
     6252#line 929 "parser.yy"
    61996253    { (yyval.en) = 0; }
    62006254    break;
     
    62036257
    62046258/* Line 1806 of yacc.c  */
    6205 #line 934 "parser.yy"
     6259#line 936 "parser.yy"
    62066260    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    62076261    break;
     
    62106264
    62116265/* Line 1806 of yacc.c  */
    6212 #line 939 "parser.yy"
     6266#line 941 "parser.yy"
    62136267    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    62146268    break;
     
    62176271
    62186272/* Line 1806 of yacc.c  */
    6219 #line 941 "parser.yy"
     6273#line 943 "parser.yy"
    62206274    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    62216275    break;
     
    62246278
    62256279/* Line 1806 of yacc.c  */
    6226 #line 946 "parser.yy"
     6280#line 948 "parser.yy"
    62276281    { (yyval.constant) = 0; }
    62286282    break;
     
    62316285
    62326286/* Line 1806 of yacc.c  */
    6233 #line 948 "parser.yy"
     6287#line 950 "parser.yy"
    62346288    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    62356289    break;
     
    62386292
    62396293/* Line 1806 of yacc.c  */
    6240 #line 950 "parser.yy"
     6294#line 952 "parser.yy"
    62416295    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    62426296    break;
     
    62456299
    62466300/* Line 1806 of yacc.c  */
    6247 #line 955 "parser.yy"
     6301#line 957 "parser.yy"
    62486302    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    62496303    break;
     
    62526306
    62536307/* Line 1806 of yacc.c  */
    6254 #line 957 "parser.yy"
     6308#line 959 "parser.yy"
    62556309    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    62566310    break;
     
    62596313
    62606314/* Line 1806 of yacc.c  */
    6261 #line 964 "parser.yy"
     6315#line 966 "parser.yy"
    62626316    { (yyval.decl) = 0; }
    62636317    break;
     
    62666320
    62676321/* Line 1806 of yacc.c  */
    6268 #line 971 "parser.yy"
     6322#line 973 "parser.yy"
    62696323    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    62706324    break;
     
    62736327
    62746328/* Line 1806 of yacc.c  */
    6275 #line 976 "parser.yy"
     6329#line 978 "parser.yy"
    62766330    { (yyval.decl) = 0; }
    62776331    break;
     
    62806334
    62816335/* Line 1806 of yacc.c  */
    6282 #line 983 "parser.yy"
     6336#line 985 "parser.yy"
    62836337    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    62846338    break;
     
    62876341
    62886342/* Line 1806 of yacc.c  */
    6289 #line 997 "parser.yy"
     6343#line 999 "parser.yy"
    62906344    {}
    62916345    break;
     
    62946348
    62956349/* Line 1806 of yacc.c  */
    6296 #line 998 "parser.yy"
     6350#line 1000 "parser.yy"
    62976351    {}
    62986352    break;
     
    63016355
    63026356/* Line 1806 of yacc.c  */
    6303 #line 1027 "parser.yy"
     6357#line 1029 "parser.yy"
    63046358    {
    63056359                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6306                         (yyval.decl) = (yyvsp[(1) - (2)].decl);
     6360                        (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].in) );
    63076361                }
    63086362    break;
     
    63116365
    63126366/* Line 1806 of yacc.c  */
    6313 #line 1034 "parser.yy"
     6367#line 1036 "parser.yy"
    63146368    {
    63156369                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6316                         (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) );
     6370                        (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );;
    63176371                }
    63186372    break;
     
    63216375
    63226376/* Line 1806 of yacc.c  */
    6323 #line 1039 "parser.yy"
     6377#line 1041 "parser.yy"
    63246378    {
    63256379                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
    6326                         (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) ) );
     6380                        (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) )->addInitializer( (yyvsp[(6) - (6)].in) ) );
    63276381                }
    63286382    break;
     
    63316385
    63326386/* Line 1806 of yacc.c  */
    6333 #line 1049 "parser.yy"
     6387#line 1051 "parser.yy"
    63346388    {
    63356389                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63416395
    63426396/* Line 1806 of yacc.c  */
    6343 #line 1054 "parser.yy"
     6397#line 1056 "parser.yy"
    63446398    {
    63456399                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63516405
    63526406/* Line 1806 of yacc.c  */
    6353 #line 1059 "parser.yy"
     6407#line 1061 "parser.yy"
    63546408    {
    63556409                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    63616415
    63626416/* Line 1806 of yacc.c  */
    6363 #line 1067 "parser.yy"
     6417#line 1069 "parser.yy"
    63646418    {
    63656419                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63716425
    63726426/* Line 1806 of yacc.c  */
    6373 #line 1072 "parser.yy"
     6427#line 1074 "parser.yy"
    63746428    {
    63756429                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63816435
    63826436/* Line 1806 of yacc.c  */
    6383 #line 1077 "parser.yy"
     6437#line 1079 "parser.yy"
    63846438    {
    63856439                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63916445
    63926446/* Line 1806 of yacc.c  */
    6393 #line 1082 "parser.yy"
     6447#line 1084 "parser.yy"
    63946448    {
    63956449                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64016455
    64026456/* Line 1806 of yacc.c  */
    6403 #line 1087 "parser.yy"
     6457#line 1089 "parser.yy"
    64046458    {
    64056459                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    64116465
    64126466/* Line 1806 of yacc.c  */
    6413 #line 1095 "parser.yy"
     6467#line 1097 "parser.yy"
    64146468    {
    64156469                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    64206474
    64216475/* Line 1806 of yacc.c  */
    6422 #line 1118 "parser.yy"
     6476#line 1120 "parser.yy"
    64236477    {
    64246478                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64296483
    64306484/* Line 1806 of yacc.c  */
    6431 #line 1122 "parser.yy"
     6485#line 1124 "parser.yy"
    64326486    {
    64336487                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64386492
    64396493/* Line 1806 of yacc.c  */
    6440 #line 1129 "parser.yy"
     6494#line 1131 "parser.yy"
    64416495    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    64426496    break;
     
    64456499
    64466500/* Line 1806 of yacc.c  */
    6447 #line 1133 "parser.yy"
     6501#line 1135 "parser.yy"
    64486502    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    64496503    break;
     
    64526506
    64536507/* Line 1806 of yacc.c  */
    6454 #line 1138 "parser.yy"
     6508#line 1140 "parser.yy"
    64556509    {
    64566510                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64626516
    64636517/* Line 1806 of yacc.c  */
    6464 #line 1143 "parser.yy"
     6518#line 1145 "parser.yy"
    64656519    {
    64666520                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64726526
    64736527/* Line 1806 of yacc.c  */
    6474 #line 1148 "parser.yy"
     6528#line 1150 "parser.yy"
    64756529    {
    64766530                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    64826536
    64836537/* Line 1806 of yacc.c  */
    6484 #line 1159 "parser.yy"
     6538#line 1161 "parser.yy"
    64856539    {
    64866540                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    64926546
    64936547/* Line 1806 of yacc.c  */
    6494 #line 1164 "parser.yy"
     6548#line 1166 "parser.yy"
    64956549    {
    64966550                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65026556
    65036557/* Line 1806 of yacc.c  */
    6504 #line 1169 "parser.yy"
     6558#line 1171 "parser.yy"
    65056559    {
    65066560                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65126566
    65136567/* Line 1806 of yacc.c  */
    6514 #line 1174 "parser.yy"
     6568#line 1176 "parser.yy"
    65156569    {
    65166570                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65226576
    65236577/* Line 1806 of yacc.c  */
    6524 #line 1179 "parser.yy"
     6578#line 1181 "parser.yy"
    65256579    {
    65266580                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65326586
    65336587/* Line 1806 of yacc.c  */
    6534 #line 1188 "parser.yy"
     6588#line 1190 "parser.yy"
    65356589    {
    65366590                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    65426596
    65436597/* Line 1806 of yacc.c  */
    6544 #line 1193 "parser.yy"
     6598#line 1195 "parser.yy"
    65456599    {
    65466600                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    65526606
    65536607/* Line 1806 of yacc.c  */
    6554 #line 1210 "parser.yy"
     6608#line 1212 "parser.yy"
    65556609    {
    65566610                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65626616
    65636617/* Line 1806 of yacc.c  */
    6564 #line 1215 "parser.yy"
     6618#line 1217 "parser.yy"
    65656619    {
    65666620                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65726626
    65736627/* Line 1806 of yacc.c  */
    6574 #line 1237 "parser.yy"
     6628#line 1239 "parser.yy"
    65756629    { (yyval.decl) = 0; }
    65766630    break;
     
    65796633
    65806634/* Line 1806 of yacc.c  */
    6581 #line 1249 "parser.yy"
     6635#line 1251 "parser.yy"
    65826636    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    65836637    break;
     
    65866640
    65876641/* Line 1806 of yacc.c  */
    6588 #line 1260 "parser.yy"
     6642#line 1262 "parser.yy"
    65896643    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    65906644    break;
     
    65936647
    65946648/* Line 1806 of yacc.c  */
    6595 #line 1262 "parser.yy"
     6649#line 1264 "parser.yy"
    65966650    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    65976651    break;
     
    66006654
    66016655/* Line 1806 of yacc.c  */
    6602 #line 1264 "parser.yy"
     6656#line 1266 "parser.yy"
    66036657    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    66046658    break;
     
    66076661
    66086662/* Line 1806 of yacc.c  */
    6609 #line 1266 "parser.yy"
     6663#line 1268 "parser.yy"
    66106664    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    66116665    break;
     
    66146668
    66156669/* Line 1806 of yacc.c  */
    6616 #line 1268 "parser.yy"
     6670#line 1270 "parser.yy"
    66176671    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    66186672    break;
     
    66216675
    66226676/* Line 1806 of yacc.c  */
    6623 #line 1270 "parser.yy"
     6677#line 1272 "parser.yy"
    66246678    {
    66256679                        typedefTable.enterScope();
     
    66306684
    66316685/* Line 1806 of yacc.c  */
    6632 #line 1274 "parser.yy"
     6686#line 1276 "parser.yy"
    66336687    {
    66346688                        typedefTable.leaveScope();
     
    66406694
    66416695/* Line 1806 of yacc.c  */
    6642 #line 1283 "parser.yy"
     6696#line 1285 "parser.yy"
    66436697    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66446698    break;
     
    66476701
    66486702/* Line 1806 of yacc.c  */
    6649 #line 1285 "parser.yy"
     6703#line 1287 "parser.yy"
    66506704    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    66516705    break;
     
    66546708
    66556709/* Line 1806 of yacc.c  */
    6656 #line 1296 "parser.yy"
     6710#line 1298 "parser.yy"
    66576711    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66586712    break;
     
    66616715
    66626716/* Line 1806 of yacc.c  */
    6663 #line 1305 "parser.yy"
     6717#line 1307 "parser.yy"
    66646718    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    66656719    break;
     
    66686722
    66696723/* Line 1806 of yacc.c  */
    6670 #line 1307 "parser.yy"
     6724#line 1309 "parser.yy"
    66716725    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    66726726    break;
     
    66756729
    66766730/* Line 1806 of yacc.c  */
    6677 #line 1309 "parser.yy"
     6731#line 1311 "parser.yy"
    66786732    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    66796733    break;
     
    66826736
    66836737/* Line 1806 of yacc.c  */
    6684 #line 1311 "parser.yy"
     6738#line 1313 "parser.yy"
    66856739    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    66866740    break;
     
    66896743
    66906744/* Line 1806 of yacc.c  */
    6691 #line 1313 "parser.yy"
     6745#line 1315 "parser.yy"
    66926746    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    66936747    break;
     
    66966750
    66976751/* Line 1806 of yacc.c  */
    6698 #line 1315 "parser.yy"
     6752#line 1317 "parser.yy"
    66996753    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    67006754    break;
     
    67036757
    67046758/* Line 1806 of yacc.c  */
    6705 #line 1317 "parser.yy"
     6759#line 1319 "parser.yy"
    67066760    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    67076761    break;
     
    67106764
    67116765/* Line 1806 of yacc.c  */
    6712 #line 1319 "parser.yy"
     6766#line 1321 "parser.yy"
    67136767    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    67146768    break;
     
    67176771
    67186772/* Line 1806 of yacc.c  */
    6719 #line 1324 "parser.yy"
     6773#line 1326 "parser.yy"
    67206774    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    67216775    break;
     
    67246778
    67256779/* Line 1806 of yacc.c  */
    6726 #line 1326 "parser.yy"
     6780#line 1328 "parser.yy"
    67276781    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    67286782    break;
     
    67316785
    67326786/* Line 1806 of yacc.c  */
    6733 #line 1328 "parser.yy"
     6787#line 1330 "parser.yy"
    67346788    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    67356789    break;
     
    67386792
    67396793/* Line 1806 of yacc.c  */
    6740 #line 1330 "parser.yy"
     6794#line 1332 "parser.yy"
    67416795    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    67426796    break;
     
    67456799
    67466800/* Line 1806 of yacc.c  */
    6747 #line 1332 "parser.yy"
     6801#line 1334 "parser.yy"
    67486802    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    67496803    break;
     
    67526806
    67536807/* Line 1806 of yacc.c  */
    6754 #line 1334 "parser.yy"
     6808#line 1336 "parser.yy"
    67556809    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    67566810    break;
     
    67596813
    67606814/* Line 1806 of yacc.c  */
    6761 #line 1336 "parser.yy"
     6815#line 1338 "parser.yy"
    67626816    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    67636817    break;
     
    67666820
    67676821/* Line 1806 of yacc.c  */
    6768 #line 1338 "parser.yy"
     6822#line 1340 "parser.yy"
    67696823    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    67706824    break;
     
    67736827
    67746828/* Line 1806 of yacc.c  */
    6775 #line 1340 "parser.yy"
     6829#line 1342 "parser.yy"
    67766830    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    67776831    break;
     
    67806834
    67816835/* Line 1806 of yacc.c  */
    6782 #line 1342 "parser.yy"
     6836#line 1344 "parser.yy"
    67836837    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    67846838    break;
     
    67876841
    67886842/* Line 1806 of yacc.c  */
    6789 #line 1344 "parser.yy"
     6843#line 1346 "parser.yy"
    67906844    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    67916845    break;
     
    67946848
    67956849/* Line 1806 of yacc.c  */
    6796 #line 1346 "parser.yy"
     6850#line 1348 "parser.yy"
    67976851    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    67986852    break;
    67996853
    6800   case 334:
    6801 
    6802 /* Line 1806 of yacc.c  */
    6803 #line 1353 "parser.yy"
     6854  case 333:
     6855
     6856/* Line 1806 of yacc.c  */
     6857#line 1350 "parser.yy"
     6858    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     6859    break;
     6860
     6861  case 335:
     6862
     6863/* Line 1806 of yacc.c  */
     6864#line 1357 "parser.yy"
    68046865    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68056866    break;
    68066867
    6807   case 335:
    6808 
    6809 /* Line 1806 of yacc.c  */
    6810 #line 1355 "parser.yy"
     6868  case 336:
     6869
     6870/* Line 1806 of yacc.c  */
     6871#line 1359 "parser.yy"
    68116872    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68126873    break;
    68136874
    6814   case 336:
    6815 
    6816 /* Line 1806 of yacc.c  */
    6817 #line 1357 "parser.yy"
     6875  case 337:
     6876
     6877/* Line 1806 of yacc.c  */
     6878#line 1361 "parser.yy"
    68186879    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68196880    break;
    68206881
    6821   case 337:
    6822 
    6823 /* Line 1806 of yacc.c  */
    6824 #line 1359 "parser.yy"
     6882  case 338:
     6883
     6884/* Line 1806 of yacc.c  */
     6885#line 1363 "parser.yy"
    68256886    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    68266887    break;
    68276888
    6828   case 339:
    6829 
    6830 /* Line 1806 of yacc.c  */
    6831 #line 1365 "parser.yy"
     6889  case 340:
     6890
     6891/* Line 1806 of yacc.c  */
     6892#line 1369 "parser.yy"
    68326893    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68336894    break;
    68346895
    6835   case 341:
    6836 
    6837 /* Line 1806 of yacc.c  */
    6838 #line 1372 "parser.yy"
     6896  case 342:
     6897
     6898/* Line 1806 of yacc.c  */
     6899#line 1376 "parser.yy"
    68396900    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68406901    break;
    68416902
    6842   case 342:
    6843 
    6844 /* Line 1806 of yacc.c  */
    6845 #line 1374 "parser.yy"
     6903  case 343:
     6904
     6905/* Line 1806 of yacc.c  */
     6906#line 1378 "parser.yy"
    68466907    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68476908    break;
    68486909
    6849   case 343:
    6850 
    6851 /* Line 1806 of yacc.c  */
    6852 #line 1376 "parser.yy"
     6910  case 344:
     6911
     6912/* Line 1806 of yacc.c  */
     6913#line 1380 "parser.yy"
    68536914    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    68546915    break;
    68556916
    6856   case 344:
    6857 
    6858 /* Line 1806 of yacc.c  */
    6859 #line 1381 "parser.yy"
     6917  case 345:
     6918
     6919/* Line 1806 of yacc.c  */
     6920#line 1385 "parser.yy"
    68606921    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    68616922    break;
    68626923
    6863   case 345:
    6864 
    6865 /* Line 1806 of yacc.c  */
    6866 #line 1383 "parser.yy"
     6924  case 346:
     6925
     6926/* Line 1806 of yacc.c  */
     6927#line 1387 "parser.yy"
    68676928    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    68686929    break;
    68696930
    6870   case 346:
    6871 
    6872 /* Line 1806 of yacc.c  */
    6873 #line 1385 "parser.yy"
     6931  case 347:
     6932
     6933/* Line 1806 of yacc.c  */
     6934#line 1389 "parser.yy"
    68746935    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    68756936    break;
    68766937
    6877   case 347:
    6878 
    6879 /* Line 1806 of yacc.c  */
    6880 #line 1387 "parser.yy"
     6938  case 348:
     6939
     6940/* Line 1806 of yacc.c  */
     6941#line 1391 "parser.yy"
    68816942    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    68826943    break;
    68836944
    6884   case 349:
    6885 
    6886 /* Line 1806 of yacc.c  */
    6887 #line 1393 "parser.yy"
     6945  case 350:
     6946
     6947/* Line 1806 of yacc.c  */
     6948#line 1397 "parser.yy"
    68886949    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68896950    break;
    68906951
    6891   case 350:
    6892 
    6893 /* Line 1806 of yacc.c  */
    6894 #line 1395 "parser.yy"
     6952  case 351:
     6953
     6954/* Line 1806 of yacc.c  */
     6955#line 1399 "parser.yy"
    68956956    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68966957    break;
    68976958
    6898   case 351:
    6899 
    6900 /* Line 1806 of yacc.c  */
    6901 #line 1397 "parser.yy"
     6959  case 352:
     6960
     6961/* Line 1806 of yacc.c  */
     6962#line 1401 "parser.yy"
    69026963    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69036964    break;
    69046965
    6905   case 353:
    6906 
    6907 /* Line 1806 of yacc.c  */
    6908 #line 1403 "parser.yy"
     6966  case 354:
     6967
     6968/* Line 1806 of yacc.c  */
     6969#line 1407 "parser.yy"
    69096970    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69106971    break;
    69116972
    6912   case 354:
    6913 
    6914 /* Line 1806 of yacc.c  */
    6915 #line 1405 "parser.yy"
     6973  case 355:
     6974
     6975/* Line 1806 of yacc.c  */
     6976#line 1409 "parser.yy"
    69166977    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69176978    break;
    69186979
    6919   case 356:
    6920 
    6921 /* Line 1806 of yacc.c  */
    6922 #line 1411 "parser.yy"
     6980  case 357:
     6981
     6982/* Line 1806 of yacc.c  */
     6983#line 1415 "parser.yy"
    69236984    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69246985    break;
    69256986
    6926   case 357:
    6927 
    6928 /* Line 1806 of yacc.c  */
    6929 #line 1413 "parser.yy"
     6987  case 358:
     6988
     6989/* Line 1806 of yacc.c  */
     6990#line 1417 "parser.yy"
    69306991    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69316992    break;
    69326993
    6933   case 358:
    6934 
    6935 /* Line 1806 of yacc.c  */
    6936 #line 1415 "parser.yy"
     6994  case 359:
     6995
     6996/* Line 1806 of yacc.c  */
     6997#line 1419 "parser.yy"
    69376998    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69386999    break;
    69397000
    6940   case 359:
    6941 
    6942 /* Line 1806 of yacc.c  */
    6943 #line 1420 "parser.yy"
     7001  case 360:
     7002
     7003/* Line 1806 of yacc.c  */
     7004#line 1424 "parser.yy"
    69447005    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    69457006    break;
    69467007
    6947   case 360:
    6948 
    6949 /* Line 1806 of yacc.c  */
    6950 #line 1422 "parser.yy"
     7008  case 361:
     7009
     7010/* Line 1806 of yacc.c  */
     7011#line 1426 "parser.yy"
    69517012    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69527013    break;
    69537014
    6954   case 361:
    6955 
    6956 /* Line 1806 of yacc.c  */
    6957 #line 1424 "parser.yy"
     7015  case 362:
     7016
     7017/* Line 1806 of yacc.c  */
     7018#line 1428 "parser.yy"
    69587019    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69597020    break;
    69607021
    6961   case 364:
    6962 
    6963 /* Line 1806 of yacc.c  */
    6964 #line 1434 "parser.yy"
     7022  case 365:
     7023
     7024/* Line 1806 of yacc.c  */
     7025#line 1438 "parser.yy"
    69657026    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    69667027    break;
    69677028
    6968   case 365:
    6969 
    6970 /* Line 1806 of yacc.c  */
    6971 #line 1436 "parser.yy"
     7029  case 366:
     7030
     7031/* Line 1806 of yacc.c  */
     7032#line 1440 "parser.yy"
    69727033    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
    69737034    break;
    69747035
    6975   case 366:
    6976 
    6977 /* Line 1806 of yacc.c  */
    6978 #line 1438 "parser.yy"
     7036  case 367:
     7037
     7038/* Line 1806 of yacc.c  */
     7039#line 1442 "parser.yy"
    69797040    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
    69807041    break;
    69817042
    6982   case 367:
    6983 
    6984 /* Line 1806 of yacc.c  */
    6985 #line 1440 "parser.yy"
     7043  case 368:
     7044
     7045/* Line 1806 of yacc.c  */
     7046#line 1444 "parser.yy"
    69867047    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    69877048    break;
    69887049
    6989   case 368:
    6990 
    6991 /* Line 1806 of yacc.c  */
    6992 #line 1442 "parser.yy"
     7050  case 369:
     7051
     7052/* Line 1806 of yacc.c  */
     7053#line 1446 "parser.yy"
    69937054    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    69947055    break;
    69957056
    6996   case 369:
    6997 
    6998 /* Line 1806 of yacc.c  */
    6999 #line 1447 "parser.yy"
     7057  case 370:
     7058
     7059/* Line 1806 of yacc.c  */
     7060#line 1451 "parser.yy"
    70007061    { (yyval.aggKey) = DeclarationNode::Struct; }
    70017062    break;
    70027063
    7003   case 370:
    7004 
    7005 /* Line 1806 of yacc.c  */
    7006 #line 1449 "parser.yy"
     7064  case 371:
     7065
     7066/* Line 1806 of yacc.c  */
     7067#line 1453 "parser.yy"
    70077068    { (yyval.aggKey) = DeclarationNode::Union; }
    70087069    break;
    70097070
    7010   case 371:
    7011 
    7012 /* Line 1806 of yacc.c  */
    7013 #line 1454 "parser.yy"
     7071  case 372:
     7072
     7073/* Line 1806 of yacc.c  */
     7074#line 1458 "parser.yy"
    70147075    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    70157076    break;
    70167077
    7017   case 372:
    7018 
    7019 /* Line 1806 of yacc.c  */
    7020 #line 1456 "parser.yy"
     7078  case 373:
     7079
     7080/* Line 1806 of yacc.c  */
     7081#line 1460 "parser.yy"
    70217082    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    70227083    break;
    70237084
    7024   case 374:
    7025 
    7026 /* Line 1806 of yacc.c  */
    7027 #line 1462 "parser.yy"
     7085  case 375:
     7086
     7087/* Line 1806 of yacc.c  */
     7088#line 1466 "parser.yy"
    70287089    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    70297090    break;
    70307091
    7031   case 376:
    7032 
    7033 /* Line 1806 of yacc.c  */
    7034 #line 1465 "parser.yy"
     7092  case 377:
     7093
     7094/* Line 1806 of yacc.c  */
     7095#line 1469 "parser.yy"
    70357096    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    70367097    break;
    70377098
    7038   case 378:
    7039 
    7040 /* Line 1806 of yacc.c  */
    7041 #line 1471 "parser.yy"
     7099  case 379:
     7100
     7101/* Line 1806 of yacc.c  */
     7102#line 1475 "parser.yy"
    70427103    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    70437104    break;
    70447105
    7045   case 379:
    7046 
    7047 /* Line 1806 of yacc.c  */
    7048 #line 1473 "parser.yy"
     7106  case 380:
     7107
     7108/* Line 1806 of yacc.c  */
     7109#line 1477 "parser.yy"
    70497110    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    70507111    break;
    70517112
    7052   case 380:
    7053 
    7054 /* Line 1806 of yacc.c  */
    7055 #line 1475 "parser.yy"
     7113  case 381:
     7114
     7115/* Line 1806 of yacc.c  */
     7116#line 1479 "parser.yy"
    70567117    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    70577118    break;
    70587119
    7059   case 381:
    7060 
    7061 /* Line 1806 of yacc.c  */
    7062 #line 1480 "parser.yy"
     7120  case 382:
     7121
     7122/* Line 1806 of yacc.c  */
     7123#line 1484 "parser.yy"
    70637124    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    70647125    break;
    70657126
    7066   case 382:
    7067 
    7068 /* Line 1806 of yacc.c  */
    7069 #line 1482 "parser.yy"
     7127  case 383:
     7128
     7129/* Line 1806 of yacc.c  */
     7130#line 1486 "parser.yy"
    70707131    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    70717132    break;
    70727133
    7073   case 383:
    7074 
    7075 /* Line 1806 of yacc.c  */
    7076 #line 1487 "parser.yy"
     7134  case 384:
     7135
     7136/* Line 1806 of yacc.c  */
     7137#line 1491 "parser.yy"
    70777138    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    70787139    break;
    70797140
    7080   case 384:
    7081 
    7082 /* Line 1806 of yacc.c  */
    7083 #line 1489 "parser.yy"
     7141  case 385:
     7142
     7143/* Line 1806 of yacc.c  */
     7144#line 1493 "parser.yy"
    70847145    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    70857146    break;
    70867147
    7087   case 385:
    7088 
    7089 /* Line 1806 of yacc.c  */
    7090 #line 1492 "parser.yy"
     7148  case 386:
     7149
     7150/* Line 1806 of yacc.c  */
     7151#line 1496 "parser.yy"
    70917152    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    70927153    break;
    70937154
    7094   case 386:
    7095 
    7096 /* Line 1806 of yacc.c  */
    7097 #line 1495 "parser.yy"
     7155  case 387:
     7156
     7157/* Line 1806 of yacc.c  */
     7158#line 1499 "parser.yy"
    70987159    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    70997160    break;
    71007161
    7101   case 388:
    7102 
    7103 /* Line 1806 of yacc.c  */
    7104 #line 1501 "parser.yy"
     7162  case 389:
     7163
     7164/* Line 1806 of yacc.c  */
     7165#line 1505 "parser.yy"
    71057166    { (yyval.en) = 0; }
    71067167    break;
    71077168
    7108   case 389:
    7109 
    7110 /* Line 1806 of yacc.c  */
    7111 #line 1503 "parser.yy"
     7169  case 390:
     7170
     7171/* Line 1806 of yacc.c  */
     7172#line 1507 "parser.yy"
    71127173    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    71137174    break;
    71147175
    7115   case 390:
    7116 
    7117 /* Line 1806 of yacc.c  */
    7118 #line 1508 "parser.yy"
     7176  case 391:
     7177
     7178/* Line 1806 of yacc.c  */
     7179#line 1512 "parser.yy"
    71197180    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71207181    break;
    71217182
    7122   case 392:
    7123 
    7124 /* Line 1806 of yacc.c  */
    7125 #line 1517 "parser.yy"
     7183  case 393:
     7184
     7185/* Line 1806 of yacc.c  */
     7186#line 1521 "parser.yy"
    71267187    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    71277188    break;
    71287189
    7129   case 393:
    7130 
    7131 /* Line 1806 of yacc.c  */
    7132 #line 1519 "parser.yy"
     7190  case 394:
     7191
     7192/* Line 1806 of yacc.c  */
     7193#line 1523 "parser.yy"
    71337194    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
    71347195    break;
    71357196
    7136   case 394:
    7137 
    7138 /* Line 1806 of yacc.c  */
    7139 #line 1521 "parser.yy"
     7197  case 395:
     7198
     7199/* Line 1806 of yacc.c  */
     7200#line 1525 "parser.yy"
    71407201    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
    71417202    break;
    71427203
    7143   case 395:
    7144 
    7145 /* Line 1806 of yacc.c  */
    7146 #line 1526 "parser.yy"
     7204  case 396:
     7205
     7206/* Line 1806 of yacc.c  */
     7207#line 1530 "parser.yy"
    71477208    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    71487209    break;
    71497210
    7150   case 396:
    7151 
    7152 /* Line 1806 of yacc.c  */
    7153 #line 1528 "parser.yy"
     7211  case 397:
     7212
     7213/* Line 1806 of yacc.c  */
     7214#line 1532 "parser.yy"
    71547215    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    71557216    break;
    71567217
    7157   case 397:
    7158 
    7159 /* Line 1806 of yacc.c  */
    7160 #line 1533 "parser.yy"
     7218  case 398:
     7219
     7220/* Line 1806 of yacc.c  */
     7221#line 1537 "parser.yy"
    71617222    { (yyval.en) = 0; }
    71627223    break;
    71637224
    7164   case 398:
    7165 
    7166 /* Line 1806 of yacc.c  */
    7167 #line 1535 "parser.yy"
     7225  case 399:
     7226
     7227/* Line 1806 of yacc.c  */
     7228#line 1539 "parser.yy"
    71687229    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71697230    break;
    71707231
    7171   case 399:
    7172 
    7173 /* Line 1806 of yacc.c  */
    7174 #line 1542 "parser.yy"
     7232  case 400:
     7233
     7234/* Line 1806 of yacc.c  */
     7235#line 1546 "parser.yy"
    71757236    { (yyval.decl) = 0; }
    71767237    break;
    71777238
    7178   case 403:
    7179 
    7180 /* Line 1806 of yacc.c  */
    7181 #line 1550 "parser.yy"
     7239  case 404:
     7240
     7241/* Line 1806 of yacc.c  */
     7242#line 1554 "parser.yy"
    71827243    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    71837244    break;
    71847245
    7185   case 404:
    7186 
    7187 /* Line 1806 of yacc.c  */
    7188 #line 1552 "parser.yy"
     7246  case 405:
     7247
     7248/* Line 1806 of yacc.c  */
     7249#line 1556 "parser.yy"
    71897250    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71907251    break;
    71917252
    7192   case 405:
    7193 
    7194 /* Line 1806 of yacc.c  */
    7195 #line 1554 "parser.yy"
     7253  case 406:
     7254
     7255/* Line 1806 of yacc.c  */
     7256#line 1558 "parser.yy"
    71967257    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    71977258    break;
    71987259
    7199   case 407:
    7200 
    7201 /* Line 1806 of yacc.c  */
    7202 #line 1562 "parser.yy"
     7260  case 408:
     7261
     7262/* Line 1806 of yacc.c  */
     7263#line 1566 "parser.yy"
    72037264    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72047265    break;
    72057266
    7206   case 408:
    7207 
    7208 /* Line 1806 of yacc.c  */
    7209 #line 1564 "parser.yy"
     7267  case 409:
     7268
     7269/* Line 1806 of yacc.c  */
     7270#line 1568 "parser.yy"
    72107271    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72117272    break;
    72127273
    7213   case 409:
    7214 
    7215 /* Line 1806 of yacc.c  */
    7216 #line 1566 "parser.yy"
     7274  case 410:
     7275
     7276/* Line 1806 of yacc.c  */
     7277#line 1570 "parser.yy"
    72177278    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    72187279    break;
    72197280
    7220   case 411:
    7221 
    7222 /* Line 1806 of yacc.c  */
    7223 #line 1572 "parser.yy"
     7281  case 412:
     7282
     7283/* Line 1806 of yacc.c  */
     7284#line 1576 "parser.yy"
    72247285    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72257286    break;
    72267287
    7227   case 412:
    7228 
    7229 /* Line 1806 of yacc.c  */
    7230 #line 1577 "parser.yy"
     7288  case 413:
     7289
     7290/* Line 1806 of yacc.c  */
     7291#line 1581 "parser.yy"
    72317292    { (yyval.decl) = 0; }
    72327293    break;
    72337294
    7234   case 415:
    7235 
    7236 /* Line 1806 of yacc.c  */
    7237 #line 1584 "parser.yy"
     7295  case 416:
     7296
     7297/* Line 1806 of yacc.c  */
     7298#line 1588 "parser.yy"
    72387299    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72397300    break;
    72407301
    7241   case 418:
    7242 
    7243 /* Line 1806 of yacc.c  */
    7244 #line 1591 "parser.yy"
     7302  case 419:
     7303
     7304/* Line 1806 of yacc.c  */
     7305#line 1595 "parser.yy"
    72457306    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72467307    break;
    72477308
    7248   case 419:
    7249 
    7250 /* Line 1806 of yacc.c  */
    7251 #line 1593 "parser.yy"
     7309  case 420:
     7310
     7311/* Line 1806 of yacc.c  */
     7312#line 1597 "parser.yy"
    72527313    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72537314    break;
    72547315
    7255   case 421:
    7256 
    7257 /* Line 1806 of yacc.c  */
    7258 #line 1602 "parser.yy"
     7316  case 422:
     7317
     7318/* Line 1806 of yacc.c  */
     7319#line 1606 "parser.yy"
    72597320    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    72607321    break;
    72617322
    7262   case 422:
    7263 
    7264 /* Line 1806 of yacc.c  */
    7265 #line 1605 "parser.yy"
     7323  case 423:
     7324
     7325/* Line 1806 of yacc.c  */
     7326#line 1609 "parser.yy"
    72667327    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    72677328    break;
    72687329
    7269   case 423:
    7270 
    7271 /* Line 1806 of yacc.c  */
    7272 #line 1607 "parser.yy"
     7330  case 424:
     7331
     7332/* Line 1806 of yacc.c  */
     7333#line 1611 "parser.yy"
    72737334    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    72747335    break;
    72757336
    7276   case 428:
    7277 
    7278 /* Line 1806 of yacc.c  */
    7279 #line 1617 "parser.yy"
     7337  case 429:
     7338
     7339/* Line 1806 of yacc.c  */
     7340#line 1621 "parser.yy"
    72807341    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    72817342    break;
    72827343
    7283   case 430:
    7284 
    7285 /* Line 1806 of yacc.c  */
    7286 #line 1623 "parser.yy"
     7344  case 431:
     7345
     7346/* Line 1806 of yacc.c  */
     7347#line 1627 "parser.yy"
    72877348    {
    72887349                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    72917352    break;
    72927353
    7293   case 431:
    7294 
    7295 /* Line 1806 of yacc.c  */
    7296 #line 1628 "parser.yy"
     7354  case 432:
     7355
     7356/* Line 1806 of yacc.c  */
     7357#line 1632 "parser.yy"
    72977358    {
    72987359                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73017362    break;
    73027363
    7303   case 433:
    7304 
    7305 /* Line 1806 of yacc.c  */
    7306 #line 1637 "parser.yy"
     7364  case 434:
     7365
     7366/* Line 1806 of yacc.c  */
     7367#line 1641 "parser.yy"
    73077368    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73087369    break;
    73097370
    7310   case 434:
    7311 
    7312 /* Line 1806 of yacc.c  */
    7313 #line 1646 "parser.yy"
     7371  case 435:
     7372
     7373/* Line 1806 of yacc.c  */
     7374#line 1650 "parser.yy"
    73147375    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    73157376    break;
    73167377
    7317   case 435:
    7318 
    7319 /* Line 1806 of yacc.c  */
    7320 #line 1648 "parser.yy"
     7378  case 436:
     7379
     7380/* Line 1806 of yacc.c  */
     7381#line 1652 "parser.yy"
    73217382    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    73227383    break;
    73237384
    7324   case 447:
    7325 
    7326 /* Line 1806 of yacc.c  */
    7327 #line 1673 "parser.yy"
     7385  case 448:
     7386
     7387/* Line 1806 of yacc.c  */
     7388#line 1677 "parser.yy"
    73287389    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73297390    break;
    73307391
    7331   case 451:
    7332 
    7333 /* Line 1806 of yacc.c  */
    7334 #line 1681 "parser.yy"
     7392  case 452:
     7393
     7394/* Line 1806 of yacc.c  */
     7395#line 1685 "parser.yy"
    73357396    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73367397    break;
    73377398
    7338   case 452:
    7339 
    7340 /* Line 1806 of yacc.c  */
    7341 #line 1686 "parser.yy"
     7399  case 453:
     7400
     7401/* Line 1806 of yacc.c  */
     7402#line 1690 "parser.yy"
    73427403    { (yyval.in) = 0; }
    73437404    break;
    73447405
    7345   case 453:
    7346 
    7347 /* Line 1806 of yacc.c  */
    7348 #line 1688 "parser.yy"
     7406  case 454:
     7407
     7408/* Line 1806 of yacc.c  */
     7409#line 1692 "parser.yy"
    73497410    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    73507411    break;
    73517412
    7352   case 454:
    7353 
    7354 /* Line 1806 of yacc.c  */
    7355 #line 1684 "parser.yy"
     7413  case 455:
     7414
     7415/* Line 1806 of yacc.c  */
     7416#line 1694 "parser.yy"
    73567417    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    73577418    break;
    73587419
    7359   case 455:
    7360 
    7361 /* Line 1806 of yacc.c  */
    7362 #line 1694 "parser.yy"
     7420  case 456:
     7421
     7422/* Line 1806 of yacc.c  */
     7423#line 1698 "parser.yy"
    73637424    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    73647425    break;
    73657426
    7366   case 456:
    7367 
    7368 /* Line 1806 of yacc.c  */
    7369 #line 1695 "parser.yy"
     7427  case 457:
     7428
     7429/* Line 1806 of yacc.c  */
     7430#line 1699 "parser.yy"
    73707431    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    73717432    break;
    73727433
    7373   case 457:
    7374 
    7375 /* Line 1806 of yacc.c  */
    7376 #line 1700 "parser.yy"
     7434  case 458:
     7435
     7436/* Line 1806 of yacc.c  */
     7437#line 1704 "parser.yy"
    73777438    { (yyval.in) = 0; }
    73787439    break;
    73797440
    7380   case 459:
    7381 
    7382 /* Line 1806 of yacc.c  */
    7383 #line 1702 "parser.yy"
     7441  case 460:
     7442
     7443/* Line 1806 of yacc.c  */
     7444#line 1706 "parser.yy"
    73847445    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    73857446    break;
    73867447
    7387   case 460:
    7388 
    7389 /* Line 1806 of yacc.c  */
    7390 #line 1703 "parser.yy"
     7448  case 461:
     7449
     7450/* Line 1806 of yacc.c  */
     7451#line 1707 "parser.yy"
    73917452    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    73927453    break;
    73937454
    7394   case 461:
    7395 
    7396 /* Line 1806 of yacc.c  */
    7397 #line 1705 "parser.yy"
     7455  case 462:
     7456
     7457/* Line 1806 of yacc.c  */
     7458#line 1709 "parser.yy"
    73987459    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    73997460    break;
    74007461
    7401   case 463:
    7402 
    7403 /* Line 1806 of yacc.c  */
    7404 #line 1721 "parser.yy"
     7462  case 464:
     7463
     7464/* Line 1806 of yacc.c  */
     7465#line 1725 "parser.yy"
    74057466    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    74067467    break;
    74077468
    7408   case 465:
    7409 
    7410 /* Line 1806 of yacc.c  */
    7411 #line 1727 "parser.yy"
     7469  case 466:
     7470
     7471/* Line 1806 of yacc.c  */
     7472#line 1731 "parser.yy"
    74127473    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    74137474    break;
    74147475
    7415   case 466:
    7416 
    7417 /* Line 1806 of yacc.c  */
    7418 #line 1735 "parser.yy"
     7476  case 467:
     7477
     7478/* Line 1806 of yacc.c  */
     7479#line 1739 "parser.yy"
    74197480    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    74207481    break;
    74217482
    7422   case 467:
    7423 
    7424 /* Line 1806 of yacc.c  */
    7425 #line 1737 "parser.yy"
     7483  case 468:
     7484
     7485/* Line 1806 of yacc.c  */
     7486#line 1741 "parser.yy"
    74267487    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    74277488    break;
    74287489
    7429   case 468:
    7430 
    7431 /* Line 1806 of yacc.c  */
    7432 #line 1740 "parser.yy"
     7490  case 469:
     7491
     7492/* Line 1806 of yacc.c  */
     7493#line 1744 "parser.yy"
    74337494    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    74347495    break;
    74357496
    7436   case 469:
    7437 
    7438 /* Line 1806 of yacc.c  */
    7439 #line 1742 "parser.yy"
     7497  case 470:
     7498
     7499/* Line 1806 of yacc.c  */
     7500#line 1746 "parser.yy"
    74407501    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    74417502    break;
    74427503
    7443   case 470:
    7444 
    7445 /* Line 1806 of yacc.c  */
    7446 #line 1744 "parser.yy"
     7504  case 471:
     7505
     7506/* Line 1806 of yacc.c  */
     7507#line 1748 "parser.yy"
    74477508    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    74487509    break;
    74497510
    7450   case 471:
    7451 
    7452 /* Line 1806 of yacc.c  */
    7453 #line 1746 "parser.yy"
     7511  case 472:
     7512
     7513/* Line 1806 of yacc.c  */
     7514#line 1750 "parser.yy"
    74547515    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    74557516    break;
    74567517
    7457   case 473:
    7458 
    7459 /* Line 1806 of yacc.c  */
    7460 #line 1770 "parser.yy"
     7518  case 474:
     7519
     7520/* Line 1806 of yacc.c  */
     7521#line 1774 "parser.yy"
    74617522    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    74627523    break;
    74637524
    7464   case 474:
    7465 
    7466 /* Line 1806 of yacc.c  */
    7467 #line 1772 "parser.yy"
     7525  case 475:
     7526
     7527/* Line 1806 of yacc.c  */
     7528#line 1776 "parser.yy"
    74687529    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    74697530    break;
    74707531
    7471   case 475:
    7472 
    7473 /* Line 1806 of yacc.c  */
    7474 #line 1774 "parser.yy"
     7532  case 476:
     7533
     7534/* Line 1806 of yacc.c  */
     7535#line 1778 "parser.yy"
    74757536    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    74767537    break;
    74777538
    7478   case 477:
    7479 
    7480 /* Line 1806 of yacc.c  */
    7481 #line 1780 "parser.yy"
     7539  case 478:
     7540
     7541/* Line 1806 of yacc.c  */
     7542#line 1784 "parser.yy"
    74827543    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    74837544    break;
    74847545
    7485   case 478:
    7486 
    7487 /* Line 1806 of yacc.c  */
    7488 #line 1782 "parser.yy"
     7546  case 479:
     7547
     7548/* Line 1806 of yacc.c  */
     7549#line 1786 "parser.yy"
    74897550    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    74907551    break;
    74917552
    7492   case 479:
    7493 
    7494 /* Line 1806 of yacc.c  */
    7495 #line 1787 "parser.yy"
     7553  case 480:
     7554
     7555/* Line 1806 of yacc.c  */
     7556#line 1791 "parser.yy"
    74967557    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    74977558    break;
    74987559
    7499   case 481:
    7500 
    7501 /* Line 1806 of yacc.c  */
    7502 #line 1793 "parser.yy"
     7560  case 482:
     7561
     7562/* Line 1806 of yacc.c  */
     7563#line 1797 "parser.yy"
    75037564    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    75047565    break;
    75057566
    7506   case 482:
    7507 
    7508 /* Line 1806 of yacc.c  */
    7509 #line 1798 "parser.yy"
     7567  case 483:
     7568
     7569/* Line 1806 of yacc.c  */
     7570#line 1802 "parser.yy"
    75107571    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    75117572    break;
    75127573
    7513   case 483:
    7514 
    7515 /* Line 1806 of yacc.c  */
    7516 #line 1800 "parser.yy"
     7574  case 484:
     7575
     7576/* Line 1806 of yacc.c  */
     7577#line 1804 "parser.yy"
    75177578    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    75187579    break;
    75197580
    7520   case 485:
    7521 
    7522 /* Line 1806 of yacc.c  */
    7523 #line 1806 "parser.yy"
     7581  case 486:
     7582
     7583/* Line 1806 of yacc.c  */
     7584#line 1810 "parser.yy"
    75247585    { (yyval.tclass) = DeclarationNode::Type; }
    75257586    break;
    75267587
    7527   case 486:
    7528 
    7529 /* Line 1806 of yacc.c  */
    7530 #line 1808 "parser.yy"
     7588  case 487:
     7589
     7590/* Line 1806 of yacc.c  */
     7591#line 1812 "parser.yy"
    75317592    { (yyval.tclass) = DeclarationNode::Ftype; }
    75327593    break;
    75337594
    7534   case 487:
    7535 
    7536 /* Line 1806 of yacc.c  */
    7537 #line 1810 "parser.yy"
     7595  case 488:
     7596
     7597/* Line 1806 of yacc.c  */
     7598#line 1814 "parser.yy"
    75387599    { (yyval.tclass) = DeclarationNode::Dtype; }
    75397600    break;
    75407601
    7541   case 488:
    7542 
    7543 /* Line 1806 of yacc.c  */
    7544 #line 1815 "parser.yy"
     7602  case 489:
     7603
     7604/* Line 1806 of yacc.c  */
     7605#line 1819 "parser.yy"
    75457606    { (yyval.decl) = 0; }
    75467607    break;
    75477608
    7548   case 489:
    7549 
    7550 /* Line 1806 of yacc.c  */
    7551 #line 1817 "parser.yy"
     7609  case 490:
     7610
     7611/* Line 1806 of yacc.c  */
     7612#line 1821 "parser.yy"
    75527613    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    75537614    break;
    75547615
    7555   case 490:
    7556 
    7557 /* Line 1806 of yacc.c  */
    7558 #line 1822 "parser.yy"
     7616  case 491:
     7617
     7618/* Line 1806 of yacc.c  */
     7619#line 1826 "parser.yy"
    75597620    {
    7560                         typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
    7561                         (yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
     7621                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     7622                        (yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
    75627623                }
    75637624    break;
    75647625
    7565   case 491:
    7566 
    7567 /* Line 1806 of yacc.c  */
    7568 #line 1827 "parser.yy"
     7626  case 492:
     7627
     7628/* Line 1806 of yacc.c  */
     7629#line 1831 "parser.yy"
    75697630    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    75707631    break;
    75717632
    7572   case 492:
    7573 
    7574 /* Line 1806 of yacc.c  */
    7575 #line 1829 "parser.yy"
     7633  case 493:
     7634
     7635/* Line 1806 of yacc.c  */
     7636#line 1833 "parser.yy"
    75767637    { (yyval.decl) = 0; }
    75777638    break;
    75787639
    7579   case 493:
    7580 
    7581 /* Line 1806 of yacc.c  */
    7582 #line 1834 "parser.yy"
     7640  case 494:
     7641
     7642/* Line 1806 of yacc.c  */
     7643#line 1838 "parser.yy"
    75837644    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    75847645    break;
    75857646
    7586   case 495:
    7587 
    7588 /* Line 1806 of yacc.c  */
    7589 #line 1837 "parser.yy"
     7647  case 496:
     7648
     7649/* Line 1806 of yacc.c  */
     7650#line 1841 "parser.yy"
    75907651    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    75917652    break;
    75927653
    7593   case 496:
    7594 
    7595 /* Line 1806 of yacc.c  */
    7596 #line 1839 "parser.yy"
     7654  case 497:
     7655
     7656/* Line 1806 of yacc.c  */
     7657#line 1843 "parser.yy"
    75977658    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    75987659    break;
    75997660
    7600   case 497:
    7601 
    7602 /* Line 1806 of yacc.c  */
    7603 #line 1844 "parser.yy"
     7661  case 498:
     7662
     7663/* Line 1806 of yacc.c  */
     7664#line 1848 "parser.yy"
    76047665    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76057666    break;
    76067667
    7607   case 498:
    7608 
    7609 /* Line 1806 of yacc.c  */
    7610 #line 1846 "parser.yy"
     7668  case 499:
     7669
     7670/* Line 1806 of yacc.c  */
     7671#line 1850 "parser.yy"
    76117672    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    76127673    break;
    76137674
    7614   case 499:
    7615 
    7616 /* Line 1806 of yacc.c  */
    7617 #line 1848 "parser.yy"
     7675  case 500:
     7676
     7677/* Line 1806 of yacc.c  */
     7678#line 1852 "parser.yy"
    76187679    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    76197680    break;
    76207681
    7621   case 500:
    7622 
    7623 /* Line 1806 of yacc.c  */
    7624 #line 1853 "parser.yy"
     7682  case 501:
     7683
     7684/* Line 1806 of yacc.c  */
     7685#line 1857 "parser.yy"
    76257686    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    76267687    break;
    76277688
    7628   case 501:
    7629 
    7630 /* Line 1806 of yacc.c  */
    7631 #line 1855 "parser.yy"
     7689  case 502:
     7690
     7691/* Line 1806 of yacc.c  */
     7692#line 1859 "parser.yy"
    76327693    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    76337694    break;
    76347695
    7635   case 502:
    7636 
    7637 /* Line 1806 of yacc.c  */
    7638 #line 1860 "parser.yy"
     7696  case 503:
     7697
     7698/* Line 1806 of yacc.c  */
     7699#line 1864 "parser.yy"
    76397700    {
    76407701                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    76437704    break;
    76447705
    7645   case 503:
    7646 
    7647 /* Line 1806 of yacc.c  */
    7648 #line 1865 "parser.yy"
     7706  case 504:
     7707
     7708/* Line 1806 of yacc.c  */
     7709#line 1869 "parser.yy"
    76497710    {
    76507711                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    76537714    break;
    76547715
    7655   case 504:
    7656 
    7657 /* Line 1806 of yacc.c  */
    7658 #line 1873 "parser.yy"
     7716  case 505:
     7717
     7718/* Line 1806 of yacc.c  */
     7719#line 1877 "parser.yy"
    76597720    {
    76607721                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
    7661                         (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
     7722                        (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
    76627723                }
    76637724    break;
    76647725
    7665   case 505:
    7666 
    7667 /* Line 1806 of yacc.c  */
    7668 #line 1878 "parser.yy"
     7726  case 506:
     7727
     7728/* Line 1806 of yacc.c  */
     7729#line 1882 "parser.yy"
    76697730    {
    7670                         typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
     7731                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
    76717732                        typedefTable.enterScope();
    76727733                }
    76737734    break;
    76747735
    7675   case 506:
    7676 
    7677 /* Line 1806 of yacc.c  */
    7678 #line 1883 "parser.yy"
     7736  case 507:
     7737
     7738/* Line 1806 of yacc.c  */
     7739#line 1887 "parser.yy"
    76797740    {
    7680                         typedefTable.leaveContext();
     7741                        typedefTable.leaveTrait();
    76817742                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID );
    7682                         (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
     7743                        (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
    76837744                }
    76847745    break;
    76857746
    7686   case 508:
    7687 
    7688 /* Line 1806 of yacc.c  */
    7689 #line 1893 "parser.yy"
     7747  case 509:
     7748
     7749/* Line 1806 of yacc.c  */
     7750#line 1897 "parser.yy"
    76907751    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    76917752    break;
    76927753
    7693   case 511:
    7694 
    7695 /* Line 1806 of yacc.c  */
    7696 #line 1903 "parser.yy"
     7754  case 512:
     7755
     7756/* Line 1806 of yacc.c  */
     7757#line 1907 "parser.yy"
    76977758    {
    76987759                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77017762    break;
    77027763
    7703   case 512:
    7704 
    7705 /* Line 1806 of yacc.c  */
    7706 #line 1908 "parser.yy"
     7764  case 513:
     7765
     7766/* Line 1806 of yacc.c  */
     7767#line 1912 "parser.yy"
    77077768    {
    77087769                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77117772    break;
    77127773
    7713   case 513:
    7714 
    7715 /* Line 1806 of yacc.c  */
    7716 #line 1913 "parser.yy"
     7774  case 514:
     7775
     7776/* Line 1806 of yacc.c  */
     7777#line 1917 "parser.yy"
    77177778    {
    77187779                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    77217782    break;
    77227783
    7723   case 514:
    7724 
    7725 /* Line 1806 of yacc.c  */
    7726 #line 1921 "parser.yy"
     7784  case 515:
     7785
     7786/* Line 1806 of yacc.c  */
     7787#line 1925 "parser.yy"
    77277788    {
    77287789                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77317792    break;
    77327793
    7733   case 515:
    7734 
    7735 /* Line 1806 of yacc.c  */
    7736 #line 1926 "parser.yy"
     7794  case 516:
     7795
     7796/* Line 1806 of yacc.c  */
     7797#line 1930 "parser.yy"
    77377798    {
    77387799                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77417802    break;
    77427803
    7743   case 516:
    7744 
    7745 /* Line 1806 of yacc.c  */
    7746 #line 1936 "parser.yy"
     7804  case 517:
     7805
     7806/* Line 1806 of yacc.c  */
     7807#line 1940 "parser.yy"
    77477808    {}
    77487809    break;
    77497810
    7750   case 517:
    7751 
    7752 /* Line 1806 of yacc.c  */
    7753 #line 1938 "parser.yy"
     7811  case 518:
     7812
     7813/* Line 1806 of yacc.c  */
     7814#line 1942 "parser.yy"
    77547815    {
    77557816                        if ( theTree ) {
     
    77617822    break;
    77627823
    7763   case 519:
    7764 
    7765 /* Line 1806 of yacc.c  */
    7766 #line 1950 "parser.yy"
     7824  case 520:
     7825
     7826/* Line 1806 of yacc.c  */
     7827#line 1954 "parser.yy"
    77677828    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    77687829    break;
    77697830
    7770   case 520:
    7771 
    7772 /* Line 1806 of yacc.c  */
    7773 #line 1955 "parser.yy"
     7831  case 521:
     7832
     7833/* Line 1806 of yacc.c  */
     7834#line 1959 "parser.yy"
    77747835    { (yyval.decl) = 0; }
    77757836    break;
    77767837
    7777   case 524:
    7778 
    7779 /* Line 1806 of yacc.c  */
    7780 #line 1963 "parser.yy"
     7838  case 525:
     7839
     7840/* Line 1806 of yacc.c  */
     7841#line 1967 "parser.yy"
    77817842    {}
    77827843    break;
    77837844
    7784   case 525:
    7785 
    7786 /* Line 1806 of yacc.c  */
    7787 #line 1965 "parser.yy"
     7845  case 526:
     7846
     7847/* Line 1806 of yacc.c  */
     7848#line 1969 "parser.yy"
    77887849    {
    77897850                        linkageStack.push( linkage );
     
    77927853    break;
    77937854
    7794   case 526:
    7795 
    7796 /* Line 1806 of yacc.c  */
    7797 #line 1970 "parser.yy"
     7855  case 527:
     7856
     7857/* Line 1806 of yacc.c  */
     7858#line 1974 "parser.yy"
    77987859    {
    77997860                        linkage = linkageStack.top();
     
    78037864    break;
    78047865
    7805   case 527:
    7806 
    7807 /* Line 1806 of yacc.c  */
    7808 #line 1976 "parser.yy"
     7866  case 528:
     7867
     7868/* Line 1806 of yacc.c  */
     7869#line 1980 "parser.yy"
    78097870    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78107871    break;
    78117872
    7812   case 529:
    7813 
    7814 /* Line 1806 of yacc.c  */
    7815 #line 1986 "parser.yy"
     7873  case 530:
     7874
     7875/* Line 1806 of yacc.c  */
     7876#line 1990 "parser.yy"
    78167877    {
    78177878                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78217882    break;
    78227883
    7823   case 530:
    7824 
    7825 /* Line 1806 of yacc.c  */
    7826 #line 1992 "parser.yy"
     7884  case 531:
     7885
     7886/* Line 1806 of yacc.c  */
     7887#line 1996 "parser.yy"
    78277888    {
    78287889                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78327893    break;
    78337894
    7834   case 531:
    7835 
    7836 /* Line 1806 of yacc.c  */
    7837 #line 2001 "parser.yy"
     7895  case 532:
     7896
     7897/* Line 1806 of yacc.c  */
     7898#line 2005 "parser.yy"
    78387899    {
    78397900                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78437904    break;
    78447905
    7845   case 532:
    7846 
    7847 /* Line 1806 of yacc.c  */
    7848 #line 2007 "parser.yy"
     7906  case 533:
     7907
     7908/* Line 1806 of yacc.c  */
     7909#line 2011 "parser.yy"
    78497910    {
    78507911                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78547915    break;
    78557916
    7856   case 533:
    7857 
    7858 /* Line 1806 of yacc.c  */
    7859 #line 2013 "parser.yy"
     7917  case 534:
     7918
     7919/* Line 1806 of yacc.c  */
     7920#line 2017 "parser.yy"
    78607921    {
    78617922                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78657926    break;
    78667927
    7867   case 534:
    7868 
    7869 /* Line 1806 of yacc.c  */
    7870 #line 2019 "parser.yy"
     7928  case 535:
     7929
     7930/* Line 1806 of yacc.c  */
     7931#line 2023 "parser.yy"
    78717932    {
    78727933                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78767937    break;
    78777938
    7878   case 535:
    7879 
    7880 /* Line 1806 of yacc.c  */
    7881 #line 2025 "parser.yy"
     7939  case 536:
     7940
     7941/* Line 1806 of yacc.c  */
     7942#line 2029 "parser.yy"
    78827943    {
    78837944                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78877948    break;
    78887949
    7889   case 536:
    7890 
    7891 /* Line 1806 of yacc.c  */
    7892 #line 2033 "parser.yy"
     7950  case 537:
     7951
     7952/* Line 1806 of yacc.c  */
     7953#line 2037 "parser.yy"
    78937954    {
    78947955                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78987959    break;
    78997960
    7900   case 537:
    7901 
    7902 /* Line 1806 of yacc.c  */
    7903 #line 2039 "parser.yy"
     7961  case 538:
     7962
     7963/* Line 1806 of yacc.c  */
     7964#line 2043 "parser.yy"
    79047965    {
    79057966                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79097970    break;
    79107971
    7911   case 538:
    7912 
    7913 /* Line 1806 of yacc.c  */
    7914 #line 2047 "parser.yy"
     7972  case 539:
     7973
     7974/* Line 1806 of yacc.c  */
     7975#line 2051 "parser.yy"
    79157976    {
    79167977                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79207981    break;
    79217982
    7922   case 539:
    7923 
    7924 /* Line 1806 of yacc.c  */
    7925 #line 2053 "parser.yy"
     7983  case 540:
     7984
     7985/* Line 1806 of yacc.c  */
     7986#line 2057 "parser.yy"
    79267987    {
    79277988                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79317992    break;
    79327993
    7933   case 543:
    7934 
    7935 /* Line 1806 of yacc.c  */
    7936 #line 2068 "parser.yy"
     7994  case 544:
     7995
     7996/* Line 1806 of yacc.c  */
     7997#line 2072 "parser.yy"
    79377998    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    79387999    break;
    79398000
    7940   case 546:
    7941 
    7942 /* Line 1806 of yacc.c  */
    7943 #line 2078 "parser.yy"
     8001  case 547:
     8002
     8003/* Line 1806 of yacc.c  */
     8004#line 2082 "parser.yy"
    79448005    { (yyval.decl) = 0; }
    79458006    break;
    79468007
    7947   case 549:
    7948 
    7949 /* Line 1806 of yacc.c  */
    7950 #line 2085 "parser.yy"
     8008  case 550:
     8009
     8010/* Line 1806 of yacc.c  */
     8011#line 2089 "parser.yy"
    79518012    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    79528013    break;
    79538014
    7954   case 550:
    7955 
    7956 /* Line 1806 of yacc.c  */
    7957 #line 2091 "parser.yy"
     8015  case 551:
     8016
     8017/* Line 1806 of yacc.c  */
     8018#line 2095 "parser.yy"
    79588019    { (yyval.decl) = 0; }
    79598020    break;
    79608021
    7961   case 556:
    7962 
    7963 /* Line 1806 of yacc.c  */
    7964 #line 2106 "parser.yy"
     8022  case 557:
     8023
     8024/* Line 1806 of yacc.c  */
     8025#line 2110 "parser.yy"
    79658026    {}
    79668027    break;
    79678028
    7968   case 557:
    7969 
    7970 /* Line 1806 of yacc.c  */
    7971 #line 2107 "parser.yy"
     8029  case 558:
     8030
     8031/* Line 1806 of yacc.c  */
     8032#line 2111 "parser.yy"
    79728033    {}
    79738034    break;
    79748035
    7975   case 558:
    7976 
    7977 /* Line 1806 of yacc.c  */
    7978 #line 2108 "parser.yy"
     8036  case 559:
     8037
     8038/* Line 1806 of yacc.c  */
     8039#line 2112 "parser.yy"
    79798040    {}
    79808041    break;
    79818042
    7982   case 559:
    7983 
    7984 /* Line 1806 of yacc.c  */
    7985 #line 2109 "parser.yy"
     8043  case 560:
     8044
     8045/* Line 1806 of yacc.c  */
     8046#line 2113 "parser.yy"
    79868047    {}
    79878048    break;
    79888049
    7989   case 560:
    7990 
    7991 /* Line 1806 of yacc.c  */
    7992 #line 2144 "parser.yy"
     8050  case 561:
     8051
     8052/* Line 1806 of yacc.c  */
     8053#line 2148 "parser.yy"
    79938054    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    79948055    break;
    79958056
    7996   case 562:
    7997 
    7998 /* Line 1806 of yacc.c  */
    7999 #line 2147 "parser.yy"
     8057  case 563:
     8058
     8059/* Line 1806 of yacc.c  */
     8060#line 2151 "parser.yy"
    80008061    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80018062    break;
    80028063
    8003   case 563:
    8004 
    8005 /* Line 1806 of yacc.c  */
    8006 #line 2149 "parser.yy"
     8064  case 564:
     8065
     8066/* Line 1806 of yacc.c  */
     8067#line 2153 "parser.yy"
    80078068    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80088069    break;
    80098070
    8010   case 564:
    8011 
    8012 /* Line 1806 of yacc.c  */
    8013 #line 2154 "parser.yy"
     8071  case 565:
     8072
     8073/* Line 1806 of yacc.c  */
     8074#line 2158 "parser.yy"
    80148075    {
    80158076                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    80188079    break;
    80198080
    8020   case 565:
    8021 
    8022 /* Line 1806 of yacc.c  */
    8023 #line 2159 "parser.yy"
     8081  case 566:
     8082
     8083/* Line 1806 of yacc.c  */
     8084#line 2163 "parser.yy"
    80248085    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80258086    break;
    80268087
    8027   case 566:
    8028 
    8029 /* Line 1806 of yacc.c  */
    8030 #line 2164 "parser.yy"
     8088  case 567:
     8089
     8090/* Line 1806 of yacc.c  */
     8091#line 2168 "parser.yy"
    80318092    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80328093    break;
    80338094
    8034   case 567:
    8035 
    8036 /* Line 1806 of yacc.c  */
    8037 #line 2166 "parser.yy"
     8095  case 568:
     8096
     8097/* Line 1806 of yacc.c  */
     8098#line 2170 "parser.yy"
    80388099    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    80398100    break;
    80408101
    8041   case 568:
    8042 
    8043 /* Line 1806 of yacc.c  */
    8044 #line 2168 "parser.yy"
     8102  case 569:
     8103
     8104/* Line 1806 of yacc.c  */
     8105#line 2172 "parser.yy"
    80458106    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80468107    break;
    80478108
    8048   case 569:
    8049 
    8050 /* Line 1806 of yacc.c  */
    8051 #line 2173 "parser.yy"
     8109  case 570:
     8110
     8111/* Line 1806 of yacc.c  */
     8112#line 2177 "parser.yy"
    80528113    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    80538114    break;
    80548115
    8055   case 570:
    8056 
    8057 /* Line 1806 of yacc.c  */
    8058 #line 2175 "parser.yy"
     8116  case 571:
     8117
     8118/* Line 1806 of yacc.c  */
     8119#line 2179 "parser.yy"
    80598120    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80608121    break;
    80618122
    8062   case 571:
    8063 
    8064 /* Line 1806 of yacc.c  */
    8065 #line 2177 "parser.yy"
     8123  case 572:
     8124
     8125/* Line 1806 of yacc.c  */
     8126#line 2181 "parser.yy"
    80668127    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    80678128    break;
    80688129
    8069   case 572:
    8070 
    8071 /* Line 1806 of yacc.c  */
    8072 #line 2179 "parser.yy"
     8130  case 573:
     8131
     8132/* Line 1806 of yacc.c  */
     8133#line 2183 "parser.yy"
    80738134    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80748135    break;
    80758136
    8076   case 573:
    8077 
    8078 /* Line 1806 of yacc.c  */
    8079 #line 2184 "parser.yy"
     8137  case 574:
     8138
     8139/* Line 1806 of yacc.c  */
     8140#line 2188 "parser.yy"
    80808141    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    80818142    break;
    80828143
    8083   case 574:
    8084 
    8085 /* Line 1806 of yacc.c  */
    8086 #line 2186 "parser.yy"
     8144  case 575:
     8145
     8146/* Line 1806 of yacc.c  */
     8147#line 2190 "parser.yy"
    80878148    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80888149    break;
    80898150
    8090   case 575:
    8091 
    8092 /* Line 1806 of yacc.c  */
    8093 #line 2196 "parser.yy"
     8151  case 576:
     8152
     8153/* Line 1806 of yacc.c  */
     8154#line 2200 "parser.yy"
    80948155    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80958156    break;
    80968157
    8097   case 577:
    8098 
    8099 /* Line 1806 of yacc.c  */
    8100 #line 2199 "parser.yy"
     8158  case 578:
     8159
     8160/* Line 1806 of yacc.c  */
     8161#line 2203 "parser.yy"
    81018162    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81028163    break;
    81038164
    8104   case 578:
    8105 
    8106 /* Line 1806 of yacc.c  */
    8107 #line 2204 "parser.yy"
     8165  case 579:
     8166
     8167/* Line 1806 of yacc.c  */
     8168#line 2208 "parser.yy"
    81088169    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81098170    break;
    81108171
    8111   case 579:
    8112 
    8113 /* Line 1806 of yacc.c  */
    8114 #line 2206 "parser.yy"
     8172  case 580:
     8173
     8174/* Line 1806 of yacc.c  */
     8175#line 2210 "parser.yy"
    81158176    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81168177    break;
    81178178
    8118   case 580:
    8119 
    8120 /* Line 1806 of yacc.c  */
    8121 #line 2208 "parser.yy"
     8179  case 581:
     8180
     8181/* Line 1806 of yacc.c  */
     8182#line 2212 "parser.yy"
    81228183    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81238184    break;
    81248185
    8125   case 581:
    8126 
    8127 /* Line 1806 of yacc.c  */
    8128 #line 2213 "parser.yy"
     8186  case 582:
     8187
     8188/* Line 1806 of yacc.c  */
     8189#line 2217 "parser.yy"
    81298190    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81308191    break;
    81318192
    8132   case 582:
    8133 
    8134 /* Line 1806 of yacc.c  */
    8135 #line 2215 "parser.yy"
     8193  case 583:
     8194
     8195/* Line 1806 of yacc.c  */
     8196#line 2219 "parser.yy"
    81368197    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81378198    break;
    81388199
    8139   case 583:
    8140 
    8141 /* Line 1806 of yacc.c  */
    8142 #line 2217 "parser.yy"
     8200  case 584:
     8201
     8202/* Line 1806 of yacc.c  */
     8203#line 2221 "parser.yy"
    81438204    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81448205    break;
    81458206
    8146   case 584:
    8147 
    8148 /* Line 1806 of yacc.c  */
    8149 #line 2222 "parser.yy"
     8207  case 585:
     8208
     8209/* Line 1806 of yacc.c  */
     8210#line 2226 "parser.yy"
    81508211    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81518212    break;
    81528213
    8153   case 585:
    8154 
    8155 /* Line 1806 of yacc.c  */
    8156 #line 2224 "parser.yy"
     8214  case 586:
     8215
     8216/* Line 1806 of yacc.c  */
     8217#line 2228 "parser.yy"
    81578218    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81588219    break;
    81598220
    8160   case 586:
    8161 
    8162 /* Line 1806 of yacc.c  */
    8163 #line 2226 "parser.yy"
     8221  case 587:
     8222
     8223/* Line 1806 of yacc.c  */
     8224#line 2230 "parser.yy"
    81648225    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81658226    break;
    81668227
    8167   case 590:
    8168 
    8169 /* Line 1806 of yacc.c  */
    8170 #line 2241 "parser.yy"
     8228  case 591:
     8229
     8230/* Line 1806 of yacc.c  */
     8231#line 2245 "parser.yy"
    81718232    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    81728233    break;
    81738234
    8174   case 591:
    8175 
    8176 /* Line 1806 of yacc.c  */
    8177 #line 2243 "parser.yy"
     8235  case 592:
     8236
     8237/* Line 1806 of yacc.c  */
     8238#line 2247 "parser.yy"
    81788239    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    81798240    break;
    81808241
    8181   case 592:
    8182 
    8183 /* Line 1806 of yacc.c  */
    8184 #line 2245 "parser.yy"
     8242  case 593:
     8243
     8244/* Line 1806 of yacc.c  */
     8245#line 2249 "parser.yy"
    81858246    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81868247    break;
    81878248
    8188   case 593:
    8189 
    8190 /* Line 1806 of yacc.c  */
    8191 #line 2250 "parser.yy"
     8249  case 594:
     8250
     8251/* Line 1806 of yacc.c  */
     8252#line 2254 "parser.yy"
    81928253    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81938254    break;
    81948255
    8195   case 594:
    8196 
    8197 /* Line 1806 of yacc.c  */
    8198 #line 2252 "parser.yy"
     8256  case 595:
     8257
     8258/* Line 1806 of yacc.c  */
     8259#line 2256 "parser.yy"
    81998260    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82008261    break;
    82018262
    8202   case 595:
    8203 
    8204 /* Line 1806 of yacc.c  */
    8205 #line 2254 "parser.yy"
     8263  case 596:
     8264
     8265/* Line 1806 of yacc.c  */
     8266#line 2258 "parser.yy"
    82068267    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82078268    break;
    82088269
    8209   case 596:
    8210 
    8211 /* Line 1806 of yacc.c  */
    8212 #line 2259 "parser.yy"
     8270  case 597:
     8271
     8272/* Line 1806 of yacc.c  */
     8273#line 2263 "parser.yy"
    82138274    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82148275    break;
    82158276
    8216   case 597:
    8217 
    8218 /* Line 1806 of yacc.c  */
    8219 #line 2261 "parser.yy"
     8277  case 598:
     8278
     8279/* Line 1806 of yacc.c  */
     8280#line 2265 "parser.yy"
    82208281    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82218282    break;
    82228283
    8223   case 598:
    8224 
    8225 /* Line 1806 of yacc.c  */
    8226 #line 2263 "parser.yy"
     8284  case 599:
     8285
     8286/* Line 1806 of yacc.c  */
     8287#line 2267 "parser.yy"
    82278288    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82288289    break;
    82298290
    8230   case 599:
    8231 
    8232 /* Line 1806 of yacc.c  */
    8233 #line 2278 "parser.yy"
     8291  case 600:
     8292
     8293/* Line 1806 of yacc.c  */
     8294#line 2282 "parser.yy"
    82348295    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82358296    break;
    82368297
    8237   case 601:
    8238 
    8239 /* Line 1806 of yacc.c  */
    8240 #line 2281 "parser.yy"
     8298  case 602:
     8299
     8300/* Line 1806 of yacc.c  */
     8301#line 2285 "parser.yy"
    82418302    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82428303    break;
    82438304
    8244   case 602:
    8245 
    8246 /* Line 1806 of yacc.c  */
    8247 #line 2283 "parser.yy"
     8305  case 603:
     8306
     8307/* Line 1806 of yacc.c  */
     8308#line 2287 "parser.yy"
    82488309    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82498310    break;
    82508311
    8251   case 604:
    8252 
    8253 /* Line 1806 of yacc.c  */
    8254 #line 2289 "parser.yy"
     8312  case 605:
     8313
     8314/* Line 1806 of yacc.c  */
     8315#line 2293 "parser.yy"
    82558316    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82568317    break;
    82578318
    8258   case 605:
    8259 
    8260 /* Line 1806 of yacc.c  */
    8261 #line 2294 "parser.yy"
     8319  case 606:
     8320
     8321/* Line 1806 of yacc.c  */
     8322#line 2298 "parser.yy"
    82628323    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82638324    break;
    82648325
    8265   case 606:
    8266 
    8267 /* Line 1806 of yacc.c  */
    8268 #line 2296 "parser.yy"
     8326  case 607:
     8327
     8328/* Line 1806 of yacc.c  */
     8329#line 2300 "parser.yy"
    82698330    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82708331    break;
    82718332
    8272   case 607:
    8273 
    8274 /* Line 1806 of yacc.c  */
    8275 #line 2298 "parser.yy"
     8333  case 608:
     8334
     8335/* Line 1806 of yacc.c  */
     8336#line 2302 "parser.yy"
    82768337    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82778338    break;
    82788339
    8279   case 608:
    8280 
    8281 /* Line 1806 of yacc.c  */
    8282 #line 2303 "parser.yy"
     8340  case 609:
     8341
     8342/* Line 1806 of yacc.c  */
     8343#line 2307 "parser.yy"
    82838344    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    82848345    break;
    82858346
    8286   case 609:
    8287 
    8288 /* Line 1806 of yacc.c  */
    8289 #line 2305 "parser.yy"
     8347  case 610:
     8348
     8349/* Line 1806 of yacc.c  */
     8350#line 2309 "parser.yy"
    82908351    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82918352    break;
    82928353
    8293   case 610:
    8294 
    8295 /* Line 1806 of yacc.c  */
    8296 #line 2307 "parser.yy"
     8354  case 611:
     8355
     8356/* Line 1806 of yacc.c  */
     8357#line 2311 "parser.yy"
    82978358    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82988359    break;
    82998360
    8300   case 611:
    8301 
    8302 /* Line 1806 of yacc.c  */
    8303 #line 2309 "parser.yy"
     8361  case 612:
     8362
     8363/* Line 1806 of yacc.c  */
     8364#line 2313 "parser.yy"
    83048365    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83058366    break;
    83068367
    8307   case 612:
    8308 
    8309 /* Line 1806 of yacc.c  */
    8310 #line 2314 "parser.yy"
     8368  case 613:
     8369
     8370/* Line 1806 of yacc.c  */
     8371#line 2318 "parser.yy"
    83118372    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83128373    break;
    83138374
    8314   case 613:
    8315 
    8316 /* Line 1806 of yacc.c  */
    8317 #line 2316 "parser.yy"
     8375  case 614:
     8376
     8377/* Line 1806 of yacc.c  */
     8378#line 2320 "parser.yy"
    83188379    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83198380    break;
    83208381
    8321   case 614:
    8322 
    8323 /* Line 1806 of yacc.c  */
    8324 #line 2318 "parser.yy"
     8382  case 615:
     8383
     8384/* Line 1806 of yacc.c  */
     8385#line 2322 "parser.yy"
    83258386    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83268387    break;
    83278388
    8328   case 615:
    8329 
    8330 /* Line 1806 of yacc.c  */
    8331 #line 2328 "parser.yy"
     8389  case 616:
     8390
     8391/* Line 1806 of yacc.c  */
     8392#line 2332 "parser.yy"
    83328393    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83338394    break;
    83348395
    8335   case 617:
    8336 
    8337 /* Line 1806 of yacc.c  */
    8338 #line 2331 "parser.yy"
     8396  case 618:
     8397
     8398/* Line 1806 of yacc.c  */
     8399#line 2335 "parser.yy"
    83398400    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83408401    break;
    83418402
    8342   case 618:
    8343 
    8344 /* Line 1806 of yacc.c  */
    8345 #line 2333 "parser.yy"
     8403  case 619:
     8404
     8405/* Line 1806 of yacc.c  */
     8406#line 2337 "parser.yy"
    83468407    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83478408    break;
    83488409
    8349   case 619:
    8350 
    8351 /* Line 1806 of yacc.c  */
    8352 #line 2338 "parser.yy"
     8410  case 620:
     8411
     8412/* Line 1806 of yacc.c  */
     8413#line 2342 "parser.yy"
    83538414    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83548415    break;
    83558416
    8356   case 620:
    8357 
    8358 /* Line 1806 of yacc.c  */
    8359 #line 2340 "parser.yy"
     8417  case 621:
     8418
     8419/* Line 1806 of yacc.c  */
     8420#line 2344 "parser.yy"
    83608421    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83618422    break;
    83628423
    8363   case 621:
    8364 
    8365 /* Line 1806 of yacc.c  */
    8366 #line 2342 "parser.yy"
     8424  case 622:
     8425
     8426/* Line 1806 of yacc.c  */
     8427#line 2346 "parser.yy"
    83678428    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83688429    break;
    83698430
    8370   case 622:
    8371 
    8372 /* Line 1806 of yacc.c  */
    8373 #line 2347 "parser.yy"
     8431  case 623:
     8432
     8433/* Line 1806 of yacc.c  */
     8434#line 2351 "parser.yy"
    83748435    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83758436    break;
    83768437
    8377   case 623:
    8378 
    8379 /* Line 1806 of yacc.c  */
    8380 #line 2349 "parser.yy"
     8438  case 624:
     8439
     8440/* Line 1806 of yacc.c  */
     8441#line 2353 "parser.yy"
    83818442    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83828443    break;
    83838444
    8384   case 624:
    8385 
    8386 /* Line 1806 of yacc.c  */
    8387 #line 2351 "parser.yy"
     8445  case 625:
     8446
     8447/* Line 1806 of yacc.c  */
     8448#line 2355 "parser.yy"
    83888449    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83898450    break;
    83908451
    8391   case 625:
    8392 
    8393 /* Line 1806 of yacc.c  */
    8394 #line 2353 "parser.yy"
     8452  case 626:
     8453
     8454/* Line 1806 of yacc.c  */
     8455#line 2357 "parser.yy"
    83958456    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83968457    break;
    83978458
    8398   case 626:
    8399 
    8400 /* Line 1806 of yacc.c  */
    8401 #line 2358 "parser.yy"
     8459  case 627:
     8460
     8461/* Line 1806 of yacc.c  */
     8462#line 2362 "parser.yy"
    84028463    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84038464    break;
    84048465
    8405   case 627:
    8406 
    8407 /* Line 1806 of yacc.c  */
    8408 #line 2360 "parser.yy"
     8466  case 628:
     8467
     8468/* Line 1806 of yacc.c  */
     8469#line 2364 "parser.yy"
    84098470    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84108471    break;
    84118472
    8412   case 628:
    8413 
    8414 /* Line 1806 of yacc.c  */
    8415 #line 2362 "parser.yy"
     8473  case 629:
     8474
     8475/* Line 1806 of yacc.c  */
     8476#line 2366 "parser.yy"
    84168477    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84178478    break;
    84188479
    8419   case 629:
    8420 
    8421 /* Line 1806 of yacc.c  */
    8422 #line 2393 "parser.yy"
     8480  case 630:
     8481
     8482/* Line 1806 of yacc.c  */
     8483#line 2397 "parser.yy"
    84238484    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84248485    break;
    84258486
    8426   case 631:
    8427 
    8428 /* Line 1806 of yacc.c  */
    8429 #line 2396 "parser.yy"
     8487  case 632:
     8488
     8489/* Line 1806 of yacc.c  */
     8490#line 2400 "parser.yy"
    84308491    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84318492    break;
    84328493
    8433   case 632:
    8434 
    8435 /* Line 1806 of yacc.c  */
    8436 #line 2398 "parser.yy"
     8494  case 633:
     8495
     8496/* Line 1806 of yacc.c  */
     8497#line 2402 "parser.yy"
    84378498    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84388499    break;
    84398500
    8440   case 633:
    8441 
    8442 /* Line 1806 of yacc.c  */
    8443 #line 2403 "parser.yy"
     8501  case 634:
     8502
     8503/* Line 1806 of yacc.c  */
     8504#line 2407 "parser.yy"
    84448505    {
    84458506                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    84488509    break;
    84498510
    8450   case 634:
    8451 
    8452 /* Line 1806 of yacc.c  */
    8453 #line 2408 "parser.yy"
     8511  case 635:
     8512
     8513/* Line 1806 of yacc.c  */
     8514#line 2412 "parser.yy"
    84548515    {
    84558516                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    84588519    break;
    84598520
    8460   case 635:
    8461 
    8462 /* Line 1806 of yacc.c  */
    8463 #line 2416 "parser.yy"
     8521  case 636:
     8522
     8523/* Line 1806 of yacc.c  */
     8524#line 2420 "parser.yy"
    84648525    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84658526    break;
    84668527
    8467   case 636:
    8468 
    8469 /* Line 1806 of yacc.c  */
    8470 #line 2418 "parser.yy"
     8528  case 637:
     8529
     8530/* Line 1806 of yacc.c  */
     8531#line 2422 "parser.yy"
    84718532    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84728533    break;
    84738534
    8474   case 637:
    8475 
    8476 /* Line 1806 of yacc.c  */
    8477 #line 2420 "parser.yy"
     8535  case 638:
     8536
     8537/* Line 1806 of yacc.c  */
     8538#line 2424 "parser.yy"
    84788539    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84798540    break;
    84808541
    8481   case 638:
    8482 
    8483 /* Line 1806 of yacc.c  */
    8484 #line 2425 "parser.yy"
     8542  case 639:
     8543
     8544/* Line 1806 of yacc.c  */
     8545#line 2429 "parser.yy"
    84858546    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    84868547    break;
    84878548
    8488   case 639:
    8489 
    8490 /* Line 1806 of yacc.c  */
    8491 #line 2427 "parser.yy"
     8549  case 640:
     8550
     8551/* Line 1806 of yacc.c  */
     8552#line 2431 "parser.yy"
    84928553    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84938554    break;
    84948555
    8495   case 640:
    8496 
    8497 /* Line 1806 of yacc.c  */
    8498 #line 2432 "parser.yy"
     8556  case 641:
     8557
     8558/* Line 1806 of yacc.c  */
     8559#line 2436 "parser.yy"
    84998560    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85008561    break;
    85018562
    8502   case 641:
    8503 
    8504 /* Line 1806 of yacc.c  */
    8505 #line 2434 "parser.yy"
     8563  case 642:
     8564
     8565/* Line 1806 of yacc.c  */
     8566#line 2438 "parser.yy"
    85068567    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85078568    break;
    85088569
    8509   case 643:
    8510 
    8511 /* Line 1806 of yacc.c  */
    8512 #line 2449 "parser.yy"
     8570  case 644:
     8571
     8572/* Line 1806 of yacc.c  */
     8573#line 2453 "parser.yy"
    85138574    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85148575    break;
    85158576
    8516   case 644:
    8517 
    8518 /* Line 1806 of yacc.c  */
    8519 #line 2451 "parser.yy"
     8577  case 645:
     8578
     8579/* Line 1806 of yacc.c  */
     8580#line 2455 "parser.yy"
    85208581    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85218582    break;
    85228583
    8523   case 645:
    8524 
    8525 /* Line 1806 of yacc.c  */
    8526 #line 2456 "parser.yy"
     8584  case 646:
     8585
     8586/* Line 1806 of yacc.c  */
     8587#line 2460 "parser.yy"
    85278588    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85288589    break;
    85298590
    8530   case 646:
    8531 
    8532 /* Line 1806 of yacc.c  */
    8533 #line 2458 "parser.yy"
     8591  case 647:
     8592
     8593/* Line 1806 of yacc.c  */
     8594#line 2462 "parser.yy"
    85348595    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85358596    break;
    85368597
    8537   case 647:
    8538 
    8539 /* Line 1806 of yacc.c  */
    8540 #line 2460 "parser.yy"
     8598  case 648:
     8599
     8600/* Line 1806 of yacc.c  */
     8601#line 2464 "parser.yy"
    85418602    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85428603    break;
    85438604
    8544   case 648:
    8545 
    8546 /* Line 1806 of yacc.c  */
    8547 #line 2462 "parser.yy"
     8605  case 649:
     8606
     8607/* Line 1806 of yacc.c  */
     8608#line 2466 "parser.yy"
    85488609    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85498610    break;
    85508611
    8551   case 649:
    8552 
    8553 /* Line 1806 of yacc.c  */
    8554 #line 2464 "parser.yy"
     8612  case 650:
     8613
     8614/* Line 1806 of yacc.c  */
     8615#line 2468 "parser.yy"
    85558616    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85568617    break;
    85578618
    8558   case 651:
    8559 
    8560 /* Line 1806 of yacc.c  */
    8561 #line 2470 "parser.yy"
     8619  case 652:
     8620
     8621/* Line 1806 of yacc.c  */
     8622#line 2474 "parser.yy"
    85628623    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85638624    break;
    85648625
    8565   case 652:
    8566 
    8567 /* Line 1806 of yacc.c  */
    8568 #line 2472 "parser.yy"
     8626  case 653:
     8627
     8628/* Line 1806 of yacc.c  */
     8629#line 2476 "parser.yy"
    85698630    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85708631    break;
    85718632
    8572   case 653:
    8573 
    8574 /* Line 1806 of yacc.c  */
    8575 #line 2474 "parser.yy"
     8633  case 654:
     8634
     8635/* Line 1806 of yacc.c  */
     8636#line 2478 "parser.yy"
    85768637    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85778638    break;
    85788639
    8579   case 654:
    8580 
    8581 /* Line 1806 of yacc.c  */
    8582 #line 2479 "parser.yy"
     8640  case 655:
     8641
     8642/* Line 1806 of yacc.c  */
     8643#line 2483 "parser.yy"
    85838644    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    85848645    break;
    85858646
    8586   case 655:
    8587 
    8588 /* Line 1806 of yacc.c  */
    8589 #line 2481 "parser.yy"
     8647  case 656:
     8648
     8649/* Line 1806 of yacc.c  */
     8650#line 2485 "parser.yy"
    85908651    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85918652    break;
    85928653
    8593   case 656:
    8594 
    8595 /* Line 1806 of yacc.c  */
    8596 #line 2483 "parser.yy"
     8654  case 657:
     8655
     8656/* Line 1806 of yacc.c  */
     8657#line 2487 "parser.yy"
    85978658    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85988659    break;
    85998660
    8600   case 657:
    8601 
    8602 /* Line 1806 of yacc.c  */
    8603 #line 2489 "parser.yy"
     8661  case 658:
     8662
     8663/* Line 1806 of yacc.c  */
     8664#line 2493 "parser.yy"
    86048665    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86058666    break;
    86068667
    8607   case 658:
    8608 
    8609 /* Line 1806 of yacc.c  */
    8610 #line 2491 "parser.yy"
     8668  case 659:
     8669
     8670/* Line 1806 of yacc.c  */
     8671#line 2495 "parser.yy"
    86118672    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    86128673    break;
    86138674
    8614   case 660:
    8615 
    8616 /* Line 1806 of yacc.c  */
    8617 #line 2497 "parser.yy"
     8675  case 661:
     8676
     8677/* Line 1806 of yacc.c  */
     8678#line 2501 "parser.yy"
    86188679    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    86198680    break;
    86208681
    8621   case 661:
    8622 
    8623 /* Line 1806 of yacc.c  */
    8624 #line 2499 "parser.yy"
     8682  case 662:
     8683
     8684/* Line 1806 of yacc.c  */
     8685#line 2503 "parser.yy"
    86258686    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    86268687    break;
    86278688
    8628   case 662:
    8629 
    8630 /* Line 1806 of yacc.c  */
    8631 #line 2501 "parser.yy"
     8689  case 663:
     8690
     8691/* Line 1806 of yacc.c  */
     8692#line 2505 "parser.yy"
    86328693    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    86338694    break;
    86348695
    8635   case 663:
    8636 
    8637 /* Line 1806 of yacc.c  */
    8638 #line 2503 "parser.yy"
     8696  case 664:
     8697
     8698/* Line 1806 of yacc.c  */
     8699#line 2507 "parser.yy"
    86398700    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    86408701    break;
    86418702
    8642   case 665:
    8643 
    8644 /* Line 1806 of yacc.c  */
    8645 #line 2518 "parser.yy"
     8703  case 666:
     8704
     8705/* Line 1806 of yacc.c  */
     8706#line 2522 "parser.yy"
    86468707    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86478708    break;
    86488709
    8649   case 666:
    8650 
    8651 /* Line 1806 of yacc.c  */
    8652 #line 2520 "parser.yy"
     8710  case 667:
     8711
     8712/* Line 1806 of yacc.c  */
     8713#line 2524 "parser.yy"
    86538714    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86548715    break;
    86558716
    8656   case 667:
    8657 
    8658 /* Line 1806 of yacc.c  */
    8659 #line 2525 "parser.yy"
     8717  case 668:
     8718
     8719/* Line 1806 of yacc.c  */
     8720#line 2529 "parser.yy"
    86608721    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    86618722    break;
    86628723
    8663   case 668:
    8664 
    8665 /* Line 1806 of yacc.c  */
    8666 #line 2527 "parser.yy"
     8724  case 669:
     8725
     8726/* Line 1806 of yacc.c  */
     8727#line 2531 "parser.yy"
    86678728    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    86688729    break;
    86698730
    8670   case 669:
    8671 
    8672 /* Line 1806 of yacc.c  */
    8673 #line 2529 "parser.yy"
     8731  case 670:
     8732
     8733/* Line 1806 of yacc.c  */
     8734#line 2533 "parser.yy"
    86748735    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86758736    break;
    86768737
    8677   case 670:
    8678 
    8679 /* Line 1806 of yacc.c  */
    8680 #line 2531 "parser.yy"
     8738  case 671:
     8739
     8740/* Line 1806 of yacc.c  */
     8741#line 2535 "parser.yy"
    86818742    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86828743    break;
    86838744
    8684   case 671:
    8685 
    8686 /* Line 1806 of yacc.c  */
    8687 #line 2533 "parser.yy"
     8745  case 672:
     8746
     8747/* Line 1806 of yacc.c  */
     8748#line 2537 "parser.yy"
    86888749    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86898750    break;
    86908751
    8691   case 673:
    8692 
    8693 /* Line 1806 of yacc.c  */
    8694 #line 2539 "parser.yy"
     8752  case 674:
     8753
     8754/* Line 1806 of yacc.c  */
     8755#line 2543 "parser.yy"
    86958756    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86968757    break;
    86978758
    8698   case 674:
    8699 
    8700 /* Line 1806 of yacc.c  */
    8701 #line 2541 "parser.yy"
     8759  case 675:
     8760
     8761/* Line 1806 of yacc.c  */
     8762#line 2545 "parser.yy"
    87028763    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87038764    break;
    87048765
    8705   case 675:
    8706 
    8707 /* Line 1806 of yacc.c  */
    8708 #line 2543 "parser.yy"
     8766  case 676:
     8767
     8768/* Line 1806 of yacc.c  */
     8769#line 2547 "parser.yy"
    87098770    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87108771    break;
    87118772
    8712   case 676:
    8713 
    8714 /* Line 1806 of yacc.c  */
    8715 #line 2548 "parser.yy"
     8773  case 677:
     8774
     8775/* Line 1806 of yacc.c  */
     8776#line 2552 "parser.yy"
    87168777    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    87178778    break;
    87188779
    8719   case 677:
    8720 
    8721 /* Line 1806 of yacc.c  */
    8722 #line 2550 "parser.yy"
     8780  case 678:
     8781
     8782/* Line 1806 of yacc.c  */
     8783#line 2554 "parser.yy"
    87238784    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87248785    break;
    87258786
    8726   case 678:
    8727 
    8728 /* Line 1806 of yacc.c  */
    8729 #line 2552 "parser.yy"
     8787  case 679:
     8788
     8789/* Line 1806 of yacc.c  */
     8790#line 2556 "parser.yy"
    87308791    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87318792    break;
    87328793
    8733   case 680:
    8734 
    8735 /* Line 1806 of yacc.c  */
    8736 #line 2559 "parser.yy"
     8794  case 681:
     8795
     8796/* Line 1806 of yacc.c  */
     8797#line 2563 "parser.yy"
    87378798    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87388799    break;
    87398800
    8740   case 682:
    8741 
    8742 /* Line 1806 of yacc.c  */
    8743 #line 2570 "parser.yy"
     8801  case 683:
     8802
     8803/* Line 1806 of yacc.c  */
     8804#line 2574 "parser.yy"
    87448805    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    87458806    break;
    87468807
    8747   case 683:
    8748 
    8749 /* Line 1806 of yacc.c  */
    8750 #line 2573 "parser.yy"
     8808  case 684:
     8809
     8810/* Line 1806 of yacc.c  */
     8811#line 2577 "parser.yy"
    87518812    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    87528813    break;
    87538814
    8754   case 684:
    8755 
    8756 /* Line 1806 of yacc.c  */
    8757 #line 2575 "parser.yy"
     8815  case 685:
     8816
     8817/* Line 1806 of yacc.c  */
     8818#line 2579 "parser.yy"
    87588819    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    87598820    break;
    87608821
    8761   case 685:
    8762 
    8763 /* Line 1806 of yacc.c  */
    8764 #line 2578 "parser.yy"
     8822  case 686:
     8823
     8824/* Line 1806 of yacc.c  */
     8825#line 2582 "parser.yy"
    87658826    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    87668827    break;
    87678828
    8768   case 686:
    8769 
    8770 /* Line 1806 of yacc.c  */
    8771 #line 2580 "parser.yy"
     8829  case 687:
     8830
     8831/* Line 1806 of yacc.c  */
     8832#line 2584 "parser.yy"
    87728833    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    87738834    break;
    87748835
    8775   case 687:
    8776 
    8777 /* Line 1806 of yacc.c  */
    8778 #line 2582 "parser.yy"
     8836  case 688:
     8837
     8838/* Line 1806 of yacc.c  */
     8839#line 2586 "parser.yy"
    87798840    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    87808841    break;
    87818842
    8782   case 689:
    8783 
    8784 /* Line 1806 of yacc.c  */
    8785 #line 2596 "parser.yy"
     8843  case 690:
     8844
     8845/* Line 1806 of yacc.c  */
     8846#line 2600 "parser.yy"
    87868847    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87878848    break;
    87888849
    8789   case 690:
    8790 
    8791 /* Line 1806 of yacc.c  */
    8792 #line 2598 "parser.yy"
     8850  case 691:
     8851
     8852/* Line 1806 of yacc.c  */
     8853#line 2602 "parser.yy"
    87938854    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87948855    break;
    87958856
    8796   case 691:
    8797 
    8798 /* Line 1806 of yacc.c  */
    8799 #line 2603 "parser.yy"
     8857  case 692:
     8858
     8859/* Line 1806 of yacc.c  */
     8860#line 2607 "parser.yy"
    88008861    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88018862    break;
    88028863
    8803   case 692:
    8804 
    8805 /* Line 1806 of yacc.c  */
    8806 #line 2605 "parser.yy"
     8864  case 693:
     8865
     8866/* Line 1806 of yacc.c  */
     8867#line 2609 "parser.yy"
    88078868    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88088869    break;
    88098870
    8810   case 693:
    8811 
    8812 /* Line 1806 of yacc.c  */
    8813 #line 2607 "parser.yy"
     8871  case 694:
     8872
     8873/* Line 1806 of yacc.c  */
     8874#line 2611 "parser.yy"
    88148875    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88158876    break;
    88168877
    8817   case 694:
    8818 
    8819 /* Line 1806 of yacc.c  */
    8820 #line 2609 "parser.yy"
     8878  case 695:
     8879
     8880/* Line 1806 of yacc.c  */
     8881#line 2613 "parser.yy"
    88218882    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88228883    break;
    88238884
    8824   case 695:
    8825 
    8826 /* Line 1806 of yacc.c  */
    8827 #line 2611 "parser.yy"
     8885  case 696:
     8886
     8887/* Line 1806 of yacc.c  */
     8888#line 2615 "parser.yy"
    88288889    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88298890    break;
    88308891
    8831   case 697:
    8832 
    8833 /* Line 1806 of yacc.c  */
    8834 #line 2617 "parser.yy"
     8892  case 698:
     8893
     8894/* Line 1806 of yacc.c  */
     8895#line 2621 "parser.yy"
    88358896    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88368897    break;
    88378898
    8838   case 698:
    8839 
    8840 /* Line 1806 of yacc.c  */
    8841 #line 2619 "parser.yy"
     8899  case 699:
     8900
     8901/* Line 1806 of yacc.c  */
     8902#line 2623 "parser.yy"
    88428903    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88438904    break;
    88448905
    8845   case 699:
    8846 
    8847 /* Line 1806 of yacc.c  */
    8848 #line 2621 "parser.yy"
     8906  case 700:
     8907
     8908/* Line 1806 of yacc.c  */
     8909#line 2625 "parser.yy"
    88498910    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88508911    break;
    88518912
    8852   case 700:
    8853 
    8854 /* Line 1806 of yacc.c  */
    8855 #line 2626 "parser.yy"
     8913  case 701:
     8914
     8915/* Line 1806 of yacc.c  */
     8916#line 2630 "parser.yy"
    88568917    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    88578918    break;
    88588919
    8859   case 701:
    8860 
    8861 /* Line 1806 of yacc.c  */
    8862 #line 2628 "parser.yy"
     8920  case 702:
     8921
     8922/* Line 1806 of yacc.c  */
     8923#line 2632 "parser.yy"
    88638924    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88648925    break;
    88658926
    8866   case 704:
    8867 
    8868 /* Line 1806 of yacc.c  */
    8869 #line 2638 "parser.yy"
     8927  case 705:
     8928
     8929/* Line 1806 of yacc.c  */
     8930#line 2642 "parser.yy"
    88708931    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    88718932    break;
    88728933
    8873   case 707:
    8874 
    8875 /* Line 1806 of yacc.c  */
    8876 #line 2648 "parser.yy"
    8877     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    8878     break;
    8879 
    88808934  case 708:
    8881 
    8882 /* Line 1806 of yacc.c  */
    8883 #line 2650 "parser.yy"
    8884     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    8885     break;
    8886 
    8887   case 709:
    88888935
    88898936/* Line 1806 of yacc.c  */
     
    88928939    break;
    88938940
    8894   case 710:
     8941  case 709:
    88958942
    88968943/* Line 1806 of yacc.c  */
     
    88998946    break;
    89008947
    8901   case 711:
     8948  case 710:
    89028949
    89038950/* Line 1806 of yacc.c  */
     
    89068953    break;
    89078954
    8908   case 712:
     8955  case 711:
    89098956
    89108957/* Line 1806 of yacc.c  */
     
    89138960    break;
    89148961
     8962  case 712:
     8963
     8964/* Line 1806 of yacc.c  */
     8965#line 2660 "parser.yy"
     8966    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8967    break;
     8968
    89158969  case 713:
    89168970
    89178971/* Line 1806 of yacc.c  */
    8918 #line 2665 "parser.yy"
     8972#line 2662 "parser.yy"
     8973    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8974    break;
     8975
     8976  case 714:
     8977
     8978/* Line 1806 of yacc.c  */
     8979#line 2669 "parser.yy"
    89198980    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89208981    break;
    89218982
    8922   case 714:
    8923 
    8924 /* Line 1806 of yacc.c  */
    8925 #line 2667 "parser.yy"
     8983  case 715:
     8984
     8985/* Line 1806 of yacc.c  */
     8986#line 2671 "parser.yy"
    89268987    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89278988    break;
    89288989
    8929   case 715:
    8930 
    8931 /* Line 1806 of yacc.c  */
    8932 #line 2669 "parser.yy"
     8990  case 716:
     8991
     8992/* Line 1806 of yacc.c  */
     8993#line 2673 "parser.yy"
    89338994    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89348995    break;
    89358996
    8936   case 716:
    8937 
    8938 /* Line 1806 of yacc.c  */
    8939 #line 2671 "parser.yy"
     8997  case 717:
     8998
     8999/* Line 1806 of yacc.c  */
     9000#line 2675 "parser.yy"
    89409001    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89419002    break;
    89429003
    8943   case 717:
    8944 
    8945 /* Line 1806 of yacc.c  */
    8946 #line 2673 "parser.yy"
    8947     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    8948     break;
    8949 
    89509004  case 718:
    8951 
    8952 /* Line 1806 of yacc.c  */
    8953 #line 2675 "parser.yy"
    8954     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    8955     break;
    8956 
    8957   case 719:
    89589005
    89599006/* Line 1806 of yacc.c  */
     
    89629009    break;
    89639010
     9011  case 719:
     9012
     9013/* Line 1806 of yacc.c  */
     9014#line 2679 "parser.yy"
     9015    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9016    break;
     9017
    89649018  case 720:
    89659019
    89669020/* Line 1806 of yacc.c  */
    8967 #line 2679 "parser.yy"
     9021#line 2681 "parser.yy"
     9022    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9023    break;
     9024
     9025  case 721:
     9026
     9027/* Line 1806 of yacc.c  */
     9028#line 2683 "parser.yy"
    89689029    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89699030    break;
    89709031
    8971   case 721:
    8972 
    8973 /* Line 1806 of yacc.c  */
    8974 #line 2681 "parser.yy"
     9032  case 722:
     9033
     9034/* Line 1806 of yacc.c  */
     9035#line 2685 "parser.yy"
    89759036    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    89769037    break;
    89779038
    8978   case 722:
    8979 
    8980 /* Line 1806 of yacc.c  */
    8981 #line 2683 "parser.yy"
     9039  case 723:
     9040
     9041/* Line 1806 of yacc.c  */
     9042#line 2687 "parser.yy"
    89829043    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89839044    break;
    89849045
    8985   case 723:
    8986 
    8987 /* Line 1806 of yacc.c  */
    8988 #line 2688 "parser.yy"
     9046  case 724:
     9047
     9048/* Line 1806 of yacc.c  */
     9049#line 2692 "parser.yy"
    89899050    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    89909051    break;
    89919052
    8992   case 724:
    8993 
    8994 /* Line 1806 of yacc.c  */
    8995 #line 2690 "parser.yy"
     9053  case 725:
     9054
     9055/* Line 1806 of yacc.c  */
     9056#line 2694 "parser.yy"
    89969057    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    89979058    break;
    89989059
    8999   case 725:
    9000 
    9001 /* Line 1806 of yacc.c  */
    9002 #line 2695 "parser.yy"
     9060  case 726:
     9061
     9062/* Line 1806 of yacc.c  */
     9063#line 2699 "parser.yy"
    90039064    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    90049065    break;
    90059066
    9006   case 726:
    9007 
    9008 /* Line 1806 of yacc.c  */
    9009 #line 2697 "parser.yy"
     9067  case 727:
     9068
     9069/* Line 1806 of yacc.c  */
     9070#line 2701 "parser.yy"
    90109071    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    90119072    break;
    90129073
    9013   case 728:
    9014 
    9015 /* Line 1806 of yacc.c  */
    9016 #line 2724 "parser.yy"
     9074  case 729:
     9075
     9076/* Line 1806 of yacc.c  */
     9077#line 2728 "parser.yy"
    90179078    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    90189079    break;
    90199080
    9020   case 732:
    9021 
    9022 /* Line 1806 of yacc.c  */
    9023 #line 2735 "parser.yy"
    9024     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9025     break;
    9026 
    90279081  case 733:
    9028 
    9029 /* Line 1806 of yacc.c  */
    9030 #line 2737 "parser.yy"
    9031     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9032     break;
    9033 
    9034   case 734:
    90359082
    90369083/* Line 1806 of yacc.c  */
     
    90399086    break;
    90409087
    9041   case 735:
     9088  case 734:
    90429089
    90439090/* Line 1806 of yacc.c  */
     
    90469093    break;
    90479094
    9048   case 736:
     9095  case 735:
    90499096
    90509097/* Line 1806 of yacc.c  */
     
    90539100    break;
    90549101
    9055   case 737:
     9102  case 736:
    90569103
    90579104/* Line 1806 of yacc.c  */
     
    90609107    break;
    90619108
     9109  case 737:
     9110
     9111/* Line 1806 of yacc.c  */
     9112#line 2747 "parser.yy"
     9113    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     9114    break;
     9115
    90629116  case 738:
    90639117
    90649118/* Line 1806 of yacc.c  */
    9065 #line 2752 "parser.yy"
     9119#line 2749 "parser.yy"
     9120    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     9121    break;
     9122
     9123  case 739:
     9124
     9125/* Line 1806 of yacc.c  */
     9126#line 2756 "parser.yy"
    90669127    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90679128    break;
    90689129
    9069   case 739:
    9070 
    9071 /* Line 1806 of yacc.c  */
    9072 #line 2754 "parser.yy"
     9130  case 740:
     9131
     9132/* Line 1806 of yacc.c  */
     9133#line 2758 "parser.yy"
    90739134    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90749135    break;
    90759136
    9076   case 740:
    9077 
    9078 /* Line 1806 of yacc.c  */
    9079 #line 2756 "parser.yy"
     9137  case 741:
     9138
     9139/* Line 1806 of yacc.c  */
     9140#line 2760 "parser.yy"
    90809141    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90819142    break;
    90829143
    9083   case 741:
    9084 
    9085 /* Line 1806 of yacc.c  */
    9086 #line 2758 "parser.yy"
     9144  case 742:
     9145
     9146/* Line 1806 of yacc.c  */
     9147#line 2762 "parser.yy"
    90879148    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90889149    break;
    90899150
    9090   case 742:
    9091 
    9092 /* Line 1806 of yacc.c  */
    9093 #line 2760 "parser.yy"
     9151  case 743:
     9152
     9153/* Line 1806 of yacc.c  */
     9154#line 2764 "parser.yy"
    90949155    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90959156    break;
    90969157
    9097   case 743:
    9098 
    9099 /* Line 1806 of yacc.c  */
    9100 #line 2762 "parser.yy"
     9158  case 744:
     9159
     9160/* Line 1806 of yacc.c  */
     9161#line 2766 "parser.yy"
    91019162    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91029163    break;
    91039164
    9104   case 744:
    9105 
    9106 /* Line 1806 of yacc.c  */
    9107 #line 2767 "parser.yy"
     9165  case 745:
     9166
     9167/* Line 1806 of yacc.c  */
     9168#line 2771 "parser.yy"
    91089169    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    91099170    break;
    91109171
    9111   case 745:
    9112 
    9113 /* Line 1806 of yacc.c  */
    9114 #line 2772 "parser.yy"
     9172  case 746:
     9173
     9174/* Line 1806 of yacc.c  */
     9175#line 2776 "parser.yy"
    91159176    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    91169177    break;
    91179178
    9118   case 746:
    9119 
    9120 /* Line 1806 of yacc.c  */
    9121 #line 2774 "parser.yy"
     9179  case 747:
     9180
     9181/* Line 1806 of yacc.c  */
     9182#line 2778 "parser.yy"
    91229183    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91239184    break;
    91249185
    9125   case 747:
    9126 
    9127 /* Line 1806 of yacc.c  */
    9128 #line 2776 "parser.yy"
     9186  case 748:
     9187
     9188/* Line 1806 of yacc.c  */
     9189#line 2780 "parser.yy"
    91299190    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91309191    break;
    91319192
    9132   case 750:
    9133 
    9134 /* Line 1806 of yacc.c  */
    9135 #line 2800 "parser.yy"
     9193  case 751:
     9194
     9195/* Line 1806 of yacc.c  */
     9196#line 2804 "parser.yy"
    91369197    { (yyval.en) = 0; }
    91379198    break;
    91389199
    9139   case 751:
    9140 
    9141 /* Line 1806 of yacc.c  */
    9142 #line 2802 "parser.yy"
     9200  case 752:
     9201
     9202/* Line 1806 of yacc.c  */
     9203#line 2806 "parser.yy"
    91439204    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    91449205    break;
     
    91479208
    91489209/* Line 1806 of yacc.c  */
    9149 #line 9150 "Parser/parser.cc"
     9210#line 9211 "Parser/parser.cc"
    91509211      default: break;
    91519212    }
     
    93789439
    93799440/* Line 2067 of yacc.c  */
    9380 #line 2805 "parser.yy"
     9441#line 2809 "parser.yy"
    93819442
    93829443// ----end of grammar----
  • src/Parser/parser.h

    r39786813 ra5a71d0  
    5959     SIGNED = 277,
    6060     UNSIGNED = 278,
    61      BOOL = 279,
    62      COMPLEX = 280,
    63      IMAGINARY = 281,
    64      TYPEOF = 282,
    65      LABEL = 283,
    66      ENUM = 284,
    67      STRUCT = 285,
    68      UNION = 286,
    69      TYPE = 287,
    70      FTYPE = 288,
    71      DTYPE = 289,
    72      CONTEXT = 290,
    73      SIZEOF = 291,
    74      OFFSETOF = 292,
    75      ATTRIBUTE = 293,
    76      EXTENSION = 294,
    77      IF = 295,
    78      ELSE = 296,
    79      SWITCH = 297,
    80      CASE = 298,
    81      DEFAULT = 299,
    82      DO = 300,
    83      WHILE = 301,
    84      FOR = 302,
    85      BREAK = 303,
    86      CONTINUE = 304,
    87      GOTO = 305,
    88      RETURN = 306,
    89      CHOOSE = 307,
    90      DISABLE = 308,
    91      ENABLE = 309,
    92      FALLTHRU = 310,
    93      TRY = 311,
    94      CATCH = 312,
    95      CATCHRESUME = 313,
    96      FINALLY = 314,
    97      THROW = 315,
    98      THROWRESUME = 316,
    99      AT = 317,
    100      ASM = 318,
    101      ALIGNAS = 319,
    102      ALIGNOF = 320,
    103      ATOMIC = 321,
    104      GENERIC = 322,
    105      NORETURN = 323,
    106      STATICASSERT = 324,
    107      THREADLOCAL = 325,
    108      IDENTIFIER = 326,
    109      QUOTED_IDENTIFIER = 327,
    110      TYPEDEFname = 328,
    111      TYPEGENname = 329,
    112      ATTR_IDENTIFIER = 330,
    113      ATTR_TYPEDEFname = 331,
    114      ATTR_TYPEGENname = 332,
    115      INTEGERconstant = 333,
    116      FLOATINGconstant = 334,
    117      CHARACTERconstant = 335,
    118      STRINGliteral = 336,
    119      ZERO = 337,
    120      ONE = 338,
    121      ARROW = 339,
    122      ICR = 340,
    123      DECR = 341,
    124      LS = 342,
    125      RS = 343,
    126      LE = 344,
    127      GE = 345,
    128      EQ = 346,
    129      NE = 347,
    130      ANDAND = 348,
    131      OROR = 349,
    132      ELLIPSIS = 350,
    133      MULTassign = 351,
    134      DIVassign = 352,
    135      MODassign = 353,
    136      PLUSassign = 354,
    137      MINUSassign = 355,
    138      LSassign = 356,
    139      RSassign = 357,
    140      ANDassign = 358,
    141      ERassign = 359,
    142      ORassign = 360,
    143      ATassign = 361,
    144      THEN = 362
     61     VALIST = 279,
     62     BOOL = 280,
     63     COMPLEX = 281,
     64     IMAGINARY = 282,
     65     TYPEOF = 283,
     66     LABEL = 284,
     67     ENUM = 285,
     68     STRUCT = 286,
     69     UNION = 287,
     70     OTYPE = 288,
     71     FTYPE = 289,
     72     DTYPE = 290,
     73     TRAIT = 291,
     74     SIZEOF = 292,
     75     OFFSETOF = 293,
     76     ATTRIBUTE = 294,
     77     EXTENSION = 295,
     78     IF = 296,
     79     ELSE = 297,
     80     SWITCH = 298,
     81     CASE = 299,
     82     DEFAULT = 300,
     83     DO = 301,
     84     WHILE = 302,
     85     FOR = 303,
     86     BREAK = 304,
     87     CONTINUE = 305,
     88     GOTO = 306,
     89     RETURN = 307,
     90     CHOOSE = 308,
     91     DISABLE = 309,
     92     ENABLE = 310,
     93     FALLTHRU = 311,
     94     TRY = 312,
     95     CATCH = 313,
     96     CATCHRESUME = 314,
     97     FINALLY = 315,
     98     THROW = 316,
     99     THROWRESUME = 317,
     100     AT = 318,
     101     ASM = 319,
     102     ALIGNAS = 320,
     103     ALIGNOF = 321,
     104     ATOMIC = 322,
     105     GENERIC = 323,
     106     NORETURN = 324,
     107     STATICASSERT = 325,
     108     THREADLOCAL = 326,
     109     IDENTIFIER = 327,
     110     QUOTED_IDENTIFIER = 328,
     111     TYPEDEFname = 329,
     112     TYPEGENname = 330,
     113     ATTR_IDENTIFIER = 331,
     114     ATTR_TYPEDEFname = 332,
     115     ATTR_TYPEGENname = 333,
     116     INTEGERconstant = 334,
     117     FLOATINGconstant = 335,
     118     CHARACTERconstant = 336,
     119     STRINGliteral = 337,
     120     ZERO = 338,
     121     ONE = 339,
     122     ARROW = 340,
     123     ICR = 341,
     124     DECR = 342,
     125     LS = 343,
     126     RS = 344,
     127     LE = 345,
     128     GE = 346,
     129     EQ = 347,
     130     NE = 348,
     131     ANDAND = 349,
     132     OROR = 350,
     133     ELLIPSIS = 351,
     134     MULTassign = 352,
     135     DIVassign = 353,
     136     MODassign = 354,
     137     PLUSassign = 355,
     138     MINUSassign = 356,
     139     LSassign = 357,
     140     RSassign = 358,
     141     ANDassign = 359,
     142     ERassign = 360,
     143     ORassign = 361,
     144     ATassign = 362,
     145     THEN = 363
    145146   };
    146147#endif
     
    167168#define SIGNED 277
    168169#define UNSIGNED 278
    169 #define BOOL 279
    170 #define COMPLEX 280
    171 #define IMAGINARY 281
    172 #define TYPEOF 282
    173 #define LABEL 283
    174 #define ENUM 284
    175 #define STRUCT 285
    176 #define UNION 286
    177 #define TYPE 287
    178 #define FTYPE 288
    179 #define DTYPE 289
    180 #define CONTEXT 290
    181 #define SIZEOF 291
    182 #define OFFSETOF 292
    183 #define ATTRIBUTE 293
    184 #define EXTENSION 294
    185 #define IF 295
    186 #define ELSE 296
    187 #define SWITCH 297
    188 #define CASE 298
    189 #define DEFAULT 299
    190 #define DO 300
    191 #define WHILE 301
    192 #define FOR 302
    193 #define BREAK 303
    194 #define CONTINUE 304
    195 #define GOTO 305
    196 #define RETURN 306
    197 #define CHOOSE 307
    198 #define DISABLE 308
    199 #define ENABLE 309
    200 #define FALLTHRU 310
    201 #define TRY 311
    202 #define CATCH 312
    203 #define CATCHRESUME 313
    204 #define FINALLY 314
    205 #define THROW 315
    206 #define THROWRESUME 316
    207 #define AT 317
    208 #define ASM 318
    209 #define ALIGNAS 319
    210 #define ALIGNOF 320
    211 #define ATOMIC 321
    212 #define GENERIC 322
    213 #define NORETURN 323
    214 #define STATICASSERT 324
    215 #define THREADLOCAL 325
    216 #define IDENTIFIER 326
    217 #define QUOTED_IDENTIFIER 327
    218 #define TYPEDEFname 328
    219 #define TYPEGENname 329
    220 #define ATTR_IDENTIFIER 330
    221 #define ATTR_TYPEDEFname 331
    222 #define ATTR_TYPEGENname 332
    223 #define INTEGERconstant 333
    224 #define FLOATINGconstant 334
    225 #define CHARACTERconstant 335
    226 #define STRINGliteral 336
    227 #define ZERO 337
    228 #define ONE 338
    229 #define ARROW 339
    230 #define ICR 340
    231 #define DECR 341
    232 #define LS 342
    233 #define RS 343
    234 #define LE 344
    235 #define GE 345
    236 #define EQ 346
    237 #define NE 347
    238 #define ANDAND 348
    239 #define OROR 349
    240 #define ELLIPSIS 350
    241 #define MULTassign 351
    242 #define DIVassign 352
    243 #define MODassign 353
    244 #define PLUSassign 354
    245 #define MINUSassign 355
    246 #define LSassign 356
    247 #define RSassign 357
    248 #define ANDassign 358
    249 #define ERassign 359
    250 #define ORassign 360
    251 #define ATassign 361
    252 #define THEN 362
     170#define VALIST 279
     171#define BOOL 280
     172#define COMPLEX 281
     173#define IMAGINARY 282
     174#define TYPEOF 283
     175#define LABEL 284
     176#define ENUM 285
     177#define STRUCT 286
     178#define UNION 287
     179#define OTYPE 288
     180#define FTYPE 289
     181#define DTYPE 290
     182#define TRAIT 291
     183#define SIZEOF 292
     184#define OFFSETOF 293
     185#define ATTRIBUTE 294
     186#define EXTENSION 295
     187#define IF 296
     188#define ELSE 297
     189#define SWITCH 298
     190#define CASE 299
     191#define DEFAULT 300
     192#define DO 301
     193#define WHILE 302
     194#define FOR 303
     195#define BREAK 304
     196#define CONTINUE 305
     197#define GOTO 306
     198#define RETURN 307
     199#define CHOOSE 308
     200#define DISABLE 309
     201#define ENABLE 310
     202#define FALLTHRU 311
     203#define TRY 312
     204#define CATCH 313
     205#define CATCHRESUME 314
     206#define FINALLY 315
     207#define THROW 316
     208#define THROWRESUME 317
     209#define AT 318
     210#define ASM 319
     211#define ALIGNAS 320
     212#define ALIGNOF 321
     213#define ATOMIC 322
     214#define GENERIC 323
     215#define NORETURN 324
     216#define STATICASSERT 325
     217#define THREADLOCAL 326
     218#define IDENTIFIER 327
     219#define QUOTED_IDENTIFIER 328
     220#define TYPEDEFname 329
     221#define TYPEGENname 330
     222#define ATTR_IDENTIFIER 331
     223#define ATTR_TYPEDEFname 332
     224#define ATTR_TYPEGENname 333
     225#define INTEGERconstant 334
     226#define FLOATINGconstant 335
     227#define CHARACTERconstant 336
     228#define STRINGliteral 337
     229#define ZERO 338
     230#define ONE 339
     231#define ARROW 340
     232#define ICR 341
     233#define DECR 342
     234#define LS 343
     235#define RS 344
     236#define LE 345
     237#define GE 346
     238#define EQ 347
     239#define NE 348
     240#define ANDAND 349
     241#define OROR 350
     242#define ELLIPSIS 351
     243#define MULTassign 352
     244#define DIVassign 353
     245#define MODassign 354
     246#define PLUSassign 355
     247#define MINUSassign 356
     248#define LSassign 357
     249#define RSassign 358
     250#define ANDassign 359
     251#define ERassign 360
     252#define ORassign 361
     253#define ATassign 362
     254#define THEN 363
    253255
    254256
     
    260262
    261263/* Line 2068 of yacc.c  */
    262 #line 110 "parser.yy"
     264#line 112 "parser.yy"
    263265
    264266        Token tok;
     
    277279
    278280/* Line 2068 of yacc.c  */
    279 #line 280 "Parser/parser.h"
     281#line 282 "Parser/parser.h"
    280282} YYSTYPE;
    281283# define YYSTYPE_IS_TRIVIAL 1
  • src/Parser/parser.yy

    r39786813 ra5a71d0  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb  1 18:22:42 2016
    13 // Update Count     : 1483
     12// Last Modified On : Thu Mar 24 16:16:16 2016
     13// Update Count     : 1498
    1414//
    1515
     
    5151#include <cstdio>
    5252#include <stack>
     53#include "lex.h"
     54#include "parser.h"
     55#include "ParseNode.h"
    5356#include "TypedefTable.h"
    54 #include "lex.h"
    55 #include "ParseNode.h"
    5657#include "TypeData.h"
    5758#include "LinkageSpec.h"
     
    7475%token FORALL LVALUE                                                                    // CFA
    7576%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
     77%token VALIST                                                                                   // GCC
    7678%token BOOL COMPLEX IMAGINARY                                                   // C99
    7779%token TYPEOF LABEL                                                                             // GCC
    7880%token ENUM STRUCT UNION
    79 %token TYPE FTYPE DTYPE CONTEXT                                                 // CFA
     81%token OTYPE FTYPE DTYPE TRAIT                                          // CFA
    8082%token SIZEOF OFFSETOF
    8183%token ATTRIBUTE EXTENSION                                                              // GCC
     
    171173%type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
    172174
    173 %type<decl> context_declaration context_declaration_list context_declaring_list context_specifier
     175%type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
    174176
    175177%type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
     
    197199%type<decl> new_array_parameter_1st_dimension
    198200
    199 %type<decl> new_context_declaring_list new_declaration new_field_declaring_list
     201%type<decl> new_trait_declaring_list new_declaration new_field_declaring_list
    200202%type<decl> new_function_declaration new_function_return new_function_specifier
    201203
     
    448450                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
    449451        | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
    450         { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
     452                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
    451453        | ATTR_IDENTIFIER
    452454                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
     
    10201022        | new_function_declaration pop ';'
    10211023        | type_declaring_list pop ';'
    1022         | context_specifier pop ';'
     1024        | trait_specifier pop ';'
    10231025        ;
    10241026
     
    10271029                {
    10281030                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    1029                         $$ = $1;
     1031                        $$ = $1->addInitializer( $2 );
    10301032                }
    10311033        | declaration_qualifier_list new_variable_specifier initializer_opt
     
    10341036                {
    10351037                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    1036                         $$ = $2->addQualifiers( $1 );
     1038                        $$ = $2->addQualifiers( $1 )->addInitializer( $3 );;
    10371039                }
    10381040        | new_variable_declaration pop ',' push identifier_or_type_name initializer_opt
    10391041                {
    10401042                        typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
    1041                         $$ = $1->appendList( $1->cloneType( $5 ) );
     1043                        $$ = $1->appendList( $1->cloneType( $5 )->addInitializer( $6 ) );
    10421044                }
    10431045        ;
     
    13451347        | IMAGINARY                                                                                     // C99
    13461348                { $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     1349        | VALIST                                                                                        // GCC, __builtin_va_list
     1350                { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    13471351        ;
    13481352
     
    18031807
    18041808type_class:                                                                                             // CFA
    1805         TYPE
     1809        OTYPE
    18061810                { $$ = DeclarationNode::Type; }
    18071811        | DTYPE
     
    18211825        '|' no_attr_identifier_or_type_name '(' type_name_list ')'
    18221826                {
    1823                         typedefTable.openContext( *$2 );
    1824                         $$ = DeclarationNode::newContextUse( $2, $4 );
    1825                 }
    1826         | '|' '{' push context_declaration_list '}'
     1827                        typedefTable.openTrait( *$2 );
     1828                        $$ = DeclarationNode::newTraitUse( $2, $4 );
     1829                }
     1830        | '|' '{' push trait_declaration_list '}'
    18271831                { $$ = $4; }
    1828         | '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'
     1832        | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
    18291833                { $$ = 0; }
    18301834        ;
     
    18411845
    18421846type_declaring_list:                                                                    // CFA
    1843         TYPE type_declarator
    1844                 { $$ = $2; }
    1845         | storage_class_list TYPE type_declarator
     1847        OTYPE type_declarator
     1848                { $$ = $2; }
     1849        | storage_class_list OTYPE type_declarator
    18461850                { $$ = $3->addQualifiers( $1 ); }
    18471851        | type_declaring_list ',' type_declarator
     
    18691873        ;
    18701874
    1871 context_specifier:                                                                              // CFA
    1872         CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
     1875trait_specifier:                                                                                // CFA
     1876        TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
    18731877                {
    18741878                        typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
    1875                         $$ = DeclarationNode::newContext( $2, $5, 0 );
    1876                 }
    1877         | CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
    1878                 {
    1879                         typedefTable.enterContext( *$2 );
     1879                        $$ = DeclarationNode::newTrait( $2, $5, 0 );
     1880                }
     1881        | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
     1882                {
     1883                        typedefTable.enterTrait( *$2 );
    18801884                        typedefTable.enterScope();
    18811885                }
    1882           context_declaration_list '}'
    1883                 {
    1884                         typedefTable.leaveContext();
     1886          trait_declaration_list '}'
     1887                {
     1888                        typedefTable.leaveTrait();
    18851889                        typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
    1886                         $$ = DeclarationNode::newContext( $2, $5, $10 );
    1887                 }
    1888         ;
    1889 
    1890 context_declaration_list:                                                               // CFA
    1891         context_declaration
    1892         | context_declaration_list push context_declaration
     1890                        $$ = DeclarationNode::newTrait( $2, $5, $10 );
     1891                }
     1892        ;
     1893
     1894trait_declaration_list:                                                         // CFA
     1895        trait_declaration
     1896        | trait_declaration_list push trait_declaration
    18931897                { $$ = $1->appendList( $3 ); }
    18941898        ;
    18951899
    1896 context_declaration:                                                                    // CFA
    1897         new_context_declaring_list pop ';'
    1898         | context_declaring_list pop ';'
    1899         ;
    1900 
    1901 new_context_declaring_list:                                                             // CFA
     1900trait_declaration:                                                                      // CFA
     1901        new_trait_declaring_list pop ';'
     1902        | trait_declaring_list pop ';'
     1903        ;
     1904
     1905new_trait_declaring_list:                                                               // CFA
    19021906        new_variable_specifier
    19031907                {
     
    19101914                        $$ = $1;
    19111915                }
    1912         | new_context_declaring_list pop ',' push identifier_or_type_name
     1916        | new_trait_declaring_list pop ',' push identifier_or_type_name
    19131917                {
    19141918                        typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
     
    19171921        ;
    19181922
    1919 context_declaring_list:                                                                 // CFA
     1923trait_declaring_list:                                                                   // CFA
    19201924        type_specifier declarator
    19211925                {
     
    19231927                        $$ = $2->addType( $1 );
    19241928                }
    1925         | context_declaring_list pop ',' push declarator
     1929        | trait_declaring_list pop ',' push declarator
    19261930                {
    19271931                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
  • src/ResolvExpr/AdjustExprType.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sat May 16 23:41:42 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 16 23:54:02 2015
    13 // Update Count     : 3
     12// Last Modified On : Wed Mar  2 17:34:53 2016
     13// Update Count     : 4
    1414//
    1515
     
    3333                virtual Type* mutate( UnionInstType *aggregateUseType );
    3434                virtual Type* mutate( EnumInstType *aggregateUseType );
    35                 virtual Type* mutate( ContextInstType *aggregateUseType );
     35                virtual Type* mutate( TraitInstType *aggregateUseType );
    3636                virtual Type* mutate( TypeInstType *aggregateUseType );
    3737                virtual Type* mutate( TupleType *tupleType );
     
    8787        }
    8888
    89         Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {
     89        Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {
    9090                return aggregateUseType;
    9191        }
  • src/ResolvExpr/CommonType.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 06:59:27 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 07:04:50 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:35:34 2016
     13// Update Count     : 3
    1414//
    1515
     
    3535                virtual void visit( UnionInstType *aggregateUseType );
    3636                virtual void visit( EnumInstType *aggregateUseType );
    37                 virtual void visit( ContextInstType *aggregateUseType );
     37                virtual void visit( TraitInstType *aggregateUseType );
    3838                virtual void visit( TypeInstType *aggregateUseType );
    3939                virtual void visit( TupleType *tupleType );
     
    186186        }
    187187
    188         void CommonType::visit( ContextInstType *aggregateUseType ) {
     188        void CommonType::visit( TraitInstType *aggregateUseType ) {
    189189        }
    190190
  • src/ResolvExpr/ConversionCost.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 07:06:19 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 07:22:19 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:35:46 2016
     13// Update Count     : 6
    1414//
    1515
     
    206206        }
    207207
    208         void ConversionCost::visit(ContextInstType *inst) {
     208        void ConversionCost::visit(TraitInstType *inst) {
    209209        }
    210210
     
    249249
    250250        void ConversionCost::visit(VarArgsType *varArgsType) {
    251                 if ( VarArgsType *destAsVarArgs = dynamic_cast< VarArgsType* >( dest ) ) {
     251                if ( dynamic_cast< VarArgsType* >( dest ) ) {
    252252                        cost = Cost::zero;
    253253                }
  • src/ResolvExpr/ConversionCost.h

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 09:37:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 09:39:23 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:35:56 2016
     13// Update Count     : 3
    1414//
    1515
     
    3737                virtual void visit(UnionInstType *aggregateUseType);
    3838                virtual void visit(EnumInstType *aggregateUseType);
    39                 virtual void visit(ContextInstType *aggregateUseType);
     39                virtual void visit(TraitInstType *aggregateUseType);
    4040                virtual void visit(TypeInstType *aggregateUseType);
    4141                virtual void visit(TupleType *tupleType);
  • src/ResolvExpr/PtrsAssignable.cc

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 11:44:11 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Sep 21 14:34:58 2015
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:36:05 2016
     13// Update Count     : 8
    1414//
    1515
     
    3535                virtual void visit( UnionInstType *inst );
    3636                virtual void visit( EnumInstType *inst );
    37                 virtual void visit( ContextInstType *inst );
     37                virtual void visit( TraitInstType *inst );
    3838                virtual void visit( TypeInstType *inst );
    3939                virtual void visit( TupleType *tupleType );
     
    101101        }
    102102
    103         void PtrsAssignable::visit( ContextInstType *inst ) {
     103        void PtrsAssignable::visit( TraitInstType *inst ) {
    104104                // I definitely don't think we should be doing anything here
    105105        }
  • src/ResolvExpr/PtrsCastable.cc

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 11:48:00 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Oct 05 14:49:12 2015
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:36:18 2016
     13// Update Count     : 8
    1414//
    1515
     
    3636                virtual void visit(UnionInstType *inst);
    3737                virtual void visit(EnumInstType *inst);
    38                 virtual void visit(ContextInstType *inst);
     38                virtual void visit(TraitInstType *inst);
    3939                virtual void visit(TypeInstType *inst);
    4040                virtual void visit(TupleType *tupleType);
     
    116116
    117117        void PtrsCastable::visit(EnumInstType *inst) {
    118                 if ( dynamic_cast< EnumInstType* >( inst ) ) {
     118                if ( dynamic_cast< EnumInstType* >( dest ) ) {
    119119                        result = 1;
    120                 } else if ( BasicType *bt = dynamic_cast< BasicType* >( inst ) ) {
     120                } else if ( BasicType *bt = dynamic_cast< BasicType* >( dest ) ) {
    121121                        if ( bt->get_kind() == BasicType::SignedInt ) {
    122122                                result = 0;
     
    129129        }
    130130
    131         void PtrsCastable::visit(ContextInstType *inst) {
     131        void PtrsCastable::visit(TraitInstType *inst) {
    132132                // I definitely don't think we should be doing anything here
    133133        }
  • src/ResolvExpr/RenameVars.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 12:05:18 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun  8 14:51:35 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:36:32 2016
     13// Update Count     : 5
    1414//
    1515
     
    8686        }
    8787
    88         void RenameVars::visit( ContextInstType *aggregateUseType ) {
     88        void RenameVars::visit( TraitInstType *aggregateUseType ) {
    8989                typeBefore( aggregateUseType );
    9090                acceptAll( aggregateUseType->get_parameters(), *this );
  • src/ResolvExpr/RenameVars.h

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 12:10:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 12:11:53 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:36:39 2016
     13// Update Count     : 3
    1414//
    1515
     
    4040                virtual void visit( UnionInstType *aggregateUseType );
    4141                virtual void visit( EnumInstType *aggregateUseType );
    42                 virtual void visit( ContextInstType *aggregateUseType );
     42                virtual void visit( TraitInstType *aggregateUseType );
    4343                virtual void visit( TypeInstType *aggregateUseType );
    4444                virtual void visit( TupleType *tupleType );
  • src/ResolvExpr/Resolver.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 12:17:01 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Mar 30 15:47:19 2016
     12// Last Modified On : Mon Apr 04 17:11:54 2016
    1313// Update Count     : 203
    1414//
     
    167167                Type *new_type = resolveTypeof( objectDecl->get_type(), *this );
    168168                objectDecl->set_type( new_type );
     169                // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable
     170                // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes
     171                // initContext because of a function type can contain object declarations in the return and parameter types. So
     172                // each value of initContext is retained, so the type on the first analysis is preserved and used for selecting
     173                // the RHS.
     174                Type *temp = initContext;
    169175                initContext = new_type;
    170176                SymTab::Indexer::visit( objectDecl );
     177                initContext = temp;
    171178        }
    172179
  • src/ResolvExpr/Unify.cc

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 12:27:10 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Sep 02 14:43:22 2015
    13 // Update Count     : 36
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:37:05 2016
     13// Update Count     : 37
    1414//
    1515
     
    5656                virtual void visit(UnionInstType *aggregateUseType);
    5757                virtual void visit(EnumInstType *aggregateUseType);
    58                 virtual void visit(ContextInstType *aggregateUseType);
     58                virtual void visit(TraitInstType *aggregateUseType);
    5959                virtual void visit(TypeInstType *aggregateUseType);
    6060                virtual void visit(TupleType *tupleType);
     
    541541        }
    542542
    543         void Unify::visit(ContextInstType *contextInst) {
     543        void Unify::visit(TraitInstType *contextInst) {
    544544                handleRefType( contextInst, type2 );
    545545        }
  • src/SymTab/Autogen.cc

    r39786813 ra5a71d0  
    1010// Created On       : Thu Mar 03 15:45:56 2016
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Mar 03 15:45:56 2016
     12// Last Modified On : Mon Apr 04 17:19:28 2016
    1313// Update Count     : 1
    1414//
     
    3434                virtual void visit( UnionDecl *structDecl );
    3535                virtual void visit( TypeDecl *typeDecl );
    36                 virtual void visit( ContextDecl *ctxDecl );
     36                virtual void visit( TraitDecl *ctxDecl );
    3737                virtual void visit( FunctionDecl *functionDecl );
    3838
     
    468468        }
    469469
    470         void AutogenerateRoutines::visit( ContextDecl *) {
    471                 // ensure that we don't add assignment ops for types defined as part of the context
     470        void AutogenerateRoutines::visit( TraitDecl *) {
     471                // ensure that we don't add assignment ops for types defined as part of the trait
    472472        }
    473473
  • src/SymTab/FixFunction.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 16:19:49 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 16:22:54 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:31:10 2016
     13// Update Count     : 3
    1414//
    1515
     
    6161        }
    6262
    63         Type * FixFunction::mutate(ContextInstType *aggregateUseType) {
     63        Type * FixFunction::mutate(TraitInstType *aggregateUseType) {
    6464                return aggregateUseType;
    6565        }
  • src/SymTab/FixFunction.h

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 17:02:08 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 17:03:43 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:34:06 2016
     13// Update Count     : 3
    1414//
    1515
     
    3838                virtual Type* mutate(UnionInstType *aggregateUseType);
    3939                virtual Type* mutate(EnumInstType *aggregateUseType);
    40                 virtual Type* mutate(ContextInstType *aggregateUseType);
     40                virtual Type* mutate(TraitInstType *aggregateUseType);
    4141                virtual Type* mutate(TypeInstType *aggregateUseType);
    4242                virtual Type* mutate(TupleType *tupleType);
  • src/SymTab/ImplementationType.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 21:32:01 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun May 17 21:34:40 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:31:20 2016
     13// Update Count     : 3
    1414//
    1515
     
    3737                virtual void visit(UnionInstType *aggregateUseType);
    3838                virtual void visit(EnumInstType *aggregateUseType);
    39                 virtual void visit(ContextInstType *aggregateUseType);
     39                virtual void visit(TraitInstType *aggregateUseType);
    4040                virtual void visit(TypeInstType *aggregateUseType);
    4141                virtual void visit(TupleType *tupleType);
     
    9696        }
    9797
    98         void ImplementationType::visit(ContextInstType *aggregateUseType) {
     98        void ImplementationType::visit(TraitInstType *aggregateUseType) {
    9999        }
    100100
  • src/SymTab/Indexer.cc

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:37:33 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Aug 05 13:52:42 2015
    13 // Update Count     : 10
    14 //
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:31:29 2016
     13// Update Count     : 11
     14//
     15
     16#include "Indexer.h"
     17
     18#include <string>
     19#include <typeinfo>
     20#include <unordered_map>
     21#include <unordered_set>
     22#include <utility>
     23
     24#include "Mangler.h"
     25
     26#include "Common/utility.h"
     27
     28#include "ResolvExpr/typeops.h"
    1529
    1630#include "SynTree/Declaration.h"
     
    1933#include "SynTree/Initializer.h"
    2034#include "SynTree/Statement.h"
    21 #include "Indexer.h"
    22 #include <typeinfo>
    23 #include "Common/utility.h"
    2435
    2536#define debugPrint(x) if ( doDebug ) { std::cout << x; }
     
    3344        }
    3445
    35         Indexer::Indexer( bool useDebug ) : doDebug( useDebug ) {}
    36 
    37         Indexer::~Indexer() {}
     46        typedef std::unordered_map< std::string, DeclarationWithType* > MangleTable;
     47        typedef std::unordered_map< std::string, MangleTable > IdTable;
     48        typedef std::unordered_map< std::string, NamedTypeDecl* > TypeTable;
     49        typedef std::unordered_map< std::string, StructDecl* > StructTable;
     50        typedef std::unordered_map< std::string, EnumDecl* > EnumTable;
     51        typedef std::unordered_map< std::string, UnionDecl* > UnionTable;
     52        typedef std::unordered_map< std::string, TraitDecl* > TraitTable;
     53
     54        void dump( const IdTable &table, std::ostream &os ) {
     55                for ( IdTable::const_iterator id = table.begin(); id != table.end(); ++id ) {
     56                        for ( MangleTable::const_iterator mangle = id->second.begin(); mangle != id->second.end(); ++mangle ) {
     57                                os << mangle->second << std::endl;
     58                        }
     59                }
     60        }
     61       
     62        template< typename Decl >
     63        void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) {
     64                for ( typename std::unordered_map< std::string, Decl* >::const_iterator it = table.begin(); it != table.end(); ++it ) {
     65                        os << it->second << std::endl;
     66                } // for
     67        }
     68       
     69        struct Indexer::Impl {
     70                Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(),
     71                                idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {}
     72                Impl( unsigned long _scope, Indexer &&_base ) : refCount(1), scope( _scope ), size( 0 ), base( _base ),
     73                                idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {}
     74                unsigned long refCount;   ///< Number of references to these tables
     75                unsigned long scope;      ///< Scope these tables are associated with
     76                unsigned long size;       ///< Number of elements stored in this table
     77                const Indexer base;       ///< Base indexer this extends
     78               
     79                IdTable idTable;          ///< Identifier namespace
     80                TypeTable typeTable;      ///< Type namespace
     81                StructTable structTable;  ///< Struct namespace
     82                EnumTable enumTable;      ///< Enum namespace
     83                UnionTable unionTable;    ///< Union namespace
     84                TraitTable traitTable;    ///< Trait namespace
     85        };
     86
     87        Indexer::Impl *Indexer::newRef( Indexer::Impl *toClone ) {
     88                if ( ! toClone ) return 0;
     89
     90                // shorten the search chain by skipping empty links
     91                Indexer::Impl *ret = toClone->size == 0 ? toClone->base.tables : toClone;
     92                if ( ret ) { ++ret->refCount; }
     93
     94                return ret;
     95        }
     96
     97        void Indexer::deleteRef( Indexer::Impl *toFree ) {
     98                if ( ! toFree ) return;
     99
     100                if ( --toFree->refCount == 0 ) delete toFree;
     101        }
     102
     103        void Indexer::makeWritable() {
     104                if ( ! tables ) {
     105                        // create indexer if not yet set
     106                        tables = new Indexer::Impl( scope );
     107                } else if ( tables->refCount > 1 || tables->scope != scope ) {
     108                        // make this indexer the base of a fresh indexer at the current scope
     109                        tables = new Indexer::Impl( scope, std::move( *this ) );
     110                }
     111        }
     112
     113        Indexer::Indexer( bool _doDebug ) : tables( 0 ), scope( 0 ), doDebug( _doDebug ) {}
     114
     115        Indexer::Indexer( const Indexer &that ) : tables( newRef( that.tables ) ), scope( that.scope ), doDebug( that.doDebug ) {}
     116
     117        Indexer::Indexer( Indexer &&that ) : tables( that.tables ), scope( that.scope ), doDebug( that.doDebug ) {
     118                that.tables = 0;
     119        }
     120
     121        Indexer::~Indexer() {
     122                deleteRef( tables );
     123        }
     124
     125        Indexer& Indexer::operator= ( const Indexer &that ) {
     126                deleteRef( tables );
     127
     128                tables = newRef( that.tables );
     129                scope = that.scope;
     130                doDebug = that.doDebug;
     131
     132                return *this;
     133        }
     134
     135        Indexer& Indexer::operator= ( Indexer &&that ) {
     136                deleteRef( tables );
     137
     138                tables = that.tables;
     139                scope = that.scope;
     140                doDebug = that.doDebug;
     141
     142                that.tables = 0;
     143
     144                return *this;
     145        }
    38146
    39147        void Indexer::visit( ObjectDecl *objectDecl ) {
     
    45153                if ( objectDecl->get_name() != "" ) {
    46154                        debugPrint( "Adding object " << objectDecl->get_name() << std::endl );
    47                         idTable.addDecl( objectDecl );
     155                        addId( objectDecl );
    48156                } // if
    49157        }
     
    52160                if ( functionDecl->get_name() == "" ) return;
    53161                debugPrint( "Adding function " << functionDecl->get_name() << std::endl );
    54                 idTable.addDecl( functionDecl );
     162                addId( functionDecl );
    55163                enterScope();
    56164                maybeAccept( functionDecl->get_functionType(), *this );
     
    90198                leaveScope();
    91199                debugPrint( "Adding type " << typeDecl->get_name() << std::endl );
    92                 typeTable.add( typeDecl );
     200                addType( typeDecl );
    93201                acceptAll( typeDecl->get_assertions(), *this );
    94202        }
     
    100208                leaveScope();
    101209                debugPrint( "Adding typedef " << typeDecl->get_name() << std::endl );
    102                 typeTable.add( typeDecl );
     210                addType( typeDecl );
    103211        }
    104212
     
    108216                cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() );
    109217                debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl );
    110                 structTable.add( &fwdDecl );
     218                addStruct( &fwdDecl );
    111219 
    112220                enterScope();
     
    117225                debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl );
    118226                // this addition replaces the forward declaration
    119                 structTable.add( aggregateDecl );
     227                addStruct( aggregateDecl );
    120228        }
    121229
     
    125233                cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() );
    126234                debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl );
    127                 unionTable.add( &fwdDecl );
     235                addUnion( &fwdDecl );
    128236 
    129237                enterScope();
     
    133241 
    134242                debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl );
    135                 unionTable.add( aggregateDecl );
     243                addUnion( aggregateDecl );
    136244        }
    137245
    138246        void Indexer::visit( EnumDecl *aggregateDecl ) {
    139247                debugPrint( "Adding enum " << aggregateDecl->get_name() << std::endl );
    140                 enumTable.add( aggregateDecl );
     248                addEnum( aggregateDecl );
    141249                // unlike structs, contexts, and unions, enums inject their members into the global scope
    142250                acceptAll( aggregateDecl->get_members(), *this );
    143251        }
    144252
    145         void Indexer::visit( ContextDecl *aggregateDecl ) {
     253        void Indexer::visit( TraitDecl *aggregateDecl ) {
    146254                enterScope();
    147255                acceptAll( aggregateDecl->get_parameters(), *this );
     
    150258 
    151259                debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl );
    152                 contextTable.add( aggregateDecl );
     260                addTrait( aggregateDecl );
    153261        }
    154262
     
    293401
    294402
    295         void Indexer::visit( ContextInstType *contextInst ) {
     403        void Indexer::visit( TraitInstType *contextInst ) {
    296404                acceptAll( contextInst->get_parameters(), *this );
    297405                acceptAll( contextInst->get_members(), *this );
     
    299407
    300408        void Indexer::visit( StructInstType *structInst ) {
    301                 if ( ! structTable.lookup( structInst->get_name() ) ) {
     409                if ( ! lookupStruct( structInst->get_name() ) ) {
    302410                        debugPrint( "Adding struct " << structInst->get_name() << " from implicit forward declaration" << std::endl );
    303                         structTable.add( structInst->get_name() );
     411                        addStruct( structInst->get_name() );
    304412                }
    305413                enterScope();
     
    309417
    310418        void Indexer::visit( UnionInstType *unionInst ) {
    311                 if ( ! unionTable.lookup( unionInst->get_name() ) ) {
     419                if ( ! lookupUnion( unionInst->get_name() ) ) {
    312420                        debugPrint( "Adding union " << unionInst->get_name() << " from implicit forward declaration" << std::endl );
    313                         unionTable.add( unionInst->get_name() );
     421                        addUnion( unionInst->get_name() );
    314422                }
    315423                enterScope();
     
    325433        }
    326434
    327 
    328         void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &list ) const {
    329                 idTable.lookupId( id, list );
    330         }
    331 
    332         DeclarationWithType* Indexer::lookupId( const std::string &id) const {
    333                 return idTable.lookupId(id);
     435       
     436
     437        void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const {
     438                std::unordered_set< std::string > foundMangleNames;
     439               
     440                Indexer::Impl *searchTables = tables;
     441                while ( searchTables ) {
     442
     443                        IdTable::const_iterator decls = searchTables->idTable.find( id );
     444                        if ( decls != searchTables->idTable.end() ) {
     445                                const MangleTable &mangleTable = decls->second;
     446                                for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
     447                                        // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found
     448                                        if ( foundMangleNames.insert( decl->first ).second == false ) continue;
     449                                       
     450                                        out.push_back( decl->second );
     451                                }
     452                        }
     453                       
     454                        // get declarations from base indexers
     455                        searchTables = searchTables->base.tables;
     456                }
    334457        }
    335458
    336459        NamedTypeDecl *Indexer::lookupType( const std::string &id ) const {
    337                 return typeTable.lookup( id );
     460                if ( ! tables ) return 0;
     461
     462                TypeTable::const_iterator ret = tables->typeTable.find( id );
     463                return ret != tables->typeTable.end() ? ret->second : tables->base.lookupType( id );
    338464        }
    339465
    340466        StructDecl *Indexer::lookupStruct( const std::string &id ) const {
    341                 return structTable.lookup( id );
     467                if ( ! tables ) return 0;
     468
     469                StructTable::const_iterator ret = tables->structTable.find( id );
     470                return ret != tables->structTable.end() ? ret->second : tables->base.lookupStruct( id );
    342471        }
    343472
    344473        EnumDecl *Indexer::lookupEnum( const std::string &id ) const {
    345                 return enumTable.lookup( id );
     474                if ( ! tables ) return 0;
     475
     476                EnumTable::const_iterator ret = tables->enumTable.find( id );
     477                return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnum( id );
    346478        }
    347479
    348480        UnionDecl *Indexer::lookupUnion( const std::string &id ) const {
    349                 return unionTable.lookup( id );
    350         }
    351 
    352         ContextDecl  * Indexer::lookupContext( const std::string &id ) const {
    353                 return contextTable.lookup( id );
     481                if ( ! tables ) return 0;
     482
     483                UnionTable::const_iterator ret = tables->unionTable.find( id );
     484                return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnion( id );
     485        }
     486
     487        TraitDecl *Indexer::lookupTrait( const std::string &id ) const {
     488                if ( ! tables ) return 0;
     489
     490                TraitTable::const_iterator ret = tables->traitTable.find( id );
     491                return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTrait( id );
     492        }
     493
     494        DeclarationWithType *Indexer::lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const {
     495                if ( ! tables ) return 0;
     496                if ( tables->scope < scope ) return 0;
     497
     498                IdTable::const_iterator decls = tables->idTable.find( id );
     499                if ( decls != tables->idTable.end() ) {
     500                        const MangleTable &mangleTable = decls->second;
     501                        MangleTable::const_iterator decl = mangleTable.find( mangleName );
     502                        if ( decl != mangleTable.end() ) return decl->second;
     503                }
     504
     505                return tables->base.lookupIdAtScope( id, mangleName, scope );
     506        }
     507
     508        bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const {
     509                if ( ! tables ) return false;
     510
     511                IdTable::const_iterator decls = tables->idTable.find( id );
     512                if ( decls != tables->idTable.end() ) {
     513                        const MangleTable &mangleTable = decls->second;
     514                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
     515                                // check for C decls with the same name, skipping
     516                                // those with a compatible type (by mangleName)
     517                                if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
     518                        }
     519                }
     520
     521                return tables->base.hasIncompatibleCDecl( id, mangleName );
     522        }
     523       
     524        NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const {
     525                if ( ! tables ) return 0;
     526                if ( tables->scope < scope ) return 0;
     527
     528                TypeTable::const_iterator ret = tables->typeTable.find( id );
     529                return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope );
     530        }
     531       
     532        StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const {
     533                if ( ! tables ) return 0;
     534                if ( tables->scope < scope ) return 0;
     535
     536                StructTable::const_iterator ret = tables->structTable.find( id );
     537                return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope );
     538        }
     539       
     540        EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const {
     541                if ( ! tables ) return 0;
     542                if ( tables->scope < scope ) return 0;
     543
     544                EnumTable::const_iterator ret = tables->enumTable.find( id );
     545                return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope );
     546        }
     547       
     548        UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const {
     549                if ( ! tables ) return 0;
     550                if ( tables->scope < scope ) return 0;
     551
     552                UnionTable::const_iterator ret = tables->unionTable.find( id );
     553                return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope );
     554        }
     555       
     556        TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const {
     557                if ( ! tables ) return 0;
     558                if ( tables->scope < scope ) return 0;
     559
     560                TraitTable::const_iterator ret = tables->traitTable.find( id );
     561                return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTraitAtScope( id, scope );
     562        }
     563
     564        bool addedIdConflicts( DeclarationWithType *existing, DeclarationWithType *added ) {
     565                // if we're giving the same name mangling to things of different types then there is something wrong
     566                assert( (dynamic_cast<ObjectDecl*>( added ) && dynamic_cast<ObjectDecl*>( existing ) )
     567                        || (dynamic_cast<FunctionDecl*>( added ) && dynamic_cast<FunctionDecl*>( existing ) ) );
     568
     569                if ( LinkageSpec::isOverridable( existing->get_linkage() ) ) {
     570                        // new definition shadows the autogenerated one, even at the same scope
     571                        return false;
     572                } else if ( added->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) {
     573                        // typesCompatible doesn't really do the right thing here. When checking compatibility of function types,
     574                        // we should ignore outermost pointer qualifiers, except _Atomic?
     575                        FunctionDecl *newentry = dynamic_cast< FunctionDecl* >( added );
     576                        FunctionDecl *oldentry = dynamic_cast< FunctionDecl* >( existing );
     577                        if ( newentry && oldentry ) {
     578                                if ( newentry->get_statements() && oldentry->get_statements() ) {
     579                                        throw SemanticError( "duplicate function definition for ", added );
     580                                } // if
     581                        } else {
     582                                // two objects with the same mangled name defined in the same scope.
     583                                // both objects must be marked extern or both must be intrinsic for this to be okay
     584                                // xxx - perhaps it's actually if either is intrinsic then this is okay?
     585                                //       might also need to be same storage class?
     586                                ObjectDecl *newobj = dynamic_cast< ObjectDecl* >( added );
     587                                ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( existing );
     588                                if ( newobj->get_storageClass() != DeclarationNode::Extern && oldobj->get_storageClass() != DeclarationNode::Extern ) {
     589                                        throw SemanticError( "duplicate object definition for ", added );
     590                                } // if
     591                        } // if
     592                } else {
     593                        throw SemanticError( "duplicate definition for ", added );
     594                } // if
     595
     596                return true;
     597        }
     598       
     599        void Indexer::addId( DeclarationWithType *decl ) {
     600                makeWritable();
     601
     602                const std::string &name = decl->get_name();
     603                std::string mangleName;
     604                if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) {
     605                        // mangle the name without including the appropriate suffix, so overridable routines are placed into the
     606                        // same "bucket" as their user defined versions.
     607                        mangleName = Mangler::mangle( decl, false );
     608                } else {
     609                        mangleName = Mangler::mangle( decl );
     610                } // if
     611
     612                DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope );
     613                if ( ! existing || ! addedIdConflicts( existing, decl ) ) {
     614                        // this ensures that no two declarations with the same unmangled name both have C linkage
     615                        if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) {
     616                                throw SemanticError( "invalid overload of C function ", decl );
     617                        } // NOTE this is broken in Richard's original code in such a way that it never triggers (it
     618                          // doesn't check decls that have the same manglename, and all C-linkage decls are defined to
     619                          // have their name as their manglename, hence the error can never trigger).
     620                          // The code here is closer to correct, but name mangling would have to be completely
     621                          // isomorphic to C type-compatibility, which it may not be.
     622                       
     623                        tables->idTable[ name ][ mangleName ] = decl;
     624                        ++tables->size;
     625                }
     626        }
     627
     628        bool addedTypeConflicts( NamedTypeDecl *existing, NamedTypeDecl *added ) {
     629                if ( existing->get_base() == 0 ) {
     630                        return false;
     631                } else if ( added->get_base() == 0 ) {
     632                        return true;
     633                } else {
     634                        throw SemanticError( "redeclaration of ", added );
     635                }
     636        }
     637       
     638        void Indexer::addType( NamedTypeDecl *decl ) {
     639                makeWritable();
     640
     641                const std::string &id = decl->get_name();
     642                TypeTable::iterator existing = tables->typeTable.find( id );
     643                if ( existing == tables->typeTable.end() ) {
     644                        NamedTypeDecl *parent = tables->base.lookupTypeAtScope( id, scope );
     645                        if ( ! parent || ! addedTypeConflicts( parent, decl ) ) {
     646                                tables->typeTable.insert( existing, std::make_pair( id, decl ) );
     647                                ++tables->size;
     648                        }
     649                } else {
     650                        if ( ! addedTypeConflicts( existing->second, decl ) ) {
     651                                existing->second = decl;
     652                        }
     653                }
     654        }
     655
     656        bool addedDeclConflicts( AggregateDecl *existing, AggregateDecl *added ) {
     657                if ( existing->get_members().empty() ) {
     658                        return false;
     659                } else if ( ! added->get_members().empty() ) {
     660                        throw SemanticError( "redeclaration of ", added );
     661                } // if
     662                return true;
     663        }
     664
     665        void Indexer::addStruct( const std::string &id ) {
     666                addStruct( new StructDecl( id ) );
     667        }
     668       
     669        void Indexer::addStruct( StructDecl *decl ) {
     670                makeWritable();
     671
     672                const std::string &id = decl->get_name();
     673                StructTable::iterator existing = tables->structTable.find( id );
     674                if ( existing == tables->structTable.end() ) {
     675                        StructDecl *parent = tables->base.lookupStructAtScope( id, scope );
     676                        if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
     677                                tables->structTable.insert( existing, std::make_pair( id, decl ) );
     678                                ++tables->size;
     679                        }
     680                } else {
     681                        if ( ! addedDeclConflicts( existing->second, decl ) ) {
     682                                existing->second = decl;
     683                        }
     684                }
     685        }
     686       
     687        void Indexer::addEnum( EnumDecl *decl ) {
     688                makeWritable();
     689
     690                const std::string &id = decl->get_name();
     691                EnumTable::iterator existing = tables->enumTable.find( id );
     692                if ( existing == tables->enumTable.end() ) {
     693                        EnumDecl *parent = tables->base.lookupEnumAtScope( id, scope );
     694                        if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
     695                                tables->enumTable.insert( existing, std::make_pair( id, decl ) );
     696                                ++tables->size;
     697                        }
     698                } else {
     699                        if ( ! addedDeclConflicts( existing->second, decl ) ) {
     700                                existing->second = decl;
     701                        }
     702                }
     703        }
     704
     705        void Indexer::addUnion( const std::string &id ) {
     706                addUnion( new UnionDecl( id ) );
     707        }
     708       
     709        void Indexer::addUnion( UnionDecl *decl ) {
     710                makeWritable();
     711
     712                const std::string &id = decl->get_name();
     713                UnionTable::iterator existing = tables->unionTable.find( id );
     714                if ( existing == tables->unionTable.end() ) {
     715                        UnionDecl *parent = tables->base.lookupUnionAtScope( id, scope );
     716                        if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
     717                                tables->unionTable.insert( existing, std::make_pair( id, decl ) );
     718                                ++tables->size;
     719                        }
     720                } else {
     721                        if ( ! addedDeclConflicts( existing->second, decl ) ) {
     722                                existing->second = decl;
     723                        }
     724                }
     725        }
     726       
     727        void Indexer::addTrait( TraitDecl *decl ) {
     728                makeWritable();
     729
     730                const std::string &id = decl->get_name();
     731                TraitTable::iterator existing = tables->traitTable.find( id );
     732                if ( existing == tables->traitTable.end() ) {
     733                        TraitDecl *parent = tables->base.lookupTraitAtScope( id, scope );
     734                        if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
     735                                tables->traitTable.insert( existing, std::make_pair( id, decl ) );
     736                                ++tables->size;
     737                        }
     738                } else {
     739                        if ( ! addedDeclConflicts( existing->second, decl ) ) {
     740                                existing->second = decl;
     741                        }
     742                }
    354743        }
    355744
    356745        void Indexer::enterScope() {
     746                ++scope;
     747               
    357748                if ( doDebug ) {
    358                         std::cout << "--- Entering scope" << std::endl;
    359                 }
    360                 idTable.enterScope();
    361                 typeTable.enterScope();
    362                 structTable.enterScope();
    363                 enumTable.enterScope();
    364                 unionTable.enterScope();
    365                 contextTable.enterScope();
     749                        std::cout << "--- Entering scope " << scope << std::endl;
     750                }
    366751        }
    367752
    368753        void Indexer::leaveScope() {
    369754                using std::cout;
    370                 using std::endl;
    371  
    372                 if ( doDebug ) {
    373                         cout << "--- Leaving scope containing" << endl;
    374                         idTable.dump( cout );
    375                         typeTable.dump( cout );
    376                         structTable.dump( cout );
    377                         enumTable.dump( cout );
    378                         unionTable.dump( cout );
    379                         contextTable.dump( cout );
    380                 }
    381                 idTable.leaveScope();
    382                 typeTable.leaveScope();
    383                 structTable.leaveScope();
    384                 enumTable.leaveScope();
    385                 unionTable.leaveScope();
    386                 contextTable.leaveScope();
     755
     756                assert( scope > 0 && "cannot leave initial scope" );
     757                --scope;
     758
     759                while ( tables && tables->scope > scope ) {
     760                        if ( doDebug ) {
     761                                cout << "--- Leaving scope " << tables->scope << " containing" << std::endl;
     762                                dump( tables->idTable, cout );
     763                                dump( tables->typeTable, cout );
     764                                dump( tables->structTable, cout );
     765                                dump( tables->enumTable, cout );
     766                                dump( tables->unionTable, cout );
     767                                dump( tables->traitTable, cout );
     768                        }
     769
     770                        // swap tables for base table until we find one at an appropriate scope
     771                        Indexer::Impl *base = newRef( tables->base.tables );
     772                        deleteRef( tables );
     773                        tables = base;
     774                }
    387775        }
    388776
    389777        void Indexer::print( std::ostream &os, int indent ) const {
    390778            using std::cerr;
    391             using std::endl;
    392 
    393             cerr << "===idTable===" << endl;
    394             idTable.dump( os );
    395             cerr << "===typeTable===" << endl;
    396             typeTable.dump( os );
    397             cerr << "===structTable===" << endl;
    398             structTable.dump( os );
    399             cerr << "===enumTable===" << endl;
    400             enumTable.dump( os );
    401             cerr << "===unionTable===" << endl;
    402             unionTable.dump( os );
    403             cerr << "===contextTable===" << endl;
    404             contextTable.dump( os );
    405 #if 0
    406                 idTable.dump( os );
    407                 typeTable.dump( os );
    408                 structTable.dump( os );
    409                 enumTable.dump( os );
    410                 unionTable.dump( os );
    411                 contextTable.dump( os );
    412 #endif
     779
     780            cerr << "===idTable===" << std::endl;
     781            if ( tables ) dump( tables->idTable, os );
     782            cerr << "===typeTable===" << std::endl;
     783            if ( tables ) dump( tables->typeTable, os );
     784            cerr << "===structTable===" << std::endl;
     785            if ( tables ) dump( tables->structTable, os );
     786            cerr << "===enumTable===" << std::endl;
     787            if ( tables ) dump( tables->enumTable, os );
     788            cerr << "===unionTable===" << std::endl;
     789            if ( tables ) dump( tables->unionTable, os );
     790            cerr << "===contextTable===" << std::endl;
     791            if ( tables ) dump( tables->traitTable, os );
    413792        }
    414793} // namespace SymTab
  • src/SymTab/Indexer.h

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:38:55 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Sep 17 16:05:38 2015
    13 // Update Count     : 5
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:34:14 2016
     13// Update Count     : 6
    1414//
    1515
     
    2121
    2222#include "SynTree/Visitor.h"
    23 #include "IdTable.h"
    24 #include "AggregateTable.h"
    25 #include "TypeTable.h"
    2623
    2724namespace SymTab {
     
    2926          public:
    3027                Indexer( bool useDebug = false );
     28
     29                Indexer( const Indexer &that );
     30                Indexer( Indexer &&that );
    3131                virtual ~Indexer();
     32                Indexer& operator= ( const Indexer &that );
     33                Indexer& operator= ( Indexer &&that );
    3234
    3335                //using Visitor::visit;
     
    3941                virtual void visit( UnionDecl *aggregateDecl );
    4042                virtual void visit( EnumDecl *aggregateDecl );
    41                 virtual void visit( ContextDecl *aggregateDecl );
     43                virtual void visit( TraitDecl *aggregateDecl );
    4244
    4345                virtual void visit( CompoundStmt *compoundStmt );
     
    6769                virtual void visit( UntypedValofExpr *valofExpr );
    6870
    69                 virtual void visit( ContextInstType *contextInst );
     71                virtual void visit( TraitInstType *contextInst );
    7072                virtual void visit( StructInstType *contextInst );
    7173                virtual void visit( UnionInstType *contextInst );
     
    7880                void leaveScope();
    7981
    80                 void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const;
    81                 DeclarationWithType* lookupId( const std::string &id) const;
     82                /// Gets all declarations with the given ID
     83                void lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const;
     84                /// Gets the top-most type declaration with the given ID
    8285                NamedTypeDecl *lookupType( const std::string &id ) const;
     86                /// Gets the top-most struct declaration with the given ID
    8387                StructDecl *lookupStruct( const std::string &id ) const;
     88                /// Gets the top-most enum declaration with the given ID
    8489                EnumDecl *lookupEnum( const std::string &id ) const;
     90                /// Gets the top-most union declaration with the given ID
    8591                UnionDecl *lookupUnion( const std::string &id ) const;
    86                 ContextDecl *lookupContext( const std::string &id ) const;
     92                /// Gets the top-most trait declaration with the given ID
     93                TraitDecl *lookupTrait( const std::string &id ) const;
    8794 
    8895                void print( std::ostream &os, int indent = 0 ) const;
    8996          private:
    90                 IdTable idTable;
    91                 TypeTable typeTable;
    92                 StructTable structTable;
    93                 EnumTable enumTable;
    94                 UnionTable unionTable;
    95                 ContextTable contextTable;
    96  
    97                 bool doDebug;                                   // display debugging trace
     97                /// looks up a specific mangled ID at the given scope
     98                DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
     99                /// returns true if there exists a declaration with C linkage and the given name with a different mangled name
     100                bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const;
     101                // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope)
     102                NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const;
     103                StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const;
     104                EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const;
     105                UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const;
     106                TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const;
     107               
     108                void addId( DeclarationWithType *decl );
     109                void addType( NamedTypeDecl *decl );
     110                void addStruct( const std::string &id );
     111                void addStruct( StructDecl *decl );
     112                void addEnum( EnumDecl *decl );
     113                void addUnion( const std::string &id );
     114                void addUnion( UnionDecl *decl );
     115                void addTrait( TraitDecl *decl );
     116               
     117                struct Impl;
     118                Impl *tables;         ///< Copy-on-write instance of table data structure
     119                unsigned long scope;  ///< Scope index of this pointer
     120                bool doDebug;         ///< Display debugging trace?
     121
     122                /// Takes a new ref to a table (returns null if null)
     123                static Impl *newRef( Impl *toClone );
     124                /// Clears a ref to a table (does nothing if null)
     125                static void deleteRef( Impl *toFree );
     126
     127                /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope)
     128                void makeWritable();
    98129        };
    99130} // namespace SymTab
  • src/SymTab/Mangler.cc

    r39786813 ra5a71d0  
    227227
    228228        void Mangler::visit( VarArgsType *varArgsType ) {
     229                printQualifiers( varArgsType );
    229230                mangleName << "VARGS";
    230231        }
  • src/SymTab/TypeEquality.cc

    r39786813 ra5a71d0  
    194194
    195195        void TypeEquality::visit( VarArgsType *varArgsType ) {
    196                 // don't handle qualifiers; var args pack shouldn't have any
     196                handleQualifiers( varArgsType );
    197197                if ( ! dynamic_cast< VarArgsType * >( other ) ) {
    198198                        result = false;
  • src/SymTab/Validate.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Feb 22 12:26:37 2016
     12// Last Modified On : Mon Apr 04 17:13:29 2016
    1313// Update Count     : 297
    1414//
     
    102102                virtual void visit( StructInstType *structInst );
    103103                virtual void visit( UnionInstType *unionInst );
    104                 virtual void visit( ContextInstType *contextInst );
     104                virtual void visit( TraitInstType *contextInst );
    105105                virtual void visit( StructDecl *structDecl );
    106106                virtual void visit( UnionDecl *unionDecl );
     
    158158                virtual Declaration *mutate( UnionDecl * unionDecl );
    159159                virtual Declaration *mutate( EnumDecl * enumDecl );
    160                 virtual Declaration *mutate( ContextDecl * contextDecl );
     160                virtual Declaration *mutate( TraitDecl * contextDecl );
    161161
    162162                template<typename AggDecl>
     
    370370        }
    371371
    372         void Pass2::visit( ContextInstType *contextInst ) {
     372        void Pass2::visit( TraitInstType *contextInst ) {
    373373                Parent::visit( contextInst );
    374                 ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );
     374                TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() );
    375375                if ( ! ctx ) {
    376376                        throw SemanticError( "use of undeclared context " + contextInst->get_name() );
     
    378378                for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) {
    379379                        for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
    380                                 if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {
     380                                if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) {
    381381                                        cloneAll( otherCtx->get_members(), contextInst->get_members() );
    382382                                } else {
     
    442442                        while ( ! toBeDone.empty() ) {
    443443                                for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) {
    444                                         if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {
     444                                        if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) {
    445445                                                for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) {
    446446                                                        DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i );
     
    652652        }
    653653
    654                 Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {
     654                Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
    655655                Mutator::mutate( contextDecl );
    656656                return handleAggregate( contextDecl );
  • src/SymTab/module.mk

    r39786813 ra5a71d0  
    1515###############################################################################
    1616
    17 SRC += SymTab/IdTable.cc \
    18        SymTab/Indexer.cc \
     17SRC += SymTab/Indexer.cc \
    1918       SymTab/Mangler.cc \
    2019       SymTab/Validate.cc \
  • src/SynTree/AggregateDecl.cc

    r39786813 ra5a71d0  
    1010// Created On       : Sun May 17 23:56:39 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jun 13 08:12:49 2015
    13 // Update Count     : 6
     12// Last Modified On : Wed Mar  2 17:28:00 2016
     13// Update Count     : 7
    1414//
    1515
     
    6464std::string EnumDecl::typeString() const { return "enum"; }
    6565
    66 std::string ContextDecl::typeString() const { return "context"; }
     66std::string TraitDecl::typeString() const { return "context"; }
    6767
    6868// Local Variables: //
  • src/SynTree/CommaExpr.cc

    r39786813 ra5a71d0  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // CommaExpr.cc -- 
     7// CommaExpr.cc --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 18 08:09:58 2015
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Apr 06 17:07:54 2016
    1313// Update Count     : 1
    1414//
     
    2020CommaExpr::CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname )
    2121                : Expression( _aname ), arg1( arg1 ), arg2( arg2 ) {
     22        // xxx - result of a comma expression is never an lvalue, so should set lvalue
     23        // to false on all result types
    2224        cloneAll( arg2->get_results(), get_results() );
    2325}
  • src/SynTree/CompoundStmt.cc

    r39786813 ra5a71d0  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // XXX.cc -- 
     7// XXX.cc --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jun 23 11:37:49 2015
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Apr 06 14:35:37 2016
    1313// Update Count     : 3
    1414//
     
    1818#include <algorithm>
    1919#include <functional>
     20#include "Expression.h"
     21#include "Declaration.h"
    2022
    2123using std::string;
    2224using std::endl;
     25
     26class VarExprReplacer : public Visitor {
     27public:
     28  typedef std::map< DeclarationWithType *, DeclarationWithType * > DeclMap;
     29private:
     30  const DeclMap & declMap;
     31public:
     32  VarExprReplacer( const DeclMap & declMap ) : declMap( declMap ) {}
     33
     34  // replace variable with new node from decl map
     35  virtual void visit( VariableExpr * varExpr ) {
     36    if ( declMap.count( varExpr->get_var() ) ) {
     37      varExpr->set_var( declMap.at( varExpr->get_var() ) );
     38    }
     39  }
     40};
     41
    2342
    2443CompoundStmt::CompoundStmt( std::list<Label> labels ) : Statement( labels ) {
     
    2746CompoundStmt::CompoundStmt( const CompoundStmt &other ) : Statement( other ) {
    2847        cloneAll( other.kids, kids );
     48
     49  // when cloning a compound statement, we may end up cloning declarations which
     50  // are referred to by VariableExprs throughout the block. Cloning a VariableExpr
     51  // does a shallow copy, so the VariableExpr will end up pointing to the original
     52  // declaration. If the original declaration is deleted, e.g. because the original
     53  // CompoundStmt is deleted, then we have a dangling pointer. To avoid this case,
     54  // find all DeclarationWithType nodes (since a VariableExpr must point to a
     55  // DeclarationWithType) in the original CompoundStmt and map them to the cloned
     56  // node in the new CompoundStmt ('this'), then replace the Declarations referred to
     57  // by each VariableExpr according to the constructed map. Note that only the declarations
     58  // in the current level are collected into the map, because child CompoundStmts will
     59  // recursively execute this routine. There may be more efficient ways of doing
     60  // this.
     61  VarExprReplacer::DeclMap declMap;
     62  std::list< Statement * >::const_iterator origit = other.kids.begin();
     63  for ( Statement * s : kids ) {
     64    assert( origit != other.kids.end() );
     65    if ( DeclStmt * declStmt = dynamic_cast< DeclStmt * >( s ) ) {
     66      DeclStmt * origDeclStmt = dynamic_cast< DeclStmt * >( *origit );
     67      assert( origDeclStmt );
     68      if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * > ( declStmt->get_decl() ) ) {
     69        DeclarationWithType * origdwt = dynamic_cast< DeclarationWithType * > ( origDeclStmt->get_decl() );
     70        assert( origdwt );
     71        declMap[ origdwt ] = dwt;
     72      }
     73    }
     74  }
     75  if ( ! declMap.empty() ) {
     76    VarExprReplacer replacer( declMap );
     77    accept( replacer );
     78  }
    2979}
    3080
  • src/SynTree/Constant.cc

    r39786813 ra5a71d0  
    1616#include <iostream>
    1717#include <list>
     18#include <string>
    1819
    1920#include "Constant.h"
     
    2829
    2930Constant::~Constant() { delete type; }
     31
     32Constant Constant::from( int i ) {
     33        return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ) );
     34}
     35
     36Constant Constant::from( unsigned long i ) {
     37        return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ) );
     38}
     39
     40Constant Constant::from( double d ) {
     41        return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ) );
     42}
    3043
    3144Constant *Constant::clone() const { assert( false ); return 0; }
  • src/SynTree/Constant.h

    r39786813 ra5a71d0  
    3232        void set_value( std::string newValue ) { value = newValue; }
    3333
     34        /// generates an integer constant of the given int
     35        static Constant from( int i );
     36        /// generates an integer constant of the given unsigned long int
     37        static Constant from( unsigned long i );
     38        /// generates a floating point constant of the given double
     39        static Constant from( double d );
     40
    3441        virtual Constant *clone() const;
    3542        virtual void accept( Visitor &v ) { v.visit( this ); }
  • src/SynTree/Declaration.h

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jan 13 16:11:49 2016
     12// Last Modified On : Mon Apr 04 17:14:00 2016
    1313// Update Count     : 36
    1414//
     
    246246};
    247247
    248 class ContextDecl : public AggregateDecl {
    249         typedef AggregateDecl Parent;
    250   public:
    251         ContextDecl( const std::string &name ) : Parent( name ) {}
    252         ContextDecl( const ContextDecl &other ) : Parent( other ) {}
    253 
    254         virtual ContextDecl *clone() const { return new ContextDecl( *this ); }
     248class TraitDecl : public AggregateDecl {
     249        typedef AggregateDecl Parent;
     250  public:
     251        TraitDecl( const std::string &name ) : Parent( name ) {}
     252        TraitDecl( const TraitDecl &other ) : Parent( other ) {}
     253
     254        virtual TraitDecl *clone() const { return new TraitDecl( *this ); }
    255255        virtual void accept( Visitor &v ) { v.visit( this ); }
    256256        virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
  • src/SynTree/Initializer.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Mar 30 13:58:32 2016
     12// Last Modified On : Wed Apr 06 16:15:32 2016
    1313// Update Count     : 28
    1414//
     
    3535}
    3636
    37 SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( other.value ) {
     37SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( maybeClone( other.value ) ) {
    3838        cloneAll(other.designators, designators );
    3939}
  • src/SynTree/Mutator.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jan 13 15:32:29 2016
     12// Last Modified On : Mon Apr 04 17:14:20 2016
    1313// Update Count     : 15
    1414//
     
    6363}
    6464
    65 Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {
     65Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) {
    6666        handleAggregateDecl( aggregateDecl );
    6767        return aggregateDecl;
     
    387387}
    388388
    389 Type *Mutator::mutate( ContextInstType *aggregateUseType ) {
     389Type *Mutator::mutate( TraitInstType *aggregateUseType ) {
    390390        handleReferenceToType( aggregateUseType );
    391391        mutateAll( aggregateUseType->get_members(), *this );
  • src/SynTree/Mutator.h

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jan 13 15:24:26 2016
     12// Last Modified On : Mon Apr 04 17:14:44 2016
    1313// Update Count     : 9
    1414//
     
    3131        virtual Declaration* mutate( UnionDecl *aggregateDecl );
    3232        virtual Declaration* mutate( EnumDecl *aggregateDecl );
    33         virtual Declaration* mutate( ContextDecl *aggregateDecl );
     33        virtual Declaration* mutate( TraitDecl *aggregateDecl );
    3434        virtual TypeDecl* mutate( TypeDecl *typeDecl );
    3535        virtual Declaration* mutate( TypedefDecl *typeDecl );
     
    8585        virtual Type* mutate( UnionInstType *aggregateUseType );
    8686        virtual Type* mutate( EnumInstType *aggregateUseType );
    87         virtual Type* mutate( ContextInstType *aggregateUseType );
     87        virtual Type* mutate( TraitInstType *aggregateUseType );
    8888        virtual Type* mutate( TypeInstType *aggregateUseType );
    8989        virtual Type* mutate( TupleType *tupleType );
  • src/SynTree/ReferenceToType.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Jun  7 08:31:48 2015
    13 // Update Count     : 4
     12// Last Modified On : Wed Mar  2 17:28:51 2016
     13// Update Count     : 5
    1414//
    1515
     
    8383std::string EnumInstType::typeString() const { return "enum"; }
    8484
    85 std::string ContextInstType::typeString() const { return "context"; }
     85std::string TraitInstType::typeString() const { return "context"; }
    8686
    87 ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) {
     87TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) {
    8888        cloneAll( other.members, members );
    8989}
    9090
    91 ContextInstType::~ContextInstType() {
     91TraitInstType::~TraitInstType() {
    9292        deleteAll( members );
    9393}
  • src/SynTree/SynTree.h

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jan 13 15:28:41 2016
     12// Last Modified On : Mon Apr 04 17:16:09 2016
    1313// Update Count     : 4
    1414//
     
    3030class UnionDecl;
    3131class EnumDecl;
    32 class ContextDecl;
     32class TraitDecl;
    3333class NamedTypeDecl;
    3434class TypeDecl;
     
    9292class UnionInstType;
    9393class EnumInstType;
    94 class ContextInstType;
     94class TraitInstType;
    9595class TypeInstType;
    9696class TupleType;
  • src/SynTree/Type.h

    r39786813 ra5a71d0  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri Dec 18 14:46:18 2015
    13 // Update Count     : 18
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:29:08 2016
     13// Update Count     : 21
    1414//
    1515
     
    296296};
    297297
    298 class ContextInstType : public ReferenceToType {
     298class TraitInstType : public ReferenceToType {
    299299        typedef ReferenceToType Parent;
    300300  public:
    301         ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
    302         ContextInstType( const ContextInstType &other );
    303         ~ContextInstType();
     301        TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
     302        TraitInstType( const TraitInstType &other );
     303        ~TraitInstType();
    304304
    305305        std::list< Declaration* >& get_members() { return members; }
    306306
    307         virtual ContextInstType *clone() const { return new ContextInstType( *this ); }
     307        virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
    308308        virtual void accept( Visitor &v ) { v.visit( this ); }
    309309        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    402402/// Represents the GCC built-in varargs type
    403403class VarArgsType : public Type {
     404  public:
    404405        VarArgsType();
     406        VarArgsType( Type::Qualifiers tq );
    405407
    406408        virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
  • src/SynTree/TypeSubstitution.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 18 11:10:04 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 17:29:15 2016
     13// Update Count     : 3
    1414//
    1515
     
    190190}
    191191
    192 Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) {
     192Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) {
    193193        return handleType( aggregateUseType );
    194194}
  • src/SynTree/TypeSubstitution.h

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 18 11:12:30 2015
    13 // Update Count     : 1
     12// Last Modified On : Wed Mar  2 17:33:19 2016
     13// Update Count     : 2
    1414//
    1515
     
    7272        virtual Type* mutate(UnionInstType *aggregateUseType);
    7373        virtual Type* mutate(EnumInstType *aggregateUseType);
    74         virtual Type* mutate(ContextInstType *aggregateUseType);
     74        virtual Type* mutate(TraitInstType *aggregateUseType);
    7575        virtual Type* mutate(TupleType *tupleType);
    7676        virtual Type* mutate(VarArgsType *varArgsType);
  • src/SynTree/VarArgsType.cc

    r39786813 ra5a71d0  
    99// Author           : Aaron B. Moss
    1010// Created On       : Thu Feb 25 16:34:00 2016
    11 // Last Modified By : Aaron B. Moss
    12 // Last Modified On : Thu Feb 25 16:34:00 2016
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:10:40 2016
     13// Update Count     : 2
    1414//
    1515
     
    1717
    1818VarArgsType::VarArgsType() : Type( Type::Qualifiers() ) {}
     19
     20VarArgsType::VarArgsType( Type::Qualifiers tq ) : Type( tq ) {}
    1921
    2022void VarArgsType::print( std::ostream &os, int indent ) const {
  • src/SynTree/Visitor.cc

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jan 13 15:27:23 2016
     12// Last Modified On : Mon Apr 04 17:16:25 2016
    1313// Update Count     : 18
    1414//
     
    5656}
    5757
    58 void Visitor::visit( ContextDecl *aggregateDecl ) {
     58void Visitor::visit( TraitDecl *aggregateDecl ) {
    5959        visit( static_cast< AggregateDecl* >( aggregateDecl ) );
    6060}
     
    326326}
    327327
    328 void Visitor::visit( ContextInstType *aggregateUseType ) {
     328void Visitor::visit( TraitInstType *aggregateUseType ) {
    329329        visit( static_cast< ReferenceToType * >( aggregateUseType ) );
    330330        acceptAll( aggregateUseType->get_members(), *this );
  • src/SynTree/Visitor.h

    r39786813 ra5a71d0  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Feb 09 13:20:48 2016
     12// Last Modified On : Mon Apr 04 17:16:36 2016
    1313// Update Count     : 6
    1414//
     
    3131        virtual void visit( UnionDecl *aggregateDecl );
    3232        virtual void visit( EnumDecl *aggregateDecl );
    33         virtual void visit( ContextDecl *aggregateDecl );
     33        virtual void visit( TraitDecl *aggregateDecl );
    3434        virtual void visit( TypeDecl *typeDecl );
    3535        virtual void visit( TypedefDecl *typeDecl );
     
    8585        virtual void visit( UnionInstType *aggregateUseType );
    8686        virtual void visit( EnumInstType *aggregateUseType );
    87         virtual void visit( ContextInstType *aggregateUseType );
     87        virtual void visit( TraitInstType *aggregateUseType );
    8888        virtual void visit( TypeInstType *aggregateUseType );
    8989        virtual void visit( TupleType *tupleType );
  • src/SynTree/module.mk

    r39786813 ra5a71d0  
    4646       SynTree/Visitor.cc \
    4747       SynTree/Mutator.cc \
    48        SynTree/CodeGenVisitor.cc \
    4948       SynTree/TypeSubstitution.cc
    5049
  • src/driver/Makefile.in

    r39786813 ra5a71d0  
    196196          esac; \
    197197        done; \
    198         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
     198        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
    199199        $(am__cd) $(top_srcdir) && \
    200           $(AUTOMAKE) --gnu src/driver/Makefile
     200          $(AUTOMAKE) --foreign src/driver/Makefile
    201201.PRECIOUS: Makefile
    202202Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/examples/Makefile.in

    r39786813 ra5a71d0  
    189189          esac; \
    190190        done; \
    191         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
     191        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
    192192        $(am__cd) $(top_srcdir) && \
    193           $(AUTOMAKE) --gnu src/examples/Makefile
     193          $(AUTOMAKE) --foreign src/examples/Makefile
    194194.PRECIOUS: Makefile
    195195Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/examples/abs.c

    r39786813 ra5a71d0  
    1010// Created On       : Thu Jan 28 18:26:16 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 09:32:04 2016
    13 // Update Count     : 44
     12// Last Modified On : Wed Mar  2 15:07:26 2016
     13// Update Count     : 51
    1414//
    1515
     
    2020        char ch = -65;
    2121        sout | "char\t\t\t"                                     | ch     | "\tabs " | abs( ch ) | endl;
    22         sout | "signed int\t\t"                         | -65    | "\tabs " | abs( -65 ) | endl;
    23         sout | "signed long int\t\t"            | -65l   | "\tabs " | abs( -65l ) | endl;
    24         sout | "signed long long int\t"         | -65ll  | "\tabs " | abs( -65ll ) | endl;
    25         sout | "float\t\t\t"                            | -65.0f | "\tabs " | abs( -65.0f ) | endl;
    26         sout | "double\t\t\t"                           | -65.0  | "\tabs " | abs( -65.0 ) | endl;
    27         sout | "long double\t\t"                        | -65.0l | "\tabs " | abs( -65.0l ) | endl;
    28         sout | "float _Complex\t\t"                     | -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;
    29         sout | "double _Complex\t\t"            | -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;
    30         sout | "long double _Complex\t"         | -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;
     22        sout | "signed int\t\t"                         | -65    | "\tabs" | abs( -65 ) | endl;
     23        sout | "signed long int\t\t"            | -65l   | "\tabs" | abs( -65l ) | endl;
     24        sout | "signed long long int\t"         | -65ll  | "\tabs" | abs( -65ll ) | endl;
     25        sout | "float\t\t\t"                            | -65.0f | "\tabs" | abs( -65.0f ) | endl;
     26        sout | "double\t\t\t"                           | -65.0  | "\tabs" | abs( -65.0 ) | endl;
     27        sout | "long double\t\t"                        | -65.0l | "\tabs" | abs( -65.0l ) | endl;
     28        sout | "float _Complex\t\t"                     | -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
     29        sout | "double _Complex\t\t"            | -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
     30        sout | "long double _Complex\t"         | -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
    3131} // main
    3232
  • src/examples/array.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:10:13 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 18:13:52 2016
     13// Update Count     : 3
    1414//
    1515
    1616#include "array.h"
    1717
    18 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
     18/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
    1919/// [ array_iterator begin, array_iterator end ]
    2020/// get_iterators( array_type array )
     
    2525
    2626// The first element is always at index 0.
    27 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     27forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    2828elt_type * begin( array_type array ) {
    2929        return &array[ 0 ];
     
    3131
    3232// The end iterator should point one past the last element.
    33 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     33forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    3434elt_type * end( array_type array ) {
    3535        return &array[ last( array ) ] + 1;
  • src/examples/array.h

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jan 26 17:09:29 2016
    13 // Update Count     : 3
     12// Last Modified On : Wed Mar  2 18:13:35 2016
     13// Update Count     : 5
    1414//
    1515
     
    2121// An array has contiguous elements accessible in any order using integer indicies. The first
    2222// element has index 0.
    23 context array( type array_type, type elt_type ) {
     23trait array( otype array_type, otype elt_type ) {
    2424        lvalue elt_type ?[?]( array_type, int );
    2525};
    2626
    2727// A bounded array is an array that carries its maximum index with it.
    28 context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) {
     28trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {
    2929        int last( array_type );
    3030};
     
    3434typedef int array_iterator;
    3535
    36 /// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
     36/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
    3737/// [ array_iterator begin, array_iterator end ] get_iterators( array_type );
    3838
     
    4040// A bounded array can be iterated over by using a pointer to the element type. These functions
    4141// return iterators corresponding to the first element and the one-past-the-end element, STL-style.
    42 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     42forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    4343elt_type *begin( array_type );
    4444
    45 forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
     45forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
    4646elt_type *end( array_type );
    4747
  • src/examples/ato.c

    r39786813 ra5a71d0  
    1111// Created On       : Thu Feb  4 08:10:57 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Feb 17 11:44:03 2016
    14 // Update Count     : 42
     13// Last Modified On : Mon Feb 29 17:57:35 2016
     14// Update Count     : 44
    1515//
    1616
     
    2424int main( void ) {
    2525        int i = ato( "-123" );
    26         sout | i | ' ' | "-123" | endl;
     26        sout | i | "-123" | endl;
    2727        unsigned int ui = ato( "123" );
    28         sout | ui | ' ' | "123" | endl;
     28        sout | ui | "123" | endl;
    2929        long int li = ato( "-123" );
    30         sout | li | ' ' | "-123" | endl;
     30        sout | li | "-123" | endl;
    3131        unsigned long int uli = ato( "123" );
    32         sout | uli | ' ' | "123" | endl;
     32        sout | uli | "123" | endl;
    3333        long long int lli = ato( "-123" );
    34         sout | lli | ' ' | "-123" | endl;
     34        sout | lli | "-123" | endl;
    3535        unsigned long long int ulli = ato( "123" );
    36         sout | ulli | ' ' | "123" | endl;
     36        sout | ulli | "123" | endl;
    3737        float f = ato( "-123.456" );
    38         sout | f | ' ' | "-123.456" | endl;
     38        sout | f | "-123.456" | endl;
    3939        double d = ato( "-123.4567890123456" );
    40         sout | d | ' ' | "-123.4567890123456" | endl;
     40        sout | d | "-123.4567890123456" | endl;
    4141        long double ld = ato( "-123.45678901234567890123456789" );
    42         sout | ld | ' ' | "-123.45678901234567890123456789" | endl;
     42        sout | ld | "-123.45678901234567890123456789" | endl;
    4343        float _Complex fc = ato( "-123.456-123.456i" );
    44         sout | fc | ' ' | "-123.456-123.456i" | endl;
     44        sout | fc | "-123.456-123.456i" | endl;
    4545        double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" );
    46         sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl;
     46        sout | dc | "-123.4567890123456+123.4567890123456i" | endl;
    4747        long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" );
    48         sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
     48        sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
    4949        long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" );
    50         sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
     50        sout | ldc2 | "123.45678901234-123.4567890i" | endl;
    5151} // main
    5252
  • src/examples/constants.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 23:44:12 2016
    13 // Update Count     : 76
     12// Last Modified On : Fri Mar 11 16:27:38 2016
     13// Update Count     : 81
    1414//
    1515
     
    4444        0x_ff_FF_ff_FF_ff_FF_ff_FF;
    4545        9_223_372_036_854_775_807;
    46         18_446_744_073_709_551_615;
     46        18_446_744_073_709_551_615UL;
    4747        3.141_59f;
    4848        3.14159;
     
    5353        L'\x_ff_ee';
    5454        L_"\x_ff_ee";
    55         L"a_b\r\Qyc\u_00_40  x_y_z\xff_AA";
    56         L_"a_b\r\Qyc\u_00_40\
     55        L"a_b\r\vyc\u_00_40  x_y_z\xff_AA";
     56        L_"a_b\r\vyc\u_00_40\
    5757  x_y_z\xff_AA";
    5858        "abc" "def" "ghi";
  • src/examples/ctxts.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:11:19 2015
    13 // Update Count     : 2
     12// Last Modified On : Wed Mar  2 18:10:21 2016
     13// Update Count     : 3
    1414//
    1515
    16 context has_f( type T ) {
     16trait has_f( type T ) {
    1717        T f( T );
    1818};
    1919
    20 context has_g( type U | has_f( U ) ) {
     20trait has_g( type U | has_f( U ) ) {
    2121        U g( U );
    2222};
  • src/examples/fstream_test.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 11:45:43 2016
    13 // Update Count     : 43
     12// Last Modified On : Sun Mar  6 20:58:29 2016
     13// Update Count     : 54
    1414//
    1515
     
    1818int main( void ) {
    1919        int nombre;
    20         sout | "Entrez un nombre, s'il vous plaît:\n";
     20        sout | "Entrez un nombre, s'il vous plaît:" | endl;
    2121        sin  | &nombre;
    22         sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
    23         sout | "nombre " | nombre | " est "
    24                  | (nombre > 0 ? "plus grand que" :
    25                    nombre == 0 ? "égal à" : "moins de")
    26                  | " zéro" | endl;
     22        sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl;
     23        sout | "nombre" | nombre | "est"
     24                 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de")
     25                 | "zéro" | endl;
    2726
    28         sout | "Entrez trois nombres, s'il vous plaît:\n";
     27        sout | "Entrez trois nombres, s'il vous plaît: " | endl;
    2928        int i, j, k;
    3029        sin  | &i | &j | &k;
    31         sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
    32 
    33         sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
     30        sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl;
    3431}
    3532
  • src/examples/hello.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:11:45 2016
    13 // Update Count     : 8
     12// Last Modified On : Mon Feb 29 18:06:17 2016
     13// Update Count     : 10
    1414//
    1515
     
    1717
    1818int main() {
    19         sout | "Bonjour au monde!\n";
     19        sout | "Bonjour au monde!" | endl;
    2020}
    2121
  • src/examples/huge.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:15:34 2015
    13 // Update Count     : 1
     12// Last Modified On : Tue Mar  8 22:16:32 2016
     13// Update Count     : 2
    1414//
    1515
    16 int huge( int n, forall( type T ) T (*f)( T ) ) {
     16int huge( int n, forall( otype T ) T (*f)( T ) ) {
    1717        if ( n <= 0 )
    1818                return f( 0 );
  • src/examples/identity.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:17:32 2016
    13 // Update Count     : 10
     12// Last Modified On : Tue Mar  8 22:15:08 2016
     13// Update Count     : 13
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( type T )
     18forall( otype T )
    1919T identity( T t ) {
    2020        return t;
  • src/examples/includes.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Dec 21 13:54:09 2015
    13 // Update Count     : 322
     12// Last Modified On : Wed Mar  2 23:28:02 2016
     13// Update Count     : 328
    1414//
    1515
     
    4343#include <ctype.h>
    4444#include <curses.h>
    45 #include <demangle.h>           // enum / contains "type"
    46 #include <dialog.h>                     // enum / contains "type"
     45#include <demangle.h>
     46#include <dialog.h>
    4747#include <dirent.h>
    4848#include <dis-asm.h>
     
    5656#include <err.h>
    5757#include <errno.h>
     58#if 0
    5859#include <error.h>
     60#endif
     61#include <eti.h>
     62#include <evdns.h>
     63#include <event.h>
     64#include <evhttp.h>
    5965#if 0
    60 #include <eti.h>
    61 #include <evdns.h>                      // subdirectory event2 contains "type"
    62 #include <event.h>
    63 #include <evhttp.h>                     // enum / subdirectory event2 contains "type"
    6466#include <evrpc.h>
    6567#include <evutil.h>
    6668#include <execinfo.h>
    67 #include <expat.h>                      // enum / contains "type" and "context"
     69#include <expat.h>
    6870#include <expat_config.h>
    6971#include <expat_external.h>
     
    7476#include <fmtmsg.h>
    7577#include <fnmatch.h>
    76 #include <form.h>                       // contains "type"
     78#include <form.h>
    7779#include <fpu_control.h>
    7880#include <fstab.h>
     
    8183#include <ftw.h>
    8284#include <gconv.h>
    83 //#include <gcrypt.h>           // enum / contains "type"
     85//#include <gcrypt.h>
    8486//#include <gcrypt-module.h>
    8587#include <getopt.h>
     
    107109#include <limits.h>
    108110#include <locale.h>
    109 #include <math.h>                       // contains "type"
     111#include <math.h>
    110112#include <ncurses.h>
    111113#include <setjmp.h>
  • src/examples/index.h

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:17:31 2015
    13 // Update Count     : 1
     12// Last Modified On : Wed Mar  2 18:10:46 2016
     13// Update Count     : 2
    1414//
    1515
    16 context index( type T ) {
     16trait index( type T ) {
    1717        T ?+?( T, T );
    1818        T ?-?( T, T );
  • src/examples/it_out.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:41:23 2015
    13 // Update Count     : 4
     12// Last Modified On : Tue Mar  8 22:14:39 2016
     13// Update Count     : 8
    1414//
    1515
    1616typedef unsigned long streamsize_type;
    1717
    18 context ostream( dtype os_type ) {
     18trait ostream( dtype os_type ) {
    1919        os_type *write( os_type *, const char *, streamsize_type );
    2020        int fail( os_type * );
    2121};
    2222
    23 context writeable( type T ) {
     23trait writeable( otype T ) {
    2424        forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
    2525};
     
    2929forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * );
    3030
    31 context istream( dtype is_type ) {
     31trait istream( dtype is_type ) {
    3232        is_type *read( is_type *, char *, streamsize_type );
    3333        is_type *unread( is_type *, char );
     
    3636};
    3737
    38 context readable( type T ) {
     38trait readable( otype T ) {
    3939        forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T );
    4040};
     
    4343forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* );
    4444
    45 context iterator( type iterator_type, type elt_type ) {
     45trait iterator( otype iterator_type, otype elt_type ) {
    4646        iterator_type ?++( iterator_type* );
    4747        iterator_type ++?( iterator_type* );
     
    5252};
    5353
    54 forall( type elt_type | writeable( elt_type ),
    55                 type iterator_type | iterator( iterator_type, elt_type ),
     54forall( otype elt_type | writeable( elt_type ),
     55                otype iterator_type | iterator( iterator_type, elt_type ),
    5656                dtype os_type | ostream( os_type ) )
    5757void write_all( iterator_type begin, iterator_type end, os_type *os );
    5858
    59 forall( type elt_type | writeable( elt_type ),
    60                 type iterator_type | iterator( iterator_type, elt_type ),
     59forall( otype elt_type | writeable( elt_type ),
     60                otype iterator_type | iterator( iterator_type, elt_type ),
    6161                dtype os_type | ostream( os_type ) )
    6262void write_all( elt_type begin, iterator_type end, os_type *os ) {
  • src/examples/limits.c

    r39786813 ra5a71d0  
    9898// Local Variables: //
    9999// tab-width: 4 //
    100 // compile-command: "cfa min.c" //
     100// compile-command: "cfa limits.c" //
    101101// End: //
  • src/examples/minmax.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:17:53 2016
    13 // Update Count     : 47
     12// Last Modified On : Mon Feb 29 23:45:16 2016
     13// Update Count     : 49
    1414//
    1515
     
    2323
    2424        sout | "char\t\t\t"                                     | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
    25         sout | "signed int\t\t"                         | 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl;
    26         sout | "unsigned int\t\t"                       | 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl;
    27         sout | "signed long int\t\t"            | 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl;
    28         sout | "unsigned long int\t"            | 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl;
    29         sout | "signed long long int\t"         | 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl;
    30         sout | "unsigned long long int\t"       | 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl;
    31         sout | "float\t\t\t"                            | 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl;
    32         sout | "double\t\t\t"                           | 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl;
    33         sout | "long double\t\t"                        | 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl;
     25        sout | "signed int\t\t"                         | 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
     26        sout | "unsigned int\t\t"                       | 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
     27        sout | "signed long int\t\t"            | 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
     28        sout | "unsigned long int\t"            | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
     29        sout | "signed long long int\t"         | 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
     30        sout | "unsigned long long int\t"       | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
     31        sout | "float\t\t\t"                            | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
     32        sout | "double\t\t\t"                           | 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
     33        sout | "long double\t\t"                        | 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
    3434
    3535        sout | endl;
    3636
    3737        sout | "char\t\t\t"                                     | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
    38         sout | "signed int\t\t"                         | 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl;
    39         sout | "unsigned int\t\t"                       | 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl;
    40         sout | "signed long int\t\t"            | 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl;
    41         sout | "unsigned long int\t"            | 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl;
    42         sout | "signed long long int\t"         | 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl;
    43         sout | "unsigned long long int\t"       | 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl;
    44         sout | "float\t\t\t"                            | 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl;
    45         sout | "double\t\t\t"                           | 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl;
    46         sout | "long double\t\t"                        | 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl;
     38        sout | "signed int\t\t"                         | 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
     39        sout | "unsigned int\t\t"                       | 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
     40        sout | "signed long int\t\t"            | 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
     41        sout | "unsigned long int\t"            | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
     42        sout | "signed long long int\t"         | 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
     43        sout | "unsigned long long int\t"       | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
     44        sout | "float\t\t\t"                            | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
     45        sout | "double\t\t\t"                           | 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
     46        sout | "long double\t\t"                        | 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
    4747} // main
    4848
  • src/examples/new.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 23:33:55 2016
    13 // Update Count     : 2
     12// Last Modified On : Tue Mar  8 22:13:20 2016
     13// Update Count     : 4
    1414//
    1515
    16 forall( type T )
     16forall( otype T )
    1717void f( T *t ) {
    1818        t--;
  • src/examples/prolog.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:25:52 2015
    13 // Update Count     : 1
     12// Last Modified On : Tue Mar  8 22:09:39 2016
     13// Update Count     : 5
    1414//
    1515
    16 extern "C" { extern int printf( const char *fmt, ... ); }
     16#include <fstream>
    1717
    18 void printResult( int x ) { printf( "int\n" ); }
    19 void printResult( double x ) { printf( "double\n" ); }
    20 void printResult( char * x ) { printf( "char*\n" ); }
     18void printResult( int x ) { sout | "int" | endl; }
     19void printResult( double x ) { sout | "double" | endl; }
     20void printResult( char * x ) { sout | "char*" | endl; }
    2121
    2222void is_arithmetic( int x ) {}
     
    2525void is_integer( int x ) {}
    2626
    27 context ArithmeticType( type T ) {
     27trait ArithmeticType( otype T ) {
    2828        void is_arithmetic( T );
    2929};
    3030
    31 context IntegralType( type T | ArithmeticType( T ) ) {
     31trait IntegralType( otype T | ArithmeticType( T ) ) {
    3232        void is_integer( T );
    3333};
    3434
    35 forall( type T | IntegralType( T ) | { void printResult( T ); } )
     35forall( otype T | IntegralType( T ) | { void printResult( T ); } )
    3636void hornclause( T param ) {
    3737        printResult( param );
  • src/examples/quad.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:19:24 2016
    13 // Update Count     : 6
     12// Last Modified On : Tue Mar  8 22:07:02 2016
     13// Update Count     : 8
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( type T | { T ?*?( T, T ); } )
     18forall( otype T | { T ?*?( T, T ); } )
    1919T square( T t ) {
    2020        return t * t;
    2121}
    2222
    23 forall( type U | { U square( U ); } )
     23forall( otype U | { U square( U ); } )
    2424U quad( U u ) {
    2525        return square( square( u ) );
     
    2828int main() {
    2929        int N = 2;
    30         sout | "result of quad of " | N | " is " | quad( N ) | endl;
     30        sout | "result of quad of" | N | "is" | quad( N ) | endl;
    3131}
    3232
  • src/examples/random.c

    r39786813 ra5a71d0  
    77
    88int main() {
    9         randseed( getpid() );                                                           // set random seed
     9        rand48seed( getpid() );                                                         // set random seed
    1010
    1111        // test polymorphic calls to random and stream
    12         char c = random();
     12        char c = rand48();
    1313        sout | c | endl;
    14         int i = random();
     14        int i = rand48();
    1515    sout | i | endl;
    16         unsigned int ui = random();
     16        unsigned int ui = rand48();
    1717    sout | ui | endl;
    18         long int li = random();
     18        long int li = rand48();
    1919    sout | li | endl;
    20         unsigned long int uli = random();
     20        unsigned long int uli = rand48();
    2121    sout | uli | endl;
    22     float f = random();
     22    float f = rand48();
    2323    sout | f | endl;
    24     double d = random();
     24    double d = rand48();
    2525    sout | d | endl;
    26     float _Complex fc = random();
     26    float _Complex fc = rand48();
    2727    sout | fc | endl;
    28     double _Complex dc = random();
     28    double _Complex dc = rand48();
    2929    sout | dc | endl;
    30     long double _Complex ldc = random();
     30    long double _Complex ldc = rand48();
    3131    sout | ldc | endl;
    3232} // main
  • src/examples/searchsort.c

    r39786813 ra5a71d0  
    1111// Created On       : Thu Feb  4 18:17:50 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Feb 17 12:21:04 2016
    14 // Update Count     : 46
     13// Last Modified On : Tue Mar 22 22:16:46 2016
     14// Update Count     : 55
    1515//
    1616
     
    3636                sout | *v | ", ";
    3737        } // for
     38        sout | endl | endl;
     39
     40        // descending sort/search by changing < to >
     41        for ( unsigned int i = 0; i < size; i += 1 ) {
     42                iarr[i] = i + 1;
     43                sout | iarr[i] | ", ";
     44        } // for
     45        sout | endl;
     46        {
     47                int ?<?( int x, int y ) { return x > y; }
     48                qsort( iarr, size );
     49                for ( unsigned int i = 0; i < size; i += 1 ) {
     50                        sout | iarr[i] | ", ";
     51                } // for
     52                sout | endl;
     53                for ( unsigned int i = 0; i < size; i += 1 ) {
     54                        int *v = bsearch( size - i, iarr, size );
     55                        sout | *v | ", ";
     56                } // for
     57        }
    3858        sout | endl | endl;
    3959
  • src/examples/simplePoly.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:31:17 2015
    13 // Update Count     : 2
     12// Last Modified On : Tue Mar  8 22:06:41 2016
     13// Update Count     : 3
    1414//
    1515
    16 forall( type T, type U | { T f( T, U ); } )
     16forall( otype T, otype U | { T f( T, U ); } )
    1717T q( T t, U u ) {
    1818        return f( t, u );
  • src/examples/simpler.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:31:48 2015
    13 // Update Count     : 1
     12// Last Modified On : Tue Mar  8 22:06:30 2016
     13// Update Count     : 2
    1414//
    1515
    16 forall( type T ) T id( T, T );
     16forall( otype T ) T id( T, T );
    1717
    1818int main() {
  • src/examples/specialize.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 27 18:32:26 2015
    13 // Update Count     : 2
     12// Last Modified On : Tue Mar  8 22:06:17 2016
     13// Update Count     : 3
    1414//
    1515
     
    3939}
    4040
    41 forall( type T ) T f( T t )
     41forall( otype T ) T f( T t )
    4242{
    4343        printf( "in f; sizeof T is %d\n", sizeof( T ) );
  • src/examples/square.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:21:58 2016
    13 // Update Count     : 26
     12// Last Modified On : Tue Mar  8 22:05:48 2016
     13// Update Count     : 27
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( type T | { T ?*?( T, T ); } )
     18forall( otype T | { T ?*?( T, T ); } )
    1919T square( T t ) {
    2020        return t * t;
  • src/examples/sum.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Feb 16 23:49:31 2016
    13 // Update Count     : 189
     12// Last Modified On : Fri Mar  4 15:06:47 2016
     13// Update Count     : 196
    1414//
    1515
    1616#include <fstream>
    1717
    18 context sumable( type T ) {
     18trait sumable( otype T ) {
    1919        const T 0;
    2020        T ?+?( T, T );
     
    2424}; // sumable
    2525
    26 forall( type T | sumable( T ) )
     26forall( otype T | sumable( T ) )
    2727T sum( unsigned int n, T a[] ) {
    2828        T total = 0;                                                                            // instantiate T, select 0
     
    4747                a[i] = v;
    4848        } // for
    49         sout | "sum from " | low | " to " | High | " is "
    50                  | (int)sum( size, a ) | ", check " | (int)s | endl;
     49        sout | "sum from" | low | "to" | High | "is"
     50                 | (int)sum( size, a ) | "" | ", check" | (int)s | endl;
    5151
    5252        int s = 0, a[size], v = low;
     
    5555                a[i] = (int)v;
    5656        } // for
    57         sout | "sum from " | low | " to " | High | " is "
    58                  | sum( size, (int *)a ) | ", check " | (int)s | endl;
     57        sout | "sum from" | low | "to" | High | "is"
     58                 | sum( size, (int *)a ) | "" | ", check" | (int)s | endl;
    5959
    6060        float s = 0.0, a[size], v = low / 10.0;
     
    6363                a[i] = (float)v;
    6464        } // for
    65         sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
    66                  | sum( size, (float *)a ) | ", check " | (float)s | endl;
     65        sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
     66                 | sum( size, (float *)a ) | "" | ", check" | (float)s | endl;
    6767
    6868        double s = 0, a[size], v = low / 10.0;
     
    7171                a[i] = (double)v;
    7272        } // for
    73         sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
    74                  | sum( size, (double *)a ) | ", check " | (double)s | endl;
     73        sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
     74                 | sum( size, (double *)a ) | "" | ", check" | (double)s | endl;
    7575
    7676        struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
     
    7979        S ++?( S *t ) { *t += 1; return *t; }
    8080        S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
    81         ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; }
     81        ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
    8282
    8383        S s = 0, a[size], v = { low, low };
     
    8686                a[i] = (S)v;
    8787        } // for
    88         sout | "sum from " | low | " to " | High | " is "
    89                  | sum( size, (S *)a ) | ", check " | (S)s | endl;
     88        sout | "sum from" | low | "to" | High | "is"
     89                 | sum( size, (S *)a ) | "" | ", check" | (S)s | endl;
    9090} // main
    9191
  • src/examples/swap.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:22:12 2016
    13 // Update Count     : 64
     12// Last Modified On : Wed Mar  2 16:15:11 2016
     13// Update Count     : 65
    1414//
    1515
     
    5454
    5555        float f1 = 1.5, f2 = 2.5;
    56         sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap ";
     56        sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
    5757        swap( &f1, &f2 );
    5858        sout | '\t' | f1 | ' ' | f2 | endl;
    5959
    6060        double d1 = 1.5, d2 = 2.5;
    61         sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap ";
     61        sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
    6262        swap( &d1, &d2 );
    6363        sout | '\t' | d1 | ' ' | d2 | endl;
    6464
    6565        long double ld1 = 1.5, ld2 = 2.5;
    66         sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap ";
     66        sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
    6767        swap( &ld1, &ld2 );
    6868        sout | '\t' | ld1 | ' ' | ld2 | endl;
  • src/examples/tests/vector_test.out.txt

    r39786813 ra5a71d0  
    11enter N elements and C-d on a separate line:
    22Array elements:
    3 1 2 3 4 5 
     31 2 3 4 5
    44Array elements reversed:
    5 5 4 3 2 1 
     55 4 3 2 1
  • src/examples/twice.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 12:23:25 2016
    13 // Update Count     : 13
     12// Last Modified On : Tue Mar  8 22:04:58 2016
     13// Update Count     : 16
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( type T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )
     18forall( otype T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )
    1919T twice( const T t ) {
    2020        return t + t;
     
    2727        char ?++( char *op ) { char temp = *op; *op += 1; return temp; }
    2828
    29         sout | twice( 'a' ) | ' ' | twice( 1 ) | ' ' | twice( 3.2 ) | endl;
     29        sout | twice( 'a' ) | ' ' | twice( 1 ) | twice( 3.2 ) | endl;
    3030}
    3131
  • src/libcfa/Makefile.am

    r39786813 ra5a71d0  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Wed Feb  3 11:19:35 2016
    14 ## Update Count     : 117
     13## Last Modified On : Wed Mar  2 22:59:23 2016
     14## Update Count     : 119
    1515###############################################################################
    1616
     
    6363libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    6464
    65 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math
     65cheaders = #  expat
    6666cfaheaders = limits
    6767include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
  • src/libcfa/Makefile.in

    r39786813 ra5a71d0  
    215215libs = stdlib iostream fstream iterator
    216216libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    217 cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math
     217cheaders = #  expat
    218218cfaheaders = limits
    219219include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
     
    231231          esac; \
    232232        done; \
    233         echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
     233        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
    234234        $(am__cd) $(top_srcdir) && \
    235           $(AUTOMAKE) --gnu src/libcfa/Makefile
     235          $(AUTOMAKE) --foreign src/libcfa/Makefile
    236236.PRECIOUS: Makefile
    237237Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/libcfa/builtins.cf

    r39786813 ra5a71d0  
    390390int __builtin_sprintf(char *, const char *, ...);
    391391int __builtin_sscanf(const char *, const char *, ...);
    392 int __builtin_vfprintf(struct _IO_FILE *, const char *, void **);
    393 int __builtin_vfscanf(struct _IO_FILE *, const char *, void **);
    394 int __builtin_vprintf(const char *, void **);
    395 int __builtin_vscanf(const char *, void **);
    396 int __builtin_vsnprintf(char *, unsigned long, const char *, void **);
    397 int __builtin_vsprintf(char *, const char *, void **);
    398 int __builtin_vsscanf(const char *, const char *, void **);
     392int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list);
     393int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list);
     394int __builtin_vprintf(const char *, __builtin_va_list);
     395int __builtin_vscanf(const char *, __builtin_va_list);
     396int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list);
     397int __builtin_vsprintf(char *, const char *, __builtin_va_list);
     398int __builtin_vsscanf(const char *, const char *, __builtin_va_list);
    399399int __builtin_isalnum(int);
    400400int __builtin_isalpha(int);
     
    534534void __builtin_unwind_init();
    535535void __builtin_update_setjmp_buf(void *, int);
    536 void __builtin_va_copy(void **, void **);
    537 void __builtin_va_end(void **);
    538 void __builtin_va_start(void **, ...);
     536void __builtin_va_copy(__builtin_va_list, __builtin_va_list);
     537void __builtin_va_end(__builtin_va_list);
     538void __builtin_va_start(__builtin_va_list, ...);
    539539int __builtin_va_arg_pack();
    540540int __builtin_va_arg_pack_len();
     
    563563int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...);
    564564int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...);
    565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **);
    566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **);
     565int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list);
     566int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list);
    567567int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...);
    568568int __builtin___printf_chk(int, const char *, ...);
    569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **);
    570 int __builtin___vprintf_chk(int, const char *, void **);
     569int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list);
     570int __builtin___vprintf_chk(int, const char *, __builtin_va_list);
    571571void __cyg_profile_func_enter(void *, void *);
    572572void __cyg_profile_func_exit(void *, void *);
     
    583583const char * __builtin_FUNCTION();
    584584int __builtin_LINE();
    585 typedef void ** __builtin_va_list;
    586585extern const char *__PRETTY_FUNCTION__;
    587 typedef int wchar_t;
  • src/libcfa/fstream

    r39786813 ra5a71d0  
    77// fstream --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:02:01 2016
    13 // Update Count     : 22
     12// Last Modified On : Wed Mar  2 15:08:14 2016
     13// Update Count     : 78
    1414//
    1515
     
    1919#include "iostream"
    2020
    21 // implement context ostream
    22 struct ofstream;
     21enum { separateSize = 16 };
     22struct ofstream { void *file; int separate; char separator[separateSize]; };
    2323
    24 int fail( ofstream * os );
    25 int flush( ofstream * os );
    26 void open( ofstream ** os, const char * name, const char * mode );
    27 void close( ofstream * os );
    28 ofstream * write( ofstream * os, const char * data, streamsize_type size );
     24_Bool sepPrt( ofstream * );
     25void sepOn( ofstream * );
     26void sepOff( ofstream * );
     27void sepSet( ofstream *, const char * );
     28const char * sepGet( ofstream * );
     29void sepDisable( ofstream * );
     30void sepEnable( ofstream * );
     31int fail( ofstream * );
     32int flush( ofstream * );
     33void open( ofstream *, const char * name, const char * mode );
     34void close( ofstream * );
     35ofstream * write( ofstream *, const char * data, unsigned long int size );
     36int prtfmt( ofstream *, const char fmt[], ... );
    2937
    3038extern ofstream * sout, * serr;
    3139
    3240// implement context istream
    33 struct ifstream;
     41struct ifstream { void *file; };
    3442
    3543int fail( ifstream * is );
    3644int eof( ifstream * is );
    37 void open( ifstream ** is, const char * name, const char * mode );
     45void open( ifstream * is, const char * name, const char * mode );
    3846void close( ifstream * is );
    39 ifstream * get( ifstream * is, int * data );
    40 ifstream * read( ifstream * is, char * data, streamsize_type size );
     47ifstream * read( ifstream * is, char * data, unsigned long int size );
    4148ifstream * ungetc( ifstream * is, char c );
     49int scanfmt( ifstream *, const char fmt[], ... );
    4250
    4351extern ifstream *sin;
     
    4957// tab-width: 4 //
    5058// End: //
     59
  • src/libcfa/fstream.c

    r39786813 ra5a71d0  
    77// fstream.c --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:03:05 2016
    13 // Update Count     : 76
     12// Last Modified On : Mon Feb 29 18:41:10 2016
     13// Update Count     : 162
    1414//
    1515
     
    1717
    1818extern "C" {
    19 #include <stdio.h>
    20 #include <stdlib.h>
     19#include <stdio.h>                                                                              // vfprintf, vfscanf
     20#include <stdlib.h>                                                                             // exit
     21#include <stdarg.h>                                                                             // varargs
     22#include <string.h>                                                                             // strlen
     23#include <float.h>                                                                              // DBL_DIG, LDBL_DIG
     24#include <complex.h>                                                                    // creal, cimag
    2125}
    22 
    23 struct ofstream {
    24         FILE *file;
    25 };
    2626
    2727#define IO_MSG "I/O error "
    2828
     29_Bool sepPrt( ofstream * os ) { return os->separate == 1; }
     30void sepOn( ofstream * os ) { if ( os->separate != 2 ) os->separate = 1; }
     31void sepOff( ofstream * os ) { if ( os->separate != 2 ) os->separate = 0; }
     32void sepSet( ofstream * os, const char * s ) {
     33        strncpy( &(os->separator[0]), s, separateSize - 1 );
     34        os->separator[separateSize - 1] = '\0';
     35} // sepSet
     36const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
     37void sepDisable( ofstream *os ) { os->separate = 2; }
     38void sepEnable( ofstream *os ) { os->separate = 0; }
     39
    2940int fail( ofstream * os ) {
    30         return ferror( os->file );
     41        return ferror( (FILE *)(os->file) );
    3142} // fail
    3243
    3344int flush( ofstream * os ) {
    34         return fflush( os->file );
     45        return fflush( (FILE *)(os->file) );
    3546} // flush
    3647
    37 void open( ofstream ** os, const char * name, const char * mode ) {
    38         FILE *t = fopen( name, mode );
    39         if ( t == 0 ) {                                                                         // do not change unless successful
     48void open( ofstream * os, const char * name, const char * mode ) {
     49        FILE *file = fopen( name, mode );
     50        if ( file == 0 ) {                                                                      // do not change unless successful
    4051                perror( IO_MSG "open output" );
    4152                exit( EXIT_FAILURE );
    4253        } // if
    43         (*os)->file = t;
     54        os->file = file;
     55        sepOff( os );
     56        sepSet( os, " " );
    4457} // open
    4558
    4659void close( ofstream * os ) {
    47         if ( os->file == stdout || os->file == stderr ) return;
     60        if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return;
    4861
    49         if ( fclose( os->file ) == EOF ) {
     62        if ( fclose( (FILE *)(os->file) ) == EOF ) {
    5063                perror( IO_MSG "close output" );
    5164        } // if
    5265} // close
    5366
    54 ofstream * write( ofstream * os, const char * data, streamsize_type size ) {
     67ofstream * write( ofstream * os, const char * data, unsigned long int size ) {
    5568        if ( fail( os ) ) {
    5669                fprintf( stderr, "attempt write I/O on failed stream\n" );
     
    5871        } // if
    5972
    60         if ( fwrite( data, 1, size, os->file ) != size ) {
     73        if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) {
    6174                perror( IO_MSG "write" );
    6275                exit( EXIT_FAILURE );
     
    6578} // write
    6679
    67 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) };
     80int prtfmt( ofstream * os, const char fmt[], ... ) {
     81    va_list args;
     82
     83    va_start( args, fmt );
     84    int len = vfprintf( (FILE *)(os->file), fmt, args );
     85        if ( len == EOF ) {
     86                if ( ferror( (FILE *)(os->file) ) ) {
     87                        fprintf( stderr, "invalid write\n" );
     88                        exit( EXIT_FAILURE );
     89                } // if
     90        } // if
     91    va_end( args );
     92        return len;
     93} // prtfmt
     94
     95
     96static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } };
    6897ofstream *sout = &soutFile;
    69 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };
     98static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } };
    7099ofstream *serr = &serrFile;
     100
    71101
    72102//---------------------------------------
    73103
    74 struct ifstream {
    75         FILE *file;
    76 };
    77104
    78105int fail( ifstream * is ) {
    79         return ferror( is->file );
     106        return ferror( (FILE *)(is->file) );
    80107} // fail
    81108
    82109int eof( ifstream * is ) {
    83         return feof( is->file );
     110        return feof( (FILE *)(is->file) );
    84111} // eof
    85112
    86 ifstream * get( ifstream * is, int * data ) {
    87         if ( fscanf( is->file, "%d", data ) == EOF ) {
    88                 if ( ferror( is->file ) ) {
    89                         fprintf( stderr, "invalid int read\n" );
    90                         exit( EXIT_FAILURE );
    91                 } // if
     113void open( ifstream * is, const char * name, const char * mode ) {
     114        FILE *t = fopen( name, mode );
     115        if ( t == 0 ) {                                                                         // do not change unless successful
     116                perror( IO_MSG "open input" );
     117                exit( EXIT_FAILURE );
    92118        } // if
    93         return is;
    94 } // read
     119        is->file = t;
     120} // open
    95121
    96 ifstream * read( ifstream * is, char * data, streamsize_type size ) {
     122void close( ifstream * is ) {
     123        if ( (FILE *)(is->file) == stdin ) return;
     124
     125        if ( fclose( (FILE *)(is->file) ) == EOF ) {
     126                perror( IO_MSG "close input" );
     127        } // if
     128} // close
     129
     130ifstream * read( ifstream * is, char * data, unsigned long int size ) {
    97131        if ( fail( is ) ) {
    98132                fprintf( stderr, "attempt read I/O on failed stream\n" );
     
    100134        } // if
    101135
    102         if ( fread( data, size, 1, is->file ) == 0 ) {
     136        if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) {
    103137                perror( IO_MSG "read" );
    104138                exit( EXIT_FAILURE );
     
    113147        } // if
    114148
    115         if ( ungetc( c, is->file ) == EOF ) {
     149        if ( ungetc( c, (FILE *)(is->file) ) == EOF ) {
    116150                perror( IO_MSG "ungetc" );
    117151                exit( EXIT_FAILURE );
     
    120154} // ungetc
    121155
    122 void open( ifstream ** is, const char * name, const char * mode ) {
    123         FILE *t = fopen( name, mode );
    124         if ( t == 0 ) {                                                                         // do not change unless successful
    125                 perror( IO_MSG "open input" );
    126                 exit( EXIT_FAILURE );
     156int scanfmt( ifstream * is, const char fmt[], ... ) {
     157    va_list args;
     158
     159    va_start( args, fmt );
     160    int len = vfscanf( (FILE *)(is->file), fmt, args );
     161        if ( len == EOF ) {
     162                if ( ferror( (FILE *)(is->file) ) ) {
     163                        fprintf( stderr, "invalid read\n" );
     164                        exit( EXIT_FAILURE );
     165                } // if
    127166        } // if
    128         (*is)->file = t;
    129 } // open
     167    va_end( args );
     168        return len;
     169} // prtfmt
    130170
    131 void close( ifstream * is ) {
    132         if ( is->file == stdin ) return;
    133 
    134         if ( fclose( is->file ) == EOF ) {
    135                 perror( IO_MSG "close input" );
    136         } // if
    137 } // close
    138171
    139172static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) };
  • src/libcfa/iostream

    r39786813 ra5a71d0  
    77// iostream --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:04:24 2016
    13 // Update Count     : 32
     12// Last Modified On : Wed Mar  2 18:05:27 2016
     13// Update Count     : 85
    1414//
    1515
    16 #ifndef IOSTREAM_H
    17 #define IOSTREAM_H
     16#ifndef __IOSTREAM_H__
     17#define __IOSTREAM_H__
    1818
    1919#include "iterator"
    2020
    21 typedef unsigned long streamsize_type;
    22 
    23 context ostream( dtype ostype ) {
     21trait ostream( dtype ostype ) {
     22        _Bool sepPrt( ostype * );
     23        void sepOn( ostype * );
     24        void sepOff( ostype * );
     25        void sepSet( ostype *, const char * );
     26        const char * sepGet( ostype * );
     27        void sepDisable( ostype * );
     28        void sepEnable( ostype * );
    2429        int fail( ostype * );
    2530        int flush( ostype * );
    26         ostype * write( ostype *, const char *, streamsize_type );
     31        void open( ostype * os, const char * name, const char * mode );
     32        void close( ostype * os );
     33        ostype * write( ostype *, const char *, unsigned long int );
     34        int prtfmt( ostype *, const char fmt[], ... );
    2735};
    28 context writeable( type T ) {
     36
     37trait writeable( otype T ) {
    2938        forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
    3039};
     
    3342
    3443forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
     44
     45forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
     46forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
    3547forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
    3648forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
     
    3951forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
    4052forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
     53
    4154forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
    4255forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
    4356forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
     57
    4458forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
    4559forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
    4660forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
     61
    4762forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
    4863forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
    4964
    50 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );
     65forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
    5166forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
     67forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
     68forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
    5269
    5370// writes the range [begin, end) to the given stream
    54 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     71forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
    5572void write( iterator_type begin, iterator_type end, os_type *os );
    5673
    57 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     74forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
    5875void write_reverse( iterator_type begin, iterator_type end, os_type *os );
    5976
    6077//---------------------------------------
    6178
    62 context istream( dtype istype ) {
     79trait istream( dtype istype ) {
    6380        int fail( istype * );
    6481        int eof( istype * );
    65         istype * get( istype *, int * );
    66         istype * read( istype *, char *, streamsize_type );
     82        void open( istype * is, const char * name, const char * mode );
     83        void close( istype * is );
     84        istype * read( istype *, char *, unsigned long int );
    6785        istype * ungetc( istype *, char );
     86        int scanfmt( istype *, const char fmt[], ... );
    6887};
    6988
    70 context readable( type T ) {
     89trait readable( otype T ) {
    7190        forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
    7291};
    7392
    74 forall( dtype istype | istream( istype ) )
    75 istype * ?|?( istype *, char * );
     93forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
    7694
    77 forall( dtype istype | istream( istype ) )
    78 istype * ?|?( istype *, int * );
     95forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * );
     96forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * );
     97forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * );
     98forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * );
     99forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * );
     100forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * );
     101forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * );
     102forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * );
    79103
    80 #endif // IOSTREAM_H
     104forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * );
     105forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * );
     106forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * );
     107
     108forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * );
     109forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * );
     110forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
     111
     112struct _Istream_str1 { char * s; };
     113_Istream_str1 str( char * );
     114forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 );
     115
     116struct _Istream_str2 { char * s; int size; };
     117_Istream_str2 str( char *, int size );
     118forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 );
     119
     120#endif // __IOSTREAM_H__
    81121
    82122// Local Variables: //
  • src/libcfa/iostream.c

    r39786813 ra5a71d0  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // iostream.c -- 
    8 //
    9 // Author           : Richard C. Bilson
     7// iostream.c --
     8//
     9// Author           : Peter A. Buhr
    1010// Created On       : Wed May 27 17:56:53 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 14:19:56 2016
    13 // Update Count     : 76
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Apr 06 14:42:52 2016
     13// Update Count     : 227
    1414//
    1515
     
    2121#include <float.h>                                                                              // DBL_DIG, LDBL_DIG
    2222#include <complex.h>                                                                    // creal, cimag
     23#include <ctype.h>                                                                              // isspace, ispunct
    2324}
    2425
    2526forall( dtype ostype | ostream( ostype ) )
    2627ostype * ?|?( ostype *os, char c ) {
    27         return write( os, &c, 1 );
     28        prtfmt( os, "%c", c );
     29        return os;
     30} // ?|?
     31
     32forall( dtype ostype | ostream( ostype ) )
     33ostype * ?|?( ostype *os, short int si ) {
     34        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     35        prtfmt( os, "%hd", si );
     36        return os;
     37} // ?|?
     38
     39forall( dtype ostype | ostream( ostype ) )
     40ostype * ?|?( ostype *os, unsigned short int usi ) {
     41        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     42        prtfmt( os, "%hu", usi );
     43        return os;
    2844} // ?|?
    2945
    3046forall( dtype ostype | ostream( ostype ) )
    3147ostype * ?|?( ostype *os, int i ) {
    32         char buffer[32];
    33         return write( os, buffer, sprintf( buffer, "%d", i ) );
    34 } // ?|?
    35 
    36 forall( dtype ostype | ostream( ostype ) )
    37 ostype * ?|?( ostype *os, unsigned int i ) {
    38         char buffer[32];
    39         return write( os, buffer, sprintf( buffer, "%u", i ) );
    40 } // ?|?
    41 
    42 forall( dtype ostype | ostream( ostype ) )
    43 ostype * ?|?( ostype *os, long int i ) {
    44         char buffer[32];
    45         return write( os, buffer, sprintf( buffer, "%ld", i ) );
    46 } // ?|?
    47 
    48 forall( dtype ostype | ostream( ostype ) )
    49 ostype * ?|?( ostype *os, long long int i ) {
    50         char buffer[32];
    51         return write( os, buffer, sprintf( buffer, "%lld", i ) );
    52 } // ?|?
    53 
    54 forall( dtype ostype | ostream( ostype ) )
    55 ostype * ?|?( ostype *os, unsigned long int i ) {
    56         char buffer[32];
    57         return write( os, buffer, sprintf( buffer, "%lu", i ) );
    58 } // ?|?
    59 
    60 forall( dtype ostype | ostream( ostype ) )
    61 ostype * ?|?( ostype *os, unsigned long long int i ) {
    62         char buffer[32];
    63         return write( os, buffer, sprintf( buffer, "%llu", i ) );
     48        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     49        prtfmt( os, "%d", i );
     50        return os;
     51} // ?|?
     52
     53forall( dtype ostype | ostream( ostype ) )
     54ostype * ?|?( ostype *os, unsigned int ui ) {
     55        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     56        prtfmt( os, "%u", ui );
     57        return os;
     58} // ?|?
     59
     60forall( dtype ostype | ostream( ostype ) )
     61ostype * ?|?( ostype *os, long int li ) {
     62        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     63        prtfmt( os, "%ld", li );
     64        return os;
     65} // ?|?
     66
     67forall( dtype ostype | ostream( ostype ) )
     68ostype * ?|?( ostype *os, unsigned long int uli ) {
     69        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     70        prtfmt( os, "%lu", uli );
     71        return os;
     72} // ?|?
     73
     74forall( dtype ostype | ostream( ostype ) )
     75ostype * ?|?( ostype *os, long long int lli ) {
     76        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     77        prtfmt( os, "%lld", lli );
     78        return os;
     79} // ?|?
     80
     81forall( dtype ostype | ostream( ostype ) )
     82ostype * ?|?( ostype *os, unsigned long long int ulli ) {
     83        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     84        prtfmt( os, "%llu", ulli );
     85        return os;
    6486} // ?|?
    6587
    6688forall( dtype ostype | ostream( ostype ) )
    6789ostype * ?|?( ostype *os, float f ) {
    68         char buffer[32];
    69         return write( os, buffer, sprintf( buffer, "%g", f ) );
     90        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     91        prtfmt( os, "%g", f );
     92        return os;
    7093} // ?|?
    7194
    7295forall( dtype ostype | ostream( ostype ) )
    7396ostype * ?|?( ostype *os, double d ) {
    74         char buffer[32];
    75         return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) );
    76 } // ?|?
    77 
    78 forall( dtype ostype | ostream( ostype ) )
    79 ostype * ?|?( ostype *os, long double d ) {
    80         char buffer[32];
    81         return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) );
    82 } // ?|?
    83 
    84 forall( dtype ostype | ostream( ostype ) )
    85 ostype * ?|?( ostype *os, float _Complex c ) {
    86         return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i';
    87 } // ?|?
    88 
    89 forall( dtype ostype | ostream( ostype ) )
    90 ostype * ?|?( ostype *os, double _Complex c ) {
    91         return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i';
    92 } // ?|?
    93 
    94 forall( dtype ostype | ostream( ostype ) )
    95 ostype * ?|?( ostype *os, long double _Complex c ) {
    96         return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i';
     97        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     98        prtfmt( os, "%.*lg", DBL_DIG, d );
     99        return os;
     100} // ?|?
     101
     102forall( dtype ostype | ostream( ostype ) )
     103ostype * ?|?( ostype *os, long double ld ) {
     104        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     105        prtfmt( os, "%.*Lg", LDBL_DIG, ld );
     106        return os;
     107} // ?|?
     108
     109forall( dtype ostype | ostream( ostype ) )
     110ostype * ?|?( ostype *os, float _Complex fc ) {
     111        os | crealf( fc );
     112        if ( cimagf( fc ) >= 0 ) os | '+';
     113        os | "" | cimagf( fc ) | 'i';
     114        return os;
     115} // ?|?
     116
     117forall( dtype ostype | ostream( ostype ) )
     118ostype * ?|?( ostype *os, double _Complex dc ) {
     119        os | creal( dc );
     120        if ( cimag( dc ) >= 0 ) os | '+';
     121        os | "" | cimag( dc ) | 'i';
     122        return os;
     123} // ?|?
     124
     125forall( dtype ostype | ostream( ostype ) )
     126ostype * ?|?( ostype *os, long double _Complex ldc ) {
     127        os | creall( ldc );
     128        if ( cimagl( ldc ) >= 0 ) os | '+';
     129        os | "" | cimagl( ldc ) | 'i';
     130        return os;
     131} // ?|?
     132
     133forall( dtype ostype | ostream( ostype ) )
     134ostype * ?|?( ostype *os, const char *cp ) {
     135        enum { Open = 1, Close, OpenClose };
     136        static const char mask[256] = {
     137                // opening delimiters
     138                ['('] : Open, ['['] : Open, ['{'] : Open,
     139                ['$'] : Open, [L'£'] : Open, [L'¥'] : Open, [L'¢'] : Open, [L'¿'] : Open, [L'«'] : Open,
     140                // closing delimiters
     141                [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
     142                [')'] : Close, [']'] : Close, ['}'] : Close,
     143                ['%'] : Close, [L'»'] : Close,
     144                // opening-closing delimiters
     145                ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
     146        }; // mask
     147
     148        int len = strlen( cp );
     149        // null string => no separator
     150  if ( len == 0 ) { sepOff( os ); return os; }
     151        // first character NOT spacing or closing punctuation => add left separator
     152        if ( sepPrt( os ) && isspace( cp[0] ) == 0 && mask[ cp[0] ] != Close && mask[ cp[0] ] != OpenClose ) {
     153                prtfmt( os, "%s", sepGet( os ) );
     154        } // if
     155        // last character IS spacing or opening punctuation => turn off separator for next item
     156        unsigned int posn = len - 1;
     157        if ( isspace( cp[posn] ) || mask[ cp[posn] ] == Open || mask[ cp[posn] ] == OpenClose ) {
     158                sepOff( os );
     159        } else {
     160                sepOn( os );
     161        } // if
     162        return write( os, cp, len );
    97163} // ?|?
    98164
    99165forall( dtype ostype | ostream( ostype ) )
    100166ostype * ?|?( ostype *os, const void *p ) {
    101         char buffer[32];
    102         return write( os, buffer, sprintf( buffer, "%p", p ) );
    103 } // ?|?
    104 
    105 forall( dtype ostype | ostream( ostype ) )
    106 ostype * ?|?( ostype *os, const char *cp ) {
    107         return write( os, cp, strlen( cp ) );
    108 } // ?|?
    109 
    110 
    111 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) )
    112 retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) {
    113   return manip( os );
    114 }
    115 
    116 forall( dtype ostype | ostream( ostype ) )
     167        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
     168        prtfmt( os, "%p", p );
     169        return os;
     170} // ?|?
     171
     172
     173forall( dtype ostype | ostream( ostype ) )
     174ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) {
     175        return manip( os );
     176} // ?|?
     177
     178forall( dtype ostype | ostream( ostype ) )
    117179ostype * endl( ostype * os ) {
    118         os | "\n";
     180        os | '\n';
    119181        flush( os );
     182        sepOff( os );
    120183        return os;
    121184} // endl
    122185
     186forall( dtype ostype | ostream( ostype ) )
     187ostype * sepOn( ostype * os ) {
     188        sepOn( os );
     189        return os;
     190} // sepOn
     191
     192forall( dtype ostype | ostream( ostype ) )
     193ostype * sepOff( ostype * os ) {
     194        sepOff( os );
     195        return os;
     196} // sepOff
     197
    123198//---------------------------------------
    124199
    125 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
    126                 dtype os_type | ostream( os_type ) )
    127 void write( iterator_type begin, iterator_type end, os_type *os ) {
    128         void print( elt_type i ) { os | i | ' '; }
     200forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
     201void write( iteratortype begin, iteratortype end, ostype *os ) {
     202        void print( elttype i ) { os | i; }
    129203        for_each( begin, end, print );
    130204} // ?|?
    131205
    132 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
    133                 dtype os_type | ostream( os_type ) )
    134 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) {
    135         void print( elt_type i ) { os | i | ' '; }
     206forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
     207void write_reverse( iteratortype begin, iteratortype end, ostype *os ) {
     208        void print( elttype i ) { os | i; }
    136209        for_each_reverse( begin, end, print );
    137210} // ?|?
     
    140213
    141214forall( dtype istype | istream( istype ) )
    142 istype * ?|?( istype *is, char *cp ) {
    143         return read( is, cp, 1 );
    144 } // ?|?
    145 
    146 forall( dtype istype | istream( istype ) )
    147 istype * ?|?( istype *is, int *ip ) {
    148         return get( is, ip );
    149 } // ?|?
     215istype * ?|?( istype * is, char * c ) {
     216        scanfmt( is, "%c", c );
     217        return is;
     218} // ?|?
     219
     220forall( dtype istype | istream( istype ) )
     221istype * ?|?( istype * is, short int * si ) {
     222        scanfmt( is, "%hd", si );
     223        return is;
     224} // ?|?
     225
     226forall( dtype istype | istream( istype ) )
     227istype * ?|?( istype * is, unsigned short int * usi ) {
     228        scanfmt( is, "%hu", usi );
     229        return is;
     230} // ?|?
     231
     232forall( dtype istype | istream( istype ) )
     233istype * ?|?( istype * is, int * i ) {
     234        scanfmt( is, "%d", i );
     235        return is;
     236} // ?|?
     237
     238forall( dtype istype | istream( istype ) )
     239istype * ?|?( istype * is, unsigned int * ui ) {
     240        scanfmt( is, "%u", ui );
     241        return is;
     242} // ?|?
     243
     244forall( dtype istype | istream( istype ) )
     245istype * ?|?( istype * is, long int * li ) {
     246        scanfmt( is, "%ld", li );
     247        return is;
     248} // ?|?
     249
     250forall( dtype istype | istream( istype ) )
     251istype * ?|?( istype * is, unsigned long int * ulli ) {
     252        scanfmt( is, "%lu", ulli );
     253        return is;
     254} // ?|?
     255
     256forall( dtype istype | istream( istype ) )
     257istype * ?|?( istype * is, long long int * lli ) {
     258        scanfmt( is, "%lld", lli );
     259        return is;
     260} // ?|?
     261
     262forall( dtype istype | istream( istype ) )
     263istype * ?|?( istype * is, unsigned long long int * ulli ) {
     264        scanfmt( is, "%llu", ulli );
     265        return is;
     266} // ?|?
     267
     268
     269forall( dtype istype | istream( istype ) )
     270istype * ?|?( istype * is, float * f ) {
     271        scanfmt( is, "%f", f );
     272        return is;
     273} // ?|?
     274
     275forall( dtype istype | istream( istype ) )
     276istype * ?|?( istype * is, double * d ) {
     277        scanfmt( is, "%lf", d );
     278        return is;
     279} // ?|?
     280
     281forall( dtype istype | istream( istype ) )
     282istype * ?|?( istype * is, long double * ld ) {
     283        scanfmt( is, "%Lf", ld );
     284        return is;
     285} // ?|?
     286
     287
     288forall( dtype istype | istream( istype ) )
     289istype * ?|?( istype * is, float _Complex * fc ) {
     290        float re, im;
     291        scanfmt( is, "%g%gi", &re, &im );
     292        *fc = re + im * _Complex_I;
     293        return is;
     294} // ?|?
     295
     296forall( dtype istype | istream( istype ) )
     297istype * ?|?( istype * is, double _Complex * dc ) {
     298        double re, im;
     299        scanfmt( is, "%lf%lfi", &re, &im );
     300        *dc = re + im * _Complex_I;
     301        return is;
     302} // ?|?
     303
     304forall( dtype istype | istream( istype ) )
     305istype * ?|?( istype * is, long double _Complex * ldc ) {
     306        long double re, im;
     307        scanfmt( is, "%Lf%Lfi", &re, &im );
     308        *ldc = re + im * _Complex_I;
     309        return is;
     310} // ?|?
     311
     312_Istream_str1 str( char * str ) { _Istream_str1 s = { str }; return s; }
     313forall( dtype istype | istream( istype ) )
     314istype * ?|?( istype * is, _Istream_str1 str ) {
     315        scanfmt( is, "%s", str.s );
     316        return is;
     317} // str
     318
     319_Istream_str2 str( char * str, int size ) { _Istream_str2 s = { str, size }; return s; }
     320forall( dtype istype | istream( istype ) )
     321istype * ?|?( istype * is, _Istream_str2 str ) {
     322        char buf[16];
     323        sprintf( buf, "%%%ds", str.size );
     324        scanfmt( is, buf, str.s );
     325        return is;
     326} // str
    150327
    151328// Local Variables: //
  • src/libcfa/iterator

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jan 27 23:49:13 2016
    13 // Update Count     : 7
     12// Last Modified On : Wed Mar  2 18:06:05 2016
     13// Update Count     : 9
    1414//
    1515
     
    1818
    1919// An iterator can be used to traverse a data structure.
    20 context iterator( type iterator_type, type elt_type ) {
     20trait iterator( otype iterator_type, otype elt_type ) {
    2121        // point to the next element
    2222//      iterator_type ?++( iterator_type * );
     
    3232};
    3333
    34 context iterator_for( type iterator_type, type collection_type, type elt_type | iterator( iterator_type, elt_type ) ) {
     34trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) {
    3535//      [ iterator_type begin, iterator_type end ] get_iterators( collection_type );
    3636        iterator_type begin( collection_type );
     
    3838};
    3939
    40 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     40forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    4141void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
    4242
    43 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     43forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    4444void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
    4545
  • src/libcfa/iterator.c

    r39786813 ra5a71d0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jan 26 17:16:07 2016
    13 // Update Count     : 26
     12// Last Modified On : Wed Mar  2 18:08:11 2016
     13// Update Count     : 27
    1414//
    1515
    1616#include "iterator"
    1717
    18 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     18forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    1919void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
    2020        for ( iterator_type i = begin; i != end; ++i ) {
     
    2323}
    2424
    25 forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
     25forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
    2626void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
    2727        for ( iterator_type i = end; i != begin; ) {
  • src/libcfa/prelude.cf

    r39786813 ra5a71d0  
     1# 2 "prelude.cf"  // needed for error messages from this file
    12//                               -*- Mode: C -*-
    23//
     
    89// Created On       : Sat Nov 29 07:23:41 2014
    910// Last Modified By : Peter A. Buhr
    10 // Last Modified On : Mon Jan  4 11:13:26 2016
    11 // Update Count     : 81
     11// Last Modified On : Wed Mar  2 18:03:41 2016
     12// Update Count     : 89
    1213//
    1314
     
    6364long double _Complex    ?--( long double _Complex * ),          ?--( volatile long double _Complex * );
    6465
    65 forall( type T ) T *                     ?++(                T ** );
    66 forall( type T ) const T *               ?++( const          T ** );
    67 forall( type T ) volatile T *            ?++(       volatile T ** );
    68 forall( type T ) const volatile T *      ?++( const volatile T ** );
    69 forall( type T ) T *                     ?--(                T ** );
    70 forall( type T ) const T *               ?--( const          T ** );
    71 forall( type T ) volatile T *            ?--(       volatile T ** );
    72 forall( type T ) const volatile T *      ?--( const volatile T ** );
    73 
    74 forall( type T ) lvalue T                ?[?](                T *,          ptrdiff_t );
    75 forall( type T ) const lvalue T          ?[?]( const          T *,          ptrdiff_t );
    76 forall( type T ) volatile lvalue T       ?[?](       volatile T *,          ptrdiff_t );
    77 forall( type T ) const volatile lvalue T ?[?]( const volatile T *,          ptrdiff_t );
    78 forall( type T ) lvalue T                ?[?](          ptrdiff_t,                T * );
    79 forall( type T ) const lvalue T          ?[?](          ptrdiff_t, const          T * );
    80 forall( type T ) volatile lvalue T       ?[?](          ptrdiff_t,       volatile T * );
    81 forall( type T ) const volatile lvalue T ?[?](          ptrdiff_t, const volatile T * );
     66forall( otype T ) T *                    ?++(                T ** );
     67forall( otype T ) const T *              ?++( const          T ** );
     68forall( otype T ) volatile T *           ?++(       volatile T ** );
     69forall( otype T ) const volatile T *     ?++( const volatile T ** );
     70forall( otype T ) T *                    ?--(                T ** );
     71forall( otype T ) const T *              ?--( const          T ** );
     72forall( otype T ) volatile T *           ?--(       volatile T ** );
     73forall( otype T ) const volatile T *     ?--( const volatile T ** );
     74
     75forall( otype T ) lvalue T               ?[?](                T *,          ptrdiff_t );
     76forall( otype T ) const lvalue T         ?[?]( const          T *,          ptrdiff_t );
     77forall( otype T ) volatile lvalue T      ?[?](       volatile T *,          ptrdiff_t );
     78forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,         ptrdiff_t );
     79forall( otype T ) lvalue T               ?[?](          ptrdiff_t,                T * );
     80forall( otype T ) const lvalue T         ?[?](          ptrdiff_t, const          T * );
     81forall( otype T ) volatile lvalue T      ?[?](          ptrdiff_t,       volatile T * );
     82forall( otype T ) const volatile lvalue T ?[?](         ptrdiff_t, const volatile T * );
    8283
    8384// ------------------------------------------------------------
     
    101102long double _Complex    ++?( long double _Complex * ),          --?( long double _Complex * );
    102103
    103 forall( type T ) T *                     ++?(                T ** );
    104 forall( type T ) const T *               ++?( const          T ** );
    105 forall( type T ) volatile T *            ++?(       volatile T ** );
    106 forall( type T ) const volatile T *      ++?( const volatile T ** );
    107 forall( type T ) T *                     --?(                T ** );
    108 forall( type T ) const T *               --?( const          T ** );
    109 forall( type T ) volatile T *            --?(       volatile T ** );
    110 forall( type T ) const volatile T *      --?( const volatile T ** );
    111 
    112 forall( type T ) lvalue T                *?(                 T * );
    113 forall( type T ) const lvalue T          *?( const           T * );
    114 forall( type T ) volatile lvalue T       *?(       volatile  T * );
    115 forall( type T ) const volatile lvalue T *?( const volatile  T * );
     104forall( otype T ) T *                    ++?(                T ** );
     105forall( otype T ) const T *              ++?( const          T ** );
     106forall( otype T ) volatile T *           ++?(       volatile T ** );
     107forall( otype T ) const volatile T *     ++?( const volatile T ** );
     108forall( otype T ) T *                    --?(                T ** );
     109forall( otype T ) const T *              --?( const          T ** );
     110forall( otype T ) volatile T *           --?(       volatile T ** );
     111forall( otype T ) const volatile T *     --?( const volatile T ** );
     112
     113forall( otype T ) lvalue T               *?(                 T * );
     114forall( otype T ) const lvalue T                 *?( const           T * );
     115forall( otype T ) volatile lvalue T      *?(       volatile  T * );
     116forall( otype T ) const volatile lvalue T *?( const volatile  T * );
    116117forall( ftype FT ) lvalue FT             *?( FT * );
    117118
     
    183184long double _Complex    ?+?( long double _Complex, long double _Complex ),      ?-?( long double _Complex, long double _Complex );
    184185
    185 forall( type T ) T *                    ?+?(                T *,          ptrdiff_t );
    186 forall( type T ) T *                    ?+?(          ptrdiff_t,                T * );
    187 forall( type T ) const T *              ?+?( const          T *,          ptrdiff_t );
    188 forall( type T ) const T *              ?+?(          ptrdiff_t, const          T * );
    189 forall( type T ) volatile T *           ?+?(       volatile T *,          ptrdiff_t );
    190 forall( type T ) volatile T *           ?+?(          ptrdiff_t,       volatile T * );
    191 forall( type T ) const volatile T *     ?+?( const volatile T *,          ptrdiff_t );
    192 forall( type T ) const volatile T *     ?+?(          ptrdiff_t, const volatile T * );
    193 forall( type T ) T *                    ?-?(                T *,          ptrdiff_t );
    194 forall( type T ) const T *              ?-?( const          T *,          ptrdiff_t );
    195 forall( type T ) volatile T *           ?-?(       volatile T *,          ptrdiff_t );
    196 forall( type T ) const volatile T *     ?-?( const volatile T *,          ptrdiff_t );
    197 forall( type T ) ptrdiff_t              ?-?( const volatile T *, const volatile T * );
     186forall( otype T ) T *                   ?+?(                T *,          ptrdiff_t );
     187forall( otype T ) T *                   ?+?(          ptrdiff_t,                T * );
     188forall( otype T ) const T *             ?+?( const          T *,          ptrdiff_t );
     189forall( otype T ) const T *             ?+?(          ptrdiff_t, const          T * );
     190forall( otype T ) volatile T *          ?+?(       volatile T *,          ptrdiff_t );
     191forall( otype T ) volatile T *          ?+?(          ptrdiff_t,       volatile T * );
     192forall( otype T ) const volatile T *    ?+?( const volatile T *,          ptrdiff_t );
     193forall( otype T ) const volatile T *    ?+?(          ptrdiff_t, const volatile T * );
     194forall( otype T ) T *                   ?-?(                T *,          ptrdiff_t );
     195forall( otype T ) const T *             ?-?( const          T *,          ptrdiff_t );
     196forall( otype T ) volatile T *          ?-?(       volatile T *,          ptrdiff_t );
     197forall( otype T ) const volatile T *    ?-?( const volatile T *,          ptrdiff_t );
     198forall( otype T ) ptrdiff_t             ?-?( const volatile T *, const volatile T * );
    198199
    199200// ------------------------------------------------------------
     
    431432forall( ftype FT ) FT *                 ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
    432433
    433 forall( type T ) T *                    ?+=?(                T *          *, ptrdiff_t );
    434 forall( type T ) T *                    ?+=?(                T * volatile *, ptrdiff_t );
    435 forall( type T ) const T *              ?+=?( const          T *          *, ptrdiff_t );
    436 forall( type T ) const T *              ?+=?( const          T * volatile *, ptrdiff_t );
    437 forall( type T ) volatile T *           ?+=?(       volatile T *          *, ptrdiff_t );
    438 forall( type T ) volatile T *           ?+=?(       volatile T * volatile *, ptrdiff_t );
    439 forall( type T ) const volatile T *     ?+=?( const volatile T *          *, ptrdiff_t );
    440 forall( type T ) const volatile T *     ?+=?( const volatile T * volatile *, ptrdiff_t );
    441 forall( type T ) T *                    ?-=?(                T *          *, ptrdiff_t );
    442 forall( type T ) T *                    ?-=?(                T * volatile *, ptrdiff_t );
    443 forall( type T ) const T *              ?-=?( const          T *          *, ptrdiff_t );
    444 forall( type T ) const T *              ?-=?( const          T * volatile *, ptrdiff_t );
    445 forall( type T ) volatile T *           ?-=?(       volatile T *          *, ptrdiff_t );
    446 forall( type T ) volatile T *           ?-=?(       volatile T * volatile *, ptrdiff_t );
    447 forall( type T ) const volatile T *     ?-=?( const volatile T *          *, ptrdiff_t );
    448 forall( type T ) const volatile T *     ?-=?( const volatile T * volatile *, ptrdiff_t );
     434forall( otype T ) T *                   ?+=?(                T *          *, ptrdiff_t );
     435forall( otype T ) T *                   ?+=?(                T * volatile *, ptrdiff_t );
     436forall( otype T ) const T *             ?+=?( const          T *          *, ptrdiff_t );
     437forall( otype T ) const T *             ?+=?( const          T * volatile *, ptrdiff_t );
     438forall( otype T ) volatile T *          ?+=?(       volatile T *          *, ptrdiff_t );
     439forall( otype T ) volatile T *          ?+=?(       volatile T * volatile *, ptrdiff_t );
     440forall( otype T ) const volatile T *    ?+=?( const volatile T *          *, ptrdiff_t );
     441forall( otype T ) const volatile T *    ?+=?( const volatile T * volatile *, ptrdiff_t );
     442forall( otype T ) T *                   ?-=?(                T *          *, ptrdiff_t );
     443forall( otype T ) T *                   ?-=?(                T * volatile *, ptrdiff_t );
     444forall( otype T ) const T *             ?-=?( const          T *          *, ptrdiff_t );
     445forall( otype T ) const T *             ?-=?( const          T * volatile *, ptrdiff_t );
     446forall( otype T ) volatile T *          ?-=?(       volatile T *          *, ptrdiff_t );
     447forall( otype T ) volatile T *          ?-=?(       volatile T * volatile *, ptrdiff_t );
     448forall( otype T ) const volatile T *    ?-=?( const volatile T *          *, ptrdiff_t );
     449forall( otype T ) const volatile T *    ?-=?( const volatile T * volatile *, ptrdiff_t );
    449450
    450451_Bool                   ?=?( _Bool *, _Bool ),                                  ?=?( volatile _Bool *, _Bool );
  • src/libcfa/stdlib

    r39786813 ra5a71d0  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Feb  5 15:21:18 2016
    13 // Update Count     : 61
     12// Last Modified On : Tue Mar 22 22:34:24 2016
     13// Update Count     : 69
    1414//
    1515
     
    2020} // extern "C"
    2121
    22 forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    23 forall( type T ) T * memset( T * ptr );                                 // remove when default value available
     22forall( otype T ) T * malloc( void );
     23forall( otype T ) T * malloc( char fill );
     24forall( otype T ) T * malloc( T * ptr, size_t size );
     25forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
     26forall( otype T ) T * calloc( size_t size );
     27forall( otype T ) T * realloc( T * ptr, size_t size );
     28forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
    2429
    25 forall( type T ) T * malloc( void );
    26 forall( type T ) T * malloc( char fill );
    27 forall( type T ) T * malloc( size_t size );
    28 forall( type T ) T * malloc( T * ptr, size_t size );
    29 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    30 forall( type T ) T * calloc( size_t size );
    31 forall( type T ) T * realloc( T * ptr, size_t size );
    32 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill );
     30forall( otype T ) T * aligned_alloc( size_t alignment );
     31forall( otype T ) T * memalign( size_t alignment );             // deprecated
     32forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    3333
    34 forall( type T ) T * aligned_alloc( size_t alignment );
    35 forall( type T ) T * memalign( size_t alignment );              // deprecated
    36 forall( type T ) int posix_memalign( T ** ptr, size_t alignment );
     34forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
     35forall( otype T ) T * memset( T * ptr );                                // remove when default value available
    3736
    3837//---------------------------------------
     
    6665//---------------------------------------
    6766
    68 forall( type T | { int ?<?( T, T ); } )
     67forall( otype T | { int ?<?( T, T ); } )
    6968T * bsearch( const T key, const T * arr, size_t dimension );
    7069
    71 forall( type T | { int ?<?( T, T ); } )
     70forall( otype T | { int ?<?( T, T ); } )
    7271void qsort( const T * arr, size_t dimension );
    7372
    7473//---------------------------------------
    7574
    76 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
     75forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    7776[ T, T ] div( T t1, T t2 );
    7877
     
    9493//---------------------------------------
    9594
    96 void randseed( long int s );
    97 char random();
    98 int random();
    99 unsigned int random();
    100 long int random();
    101 unsigned long int random();
    102 float random();
    103 double random();
    104 float _Complex random();
    105 double _Complex random();
    106 long double _Complex random();
     95void rand48seed( long int s );
     96char rand48();
     97int rand48();
     98unsigned int rand48();
     99long int rand48();
     100unsigned long int rand48();
     101float rand48();
     102double rand48();
     103float _Complex rand48();
     104double _Complex rand48();
     105long double _Complex rand48();
    107106
    108107//---------------------------------------
    109108
    110 forall( type T | { int ?<?( T, T ); } )
     109forall( otype T | { int ?<?( T, T ); } )
    111110T min( const T t1, const T t2 );
    112111
    113 forall( type T | { int ?>?( T, T ); } )
     112forall( otype T | { int ?>?( T, T ); } )
    114113T max( const T t1, const T t2 );
    115114
    116 forall( type T )
     115forall( otype T )
    117116void swap( T * t1, T * t2 );
    118117
  • src/libcfa/stdlib.c

    r39786813 ra5a71d0  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 10 15:45:56 2016
    13 // Update Count     : 140
     12// Last Modified On : Wed Mar 23 13:26:42 2016
     13// Update Count     : 146
    1414//
    1515
     
    2727} // extern "C"
    2828
    29 forall( type T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
    30         printf( "memset1\n" );
    31     return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
    32 } // memset
    33 forall( type T ) T * memset( T * ptr ) {                                // remove when default value available
    34         printf( "memset2\n" );
    35     return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
    36 } // memset
    37 
    38 forall( type T ) T * malloc( void ) {
     29forall( otype T ) T * malloc( void ) {
    3930        printf( "malloc1\n" );
    4031    return (T *)malloc( sizeof(T) );
    4132} // malloc
    42 forall( type T ) T * malloc( size_t size ) {
     33forall( otype T ) T * malloc( size_t size ) {
    4334        printf( "malloc2\n" );
    4435    return (T *)(void *)malloc( size );
    4536} // malloc
    46 forall( type T ) T * malloc( char fill ) {
     37forall( otype T ) T * malloc( char fill ) {
    4738        printf( "malloc3\n" );
    4839        T * ptr = (T *)malloc( sizeof(T) );
     
    5041} // malloc
    5142
    52 forall( type T ) T * calloc( size_t size ) {
     43forall( otype T ) T * calloc( size_t size ) {
    5344        printf( "calloc\n" );
    5445    return (T *)calloc( size, sizeof(T) );
    5546} // calloc
    5647
    57 forall( type T ) T * realloc( T * ptr, size_t size ) {
     48forall( otype T ) T * realloc( T * ptr, size_t size ) {
    5849        printf( "realloc1\n" );
    5950    return (T *)(void *)realloc( (void *)ptr, size );
    6051} // realloc
    61 forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
     52forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
    6253        printf( "realloc2\n" );
    6354    char * nptr = (T *)(void *)realloc( (void *)ptr, size );
     
    6758} // realloc
    6859
    69 forall( type T ) T * malloc( T * ptr, size_t size ) {
     60forall( otype T ) T * malloc( T * ptr, size_t size ) {
    7061        printf( "malloc4\n" );
    7162    return (T *)realloc( ptr, size );
    7263} // malloc
    73 forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
     64forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
    7465        printf( "malloc5\n" );
    7566    return (T *)realloc( ptr, size, fill );
    7667} // malloc
    7768
    78 forall( type T ) T * aligned_alloc( size_t alignment ) {
     69forall( otype T ) T * aligned_alloc( size_t alignment ) {
    7970        printf( "aligned_alloc\n" );
    8071    return (T *)memalign( alignment, sizeof(T) );
    8172} // aligned_alloc
    8273
    83 forall( type T ) T * memalign( size_t alignment ) {
     74forall( otype T ) T * memalign( size_t alignment ) {
    8475        printf( "memalign\n" );
    8576    return (T *)memalign( alignment, sizeof(T) );
    8677} // memalign
    8778
    88 forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {
     79forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
    8980        printf( "posix_memalign\n" );
    9081    return posix_memalign( (void **)ptr, alignment, sizeof(T) );
    9182} // posix_memalign
     83
     84forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
     85        printf( "memset1\n" );
     86    return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
     87} // memset
     88forall( otype T ) T * memset( T * ptr ) {                               // remove when default value available
     89        printf( "memset2\n" );
     90    return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
     91} // memset
    9292
    9393//---------------------------------------
     
    123123        return ulli;
    124124}
     125
    125126float ato( const char * ptr ) {
    126127        float f;
     
    138139        return ld;
    139140}
     141
    140142float _Complex ato( const char * ptr ) {
    141143        float re, im;
     
    172174        return strtoull( sptr, eptr, base );
    173175}
     176
    174177float strto( const char * sptr, char ** eptr ) {
    175178        return strtof( sptr, eptr );
     
    181184        return strtold( sptr, eptr );
    182185}
     186
    183187float _Complex strto( const char * sptr, char ** eptr ) {
    184188        float re, im;
     
    208212//---------------------------------------
    209213
    210 forall( type T | { int ?<?( T, T ); } )
     214forall( otype T | { int ?<?( T, T ); } )
    211215T * bsearch( const T key, const T * arr, size_t dimension ) {
    212216        int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
     
    214218} // bsearch
    215219
    216 forall( type T | { int ?<?( T, T ); } )
     220forall( otype T | { int ?<?( T, T ); } )
    217221void qsort( const T * arr, size_t dimension ) {
    218222        int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
     
    222226//---------------------------------------
    223227
    224 forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
     228forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    225229[ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
    226230
     
    239243//---------------------------------------
    240244
    241 void randseed( long int s ) { srand48( s ); }
    242 char random() { return lrand48(); }
    243 int random() { return mrand48(); }
    244 unsigned int random() { return lrand48(); }
    245 long int random() { return mrand48(); }
    246 unsigned long int random() { return lrand48(); }
    247 float random() { return (float)drand48(); }                             // otherwise float uses lrand48
    248 double random() { return drand48(); }
    249 float _Complex random() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
    250 double _Complex random() { return drand48() + (double _Complex)(drand48() * _Complex_I); }
    251 long double _Complex random() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
    252 
    253 //---------------------------------------
    254 
    255 forall( type T | { int ?<?( T, T ); } )
     245void rand48seed( long int s ) { srand48( s ); }
     246char rand48() { return mrand48(); }
     247int rand48() { return mrand48(); }
     248unsigned int rand48() { return lrand48(); }
     249long int rand48() { return mrand48(); }
     250unsigned long int rand48() { return lrand48(); }
     251float rand48() { return (float)drand48(); }                             // otherwise float uses lrand48
     252double rand48() { return drand48(); }
     253float _Complex rand48() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
     254double _Complex rand48() { return drand48() + (double _Complex)(drand48() * _Complex_I); }
     255long double _Complex rand48() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
     256
     257//---------------------------------------
     258
     259forall( otype T | { int ?<?( T, T ); } )
    256260T min( const T t1, const T t2 ) {
    257261        return t1 < t2 ? t1 : t2;
    258262} // min
    259263
    260 forall( type T | { int ?>?( T, T ); } )
     264forall( otype T | { int ?>?( T, T ); } )
    261265T max( const T t1, const T t2 ) {
    262266        return t1 > t2 ? t1 : t2;
    263267} // max
    264268
    265 forall( type T )
     269forall( otype T )
    266270void swap( T * t1, T * t2 ) {
    267271        T temp = *t1;
Note: See TracChangeset for help on using the changeset viewer.