Changes in / [1048b31:1f6e009]


Ignore:
Files:
5 added
16 deleted
49 edited

Legend:

Unmodified
Added
Removed
  • doc/refrat/Makefile

    r1048b31 r1f6e009  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .:../bibliography/:../LaTeXmacros/:
     3Macros =
     4TeXLIB = .:${Macros}:
    45LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    5 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
     6BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
    67
    78## Define the text source files.
     
    4344        dvips $< -o $@
    4445
    45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
    46                 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
     46${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
    4747        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4848        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5454        -${BibTeX} ${basename $@}
    5555        # Make index from *.aux entries and input index at end of document
    56         makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
     56        makeindex -s indexstyle ${basename $@}.idx
    5757        ${LaTeX} ${basename $@}.tex
    5858        # Run again to get index title into table of contents
  • doc/refrat/refrat.tex

    r1048b31 r1f6e009  
    1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 %%
    3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    4 %%
    5 %% The contents of this file are covered under the licence agreement in the
    6 %% file "LICENCE" distributed with Cforall.
    7 %%
    8 %% refrat.tex --
    9 %%
    10 %% Author           : Peter A. Buhr
    11 %% Created On       : Wed Apr  6 14:52:25 2016
    12 %% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sat Apr 30 13:45:40 2016
    14 %% Update Count     : 29
    15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    16 
    171% requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
    18 
    19 % red highlighting ®...® (registered trademark sumbol)
    20 % blue highlighting ©...© (copyright symbol)
    21 % latex escape §...§ (section symbol)
    22 % keyword escape ¶...¶ (pilcrow symbol)
    23 % math escape $...$ (dollar symbol)
    242
    253\documentclass[openright,twoside]{report}
     
    275
    286% Latex packages used in the document.
     7
    298\usepackage{fullpage,times}
    309\usepackage{xspace}
     
    3211\usepackage{listings}
    3312\usepackage{comment}
    34 \usepackage{latexsym}                                   % \Box
    35 \usepackage{mathptmx}                                   % better math font with "times"
     13\usepackage{latexsym}                                   % \Box
     14\usepackage{mathptmx}                                   % better math font with "times"
    3615\usepackage[pagewise]{lineno}
    3716\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     
    4221%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    4322
     23% Names used in the document.
     24
     25\newcommand{\CFA}{C$\forall$\xspace}    % set language symbolic name
     26\newcommand{\CFL}{Cforall\xspace}               % set language text name
     27\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
     28\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     29
     30%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     31
    4432% Bespoke macros used in the document.
    45 \input{common}
    46 
    47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    48 
    49 \setcounter{secnumdepth}{3}                             % number subsubsections
    50 \setcounter{tocdepth}{3}                                % subsubsections in table of contents
     33
     34\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
     81% index macros
     82\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
     83\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
     84\newcommand{\see}[1]{\emph{see} #1}
     85
     86% Define some commands that produce formatted index entries suitable for cross-references.
     87% ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
     88% implementations, and ``\use'' for their uses.
     89
     90%  \newcommand{\bold}[1]{{\bf #1}}
     91%  \def\spec{\@bsphack\begingroup
     92%             \def\protect##1{\string##1\space}\@sanitize
     93%             \@wrxref{|bold}}
     94\def\impl{\@bsphack\begingroup
     95          \def\protect##1{\string##1\space}\@sanitize
     96          \@wrxref{|definition}}
     97\newcommand{\indexcode}[1]{{\lstinline$#1$}}
     98\def\use{\@bsphack\begingroup
     99         \def\protect##1{\string##1\space}\@sanitize
     100         \@wrxref{|hyperpage}}
     101\def\@wrxref#1#2{\let\thepage\relax
     102    \xdef\@gtempa{\write\@indexfile{\string
     103    \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
     104    \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
     105%\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
     106%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
     107
     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}
     111\newcommand{\Index}{\@ifstar\@sIndex\@Index}
     112\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
     113\newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
     114\makeatother
     115
     116% blocks and titles
     117\newenvironment{rationale}{%
     118  \begin{quotation}\noindent$\Box$\enspace
     119}{%
     120  \hfill\enspace$\Box$\end{quotation}
     121}%
     122\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
     123\newcommand{\rewrite}{\(\Rightarrow\)}
     124\newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
     125\newcommand{\examples}{\paragraph{Examples}~\par\noindent}
     126\newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
     127\newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
     128\newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
     129
     130% BNF macros
     131\def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
     132\let\endsyntax=\endtrivlist
     133\newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
     134\newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
     135\newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
     136\newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
     137\newcommand{\opt}{$_{opt}$\ }
     138
     139% adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
     140% \VRef{label} => Section 2.7, \VPageref{label} => page 17
     141% \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
     142\renewcommand{\reftextfaceafter}{\unskip}
     143\renewcommand{\reftextfacebefore}{\unskip}
     144\renewcommand{\reftextafter}{\unskip}
     145\renewcommand{\reftextbefore}{\unskip}
     146\renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
     147\renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
     148\newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
     149\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
     150
     151% CFA based on ANSI C
     152\lstdefinelanguage{CFA}[ANSI]{C}%
     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,},
     156}%
     157
     158\lstset{
     159language=CFA,
     160columns=flexible,
     161basicstyle=\sf\relsize{-1},
     162tabsize=4,
     163xleftmargin=\parindent,
     164escapechar=@,
     165keepspaces=true,
     166showstringspaces=false,
     167showlines=true,
     168}%
     169
     170\makeatletter
     171% replace/adjust listings characters that look bad in sanserif
     172\lst@CCPutMacro
     173\lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus
     174\lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
     175\lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
     176\lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
     177\lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
     178\lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
     179%\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
     180\@empty\z@\@empty
     181\makeatother
     182
     183\setcounter{secnumdepth}{3}     % number subsubsections
     184\setcounter{tocdepth}{3}                % subsubsections in table of contents
    51185\makeindex
    52186
     
    55189\begin{document}
    56190\pagestyle{headings}
    57 \linenumbers                                            % comment out to turn off line numbering
     191\linenumbers                                    % comment out to turn off line numbering
    58192
    59193\title{\Huge
    60 \vspace*{1in}
    61194\CFA (\CFL) Reference Manual and Rationale
    62195}% title
     
    93226
    94227This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
    95 It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}.
     228It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}.
    96229
    97230The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
     
    131264\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
    132265\Index{name space}, instead of hiding them.
    133 The 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
    134 \lstinline@typedef@\use{typedef} declaration and the other is not.  The outer declaration becomes
     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
     267\lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
    135268\Index{visible} when the scope of the inner declaration terminates.
    136269\begin{rationale}
    137 Hence, a \CFA program can declare an \lstinline@int v@ and a \lstinline@float v@ in the same scope;
     270Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;
    138271a {\CC} program can not.
    139272\end{rationale}
     
    149282Identifiers with \Index{no linkage} always denote unique entities.
    150283\begin{rationale}
    151 A \CFA program can declare an \lstinline@extern int v@ and an \lstinline@extern float v@;
     284A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$;
    152285a C program cannot.
    153286\end{rationale}
     
    172305\end{lstlisting}
    173306
    174 The 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@.
     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$.
    175308The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution.
    176309
     
    233366In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s.
    234367
    235 Let \lstinline@int$_r$@ and \lstinline@unsigned$_r$@ be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.
    236 Let \lstinline@unsigned$_{mr}$@ be the unsigned integer type with maximal rank.
     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.
    237370
    238371The following conversions are \emph{direct} safe arithmetic conversions.
     
    241374The \Index{integer promotion}s.
    242375\item
    243 For every rank $r$ greater than or equal to the rank of \lstinline@int@, conversion from \lstinline@int$_r$@ to \lstinline@unsigned$_r$@.
    244 \item
    245 For every rank $r$ greater than or equal to the rank of \lstinline@int@, where \lstinline@int$_{r+1}$@ exists and can represent all values of \lstinline@unsigned$_r$@, conversion from \lstinline@unsigned$_r$@ to \lstinline@int$_{r+1}$@.
    246 \item
    247 Conversion from \lstinline@unsigned$_{mr}$@ to \lstinline@float@.
     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}\).
     379\item
     380Conversion from \(unsigned_{mr}\) to \lstinline$float$.
    248381\item
    249382Conversion from an enumerated type to its compatible integer type.
    250383\item
    251 Conversion from \lstinline@float@ to \lstinline@double@, and from \lstinline@double@ to \lstinline@long double@.
    252 \item
    253 Conversion from \lstinline@float _Complex@ to \lstinline@double _Complex@, and from \lstinline@double _Complex@ to \lstinline@long double _Complex@.
     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$.
    254387\begin{sloppypar}
    255388\item
    256 Conversion from \lstinline@float _Imaginary@ to \lstinline@double _Imaginary@, and from \lstinline@double _Imaginary@ to \lstinline@long double _Imaginary@, if the 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.
    257390\end{sloppypar}
    258391\end{itemize}
    259392
    260 If 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.
     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.
    261394
    262395\begin{rationale}
     
    281414        int x, y;
    282415};
    283 void move_by( struct point * p1, struct point * p2 ) {§\impl{move_by}§
     416void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@
    284417        p1->x += p2.x;
    285418        p1->y += p2.y;
     
    291424move_to( &cp1, &cp2 );
    292425\end{lstlisting}
    293 Thanks to implicit conversion, the two arguments that \lstinline@move_by()@ receives are pointers to
    294 \lstinline@cp1@'s second member and \lstinline@cp2@'s second member.
     426Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
     427\lstinline$cp1$'s second member and \lstinline$cp2$'s second member.
    295428
    296429
     
    334467a direct safe arithmetic conversion;
    335468\item
    336 from any object type or incomplete type to \lstinline@void@;
    337 \item
    338 from a pointer to any non-\lstinline@void@ type to a pointer to \lstinline@void@;
     469from any object type or incomplete type to \lstinline$void$;
     470\item
     471from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
    339472\item
    340473from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type};
     
    347480Conversions that are not safe conversions are \define{unsafe conversion}s.
    348481\begin{rationale}
    349 As in C, there is an implicit conversion from \lstinline@void *@ to any pointer type.
     482As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type.
    350483This is clearly dangerous, and {\CC} does not have this implicit conversion.
    351484\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.
     
    373506\begin{itemize}
    374507\item
    375 The cost of an implicit conversion from \lstinline@int@ to \lstinline@long@ is 1.
    376 The 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@.
    377 
    378 \item
    379 If \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:
    380 \lstinline@unsigned short@ to \lstinline@int@ to \lstinline@unsigned@.
    381 Otherwise, \lstinline@unsigned short@ is converted directly to \lstinline@unsigned@, and the cost is 1.
    382 
    383 \item
    384 If \lstinline@long@ can represent all the values of \lstinline@unsigned@, then the conversion cost of \lstinline@unsigned@ to \lstinline@long@ is 1.
     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.
    385518Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined.
    386519\end{itemize}
     
    390523\begin{syntax}
    391524\oldlhs{keyword}
    392         \rhs \lstinline@forall@
    393         \rhs \lstinline@lvalue@
    394         \rhs \lstinline@trait@
    395         \rhs \lstinline@dtype@
    396         \rhs \lstinline@ftype@
    397         \rhs \lstinline@otype@
     525        \rhs \lstinline$forall$
     526        \rhs \lstinline$lvalue$
     527        \rhs \lstinline$trait$
     528        \rhs \lstinline$dtype$
     529        \rhs \lstinline$ftype$
     530        \rhs \lstinline$type$
    398531\end{syntax}
    399532
     
    402535
    403536\CFA allows operator \Index{overloading} by associating operators with special function identifiers.
    404 Furthermore, 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.
     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.
    405538Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types.
    406539
     
    411544\begin{syntax}
    412545\oldlhs{identifier}
    413 \rhs \lstinline@0@
    414 \rhs \lstinline@1@
     546\rhs \lstinline$0$
     547\rhs \lstinline$1$
    415548\end{syntax}
    416549
    417 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline@0@''\impl{0} and ``\lstinline@1@''\impl{1} are identifiers.
     550\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers.
    418551No other tokens defined by the rules for integer constants are considered to be identifiers.
    419552\begin{rationale}
    420 Why ``\lstinline@0@'' and ``\lstinline@1@''? Those integers have special status in C.
     553Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C.
    421554All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1.
    422 The operations ``\lstinline@&&@'', ``\lstinline@||@'', and ``\lstinline@!@'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
     555The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
    423556A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
    424557
    425558In 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.
    426559However, 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.
    427 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline@_Bool@.
    428 
    429 Why \emph{just} ``\lstinline@0@'' and ``\lstinline@1@''? Why not other integers? No other integers have special status in C.
    430 A facility that let programmers declare specific constants---``\lstinline@const Rational 12@'', for instance---would not be much of an improvement.
     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.
    431564Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
    432565The complexity of such a feature doesn't seem worth the gain.
     
    444577\begin{tabular}[t]{ll}
    445578%identifier & operation \\ \hline
    446 \lstinline@?[?]@ & subscripting \impl{?[?]}\\
    447 \lstinline@?()@ & function call \impl{?()}\\
    448 \lstinline@?++@ & postfix increment \impl{?++}\\
    449 \lstinline@?--@ & postfix decrement \impl{?--}\\
    450 \lstinline@++?@ & prefix increment \impl{++?}\\
    451 \lstinline@--?@ & prefix decrement \impl{--?}\\
    452 \lstinline@*?@ & dereference \impl{*?}\\
    453 \lstinline@+?@ & unary plus \impl{+?}\\
    454 \lstinline@-?@ & arithmetic negation \impl{-?}\\
    455 \lstinline@~?@ & bitwise negation \impl{~?}\\
    456 \lstinline@!?@ & logical complement \impl{"!?}\\
    457 \lstinline@?*?@ & multiplication \impl{?*?}\\
    458 \lstinline@?/?@ & division \impl{?/?}\\
     579\lstinline$?[?]$ & subscripting \impl{?[?]}\\
     580\lstinline$?()$ & function call \impl{?()}\\
     581\lstinline$?++$ & postfix increment \impl{?++}\\
     582\lstinline$?--$ & postfix decrement \impl{?--}\\
     583\lstinline$++?$ & prefix increment \impl{++?}\\
     584\lstinline$--?$ & prefix decrement \impl{--?}\\
     585\lstinline$*?$ & dereference \impl{*?}\\
     586\lstinline$+?$ & unary plus \impl{+?}\\
     587\lstinline$-?$ & arithmetic negation \impl{-?}\\
     588\lstinline$~?$ & bitwise negation \impl{~?}\\
     589\lstinline$!?$ & logical complement \impl{"!?}\\
     590\lstinline$?*?$ & multiplication \impl{?*?}\\
     591\lstinline$?/?$ & division \impl{?/?}\\
    459592\end{tabular}\hfil
    460593\begin{tabular}[t]{ll}
    461594%identifier & operation \\ \hline
    462 \lstinline@?%?@ & remainder \impl{?%?}\\
    463 \lstinline@?+?@ & addition \impl{?+?}\\
    464 \lstinline@?-?@ & subtraction \impl{?-?}\\
    465 \lstinline@?<<?@ & left shift \impl{?<<?}\\
    466 \lstinline@?>>?@ & right shift \impl{?>>?}\\
    467 \lstinline@?<?@ & less than \impl{?<?}\\
    468 \lstinline@?<=?@ & less than or equal \impl{?<=?}\\
    469 \lstinline@?>=?@ & greater than or equal \impl{?>=?}\\
    470 \lstinline@?>?@ & greater than \impl{?>?}\\
    471 \lstinline@?==?@ & equality \impl{?==?}\\
    472 \lstinline@?!=?@ & inequality \impl{?"!=?}\\
    473 \lstinline@?&?@ & bitwise AND \impl{?&?}\\
     595\lstinline$?%?$ & remainder \impl{?%?}\\
     596\lstinline$?+?$ & addition \impl{?+?}\\
     597\lstinline$?-?$ & subtraction \impl{?-?}\\
     598\lstinline$?<<?$ & left shift \impl{?<<?}\\
     599\lstinline$?>>?$ & right shift \impl{?>>?}\\
     600\lstinline$?<?$ & less than \impl{?<?}\\
     601\lstinline$?<=?$ & less than or equal \impl{?<=?}\\
     602\lstinline$?>=?$ & greater than or equal \impl{?>=?}\\
     603\lstinline$?>?$ & greater than \impl{?>?}\\
     604\lstinline$?==?$ & equality \impl{?==?}\\
     605\lstinline$?!=?$ & inequality \impl{?"!=?}\\
     606\lstinline$?&?$ & bitwise AND \impl{?&?}\\
    474607\end{tabular}\hfil
    475608\begin{tabular}[t]{ll}
    476609%identifier & operation \\ \hline
    477 \lstinline@?^?@ & exclusive OR \impl{?^?}\\
    478 \lstinline@?|?@ & inclusive OR \impl{?"|?}\\
    479 \lstinline@?=?@ & simple assignment \impl{?=?}\\
    480 \lstinline@?*=?@ & multiplication assignment \impl{?*=?}\\
    481 \lstinline@?/=?@ & division assignment \impl{?/=?}\\
    482 \lstinline@?%=?@ & remainder assignment \impl{?%=?}\\
    483 \lstinline@?+=?@ & addition assignment \impl{?+=?}\\
    484 \lstinline@?-=?@ & subtraction assignment \impl{?-=?}\\
    485 \lstinline@?<<=?@ & left-shift assignment \impl{?<<=?}\\
    486 \lstinline@?>>=?@ & right-shift assignment \impl{?>>=?}\\
    487 \lstinline@?&=?@ & bitwise AND assignment \impl{?&=?}\\
    488 \lstinline@?^=?@ & exclusive OR assignment \impl{?^=?}\\
    489 \lstinline@?|=?@ & inclusive OR assignment \impl{?"|=?}\\
     610\lstinline$?^?$ & exclusive OR \impl{?^?}\\
     611\lstinline$?|?$ & inclusive OR \impl{?"|?}\\
     612\lstinline$?=?$ & simple assignment \impl{?=?}\\
     613\lstinline$?*=?$ & multiplication assignment \impl{?*=?}\\
     614\lstinline$?/=?$ & division assignment \impl{?/=?}\\
     615\lstinline$?%=?$ & remainder assignment \impl{?%=?}\\
     616\lstinline$?+=?$ & addition assignment \impl{?+=?}\\
     617\lstinline$?-=?$ & subtraction assignment \impl{?-=?}\\
     618\lstinline$?<<=?$ & left-shift assignment \impl{?<<=?}\\
     619\lstinline$?>>=?$ & right-shift assignment \impl{?>>=?}\\
     620\lstinline$?&=?$ & bitwise AND assignment \impl{?&=?}\\
     621\lstinline$?^=?$ & exclusive OR assignment \impl{?^=?}\\
     622\lstinline$?|=?$ & inclusive OR assignment \impl{?"|=?}\\
    490623\end{tabular}
    491624\hfil
     
    502635
    503636\begin{rationale}
    504 The 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
    505 \CFA compiler detects a syntax error because it treats ``\lstinline@?--@'' as an identifier, not as the two tokens ``\lstinline@?@'' and ``\lstinline@--@''.
     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$--$''.
    506639\end{rationale}
    507640
     
    510643\begin{itemize}
    511644\item
    512 The logical operators ``\lstinline@&&@'' and ``\lstinline@||@'', and the conditional operator
    513 ``\lstinline@?:@''.
     645The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
     646``\lstinline$?:$''.
    514647These 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.
    515 Note 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.
     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.
    516649
    517650\item
     
    522655\item
    523656The ``address of'' operator.
    524 It would seem useful to define a unary ``\lstinline@&@'' operator that returns values of some programmer-defined pointer-like type.
     657It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type.
    525658The problem lies with the type of the operator.
    526 Consider the expression ``\lstinline@p = &x@'', where \lstinline@x@ is of type
    527 \lstinline@T@ and \lstinline@p@ has the programmer-defined type \lstinline@T_ptr@.
    528 The expression might be treated as a call to the unary function ``\lstinline@&?@''.
    529 Now 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.
    530 Hence the parameter must have type \lstinline@T *@.
    531 But then the expression must be rewritten as ``\lstinline@p = &?( &x )@''
     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 )$''
    532665---which doesn't seem like progress!
    533666
    534667The 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''.
    535 It seems simpler to define a conversion function from \lstinline@T *@ to \lstinline@T_ptr@.
    536 
    537 \item
    538 The \lstinline@sizeof@ operator.
     668It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
     669
     670\item
     671The \lstinline$sizeof$ operator.
    539672It is already defined for every object type, and intimately tied into the language's storage allocation model.
    540673Redefining it seems pointless.
    541674
    542675\item
    543 The ``member of'' operators ``\lstinline@.@'' and ``\lstinline@->@''.
     676The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''.
    544677These are not really infix operators, since their right ``operand'' is not a value or object.
    545678
     
    578711The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible.
    579712The ``lowest total expression cost'' rule chooses the proper common type.
    580 The 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@.
     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$.
    581714
    582715The ``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.
    583716It also gives preference to monomorphic values (such as the
    584 \lstinline@int@ \lstinline@0@) over polymorphic values (such as the \Index{null pointer}
    585 \lstinline@0@\use{0}).
     717\lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
     718\lstinline$0$\use{0}).
    586719However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing.
    587720
    588721There are two notable differences between \CFA's overload resolution rules and the rules for
    589 {\CC} defined in \cite{C++}.
     722{\CC} defined in \cite{c++}.
    590723First, the result type of a function plays a role.
    591724In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
     
    603736\begin{rationale}
    604737Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments.
    605 For instance, ``\lstinline@an_int + an_int@'' is equivalent to ``\lstinline@?+?(an_int, an_int)@''.
     738For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''.
    606739If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly.
    607740If predefined functions had external linkage, this optimization would be difficult.
     
    629762\rhs \nonterm{constant}
    630763\rhs \nonterm{string-literal}
    631 \rhs \lstinline@(@ \nonterm{expression} \lstinline@)@
     764\rhs \lstinline$($ \nonterm{expression} \lstinline$)$
    632765\rhs \nonterm{generic-selection}
    633766\end{syntax}
     
    635768\predefined
    636769\begin{lstlisting}
    637 const int 1;§\use{1}§
    638 const int 0;§\use{0}§
     770const int 1;@\use{1}@
     771const int 0;@\use{0}@
    639772forall( dtype DT ) DT * const 0;
    640773forall( ftype FT ) FT * const 0;
     
    645778
    646779A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.
    647 The predefined integer identifiers ``\lstinline@1@'' and ``\lstinline@0@'' have the integer values 1 and 0, respectively.
    648 The 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.
     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.
    649782
    650783A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
    651784
    652785\examples
    653 The 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 *@.
     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 *$.
    654787In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
    655 \lstinline@0@ to a pointer.
     788\lstinline$0$ to a pointer.
    656789
    657790\begin{rationale}
     
    659792
    660793\CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens.
    661 The C token ``\lstinline@0@'' is an expression of type \lstinline@int@ with the value ``zero'', and it \emph{also} is a null pointer constant.
     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.
    662795Similarly,
    663 ``\lstinline@(void *)0@ is an expression of type \lstinline@(void *)@ whose value is a null pointer, and it also is a null pointer constant.
    664 However, in C, ``\lstinline@(void *)(void *)0@'' is
     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
    665798\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.
    666799
     
    669802\begin{lstlisting}
    670803forall( dtype DT ) DT * const 0;
    671 \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.
     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.
    672805The only such value is the null pointer.
    673806Therefore the type \emph{alone} is enough to identify a null pointer.
     
    679812
    680813\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.
    681 If 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.
     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.
    682815
    683816\semantics
     
    690823\lhs{postfix-expression}
    691824\rhs \nonterm{primary-expression}
    692 \rhs \nonterm{postfix-expression} \lstinline@[@ \nonterm{expression} \lstinline@]@
    693 \rhs \nonterm{postfix-expression} \lstinline@(@
    694          \nonterm{argument-expression-list}\opt \lstinline@)@
    695 \rhs \nonterm{postfix-expression} \lstinline@.@ \nonterm{identifier}
    696 \rhs \nonterm{postfix-expression} \lstinline@->@ \nonterm{identifier}
    697 \rhs \nonterm{postfix-expression} \lstinline@++@
    698 \rhs \nonterm{postfix-expression} \lstinline@--@
    699 \rhs \lstinline@(@ \nonterm{type-name} \lstinline@)@ \lstinline@{@ \nonterm{initializer-list} \lstinline@}@
    700 \rhs \lstinline@(@ \nonterm{type-name} \lstinline@)@ \lstinline@{@ \nonterm{initializer-list} \lstinline@,@ \lstinline@}@
     825\rhs \nonterm{postfix-expression} \lstinline$[$ \nonterm{expression} \lstinline$]$
     826\rhs \nonterm{postfix-expression} \lstinline$($
     827         \nonterm{argument-expression-list}\opt \lstinline$)$
     828\rhs \nonterm{postfix-expression} \lstinline$.$ \nonterm{identifier}
     829\rhs \nonterm{postfix-expression} \lstinline$->$ \nonterm{identifier}
     830\rhs \nonterm{postfix-expression} \lstinline$++$
     831\rhs \nonterm{postfix-expression} \lstinline$--$
     832\rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$}$
     833\rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \lstinline${$ \nonterm{initializer-list} \lstinline$,$ \lstinline$}$
    701834\lhs{argument-expression-list}
    702835\rhs \nonterm{assignment-expression}
    703 \rhs \nonterm{argument-expression-list} \lstinline@,@
     836\rhs \nonterm{argument-expression-list} \lstinline$,$
    704837         \nonterm{assignment-expression}
    705838\end{syntax}
     
    707840\rewriterules
    708841\begin{lstlisting}
    709 a[b] §\rewrite§ ?[?]( b, a ) // if a has integer type§\use{?[?]}§
    710 a[b] §\rewrite§ ?[?]( a, b ) // otherwise
    711 a( §\emph{arguments}§ ) §\rewrite§ ?()( a, §\emph{arguments}§ )§\use{?()}§
    712 a++ §\rewrite§ ?++(&( a ))§\use{?++}§
    713 a-- §\rewrite§ ?--(&( a ))§\use{?--}§
     842a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@
     843a[b] @\rewrite@ ?[?]( a, b ) // otherwise
     844a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@
     845a++ @\rewrite@ ?++(&( a ))@\use{?++}@
     846a-- @\rewrite@ ?--(&( a ))@\use{?--}@
    714847\end{lstlisting}
    715848
     
    719852\predefined
    720853\begin{lstlisting}
    721 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );§\use{ptrdiff_t}§
     854forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
    722855forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
    723856forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t );
     
    739872The interpretations of subscript expressions are the interpretations of the corresponding function call expressions.
    740873\begin{rationale}
    741 C defines subscripting as pointer arithmetic in a way that makes \lstinline@a[i]@ and
    742 \lstinline@i[a]@ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline@?[?]@.
     874C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
     875\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$.
    743876
    744877Subscript expressions are rewritten as function calls that pass the first parameter by value.
    745878This is somewhat unfortunate, since array-like types tend to be large.
    746 The alternative is to use the rewrite rule ``\lstinline@a[b]@ \rewrite \lstinline@?[?](&(a), b)@''.
    747 However, C semantics forbid this approach: the \lstinline@a@ in ``\lstinline@a[b]@'' can be an arbitrary pointer value, which does not have an address.
     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.
    748881
    749882The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
     
    760893\nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not.
    761894
    762 For 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@?()@''.
     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$?()$''.
    763896The valid interpretations of the rewritten expression are determined in the manner described below.
    764897
     
    768901\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
    769902\item if the function designator's type does not include a prototype or if the argument corresponds to
    770 ``\lstinline@...@'' in a prototype, a \Index{default argument promotion} is applied to it.
     903``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
    771904\end{itemize}
    772905The type of the valid interpretation is the return type of the function designator.
     
    776909\begin{itemize}
    777910\item
    778 If the declaration of the implicit parameter uses \Index{type-class} \lstinline@type@\use{type}, the implicit argument must be an object type;
    779 if it uses \lstinline@dtype@, the implicit argument must be an object type or an incomplete type;
    780 and if it uses \lstinline@ftype@, the implicit argument must be a function type.
     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.
    781914
    782915\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.
     
    797930\begin{rationale}
    798931One 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}.
    799 For 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@.
     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$.
    800933
    801934\CFA\index{deficiencies!generalizability} does not fully possess this property, because
     
    811944f = g( d, f );          // (3) (unsafe conversion to float)
    812945\end{lstlisting}
    813 If \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
    814 \lstinline@double@, and the result would be a \lstinline@double@.
    815 
    816 Another example is the function ``\lstinline@void h( int *);@''.
     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
     947\lstinline$double$, and the result would be a \lstinline$double$.
     948
     949Another example is the function ``\lstinline$void h( int *);$''.
    817950This function can be passed a
    818 \lstinline@void *@ argument, but the generalization ``\lstinline@forall( otype T ) void h( T *);@'' can not.
    819 In this case, \lstinline@void@ is not a valid value for \lstinline@T@ because it is not an object type.
    820 If unsafe conversions were allowed, \lstinline@T@ could be inferred to be \emph{any} object type, which is undesirable.
     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.
    821954\end{rationale}
    822955
    823956\examples
    824 A function called ``\lstinline@?()@'' might be part of a numerical differentiation package.
     957A function called ``\lstinline$?()$'' might be part of a numerical differentiation package.
    825958\begin{lstlisting}
    826959extern otype Derivative;
     
    833966d = sin_dx( 12.9 );
    834967\end{lstlisting}
    835 Here, the only interpretation of \lstinline@sin_dx@ is as an object of type \lstinline@Derivative@.
    836 For that interpretation, the function call is treated as ``\lstinline@?()( sin_dx, 12.9 )@''.
     968Here, the only interpretation of \lstinline$sin_dx$ is as an object of type \lstinline$Derivative$.
     969For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
    837970\begin{lstlisting}
    838971int f( long );          // (1)
     
    841974int i = f( 5 );         // calls (1)
    842975\end{lstlisting}
    843 Function (1) provides a valid interpretation of ``\lstinline@f( 5 )@'', using an implicit \lstinline@int@ to \lstinline@long@ conversion.
    844 The 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.
     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.
    845978
    846979\begin{lstlisting}
     
    848981double d = h( 1.5 );
    849982\end{lstlisting}
    850 ``\lstinline@1.5@'' is a \lstinline@double@ constant, so \lstinline@T@ is inferred to be
    851 \lstinline@double@, and the result of the function call is a \lstinline@double@.
     983``\lstinline$1.5$'' is a \lstinline$double$ constant, so \lstinline$T$ is inferred to be
     984\lstinline$double$, and the result of the function call is a \lstinline$double$.
    852985
    853986\begin{lstlisting}
     
    864997g( i, p );                      // calls (4)
    865998\end{lstlisting}
    866 The 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).
     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).
    8671000
    8681001For the second call, (7) is again discarded.
    869 Of the remaining interpretations for (4), (5), and (6) (with \lstinline@i@ converted to \lstinline@long@), (6) is chosen because it is the least polymorphic.
     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.
    8701003
    8711004The third call has valid interpretations for all of the functions;
     
    8761009forall( otype T ) T min( T, T );
    8771010double max( double, double );
    878 trait min_max( T ) {§\impl{min_max}§
     1011trait min_max( T ) {@\impl{min_max}@
    8791012        T min( T, T );
    8801013        T max( T, T );
     
    8831016shuffle( 9, 10 );
    8841017\end{lstlisting}
    885 The 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
    886 \lstinline@min@ must be specialized with \lstinline@T@ bound to \lstinline@double@.
     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
     1019\lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
    8871020\begin{lstlisting}
    8881021extern void q( int );           // (8)
     
    8921025r( 0 );
    8931026\end{lstlisting}
    894 The \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).
    895 The former is chosen because the \lstinline@int@ \lstinline@0@ is \Index{less polymorphic}.
    896 For the same reason, \lstinline@int@ \lstinline@0@ is passed to \lstinline@r()@, even though it has \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.
    8971030
    8981031
    8991032\subsubsection{Structure and union members}
    9001033
    901 \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@.
    902 If two or more interpretations of \lstinline@s@ have members named
    903 \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.
    904 If an interpretation of \lstinline@s@ has a member \lstinline@m@ whose type is not compatible with any other
    905 \lstinline@s@'s \lstinline@m@, then the expression has an interpretation with the member's type.
     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.
    9061039The expression has no other interpretations.
    9071040
    908 The expression ``\lstinline@p->m@'' has the same interpretations as the expression ``\lstinline@(*p).m@''.
     1041The expression ``\lstinline$p->m$'' has the same interpretations as the expression
     1042``\lstinline$(*p).m$''.
    9091043
    9101044
     
    10011135        * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    10021136\end{lstlisting}
    1003 For every extended integer type \lstinline@X@ there exist
     1137For every extended integer type \lstinline$X$ there exist
    10041138% Don't use predefined: keep this out of prelude.cf.
    10051139\begin{lstlisting}
     
    10071141  ?--( volatile X * ), ?--( _Atomic volatile X * );
    10081142\end{lstlisting}
    1009 For every complete enumerated type \lstinline@E@ there exist
     1143For every complete enumerated type \lstinline$E$ there exist
    10101144% Don't use predefined: keep this out of prelude.cf.
    10111145\begin{lstlisting}
     
    10151149
    10161150\begin{rationale}
    1017 Note 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.
     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.
    10181152This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
    10191153\end{rationale}
     
    10211155\begin{rationale}
    10221156In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types.
    1023 Hence, \lstinline@void *@ objects cannot be incremented.
    1024 In \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@.
     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$.
    10251159\end{rationale}
    10261160
    10271161\semantics
    10281162First, each interpretation of the operand of an increment or decrement expression is considered separately.
    1029 For each interpretation that is a bit-field or is declared with the \Indexc{register}\index{storage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is.
     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.
    10301165
    10311166For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call.
     
    10401175\end{lstlisting}
    10411176\begin{sloppypar}
    1042 Since \lstinline@&(vs)@ has type \lstinline@volatile short int *@, the best valid interpretation of
    1043 \lstinline@vs++@ calls the \lstinline@?++@ function with the \lstinline@volatile short *@ parameter.
    1044 \lstinline@s++@ does the same, applying the safe conversion from \lstinline@short int *@ to \lstinline@volatile short int *@.
    1045 Note 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.
     1177Since \lstinline$&(vs)$ has type \lstinline$volatile short int *$, the best valid interpretation of
     1178\lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
     1179\lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
     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.
    10461182\end{sloppypar}
    10471183
    1048 There 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.
    1049 
    1050 The 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.
     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.
    10511187\begin{lstlisting}
    10521188char * const restrict volatile * restrict volatile pqpc;
     
    10551191ppc++;
    10561192\end{lstlisting}
    1057 Since \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 *@.
    1058 
    1059 \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@.
     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$.
    10601196
    10611197\begin{rationale}
     
    10711207\begin{enumerate}
    10721208\item
    1073 ``\lstinline@char * p; p++;@''.
    1074 The argument to \lstinline@?++@ has type \lstinline@char * *@, and the result has type \lstinline@char *@.
    1075 The expression would be valid if \lstinline@?++@ were declared by
     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
    10761212\begin{lstlisting}
    10771213forall( otype T ) T * ?++( T * * );
    1078 \end{lstlisting} with \lstinline@T@ inferred to be \lstinline@char@.
    1079 
    1080 \item
    1081 ``\lstinline@char *restrict volatile qp; qp++@''.
    1082 The 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.
     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.
    10831219Hence the actual predefined function is
    10841220\begin{lstlisting}
    10851221forall( otype T ) T * ?++( T * restrict volatile * );
    1086 \end{lstlisting} which also accepts a \lstinline@char * *@ argument, because of the safe conversions that add
    1087 \lstinline@volatile@ and \lstinline@restrict@ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
    1088 
    1089 \item
    1090 ``\lstinline@char *_Atomic ap; ap++@''.
    1091 The result again has type \lstinline@char *@, but no safe conversion adds an \lstinline@_Atomic@ qualifier, so the function in point 2 is not applicable.
    1092 A separate overloading of \lstinline@?++@ is required.
    1093 
    1094 \item
    1095 ``\lstinline@char const volatile * pq; pq++@''.
     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++$''.
    10961232Here the result has type
    1097 \lstinline@char const volatile *@, so a new overloading is needed:
     1233\lstinline$char const volatile *$, so a new overloading is needed:
    10981234\begin{lstlisting}
    10991235forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * );
     
    11021238 
    11031239\item
    1104 ``\lstinline@float *restrict * prp; prp++@''.
    1105 The \lstinline@restrict@ qualifier is handled just like \lstinline@const@ and \lstinline@volatile@ in the previous case:
     1240``\lstinline$float *restrict * prp; prp++$''.
     1241The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
    11061242\begin{lstlisting}
    11071243forall( otype T ) T restrict * ?++( T restrict *restrict volatile * );
    1108 \end{lstlisting} with \lstinline@T@ inferred to be \lstinline@float *@.
    1109 This 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.
     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.
    11101246\end{enumerate}
    11111247\end{rationale}
     
    11231259\lhs{unary-expression}
    11241260\rhs \nonterm{postfix-expression}
    1125 \rhs \lstinline@++@ \nonterm{unary-expression}
    1126 \rhs \lstinline@--@ \nonterm{unary-expression}
     1261\rhs \lstinline$++$ \nonterm{unary-expression}
     1262\rhs \lstinline$--$ \nonterm{unary-expression}
    11271263\rhs \nonterm{unary-operator} \nonterm{cast-expression}
    1128 \rhs \lstinline@sizeof@ \nonterm{unary-expression}
    1129 \rhs \lstinline@sizeof@ \lstinline@(@ \nonterm{type-name} \lstinline@)@
    1130 \lhs{unary-operator} one of \rhs \lstinline@&@ \lstinline@*@ \lstinline@+@ \lstinline@-@ \lstinline@~@ \lstinline@!@
     1264\rhs \lstinline$sizeof$ \nonterm{unary-expression}
     1265\rhs \lstinline$sizeof$ \lstinline$($ \nonterm{type-name} \lstinline$)$
     1266\lhs{unary-operator} one of \rhs \lstinline$&$ \lstinline$*$ \lstinline$+$ \lstinline$-$ \lstinline$~$ \lstinline$!$
    11311267\end{syntax}
    11321268
    11331269\rewriterules
    11341270\begin{lstlisting}
    1135 *a      §\rewrite§ *?( a ) §\use{*?}§
    1136 +a      §\rewrite§ +?( a ) §\use{+?}§
    1137 -a      §\rewrite§ -?( a ) §\use{-?}§
    1138 ~a      §\rewrite§ ~?( a ) §\use{~?}§
    1139 !a      §\rewrite§ !?( a ) §\use{"!?}§
    1140 ++a     §\rewrite§ ++?(&( a )) §\use{++?}§
    1141 --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{--?}@
    11421278\end{lstlisting}
    11431279
     
    12351371        * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    12361372\end{lstlisting}
    1237 For every extended integer type \lstinline@X@ there exist
     1373For every extended integer type \lstinline$X$ there exist
    12381374% Don't use predefined: keep this out of prelude.cf.
    12391375\begin{lstlisting}
     
    12431379        --?( _Atomic volatile X * );
    12441380\end{lstlisting}
    1245 For every complete enumerated type \lstinline@E@ there exist
     1381For every complete enumerated type \lstinline$E$ there exist
    12461382% Don't use predefined: keep this out of prelude.cf.
    12471383\begin{lstlisting}
     
    12801416
    12811417\constraints
    1282 The operand of the unary ``\lstinline@&@'' operator shall have exactly one
     1418The operand of the unary ``\lstinline$&$'' operator shall have exactly one
    12831419\Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous.
    12841420
    12851421\semantics
    1286 The ``\lstinline@&@'' expression has one interpretation which is of type \lstinline@T *@, where
    1287 \lstinline@T@ is the type of the operand.
     1422The ``\lstinline$&$'' expression has one interpretation which is of type \lstinline$T *$, where
     1423\lstinline$T$ is the type of the operand.
    12881424
    12891425The interpretations of an indirection expression are the interpretations of the corresponding function call.
     
    13141450forall( ftype FT ) int !?( FT * );
    13151451\end{lstlisting}
    1316 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the 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
    13171453% Don't use predefined: keep this out of prelude.cf.
    13181454\begin{lstlisting}
     
    13271463\begin{lstlisting}
    13281464long int li;
    1329 void eat_double( double );§\use{eat_double}§
    1330 eat_double(-li ); // §\rewrite§ eat_double( -?( li ) );
    1331 \end{lstlisting}
    1332 The valid interpretations of ``\lstinline@-li@'' (assuming no extended integer types exist) are
     1465void eat_double( double );@\use{eat_double}@
     1466eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
     1467\end{lstlisting}
     1468The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
    13331469\begin{center}
    13341470\begin{tabular}{llc} interpretation & result type & expression conversion cost \\
    13351471\hline
    1336 \lstinline@-?( (int)li )@                                       & \lstinline@int@                                       & (unsafe) \\
    1337 \lstinline@-?( (unsigned)li)@                           & \lstinline@unsigned int@                      & (unsafe) \\
    1338 \lstinline@-?( (long)li)@                                       & \lstinline@long@                                      & 0 \\
    1339 \lstinline@-?( (long unsigned int)li)@          & \lstinline@long unsigned int@         & 1 \\
    1340 \lstinline@-?( (long long int)li)@                      & \lstinline@long long int@                     & 2 \\
    1341 \lstinline@-?( (long long unsigned int)li)@     & \lstinline@long long unsigned int@& 3 \\
    1342 \lstinline@-?( (float)li)@                                      & \lstinline@float@                                     & 4 \\
    1343 \lstinline@-?( (double)li)@                                     & \lstinline@double@                            & 5 \\
    1344 \lstinline@-?( (long double)li)@                        & \lstinline@long double@                       & 6 \\
    1345 \lstinline@-?( (_Complex float)li)@                     & \lstinline@float@                                     & (unsafe) \\
    1346 \lstinline@-?( (_Complex double)li)@            & \lstinline@double@                            & (unsafe) \\
    1347 \lstinline@-?( (_Complex long double)li)@       & \lstinline@long double@                       & (unsafe) \\
     1472\lstinline$-?( (int)li )$                                       & \lstinline$int$                                       & (unsafe) \\
     1473\lstinline$-?( (unsigned)li)$                           & \lstinline$unsigned int$                      & (unsafe) \\
     1474\lstinline$-?( (long)li)$                                       & \lstinline$long$                                      & 0 \\
     1475\lstinline$-?( (long unsigned int)li)$          & \lstinline$long unsigned int$         & 1 \\
     1476\lstinline$-?( (long long int)li)$                      & \lstinline$long long int$                     & 2 \\
     1477\lstinline$-?( (long long unsigned int)li)$     & \lstinline$long long unsigned int$& 3 \\
     1478\lstinline$-?( (float)li)$                                      & \lstinline$float$                                     & 4 \\
     1479\lstinline$-?( (double)li)$                                     & \lstinline$double$                            & 5 \\
     1480\lstinline$-?( (long double)li)$                        & \lstinline$long double$                       & 6 \\
     1481\lstinline$-?( (_Complex float)li)$                     & \lstinline$float$                                     & (unsafe) \\
     1482\lstinline$-?( (_Complex double)li)$            & \lstinline$double$                            & (unsafe) \\
     1483\lstinline$-?( (_Complex long double)li)$       & \lstinline$long double$                       & (unsafe) \\
    13481484\end{tabular}
    13491485\end{center}
    1350 The valid interpretations of the \lstinline@eat_double@ call, with the cost of the argument 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
    13511487\begin{center}
    13521488\begin{tabular}{lcc} interpretation & argument cost & expression cost \\
    13531489\hline
    1354 \lstinline@eat_double( (double)-?( (int)li) )@                                  & 7                     & (unsafe) \\
    1355 \lstinline@eat_double( (double)-?( (unsigned)li) )@                             & 6                     & (unsafe) \\
    1356 \lstinline@eat_double( (double)-?(li) )@                                                & 5                     & \(0+5=5\) \\
    1357 \lstinline@eat_double( (double)-?( (long unsigned int)li) )@    & 4                     & \(1+4=5\) \\
    1358 \lstinline@eat_double( (double)-?( (long long int)li) )@                & 3                     & \(2+3=5\) \\
    1359 \lstinline@eat_double( (double)-?( (long long unsigned int)li) )@& 2            & \(3+2=5\) \\
    1360 \lstinline@eat_double( (double)-?( (float)li) )@                                & 1                     & \(4+1=5\) \\
    1361 \lstinline@eat_double( (double)-?( (double)li) )@                               & 0                     & \(5+0=5\) \\
    1362 \lstinline@eat_double( (double)-?( (long double)li) )@                  & (unsafe)      & (unsafe) \\
    1363 \lstinline@eat_double( (double)-?( (_Complex float)li) )@               & (unsafe)      & (unsafe) \\
    1364 \lstinline@eat_double( (double)-?( (_Complex double)li) )@              & (unsafe)      & (unsafe) \\
    1365 \lstinline@eat_double( (double)-?( (_Complex long double)li) )@ & (unsafe)      & (unsafe) \\
     1490\lstinline$eat_double( (double)-?( (int)li) )$                                  & 7                     & (unsafe) \\
     1491\lstinline$eat_double( (double)-?( (unsigned)li) )$                             & 6                     & (unsafe) \\
     1492\lstinline$eat_double( (double)-?(li) )$                                                & 5                     & \(0+5=5\) \\
     1493\lstinline$eat_double( (double)-?( (long unsigned int)li) )$    & 4                     & \(1+4=5\) \\
     1494\lstinline$eat_double( (double)-?( (long long int)li) )$                & 3                     & \(2+3=5\) \\
     1495\lstinline$eat_double( (double)-?( (long long unsigned int)li) )$& 2            & \(3+2=5\) \\
     1496\lstinline$eat_double( (double)-?( (float)li) )$                                & 1                     & \(4+1=5\) \\
     1497\lstinline$eat_double( (double)-?( (double)li) )$                               & 0                     & \(5+0=5\) \\
     1498\lstinline$eat_double( (double)-?( (long double)li) )$                  & (unsafe)      & (unsafe) \\
     1499\lstinline$eat_double( (double)-?( (_Complex float)li) )$               & (unsafe)      & (unsafe) \\
     1500\lstinline$eat_double( (double)-?( (_Complex double)li) )$              & (unsafe)      & (unsafe) \\
     1501\lstinline$eat_double( (double)-?( (_Complex long double)li) )$ & (unsafe)      & (unsafe) \\
    13661502\end{tabular}
    13671503\end{center}
    1368 Each has result type \lstinline@void@, so the best must be selected.
     1504Each has result type \lstinline$void$, so the best must be selected.
    13691505The interpretations involving unsafe conversions are discarded.
    13701506The remainder have equal expression conversion costs, so the
    13711507``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
    1372 \lstinline@eat_double( (double)-?(li) )@.
    1373 
    1374 
    1375 \subsubsection[The sizeof and \_Alignof operators]{The \lstinline@sizeof@ and \lstinline@_Alignof@ operators}
     1508\lstinline$eat_double( (double)-?(li) )$.
     1509
     1510
     1511\subsubsection{The \lstinline$sizeof$ and \lstinline$_Alignof$ operators}
    13761512
    13771513\constraints
    1378 The operand of \lstinline@sizeof@ or \lstinline@_Alignof@ shall not be \lstinline@type@, \lstinline@dtype@, or \lstinline@ftype@.
    1379 
    1380 When 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@.
    1381 
    1382 When \lstinline@sizeof@ is applied to an identifier declared by a \nonterm{type-declaration} or a
     1514The operand of \lstinline$sizeof$ or \lstinline$_Alignof$ shall not be \lstinline$type$,
     1515\lstinline$dtype$, or \lstinline$ftype$.
     1516
     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$.
     1518
     1519When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    13831520\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand.
    13841521When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
    13851522
    1386 When \lstinline@_Alignof@ is applied to an identifier declared by a \nonterm{type-declaration} or a
     1523When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    13871524\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand.
    13881525When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
     
    13911528otype Pair = struct { int first, second; };
    13921529size_t p_size = sizeof(Pair);           // constant expression
    1393 extern otype Rational;§\use{Rational}§
     1530extern otype Rational;@\use{Rational}@
    13941531size_t c_size = sizeof(Rational);       // non-constant expression
    13951532forall(type T) T f(T p1, T p2) {
     
    13981535}
    13991536\end{lstlisting}
    1400 ``\lstinline@sizeof Rational@'', although not statically known, is fixed.
    1401 Within \lstinline@f()@,
    1402 ``\lstinline@sizeof(T)@'' is fixed for each call of \lstinline@f()@, but may vary from call to call.
     1537``\lstinline$sizeof Rational$'', although not statically known, is fixed.
     1538Within \lstinline$f()$,
     1539``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
    14031540\end{rationale}
    14041541
     
    14091546\lhs{cast-expression}
    14101547\rhs \nonterm{unary-expression}
    1411 \rhs \lstinline@(@ \nonterm{type-name} \lstinline@)@ \nonterm{cast-expression}
     1548\rhs \lstinline$($ \nonterm{type-name} \lstinline$)$ \nonterm{cast-expression}
    14121549\end{syntax}
    14131550
    14141551\constraints
    1415 The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline@type@,
    1416 \lstinline@dtype@, or \lstinline@ftype@.
     1552The \nonterm{type-name} in a \nonterm{cast-expression} shall not be \lstinline$type$,
     1553\lstinline$dtype$, or \lstinline$ftype$.
    14171554
    14181555\semantics
    14191556
    1420 In a \Index{cast expression} ``\lstinline@(@\nonterm{type-name}\lstinline@)e@'', if
    1421 \nonterm{type-name} is the type of an interpretation of \lstinline@e@, then that interpretation is the only interpretation of the cast expression;
    1422 otherwise, \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.
     1557In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
     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.
    14231560The 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.
    14241561
     
    14331570\lhs{multiplicative-expression}
    14341571\rhs \nonterm{cast-expression}
    1435 \rhs \nonterm{multiplicative-expression} \lstinline@*@ \nonterm{cast-expression}
    1436 \rhs \nonterm{multiplicative-expression} \lstinline@/@ \nonterm{cast-expression}
    1437 \rhs \nonterm{multiplicative-expression} \lstinline@%@ \nonterm{cast-expression}
     1572\rhs \nonterm{multiplicative-expression} \lstinline$*$ \nonterm{cast-expression}
     1573\rhs \nonterm{multiplicative-expression} \lstinline$/$ \nonterm{cast-expression}
     1574\rhs \nonterm{multiplicative-expression} \lstinline$%$ \nonterm{cast-expression}
    14381575\end{syntax}
    14391576
    14401577\rewriterules
    14411578\begin{lstlisting}
    1442 a * b §\rewrite§ ?*?( a, b )§\use{?*?}§
    1443 a / b §\rewrite§ ?/?( a, b )§\use{?/?}§
    1444 a % b §\rewrite§ ?%?( a, b )§\use{?%?}§
     1579a * b @\rewrite@ ?*?( a, b )@\use{?*?}@
     1580a / b @\rewrite@ ?/?( a, b )@\use{?/?}@
     1581a % b @\rewrite@ ?%?( a, b )@\use{?%?}@
    14451582\end{lstlisting}
    14461583
     
    14691606        ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double );
    14701607\end{lstlisting}
    1471 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
     1608For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    14721609% Don't use predefined: keep this out of prelude.cf.
    14731610\begin{lstlisting}
     
    14871624int i;
    14881625long li;
    1489 void eat_double( double );§\use{eat_double}§
     1626void eat_double( double );@\use{eat_double}@
    14901627eat_double( li % i );
    14911628\end{lstlisting}
    1492 ``\lstinline@li % i@'' is rewritten as ``\lstinline@?%?(li, i )@''.
    1493 The 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
     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
    14941631\begin{center}
    14951632\begin{tabular}{lcc} interpretation & argument cost & result cost \\
    14961633\hline
    1497 \lstinline@ ?%?( (int)li, i )@                                                                          & (unsafe)      & 6     \\
    1498 \lstinline@ ?%?( (unsigned)li,(unsigned)i )@                                            & (unsafe)      & 5     \\
    1499 \lstinline@ ?%?( li, (long)i )@                                                                         & 1                     & 4     \\
    1500 \lstinline@ ?%?( (long unsigned)li,(long unsigned)i )@                          & 3                     & 3     \\
    1501 \lstinline@ ?%?( (long long)li,(long long)i )@                                          & 5                     & 2     \\
    1502 \lstinline@ ?%?( (long long unsigned)li, (long long unsigned)i )@       & 7                     & 1     \\
     1634\lstinline$ ?%?( (int)li, i )$                                                                          & (unsafe)      & 6     \\
     1635\lstinline$ ?%?( (unsigned)li,(unsigned)i )$                                            & (unsafe)      & 5     \\
     1636\lstinline$ ?%?( li, (long)i )$                                                                         & 1                     & 4     \\
     1637\lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$                          & 3                     & 3     \\
     1638\lstinline$ ?%?( (long long)li,(long long)i )$                                          & 5                     & 2     \\
     1639\lstinline$ ?%?( (long long unsigned)li, (long long unsigned)i )$       & 7                     & 1     \\
    15031640\end{tabular}
    15041641\end{center}
    1505 The best interpretation of \lstinline@eat_double( li, i )@ is
    1506 \lstinline@eat_double( (double)?%?(li, (long)i ))@, which has no unsafe conversions and the lowest total cost.
    1507 
    1508 \begin{rationale}
    1509 {\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
    1510 \lstinline@s@ is a \lstinline@short int@, ``\lstinline@s *s@'' does not have type \lstinline@short int@;
    1511 it is treated as ``\lstinline@( (int)s ) * ( (int)s )@'', and has type \lstinline@int@. \CFA matches that pattern;
    1512 it does not predefine ``\lstinline@short ?*?( short, short )@''.
     1642The best interpretation of \lstinline$eat_double( li, i )$ is
     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
     1647\lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
     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 )$''.
    15131650
    15141651These ``missing'' operators limit polymorphism.
     
    15191656square( s );
    15201657\end{lstlisting}
    1521 Since \CFA does not define a multiplication operator for \lstinline@short int@,
    1522 \lstinline@square( s )@ is treated as \lstinline@square( (int)s )@, and the result has type
    1523 \lstinline@int@.
     1658Since \CFA does not define a multiplication operator for \lstinline$short int$,
     1659\lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
     1660\lstinline$int$.
    15241661This is mildly surprising, but it follows the {\c11} operator pattern.
    15251662
     
    15311668\end{lstlisting}
    15321669This has no valid interpretations, because \CFA has no conversion from ``array of
    1533 \lstinline@short int@'' to ``array of \lstinline@int@''.
     1670\lstinline$short int$'' to ``array of \lstinline$int$''.
    15341671The alternatives in such situations include
    15351672\begin{itemize}
    15361673\item
    1537 Defining monomorphic overloadings of \lstinline@product@ for \lstinline@short@ and the other
     1674Defining monomorphic overloadings of \lstinline$product$ for \lstinline$short$ and the other
    15381675``small'' types.
    15391676\item
    1540 Defining ``\lstinline@short ?*?( short, short )@'' within the scope containing the call to
    1541 \lstinline@product@.
    1542 \item
    1543 Defining \lstinline@product@ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
     1677Defining ``\lstinline$short ?*?( short, short )$'' within the scope containing the call to
     1678\lstinline$product$.
     1679\item
     1680Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
    15441681\end{itemize}
    15451682\end{rationale}
     
    15511688\lhs{additive-expression}
    15521689\rhs \nonterm{multiplicative-expression}
    1553 \rhs \nonterm{additive-expression} \lstinline@+@ \nonterm{multiplicative-expression}
    1554 \rhs \nonterm{additive-expression} \lstinline@-@ \nonterm{multiplicative-expression}
     1690\rhs \nonterm{additive-expression} \lstinline$+$ \nonterm{multiplicative-expression}
     1691\rhs \nonterm{additive-expression} \lstinline$-$ \nonterm{multiplicative-expression}
    15551692\end{syntax}
    15561693
    15571694\rewriterules
    15581695\begin{lstlisting}
    1559 a + b §\rewrite§ ?+?( a, b )§\use{?+?}§
    1560 a - b §\rewrite§ ?-?( a, b )§\use{?-?}§
     1696a + b @\rewrite@ ?+?( a, b )@\use{?+?}@
     1697a - b @\rewrite@ ?-?( a, b )@\use{?-?}@
    15611698\end{lstlisting}
    15621699
     
    16111748        * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
    16121749\end{lstlisting}
    1613 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the 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
    16141751% Don't use predefined: keep this out of prelude.cf.
    16151752\begin{lstlisting}
     
    16211758
    16221759\begin{rationale}
    1623 \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.
     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.
    16241761It 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.
    1625 The {\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.
     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.
    16261763\end{rationale}
    16271764
     
    16321769\lhs{shift-expression}
    16331770\rhs \nonterm{additive-expression}
    1634 \rhs \nonterm{shift-expression} \lstinline@<<@ \nonterm{additive-expression}
    1635 \rhs \nonterm{shift-expression} \lstinline@>>@ \nonterm{additive-expression}
     1771\rhs \nonterm{shift-expression} \lstinline$<<$ \nonterm{additive-expression}
     1772\rhs \nonterm{shift-expression} \lstinline$>>$ \nonterm{additive-expression}
    16361773\end{syntax}
    16371774
    16381775\rewriterules \use{?>>?}%use{?<<?}
    16391776\begin{lstlisting}
    1640 a << b §\rewrite§ ?<<?( a, b )
    1641 a >> b §\rewrite§ ?>>?( a, b )
     1777a << b @\rewrite@ ?<<?( a, b )
     1778a >> b @\rewrite@ ?>>?( a, b )
    16421779\end{lstlisting}
    16431780
     
    16511788long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int);
    16521789\end{lstlisting}
    1653 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
     1790For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    16541791% Don't use predefined: keep this out of prelude.cf.
    16551792\begin{lstlisting}
     
    16711808\lhs{relational-expression}
    16721809\rhs \nonterm{shift-expression}
    1673 \rhs \nonterm{relational-expression} \lstinline@< @ \nonterm{shift-expression}
    1674 \rhs \nonterm{relational-expression} \lstinline@> @ \nonterm{shift-expression}
    1675 \rhs \nonterm{relational-expression} \lstinline@<=@ \nonterm{shift-expression}
    1676 \rhs \nonterm{relational-expression} \lstinline@>=@ \nonterm{shift-expression}
     1810\rhs \nonterm{relational-expression} \lstinline$< $ \nonterm{shift-expression}
     1811\rhs \nonterm{relational-expression} \lstinline$> $ \nonterm{shift-expression}
     1812\rhs \nonterm{relational-expression} \lstinline$<=$ \nonterm{shift-expression}
     1813\rhs \nonterm{relational-expression} \lstinline$>=$ \nonterm{shift-expression}
    16771814\end{syntax}
    16781815
    16791816\rewriterules\use{?>?}\use{?>=?}%use{?<?}%use{?<=?}
    16801817\begin{lstlisting}
    1681 a < b §\rewrite§ ?<?( a, b )
    1682 a > b §\rewrite§ ?>?( a, b )
    1683 a <= b §\rewrite§ ?<=?( a, b )
    1684 a >= b §\rewrite§ ?>=?( a, b )
     1818a < b @\rewrite@ ?<?( a, b )
     1819a > b @\rewrite@ ?>?( a, b )
     1820a <= b @\rewrite@ ?<=?( a, b )
     1821a >= b @\rewrite@ ?>=?( a, b )
    16851822\end{lstlisting}
    16861823
     
    17141851        ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
    17151852\end{lstlisting}
    1716 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the 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
    17171854% Don't use predefined: keep this out of prelude.cf.
    17181855\begin{lstlisting}
     
    17321869\lhs{equality-expression}
    17331870\rhs \nonterm{relational-expression}
    1734 \rhs \nonterm{equality-expression} \lstinline@==@ \nonterm{relational-expression}
    1735 \rhs \nonterm{equality-expression} \lstinline@!=@ \nonterm{relational-expression}
     1871\rhs \nonterm{equality-expression} \lstinline$==$ \nonterm{relational-expression}
     1872\rhs \nonterm{equality-expression} \lstinline$!=$ \nonterm{relational-expression}
    17361873\end{syntax}
    17371874
    17381875\rewriterules
    17391876\begin{lstlisting}
    1740 a == b §\rewrite§ ?==?( a, b )§\use{?==?}§
    1741 a != b §\rewrite§ ?!=?( a, b )§\use{?"!=?}§
     1877a == b @\rewrite@ ?==?( a, b )@\use{?==?}@
     1878a != b @\rewrite@ ?!=?( a, b )@\use{?"!=?}@
    17421879\end{lstlisting}
    17431880
     
    17921929        ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
    17931930\end{lstlisting}
    1794 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the rank of \lstinline@int@ there exist
     1931For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
    17951932% Don't use predefined: keep this out of prelude.cf.
    17961933\begin{lstlisting}
     
    18001937
    18011938\begin{rationale}
    1802 The 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.
     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.
    18031940In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system.
    18041941\end{rationale}
     
    18211958\lhs{AND-expression}
    18221959\rhs \nonterm{equality-expression}
    1823 \rhs \nonterm{AND-expression} \lstinline@&@ \nonterm{equality-expression}
     1960\rhs \nonterm{AND-expression} \lstinline$&$ \nonterm{equality-expression}
    18241961\end{syntax}
    18251962
    18261963\rewriterules
    18271964\begin{lstlisting}
    1828 a & b §\rewrite§ ?&?( a, b )§\use{?&?}§
     1965a & b @\rewrite@ ?&?( a, b )@\use{?&?}@
    18291966\end{lstlisting}
    18301967
     
    18381975long long unsigned int ?&?( long long unsigned int, long long unsigned int );
    18391976\end{lstlisting}
    1840 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the 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
    18411978% Don't use predefined: keep this out of prelude.cf.
    18421979\begin{lstlisting}
     
    18531990\lhs{exclusive-OR-expression}
    18541991\rhs \nonterm{AND-expression}
    1855 \rhs \nonterm{exclusive-OR-expression} \lstinline@^@ \nonterm{AND-expression}
     1992\rhs \nonterm{exclusive-OR-expression} \lstinline$^$ \nonterm{AND-expression}
    18561993\end{syntax}
    18571994
    18581995\rewriterules
    18591996\begin{lstlisting}
    1860 a ^ b §\rewrite§ ?^?( a, b )§\use{?^?}§
     1997a ^ b @\rewrite@ ?^?( a, b )@\use{?^?}@
    18611998\end{lstlisting}
    18621999
     
    18702007long long unsigned int ?^?( long long unsigned int, long long unsigned int );
    18712008\end{lstlisting}
    1872 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the 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
    18732010% Don't use predefined: keep this out of prelude.cf.
    18742011\begin{lstlisting}
     
    18852022\lhs{inclusive-OR-expression}
    18862023\rhs \nonterm{exclusive-OR-expression}
    1887 \rhs \nonterm{inclusive-OR-expression} \lstinline@|@ \nonterm{exclusive-OR-expression}
     2024\rhs \nonterm{inclusive-OR-expression} \lstinline$|$ \nonterm{exclusive-OR-expression}
    18882025\end{syntax}
    18892026
    18902027\rewriterules\use{?"|?}
    18912028\begin{lstlisting}
    1892 a | b §\rewrite§ ?|?( a, b )
     2029a | b @\rewrite@ ?|?( a, b )
    18932030\end{lstlisting}
    18942031
     
    19022039long long unsigned int ?|?( long long unsigned int, long long unsigned int );
    19032040\end{lstlisting}
    1904 For every extended integer type \lstinline@X@ with \Index{integer conversion rank} greater than the 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
    19052042% Don't use predefined: keep this out of prelude.cf.
    19062043\begin{lstlisting}
     
    19172054\lhs{logical-AND-expression}
    19182055\rhs \nonterm{inclusive-OR-expression}
    1919 \rhs \nonterm{logical-AND-expression} \lstinline@&&@ \nonterm{inclusive-OR-expression}
     2056\rhs \nonterm{logical-AND-expression} \lstinline$&&$ \nonterm{inclusive-OR-expression}
    19202057\end{syntax}
    19212058
    1922 \semantics The operands of the expression ``\lstinline@a && b@'' are treated as
    1923 ``\lstinline@(int)((a)!=0)@'' and ``\lstinline@(int)((b)!=0)@'', which shall both be unambiguous.
    1924 The expression has only one interpretation, which is of type \lstinline@int@.
    1925 \begin{rationale}
    1926 When 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.
    1927 
    1928 A common C idiom omits comparisons to \lstinline@0@ in the controlling expressions of loops and
    1929 \lstinline@if@ statements.
    1930 For instance, the loop below iterates as long as \lstinline@rp@ points at a \lstinline@Rational@ value that is non-zero.
    1931 
    1932 \begin{lstlisting}
    1933 extern otype Rational;§\use{Rational}§
    1934 extern const Rational 0;§\use{0}§
     2059\semantics The operands of the expression ``\lstinline$a && b$'' are treated as
     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.
     2064
     2065A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
     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}@
     2071extern const Rational 0;@\use{0}@
    19352072extern int ?!=?( Rational, Rational );
    19362073Rational *rp;
    19372074while ( rp && *rp ) { ... }
    19382075\end{lstlisting}
    1939 The 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.
    1940 In contrast, {\CC} would apply a programmer-defined \lstinline@Rational@-to-\lstinline@int@ conversion to \lstinline@*rp@ in the equivalent situation.
    1941 The 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.
     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.
    19422079\end{rationale}
    19432080
     
    19482085\lhs{logical-OR-expression}
    19492086\rhs \nonterm{logical-AND-expression}
    1950 \rhs \nonterm{logical-OR-expression} \lstinline@||@ \nonterm{logical-AND-expression}
     2087\rhs \nonterm{logical-OR-expression} \lstinline$||$ \nonterm{logical-AND-expression}
    19512088\end{syntax}
    19522089
    19532090\semantics
    19542091
    1955 The operands of the expression ``\lstinline@a || b@'' are treated as ``\lstinline@(int)((a)!=0)@'' and ``\lstinline@(int)((b))!=0)@'', which shall both be unambiguous.
    1956 The expression has only one 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$.
    19572094
    19582095
     
    19622099\lhs{conditional-expression}
    19632100\rhs \nonterm{logical-OR-expression}
    1964 \rhs \nonterm{logical-OR-expression} \lstinline@?@ \nonterm{expression}
    1965          \lstinline@:@ \nonterm{conditional-expression}
     2101\rhs \nonterm{logical-OR-expression} \lstinline$?$ \nonterm{expression}
     2102         \lstinline$:$ \nonterm{conditional-expression}
    19662103\end{syntax}
    19672104
    19682105\semantics
    1969 In 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
     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
    19702107\begin{lstlisting}
    19712108( int)(( a)!=0) ? ( void)( b) : ( void)( c)
    19722109\end{lstlisting}
    19732110
    1974 If 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
     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
    19752112\begin{lstlisting}
    19762113forall( otype T ) T cond( int, T, T );
     
    20242161rand() ? i : l;
    20252162\end{lstlisting}
    2026 The best interpretation infers the expression's type to be \lstinline@long@ and applies the safe
    2027 \lstinline@int@-to-\lstinline@long@ conversion to \lstinline@i@.
     2163The best interpretation infers the expression's type to be \lstinline$long$ and applies the safe
     2164\lstinline$int$-to-\lstinline$long$ conversion to \lstinline$i$.
    20282165
    20292166\begin{lstlisting}
     
    20322169rand() ? cip : vip;
    20332170\end{lstlisting}
    2034 The 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.
     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.
    20352172
    20362173\begin{lstlisting}
    20372174rand() ? cip : 0;
    20382175\end{lstlisting}
    2039 The expression has type \lstinline@const int *@, with a specialization conversion applied to
    2040 \lstinline@0@.
     2176The expression has type \lstinline$const int *$, with a specialization conversion applied to
     2177\lstinline$0$.
    20412178
    20422179
     
    20492186         \nonterm{assignment-expression}
    20502187\lhs{assignment-operator} one of
    2051 \rhs \lstinline@=@\ \ \lstinline@*=@\ \ \lstinline@/=@\ \ \lstinline@%=@\ \ \lstinline@+=@\ \ \lstinline@-=@\ \ 
    2052          \lstinline@<<=@\ \ \lstinline@>>=@\ \ \lstinline@&=@\ \ \lstinline@^=@\ \ \lstinline@|=@
     2188\rhs \lstinline$=$\ \ \lstinline$*=$\ \ \lstinline$/=$\ \ \lstinline$%=$\ \ \lstinline$+=$\ \ \lstinline$-=$\ \ 
     2189         \lstinline$<<=$\ \ \lstinline$>>=$\ \ \lstinline$&=$\ \ \lstinline$^=$\ \ \lstinline$|=$
    20532190\end{syntax}
    20542191
     
    20592196\use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
    20602197\begin{lstlisting}
    2061 a §$\leftarrow$§ b §\rewrite§ ?§$\leftarrow$§?( &( a ), b )
     2198a @$\leftarrow$@ b @\rewrite@ ?@$\leftarrow$@?( &( a ), b )
    20622199\end{lstlisting}
    20632200
    20642201\semantics
    20652202Each interpretation of the left operand of an assignment expression is considered separately.
    2066 For 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.
     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.
    20672204The right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
    20682205For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call.
     
    22972434\end{lstlisting}
    22982435\begin{rationale}
    2299 The 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.
    2300 \end{rationale}
    2301 
    2302 For every complete structure or union type \lstinline@S@ there exist
     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.
     2437\end{rationale}
     2438
     2439For every complete structure or union type \lstinline$S$ there exist
    23032440% Don't use predefined: keep this out of prelude.cf.
    23042441\begin{lstlisting}
     
    23062443\end{lstlisting}
    23072444
    2308 For every extended integer type \lstinline@X@ there exist
     2445For every extended integer type \lstinline$X$ there exist
    23092446% Don't use predefined: keep this out of prelude.cf.
    23102447\begin{lstlisting}
     
    23122449\end{lstlisting}
    23132450
    2314 For every complete enumerated type \lstinline@E@ there exist
     2451For every complete enumerated type \lstinline$E$ there exist
    23152452% Don't use predefined: keep this out of prelude.cf.
    23162453\begin{lstlisting}
     
    23182455\end{lstlisting}
    23192456\begin{rationale}
    2320 The right-hand argument is \lstinline@int@ because enumeration constants have type \lstinline@int@.
     2457The right-hand argument is \lstinline$int$ because enumeration constants have type \lstinline$int$.
    23212458\end{rationale}
    23222459
     
    25792716\end{lstlisting}
    25802717
    2581 For every extended integer type \lstinline@X@ there exist
     2718For every extended integer type \lstinline$X$ there exist
    25822719% Don't use predefined: keep this out of prelude.cf.
    25832720\begin{lstlisting}
     
    25942731\end{lstlisting}
    25952732
    2596 For every complete enumerated type \lstinline@E@ there exist
     2733For every complete enumerated type \lstinline$E$ there exist
    25972734% Don't use predefined: keep this out of prelude.cf.
    25982735\begin{lstlisting}
     
    26152752\lhs{expression}
    26162753\rhs \nonterm{assignment-expression}
    2617 \rhs \nonterm{expression} \lstinline@,@ \nonterm{assignment-expression}
     2754\rhs \nonterm{expression} \lstinline$,$ \nonterm{assignment-expression}
    26182755\end{syntax}
    26192756
    26202757\semantics
    2621 In the comma expression ``\lstinline@a, b@'', the first operand is interpreted as
    2622 ``\lstinline@( void )(a)@'', which shall be unambiguous\index{ambiguous interpretation}.
     2758In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
     2759``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}.
    26232760The interpretations of the expression are the interpretations of the second operand.
    26242761
     
    26552792{ ... }
    26562793\end{lstlisting}
    2657 Without the rule, \lstinline@Complex@ would be a type in the first case, and a parameter name in the second.
     2794Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second.
    26582795\end{rationale}
    26592796
     
    26812818\examples
    26822819\begin{lstlisting}
    2683 struct point {§\impl{point}§
     2820struct point {@\impl{point}@
    26842821        int x, y;
    26852822};
    2686 struct color_point {§\impl{color_point}§
     2823struct color_point {@\impl{color_point}@
    26872824        enum { RED, BLUE, GREEN } color;
    26882825        struct point;
     
    26912828cp.x = 0;
    26922829cp.color = RED;
    2693 struct literal {§\impl{literal}§
     2830struct literal {@\impl{literal}@
    26942831        enum { NUMBER, STRING } tag;
    26952832        union {
     
    27122849\begin{syntax}
    27132850\lhs{forall-specifier}
    2714 \rhs \lstinline@forall@ \lstinline@(@ \nonterm{type-parameter-list} \lstinline@)@
     2851\rhs \lstinline$forall$ \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$
    27152852\end{syntax}
    27162853
     
    27242861} mkPair( T, T ); // illegal
    27252862\end{lstlisting}
    2726 If an instance of \lstinline@struct Pair@ was declared later in the current scope, what would the members' type be?
     2863If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be?
    27272864\end{rationale}
    27282865\end{comment}
     
    27312868The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}.
    27322869
    2733 If, in the declaration ``\lstinline@T D@'', \lstinline@T@ contains \nonterm{forall-specifier}s and
    2734 \lstinline@D@ has the form
    2735 \begin{lstlisting}
    2736 D( §\normalsize\nonterm{parameter-type-list}§ )
    2737 \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
     2870If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
     2871\lstinline$D$ has the form
     2872\begin{lstlisting}
     2873D( @\normalsize\nonterm{parameter-type-list}@ )
     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
    27382875\nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
    27392876\Index{specification} in one of the \nonterm{forall-specifier}s.
     
    27462883If this restriction were lifted, it would be possible to write
    27472884\begin{lstlisting}
    2748 forall( otype T ) T * alloc( void );§\use{alloc}§ int *p = alloc();
    2749 \end{lstlisting}
    2750 Here \lstinline@alloc()@ would receive \lstinline@int@ as an inferred argument, and return an
    2751 \lstinline@int *@.
    2752 In 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.
    2753 
    2754 With the current restriction, \lstinline@alloc()@ must be given an argument that determines
    2755 \lstinline@T@:
    2756 \begin{lstlisting}
    2757 forall( otype T ) T * alloc( T initial_value );§\use{alloc}§
     2885forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
     2886\end{lstlisting}
     2887Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
     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.
     2890
     2891With the current restriction, \lstinline$alloc()$ must be given an argument that determines
     2892\lstinline$T$:
     2893\begin{lstlisting}
     2894forall( otype T ) T * alloc( T initial_value );@\use{alloc}@
    27582895\end{lstlisting}
    27592896\end{rationale}
     
    27802917forall( otype T ) T fT( T );
    27812918\end{lstlisting}
    2782 \lstinline@fi()@ takes an \lstinline@int@ and returns an \lstinline@int@. \lstinline@fT()@ takes a
    2783 \lstinline@T@ and returns a \lstinline@T@, for any type \lstinline@T@.
     2919\lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a
     2920\lstinline$T$ and returns a \lstinline$T$, for any type \lstinline$T$.
    27842921\begin{lstlisting}
    27852922int (*pfi )( int ) = fi;
    27862923forall( otype T ) T (*pfT )( T ) = fT;
    27872924\end{lstlisting}
    2788 \lstinline@pfi@ and \lstinline@pfT@ are pointers to functions. \lstinline@pfT@ is not polymorphic, but the function it points at is.
     2925\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
    27892926\begin{lstlisting}
    27902927int (*fvpfi( void ))( int ) {
     
    27952932}
    27962933\end{lstlisting}
    2797 \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.
     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.
    27982935\begin{lstlisting}
    27992936forall( otype T ) int ( *fTpfi( T ) )( int );
     
    28012938forall( otype T, otype U ) U ( *fTpfU( T ) )( U );
    28022939\end{lstlisting}
    2803 \lstinline@fTpfi()@ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
    2804 It could return \lstinline@pfi@. \lstinline@fTpfT()@ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
    2805 \lstinline@T@, where \lstinline@T@ is an inferred parameter of \lstinline@fTpfT()@.
    2806 For 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
    2807 ``\lstinline@fTpfT("yes")("no")@'' are legal, but ``\lstinline@fTpfT(17)("no")@'' is illegal.
    2808 \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
    2809 \lstinline@char *@.
     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
     2944``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
     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
     2946\lstinline$char *$.
    28102947\begin{lstlisting}
    28112948forall( otype T, otype U, otype V ) U * f( T *, U, V * const );
    28122949forall( otype U, otype V, otype W ) U * g( V *, U, W * const );
    28132950\end{lstlisting}
    2814 The functions \lstinline@f()@ and \lstinline@g()@ have compatible types.
     2951The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
    28152952Let \(f\) and \(g\) be their types;
    2816 then \(f_1\) = \lstinline@T@, \(f_2\) = \lstinline@U@, \(f_3\) = \lstinline@V@, \(g_1\)
    2817 = \lstinline@V@, \(g_2\) = \lstinline@U@, and \(g_3\) = \lstinline@W@.
     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$.
    28182955Replacing every \(f_i\) by \(g_i\) in \(f\) gives
    28192956\begin{lstlisting}
     
    28212958\end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
    28222959\begin{rationale}
    2823 The 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.
     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.
    28242961
    28252962Even without parameterized types, I might try to allow
     
    28472984\subsection{Type qualifiers}
    28482985
    2849 \CFA defines a new type qualifier \lstinline@lvalue@\impl{lvalue}\index{lvalue}.
     2986\CFA defines a new type qualifier \lstinline$lvalue$\impl{lvalue}\index{lvalue}.
    28502987\begin{syntax}
    28512988\oldlhs{type-qualifier}
    2852 \rhs \lstinline@lvalue@
     2989\rhs \lstinline$lvalue$
    28532990\end{syntax}
    28542991
    28552992\constraints
    2856 \Indexc{restrict} Types other than type parameters and 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.
    28572994
    28582995\semantics
    2859 An object's type may be a restrict-qualified type parameter.
    2860 \lstinline@restrict@ does not establish any special semantics in that case.
     2996An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case.
    28612997
    28622998\begin{rationale}
     
    28643000\end{rationale}
    28653001
    2866 \lstinline@lvalue@ may be used to qualify the return type of a function type.
    2867 Let \lstinline@T@ be an unqualified version of a type;
     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;
    28683004then the result of calling a function with return type
    2869 \lstinline@lvalue T@ is a \Index{modifiable lvalue} of type \lstinline@T@.
    2870 \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.
    2871 \begin{rationale}
    2872 The \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.
     3005\lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
     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.
    28733009\end{rationale}
    28743010
     
    28773013
    28783014\begin{rationale}
    2879 \lstinline@lvalue@ provides some of the functionality of {\CC}'s ``\lstinline@T&@'' ( reference to object of type \lstinline@T@) type.
     3015\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type.
    28803016Reference types have four uses in {\CC}.
    28813017\begin{itemize}
    28823018\item
    2883 They are necessary for user-defined operators that return lvalues, such as ``subscript'' and ``dereference''.
    2884 
    2885 \item
    2886 A 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.
     3019They are necessary for user-defined operators that return lvalues, such as ``subscript'' and
     3020``dereference''.
     3021
     3022\item
     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.
    28873024The following {\CC} code gives an example.
    28883025\begin{lstlisting}
     
    28973034A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument.
    28983035This is most useful for user-defined assignment operators.
    2899 In {\CC}, plain assignment is done by a function called ``\lstinline@operator=@'', and the two expressions
     3036In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions
    29003037\begin{lstlisting}
    29013038a = b;
    29023039operator=( a, b );
    29033040\end{lstlisting} are equivalent.
    2904 If \lstinline@a@ and \lstinline@b@ are of type \lstinline@T@, then the first parameter of \lstinline@operator=@ must have type ``\lstinline@T&@''.
     3041If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.
    29053042It cannot have type
    2906 \lstinline@T@, because then assignment couldn't alter the variable, and it can't have type
    2907 ``\lstinline@T *@'', because the assignment would have to be written ``\lstinline@&a = b;@''.
    2908 
    2909 In 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
    2910 ``\lstinline@operator=(&( a), b )@''.
    2911 Reference 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@&@''.
     3043\lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
     3044``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
     3045
     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$&$''.
    29123049
    29133050\item
    29143051References to \Index{const-qualified} types can be used instead of value parameters.  Given the
    2915 {\CC} function call ``\lstinline@fiddle( a_thing )@'', where the type of \lstinline@a_thing@ is
    2916 \lstinline@Thing@, the type of \lstinline@fiddle@ could be either of
     3052{\CC} function call ``\lstinline$fiddle( a_thing )$'', where the type of \lstinline$a_thing$ is
     3053\lstinline$Thing$, the type of \lstinline$fiddle$ could be either of
    29173054\begin{lstlisting}
    29183055void fiddle( Thing );
    29193056void fiddle( const Thing & );
    29203057\end{lstlisting}
    2921 If 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.
    2922 The reference form might be chosen for efficiency's sake if \lstinline@Thing@s are too large or their constructors or destructors are 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.
    29233060An implementation may switch between them without causing trouble for well-behaved clients.
    29243061This leaves the implementor to define ``too large'' and ``too expensive''.
     
    29283065void fiddle( const volatile Thing );
    29293066\end{lstlisting} with call-by-reference.
    2930 Since 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''.
     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''.
    29313068\end{itemize}
    29323069
     
    29483085\begin{syntax}
    29493086\lhs{spec-definition}
    2950 \rhs \lstinline@spec@ \nonterm{identifier}
    2951         \lstinline@(@ \nonterm{type-parameter-list} \lstinline@)@
    2952         \lstinline@{@ \nonterm{spec-declaration-list}\opt \lstinline@}@
     3087\rhs \lstinline$spec$ \nonterm{identifier}
     3088        \lstinline$($ \nonterm{type-parameter-list} \lstinline$)$
     3089        \lstinline${$ \nonterm{spec-declaration-list}\opt \lstinline$}$
    29533090\lhs{spec-declaration-list}
    2954 \rhs \nonterm{spec-declaration} \lstinline@;@
    2955 \rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline@;@
     3091\rhs \nonterm{spec-declaration} \lstinline$;$
     3092\rhs \nonterm{spec-declaration-list} \nonterm{spec-declaration} \lstinline$;$
    29563093\lhs{spec-declaration}
    29573094\rhs \nonterm{specifier-qualifier-list} \nonterm{declarator-list}
    29583095\lhs{declarator-list}
    29593096\rhs \nonterm{declarator}
    2960 \rhs \nonterm{declarator-list} \lstinline@,@ \nonterm{declarator}
     3097\rhs \nonterm{declarator-list} \lstinline$,$ \nonterm{declarator}
    29613098\end{syntax}
    29623099\begin{rationale}
     
    29803117\rhs \nonterm{assertion-list} \nonterm{assertion}
    29813118\lhs{assertion}
    2982 \rhs \lstinline@|@ \nonterm{identifier} \lstinline@(@ \nonterm{type-name-list} \lstinline@)@
    2983 \rhs \lstinline@|@ \nonterm{spec-declaration}
     3119\rhs \lstinline$|$ \nonterm{identifier} \lstinline$($ \nonterm{type-name-list} \lstinline$)$
     3120\rhs \lstinline$|$ \nonterm{spec-declaration}
    29843121\lhs{type-name-list}
    29853122\rhs \nonterm{type-name}
    2986 \rhs \nonterm{type-name-list} \lstinline@,@ \nonterm{type-name}
     3123\rhs \nonterm{type-name-list} \lstinline$,$ \nonterm{type-name}
    29873124\end{syntax}
    29883125
     
    29913128The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}.
    29923129If the
    2993 \nonterm{type-parameter} uses type-class \lstinline@type@\use{type}, the argument shall be the type name of an \Index{object type};
    2994 if it uses \lstinline@dtype@, the argument shall be the type name of an object type or an \Index{incomplete type};
    2995 and if it uses \lstinline@ftype@, the argument shall be the type name of a \Index{function type}.
     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}.
    29963133
    29973134\semantics
     
    30063143\examples
    30073144\begin{lstlisting}
    3008 forall( otype T | T ?*?( T, T ))§\use{?*?}§
    3009 T square( T val ) {§\impl{square}§
     3145forall( otype T | T ?*?( T, T ))@\use{?*?}@
     3146T square( T val ) {@\impl{square}@
    30103147        return val + val;
    30113148}
    3012 trait summable( otype T ) {§\impl{summable}§
    3013         T ?+=?( T *, T );§\use{?+=?}§
    3014         const T 0;§\use{0}§
     3149trait summable( otype T ) {@\impl{summable}@
     3150        T ?+=?( T *, T );@\use{?+=?}@
     3151        const T 0;@\use{0}@
    30153152};
    3016 trait list_of( otype List, otype Element ) {§\impl{list_of}§
     3153trait list_of( otype List, otype Element ) {@\impl{list_of}@
    30173154        Element car( List );
    30183155        List cdr( List );
     
    30233160trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {};
    30243161\end{lstlisting}
    3025 \lstinline@sum_list@ contains seven declarations, which describe a list whose elements can be added up.
    3026 The assertion ``\lstinline@|sum_list( i_list, int )@''\use{sum_list} produces the assertion parameters
     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
    30273164\begin{lstlisting}
    30283165int ?+=?( int *, int );
     
    30413178\lhs{type-parameter-list}
    30423179\rhs \nonterm{type-parameter}
    3043 \rhs \nonterm{type-parameter-list} \lstinline@,@ \nonterm{type-parameter}
     3180\rhs \nonterm{type-parameter-list} \lstinline$,$ \nonterm{type-parameter}
    30443181\lhs{type-parameter}
    30453182\rhs \nonterm{type-class} \nonterm{identifier} \nonterm{assertion-list}\opt
    30463183\lhs{type-class}
    3047 \rhs \lstinline@type@
    3048 \rhs \lstinline@dtype@
    3049 \rhs \lstinline@ftype@
     3184\rhs \lstinline$type$
     3185\rhs \lstinline$dtype$
     3186\rhs \lstinline$ftype$
    30503187\lhs{type-declaration}
    3051 \rhs \nonterm{storage-class-specifier}\opt \lstinline@type@ \nonterm{type-declarator-list} \verb|;|
     3188\rhs \nonterm{storage-class-specifier}\opt \lstinline$type$ \nonterm{type-declarator-list} \verb|;|
    30523189\lhs{type-declarator-list}
    30533190\rhs \nonterm{type-declarator}
    3054 \rhs \nonterm{type-declarator-list} \lstinline@,@ \nonterm{type-declarator}
     3191\rhs \nonterm{type-declarator-list} \lstinline$,$ \nonterm{type-declarator}
    30553192\lhs{type-declarator}
    3056 \rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline@=@ \nonterm{type-name}
     3193\rhs \nonterm{identifier} \nonterm{assertion-list}\opt \lstinline$=$ \nonterm{type-name}
    30573194\rhs \nonterm{identifier} \nonterm{assertion-list}\opt
    30583195\end{syntax}
     
    30653202
    30663203An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}.
    3067 Identifiers declared with type-class \lstinline@type@\use{type} are \Index{object type}s;
     3204Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s;
    30683205those declared with type-class
    3069 \lstinline@dtype@\use{dtype} are \Index{incomplete type}s;
     3206\lstinline$dtype$\use{dtype} are \Index{incomplete type}s;
    30703207and those declared with type-class
    3071 \lstinline@ftype@\use{ftype} are \Index{function type}s.
     3208\lstinline$ftype$\use{ftype} are \Index{function type}s.
    30723209The 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}.
    30733210
     
    30773214Within 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.
    30783215
    3079 A 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}.
     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}.
    30803217If a
    30813218\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).
     
    30973234
    30983235A type declaration without an initializer and with \Index{storage-class specifier}
    3099 \lstinline@extern@\use{extern} is an \define{opaque type declaration}.
     3236\lstinline$extern$\use{extern} is an \define{opaque type declaration}.
    31003237Opaque types are
    31013238\Index{object type}s.
     
    31123249\end{rationale}
    31133250
    3114 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline@dtype@.
    3115 An 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@.
     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$.
    31163253A
    3117 \Index{function type} is a value of type-class \lstinline@ftype@.
     3254\Index{function type} is a value of type-class \lstinline$ftype$.
    31183255\begin{rationale}
    31193256Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared.
     
    31253262Type qualifiers are a weak point of C's type system.
    31263263Consider the standard library function
    3127 \lstinline@strchr()@ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
    3128 \begin{lstlisting}
    3129 char *strchr( const char *s, int c ) {§\impl{strchr}§
     3264\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
     3265\begin{lstlisting}
     3266char *strchr( const char *s, int c ) {@\impl{strchr}@
    31303267        char real_c = c; // done because c was declared as int.
    31313268        for ( ; *s != real_c; s++ )
     
    31343271}
    31353272\end{lstlisting}
    3136 The 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.
     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.
    31373274Hence the body must perform a cast, and ( even worse)
    3138 \lstinline@strchr()@ provides a type-safe way to attempt to modify constant strings.
    3139 What is needed is some way to say that \lstinline@s@'s type might contain qualifiers, and the result type has exactly the same qualifiers.
     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.
    31403277Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values.
    3141 Instead, overloading can be used to define \lstinline@strchr()@ for each combination of qualifiers.
     3278Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers.
    31423279\end{rationale}
    31433280
     
    31643301\end{lstlisting}
    31653302Without this restriction, \CFA might require ``module initialization'' code ( since
    3166 \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@.
     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$.
    31673304
    31683305A 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.
     
    31813318\nonterm{struct-declaration}, type declarations can not be structure members.
    31823319The form of
    3183 \nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline@type@.
     3320\nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
    31843321Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions.
    31853322It also side-steps the problem of type-valued expressions producing different values in different declarations.
     
    31963333#include <stdlib.h>
    31973334T * new( otype T ) { return ( T * )malloc( sizeof( T) ); };
    3198 §\ldots§ int * ip = new( int );
    3199 \end{lstlisting}
    3200 This 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@;
     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$;
    32013338it could be undefined, or a type name, or a function or variable name.
    32023339Nothing good can result from such a situation.
     
    32153352f2( v2 );
    32163353\end{lstlisting}
    3217 \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]@.
     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]$.
    32183355
    32193356A translation unit containing the declarations
    32203357\begin{lstlisting}
    3221 extern type Complex;§\use{Complex}§ // opaque type declaration
    3222 extern float abs( Complex );§\use{abs}§
    3223 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline@abs@.
    3224 Some other translation unit must implement \lstinline@Complex@ and \lstinline@abs@.
     3358extern type Complex;@\use{Complex}@ // opaque type declaration
     3359extern float abs( Complex );@\use{abs}@
     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$.
    32253362That unit might contain the declarations
    32263363\begin{lstlisting}
    3227 otype Complex = struct { float re, im; };§\impl{Complex}§
    3228 Complex cplx_i = { 0.0, 1.0 };§\impl{cplx_i}§
    3229 float abs( Complex c ) {§\impl{abs( Complex )}§
     3364otype Complex = struct { float re, im; };@\impl{Complex}@
     3365Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@
     3366float abs( Complex c ) {@\impl{abs( Complex )}@
    32303367        return sqrt( c.re * c.re + c.im * c.im );
    32313368}
    32323369\end{lstlisting}
    3233 Note that \lstinline@c@ is implicitly converted to a \lstinline@struct@ so that its components can be retrieved.
    3234 
    3235 \begin{lstlisting}
    3236 otype Time_of_day = int;§\impl{Time_of_day}§ // seconds since midnight.
    3237 Time_of_day ?+?( Time_of_day t1, int seconds ) {§\impl{?+?}§
     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.
     3374Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@
    32383375        return (( int)t1 + seconds ) % 86400;
    32393376}
    32403377\end{lstlisting}
    3241 \lstinline@t1@ must be cast to its implementation type to prevent infinite recursion.
     3378\lstinline$t1$ must be cast to its implementation type to prevent infinite recursion.
    32423379
    32433380\begin{rationale}
    32443381Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type.
    3245 In the \lstinline@Time_of_day@ example, the difference is important.
     3382In the \lstinline$Time_of_day$ example, the difference is important.
    32463383Different languages have treated the distinction between the abstraction and the implementation in different ways.
    32473384\begin{itemize}
    32483385\item
    3249 Inside a Clu cluster \cite{CLU}, the declaration of an instance states which view applies.
    3250 Two primitives called \lstinline@up@ and \lstinline@down@ can be used to convert between the views.
    3251 \item
    3252 The Simula class \cite{SIMULA87} is essentially a record type.
     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.
    32533390Since 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.
    32543391In {\CC}
    3255 \cite{C++}, operations on class instances include assignment and ``\lstinline@&@'', which can be overloaded.
     3392\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
    32563393A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
    32573394\item
    3258 An 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.
     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.
    32593396The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
    32603397Literals and aggregates of the old type are also cloned.
     
    32663403In this case, explicit conversions between the derived type and the old type can be used.
    32673404\end{itemize}
    3268 \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@.
     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$.
    32693406\end{rationale}
    32703407
     
    32723409\subsubsection{Default functions and objects}
    32733410
    3274 A declaration\index{type declaration} of a type identifier \lstinline@T@ with type-class
    3275 \lstinline@type@ implicitly declares a \define{default assignment} function
    3276 \lstinline@T ?=?( T *, T )@\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline@T@.
     3411A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
     3412\lstinline$type$ implicitly declares a \define{default assignment} function
     3413\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
    32773414\begin{rationale}
    32783415Assignment 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).
    32793416Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter.
    32803417If a type parameter should not have an assignment operation,
    3281 \lstinline@dtype@ should be used.
     3418\lstinline$dtype$ should be used.
    32823419If 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.
    32833420\end{rationale}
    32843421
    3285 A 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.
    3286 A 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
     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
    32873424\define{default object}s as declared by the assertion declarations.
    3288 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline@T@.
     3425The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
    32893426Their values are determined as follows:
    32903427\begin{itemize}
    32913428\item
    3292 If 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.
    3293 Otherwise the scope of the declaration of \lstinline@T@ must contain 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.
    32943431
    32953432\item
    3296 If 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.
    3297 
    3298 Otherwise, 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.
    3299 
    3300 Otherwise the scope of the declaration of \lstinline@T@ must contain a definition of the default 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.
    33013438\end{itemize}
    33023439\begin{rationale}
     
    33043441\end{rationale}
    33053442
    3306 A 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.
     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.
    33073444
    33083445\examples
     
    33143451Pair b = { 1, 1 };
    33153452\end{lstlisting}
    3316 The definition of \lstinline@Pair@ implicitly defines two objects \lstinline@a@ and \lstinline@b@.
    3317 \lstinline@Pair a@ inherits its value from the \lstinline@struct impl a@.
     3453The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
     3454\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$.
    33183455The definition of
    3319 \lstinline@Pair b@ is compulsory because there is no \lstinline@struct impl b@ to construct a value from.
     3456\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
    33203457\begin{lstlisting}
    33213458trait ss( otype T ) {
     
    33233460        void munge( T * );
    33243461}
    3325 otype Whatsit | ss( Whatsit );§\use{Whatsit}§
    3326 otype Doodad | ss( Doodad ) = struct doodad {§\use{Doodad}§
     3462otype Whatsit | ss( Whatsit );@\use{Whatsit}@
     3463otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
    33273464        Whatsit; // anonymous member
    33283465        int extra;
     
    33303467Doodad clone( Doodad ) { ... }
    33313468\end{lstlisting}
    3332 The definition of \lstinline@Doodad@ implicitly defines three functions:
     3469The definition of \lstinline$Doodad$ implicitly defines three functions:
    33333470\begin{lstlisting}
    33343471Doodad ?=?( Doodad *, Doodad );
     
    33363473void munge( Doodad * );
    33373474\end{lstlisting}
    3338 The assignment function inherits \lstinline@struct doodad@'s assignment function because the types match when \lstinline@struct doodad@ is replaced by \lstinline@Doodad@ throughout.
    3339 \lstinline@munge()@ inherits \lstinline@Whatsit@'s \lstinline@munge()@ because the types match when
    3340 \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
    3341 \lstinline@Doodad@'s \lstinline@clone()@'s type.
     3475The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
     3476\lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
     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.
    33423479Hence the definition of
    3343 ``\lstinline@Doodad clone( Doodad )@'' is necessary.
     3480``\lstinline$Doodad clone( Doodad )$'' is necessary.
    33443481
    33453482Default functions and objects are subject to the normal scope rules.
    33463483\begin{lstlisting}
    3347 otype T = §\ldots§;
    3348 T a_T = §\ldots§;               // Default assignment used.
     3484otype T = @\ldots@;
     3485T a_T = @\ldots@;               // Default assignment used.
    33493486T ?=?( T *, T );
    3350 T a_T = §\ldots§;               // Programmer-defined assignment called.
     3487T a_T = @\ldots@;               // Programmer-defined assignment called.
    33513488\end{lstlisting}
    33523489\begin{rationale}
     
    33813518\begin{syntax}
    33823519\oldlhs{labeled-statement}
    3383 \rhs \lstinline@case@ \nonterm{case-value-list} : \nonterm{statement}
     3520\rhs \lstinline$case$ \nonterm{case-value-list} : \nonterm{statement}
    33843521\lhs{case-value-list}
    33853522\rhs \nonterm{case-value}
    3386 \rhs \nonterm{case-value-list} \lstinline@,@ \nonterm{case-value}
     3523\rhs \nonterm{case-value-list} \lstinline$,$ \nonterm{case-value}
    33873524\lhs{case-value}
    33883525\rhs \nonterm{constant-expression}
    33893526\rhs \nonterm{subrange}
    33903527\lhs{subrange}
    3391 \rhs \nonterm{constant-expression} \lstinline@~@ \nonterm{constant-expression}
     3528\rhs \nonterm{constant-expression} \lstinline$~$ \nonterm{constant-expression}
    33923529\end{syntax}
    33933530
     
    34023539case 1~4, 9~14, 27~32:
    34033540\end{lstlisting}
    3404 The \lstinline@case@ and \lstinline@default@ clauses are restricted within the \lstinline@switch@ and \lstinline@choose@ statements, precluding Duff's device.
     3541The \lstinline$case$ and \lstinline$default$ clauses are restricted within the \lstinline$switch$ and \lstinline$choose$ statements, precluding Duff's device.
    34053542
    34063543
    34073544\subsection{Expression and null statements}
    34083545
    3409 The expression in an expression statement is treated as being cast to \lstinline@void@.
     3546The expression in an expression statement is treated as being cast to \lstinline$void$.
    34103547
    34113548
     
    34143551\begin{syntax}
    34153552\oldlhs{selection-statement}
    3416 \rhs \lstinline@choose@ \lstinline@(@ \nonterm{expression} \lstinline@)@ \nonterm{statement}
     3553\rhs \lstinline$choose$ \lstinline$($ \nonterm{expression} \lstinline$)$ \nonterm{statement}
    34173554\end{syntax}
    34183555
    3419 The controlling expression \lstinline@E@ in the \lstinline@switch@ and \lstinline@choose@ statement:
     3556The controlling expression \lstinline$E$ in the \lstinline$switch$ and \lstinline$choose$ statement:
    34203557\begin{lstlisting}
    34213558switch ( E ) ...
     
    34233560\end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type.
    34243561An \Index{integer promotion} is performed on the expression if necessary.
    3425 The constant expressions in \lstinline@case@ statements with the switch are converted to the promoted type.
     3562The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
    34263563
    34273564
    34283565\setcounter{subsubsection}{3}
    3429 \subsubsection[The choose statement]{The \lstinline@choose@ statement}
    3430 
    3431 The \lstinline@choose@ statement is the same as the \lstinline@switch@ statement except control transfers to the end of the \lstinline@choose@ statement at a \lstinline@case@ or \lstinline@default@ labeled statement.
    3432 The \lstinline@fallthru@ statement is used to fall through to the next \lstinline@case@ or \lstinline@default@ labeled statement.
     3566\subsubsection{The \lstinline$choose$ statement}
     3567
     3568The \lstinline$choose$ statement is the same as the \lstinline$switch$ statement except control transfers to the end of the \lstinline$choose$ statement at a \lstinline$case$ or \lstinline$default$ labeled statement.
     3569The \lstinline$fallthru$ statement is used to fall through to the next \lstinline$case$ or \lstinline$default$ labeled statement.
    34333570The following have identical meaning:
    34343571\begin{flushleft}
     
    34553592\end{tabular}
    34563593\end{flushleft}
    3457 The \lstinline@choose@ statement addresses the problem of accidental fall-through associated with the \lstinline@switch@ statement.
     3594The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with the \lstinline$switch$ statement.
    34583595
    34593596
    34603597\subsection{Iteration statements}
    34613598
    3462 The controlling expression \lstinline@E@ in the loops
     3599The controlling expression \lstinline$E$ in the loops
    34633600\begin{lstlisting}
    34643601if ( E ) ...
    34653602while ( E ) ...
    34663603do ... while ( E );
    3467 \end{lstlisting} is treated as ``\lstinline@( int )((E)!=0)@''.
     3604\end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''.
    34683605
    34693606The statement
    34703607\begin{lstlisting}
    3471 for ( a; b; c ) §\ldots§
     3608for ( a; b; c ) @\ldots@
    34723609\end{lstlisting} is treated as
    34733610\begin{lstlisting}
     
    34803617\begin{syntax}
    34813618\oldlhs{jump-statement}
    3482 \rhs \lstinline@continue@ \nonterm{identifier}\opt
    3483 \rhs \lstinline@break@ \nonterm{identifier}\opt
     3619\rhs \lstinline$continue$ \nonterm{identifier}\opt
     3620\rhs \lstinline$break$ \nonterm{identifier}\opt
    34843621\rhs \ldots
    3485 \rhs \lstinline@throw@ \nonterm{assignment-expression}\opt
    3486 \rhs \lstinline@throwResume@ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
    3487 \lhs{at-expression} \lstinline@_At@ \nonterm{assignment-expression}
     3622\rhs \lstinline$throw$ \nonterm{assignment-expression}\opt
     3623\rhs \lstinline$throwResume$ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
     3624\lhs{at-expression} \lstinline$_At$ \nonterm{assignment-expression}
    34883625\end{syntax}
    34893626
    3490 Labeled \lstinline@continue@ and \lstinline@break@ allow useful but restricted control-flow that reduces the need for the \lstinline@goto@ statement for exiting multiple nested control-structures.
     3627Labeled \lstinline$continue$ and \lstinline$break$ allow useful but restricted control-flow that reduces the need for the \lstinline$goto$ statement for exiting multiple nested control-structures.
    34913628\begin{lstlisting}
    34923629L1: {                                                   // compound
     
    35153652
    35163653\setcounter{subsubsection}{1}
    3517 \subsubsection[The continue statement]{The \lstinline@continue@ statement}
    3518 
    3519 The identifier in a \lstinline@continue@ statement shall name a label located on an enclosing iteration statement.
    3520 
    3521 
    3522 \subsubsection[The break statement]{The \lstinline@break@ statement}
    3523 
    3524 The identifier in a \lstinline@break@ statement shall name a label located on an enclosing compound, selection or iteration statement.
    3525 
    3526 
    3527 \subsubsection[The return statement]{The \lstinline@return@ statement}
    3528 
    3529 An expression in a \lstinline@return@ statement is treated as being cast to the result type of the function.
    3530 
    3531 
    3532 \subsubsection[The throw statement]{The \lstinline@throw@ statement}
     3654\subsubsection{The \lstinline$continue$ statement}
     3655
     3656The identifier in a \lstinline$continue$ statement shall name a label located on an enclosing iteration statement.
     3657
     3658
     3659\subsubsection{The \lstinline$break$ statement}
     3660
     3661The identifier in a \lstinline$break$ statement shall name a label located on an enclosing compound, selection or iteration statement.
     3662
     3663
     3664\subsubsection{The \lstinline$return$ statement}
     3665
     3666An expression in a \lstinline$return$ statement is treated as being cast to the result type of the function.
     3667
     3668
     3669\subsubsection{The \lstinline$throw$ statement}
    35333670
    35343671When an exception is raised, \Index{propagation} directs control from a raise in the source execution to a handler in the faulting execution.
    35353672
    35363673
    3537 \subsubsection[The throwResume statement]{The \lstinline@throwResume@ statement}
     3674\subsubsection{The \lstinline$throwResume$ statement}
    35383675
    35393676
     
    35423679\begin{syntax}
    35433680\lhs{exception-statement}
    3544 \rhs \lstinline@try@ \nonterm{compound-statement} \nonterm{handler-list}
    3545 \rhs \lstinline@try@ \nonterm{compound-statement} \nonterm{finally-clause}
    3546 \rhs \lstinline@try@ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
     3681\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list}
     3682\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{finally-clause}
     3683\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
    35473684\lhs{handler-list}
    35483685\rhs \nonterm{handler-clause}
    3549 \rhs \lstinline@catch@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
    3550 \rhs \nonterm{handler-clause} \lstinline@catch@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
    3551 \rhs \lstinline@catchResume@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
    3552 \rhs \nonterm{handler-clause} \lstinline@catchResume@ \lstinline@(@ \ldots \lstinline@)@ \nonterm{compound-statement}
     3686\rhs \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     3687\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     3688\rhs \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
     3689\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
    35533690\lhs{handler-clause}
    3554 \rhs \lstinline@catch@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
    3555 \rhs \nonterm{handler-clause} \lstinline@catch@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
    3556 \rhs \lstinline@catchResume@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
    3557 \rhs \nonterm{handler-clause} \lstinline@catchResume@ \lstinline@(@ \nonterm{exception-declaration} \lstinline@)@ \nonterm{compound-statement}
     3691\rhs \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     3692\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     3693\rhs \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
     3694\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
    35583695\lhs{finally-clause}
    3559 \rhs \lstinline@finally@ \nonterm{compound-statement}
     3696\rhs \lstinline$finally$ \nonterm{compound-statement}
    35603697\lhs{exception-declaration}
    35613698\rhs \nonterm{type-specifier}
     
    35653702\rhs \nonterm{new-abstract-declarator-tuple}
    35663703\lhs{asynchronous-statement}
    3567 \rhs \lstinline@enable@ \nonterm{identifier-list} \nonterm{compound-statement}
    3568 \rhs \lstinline@disable@ \nonterm{identifier-list} \nonterm{compound-statement}
     3704\rhs \lstinline$enable$ \nonterm{identifier-list} \nonterm{compound-statement}
     3705\rhs \lstinline$disable$ \nonterm{identifier-list} \nonterm{compound-statement}
    35693706\end{syntax}
    35703707
     
    35723709
    35733710
    3574 \subsubsection[The try statement]{The \lstinline@try@ statement}
    3575 
    3576 The \lstinline@try@ statement is a block with associated handlers, called a \Index{guarded block};
     3711\subsubsection{The \lstinline$try$ statement}
     3712
     3713The \lstinline$try$ statement is a block with associated handlers, called a \Index{guarded block};
    35773714all other blocks are \Index{unguarded block}s.
    3578 A \lstinline@goto@, \lstinline@break@, \lstinline@return@, or \lstinline@continue@ statement can be used to transfer control out of a try block or handler, but not into one.
    3579 
    3580 
    3581 \subsubsection[The enable/disable statements]{The \lstinline@enable@/\lstinline@disable@ statements}
    3582 
    3583 The \lstinline@enable@/\lstinline@disable@ statements toggle delivery of \Index{asynchronous exception}s.
     3715A \lstinline$goto$, \lstinline$break$, \lstinline$return$, or \lstinline$continue$ statement can be used to transfer control out of a try block or handler, but not into one.
     3716
     3717
     3718\subsubsection{The \lstinline$enable$/\lstinline$disable$ statements}
     3719
     3720The \lstinline$enable$/\lstinline$disable$ statements toggle delivery of \Index{asynchronous exception}s.
    35843721
    35853722
     
    35913728\subsection{Predefined macro names}
    35923729
    3593 The implementation shall define the macro names \lstinline@__LINE__@, \lstinline@__FILE__@,
    3594 \lstinline@__DATE__@, and \lstinline@__TIME__@, as in the {\c11} standard.
    3595 It shall not define the macro name \lstinline@__STDC__@.
    3596 
    3597 In addition, the implementation shall define the macro name \lstinline@__CFORALL__@ to be the decimal constant 1.
     3730The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
     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.
    35983735
    35993736
     
    36123749The pointer, integral, and floating-point types are all \define{scalar types}.
    36133750All of these types can be logically negated and compared.
    3614 The assertion ``\lstinline@scalar( Complex )@'' should be read as ``type \lstinline@Complex@ is scalar''.
    3615 \begin{lstlisting}
    3616 trait scalar( otype T ) {§\impl{scalar}§
     3751The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
     3752\begin{lstlisting}
     3753trait scalar( otype T ) {@\impl{scalar}@
    36173754        int !?( T );
    36183755        int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T );
     
    36243761This is equivalent to inheritance of specifications.
    36253762\begin{lstlisting}
    3626 trait arithmetic( otype T | scalar( T ) ) {§\impl{arithmetic}§§\use{scalar}§
     3763trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
    36273764        T +?( T ), -?( T );
    36283765        T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T );
     
    36303767\end{lstlisting}
    36313768
    3632 The various flavors of \lstinline@char@ and \lstinline@int@ and the enumerated types make up the
     3769The various flavors of \lstinline$char$ and \lstinline$int$ and the enumerated types make up the
    36333770\define{integral types}.
    36343771\begin{lstlisting}
    3635 trait integral( otype T | arithmetic( T ) ) {§\impl{integral}§§\use{arithmetic}§
     3772trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
    36363773        T ~?( T );
    36373774        T ?&?( T, T ), ?|?( T, T ), ?^?( T, T );
     
    36473784The only operation that can be applied to all modifiable lvalues is simple assignment.
    36483785\begin{lstlisting}
    3649 trait m_lvalue( otype T ) {§\impl{m_lvalue}§
     3786trait m_lvalue( otype T ) {@\impl{m_lvalue}@
    36503787        T ?=?( T *, T );
    36513788};
     
    36573794Scalars can also be incremented and decremented.
    36583795\begin{lstlisting}
    3659 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {§\impl{m_l_scalar}§
    3660         T ?++( T * ), ?--( T * );§\use{scalar}§§\use{m_lvalue}§
     3796trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
     3797        T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@
    36613798        T ++?( T * ), --?( T * );
    36623799};
     
    36643801
    36653802Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic.
    3666 Note that this results in the ``inheritance'' of \lstinline@scalar@ along both paths.
    3667 \begin{lstlisting}
    3668 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {§\impl{m_l_arithmetic}§
    3669         T ?/=?( T *, T ), ?*=?( T *, T );§\use{m_l_scalar}§§\use{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}@
     3806        T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@
    36703807        T ?+=?( T *, T ), ?-=?( T *, T );
    36713808};
    3672 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {§\impl{m_l_integral}§
    3673         T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );§\use{m_l_arithmetic}§
    3674         T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );§\use{integral}§
     3809trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
     3810        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
     3811        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@
    36753812};
    36763813\end{lstlisting}
     
    36803817
    36813818Array 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
    3682 ``\lstinline@a[i]@'' is equivalent to the dereferencing expression ``\lstinline@(*( a+( i )))@''.
    3683 Technically, pointer arithmetic and pointer comparisons other than ``\lstinline@==@'' and
    3684 ``\lstinline@!=@'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
     3819``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
     3820Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
     3821``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
    36853822Consequently, there is no need for a separate ``array type'' specification.
    36863823
    36873824Pointer types are scalar types.
    3688 Like other scalar types, they have ``\lstinline@+@'' and
    3689 ``\lstinline@-@'' operators, but the types do not match the types of the operations in
    3690 \lstinline@arithmetic@, so these operators cannot be consolidated in \lstinline@scalar@.
    3691 \begin{lstlisting}
    3692 trait pointer( type P | scalar( P ) ) {§\impl{pointer}§§\use{scalar}§
     3825Like other scalar types, they have ``\lstinline$+$'' and
     3826``\lstinline$-$'' operators, but the types do not match the types of the operations in
     3827\lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
     3828\begin{lstlisting}
     3829trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
    36933830        P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int );
    36943831        ptrdiff_t ?-?( P, P );
    36953832};
    3696 trait 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}@
    36973834        P ?+=?( P *, long int ), ?-=?( P *, long int );
    36983835        P ?=?( P *, void * );
     
    37033840Specifications 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.
    37043841Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types.
    3705 The assertion ``\lstinline@|ptr_to( Safe_pointer, int )@'' should be read as
    3706 ``\lstinline@Safe_pointer@ acts like a pointer to \lstinline@int@''.
    3707 \begin{lstlisting}
    3708 trait ptr_to( otype P | pointer( P ), otype T ) {§\impl{ptr_to}§§\use{pointer}§
     3842The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
     3843``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
     3844\begin{lstlisting}
     3845trait ptr_to( type P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@
    37093846        lvalue T *?( P );
    37103847        lvalue T ?[?]( P, long int );
    37113848};
    3712 trait ptr_to_const( otype P | pointer( P ), otype T ) {§\impl{ptr_to_const}§
     3849trait ptr_to_const( type P | pointer( P ), otype T ) {@\impl{ptr_to_const}@
    37133850        const lvalue T *?( P );
    3714         const lvalue T ?[?]( P, long int );§\use{pointer}§
     3851        const lvalue T ?[?]( P, long int );@\use{pointer}@
    37153852};
    3716 trait ptr_to_volatile( otype P | pointer( P ), otype T ) }§\impl{ptr_to_volatile}§
     3853trait ptr_to_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@
    37173854        volatile lvalue T *?( P );
    3718         volatile lvalue T ?[?]( P, long int );§\use{pointer}§
     3855        volatile lvalue T ?[?]( P, long int );@\use{pointer}@
    37193856};
    3720 trait ptr_to_const_volatile( otype P | pointer( P ), otype T ) }§\impl{ptr_to_const_volatile}§
    3721         const volatile lvalue T *?( P );§\use{pointer}§
     3857trait ptr_to_const_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@
     3858        const volatile lvalue T *?( P );@\use{pointer}@
    37223859        const volatile lvalue T ?[?]( P, long int );
    37233860};
    37243861\end{lstlisting}
    37253862
    3726 Assignment 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 *@''.
     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 *$''.
    37273864Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
    3728 ``\lstinline@ptr_to@'' specifications.
    3729 \begin{lstlisting}
    3730 trait m_l_ptr_to( otype P | m_l_pointer( P ),§\use{m_l_pointer}§§\impl{m_l_ptr_to}§ otype T | ptr_to( P, T )§\use{ptr_to}§ {
     3865``\lstinline$ptr_to$'' specifications.
     3866\begin{lstlisting}
     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}@ {
    37313868        P ?=?( P *, T * );
    37323869        T * ?=?( T **, P );
    37333870};
    3734 trait m_l_ptr_to_const( otype 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}§) {
     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}@) {
    37353872        P ?=?( P *, const T * );
    37363873        const T * ?=?( const T **, P );
    37373874};
    3738 trait m_l_ptr_to_volatile( otype 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}§
     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}@
    37393876        P ?=?( P *, volatile T * );
    37403877        volatile T * ?=?( volatile T **, P );
    37413878};
    3742 trait m_l_ptr_to_const_volatile( otype P | ptr_to_const_volatile( P ),§\use{ptr_to_const_volatile}§§\impl{m_l_ptr_to_const_volatile}§
    3743                 otype 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}§
     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}@
     3880                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}@
    37443881        P ?=?( P *, const volatile T * );
    37453882        const volatile T * ?=?( const volatile T **, P );
     
    37503887An 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.
    37513888\begin{lstlisting}
    3752 trait 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 ) ) {
     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 ) ) {
    37533890        MyP ?=?( MyP *, CP );
    37543891        CP ?=?( CP *, MyP );
    37553892};
    37563893\end{lstlisting}
    3757 The assertion ``\lstinline@| m_l_ptr_like( Safe_ptr, const int * )@'' should be read as
    3758 ``\lstinline@Safe_ptr@ is a pointer type like \lstinline@const int *@''.
     3894The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
     3895``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''.
    37593896This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a
    3760 \lstinline@MyP@ produces an lvalue of the type that \lstinline@CP@ points at, and the
    3761 ``\lstinline@|m_l_pointer( CP )@'' assertion provides only a weak assurance that the argument passed to \lstinline@CP@ really is a pointer type.
     3897\lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
     3898``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type.
    37623899
    37633900
     
    37653902
    37663903Different operators often have related meanings;
    3767 for instance, in C, ``\lstinline@+@'',
    3768 ``\lstinline@+=@'', and the two versions of ``\lstinline@++@'' perform variations of addition.
     3904for instance, in C, ``\lstinline$+$'',
     3905``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
    37693906Languages 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.
    37703907Completeness and consistency is left to the good taste and discretion of the programmer.
     
    37793916The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others.
    37803917However, 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;
    3781 the library function \lstinline@strcmp@ is an example.
    3782 
    3783 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline@!@'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
     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.
    37843921\begin{lstlisting}
    37853922trait comparable( otype T ) {
     
    38303967
    38313968Note 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
    3832 \lstinline@int_base@, \lstinline@arith_base@ and \lstinline@comparable@.
     3969\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$.
    38333970Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements.
    3834 A truly minimal implementation of an arithmetic type might only provide \lstinline@0@, \lstinline@1@, and \lstinline@?-=?@, which would be used by polymorphic \lstinline@?+=?@, \lstinline@?*=?@, and \lstinline@?/=?@ functions.
    3835 
    3836 Note also that \lstinline@short@ is an integer type in C11 terms, but has no operations!
     3971A truly minimal implementation of an arithmetic type might only provide
     3972\lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
     3973\lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
     3974
     3975Note also that \lstinline$short$ is an integer type in C11 terms, but has no operations!
    38373976
    38383977
     
    38413980
    38423981Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers.
    3843 This gets into \lstinline@noalias@ territory.
    3844 Qualifying anything (``\lstinline@short restrict rs@'') means pointer parameters of \lstinline@?++@, etc, would need restrict qualifiers.
     3982This gets into \lstinline$noalias$ territory.
     3983Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
    38453984
    38463985Enumerated types.
     
    38523991Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
    38533992
    3854 Operators on {,signed,unsigned} char and other small types. \lstinline@?<?@ harmless;
     3993Operators on {,signed,unsigned} char and other small types. ?<? harmless;
    38553994?*? questionable for chars.
    38563995Generic selections make these choices visible.
     
    38583997``promotion'' function?
    38593998
    3860 \lstinline@register@ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
    3861 
    3862 Don't use \lstinline@ptrdiff_t@ by name in the predefineds.
     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.
     4000
     4001Don't use ptrdiff\_t by name in the predefineds.
    38634002
    38644003Polymorphic objects.
     
    38674006
    38684007\bibliographystyle{plain}
    3869 \bibliography{cfa}
     4008\bibliography{refrat}
    38704009
    38714010
  • doc/user/Makefile

    r1048b31 r1f6e009  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .:../bibliography/:../LaTeXmacros/:
     3TeXLIB = .::
    44LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    5 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
     5BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
    66
    77## Define the text source files.
     
    1212
    1313FIGURES = ${addsuffix .tex, \
    14 Cdecl \
    1514}
    1615
     
    4443        dvips $< -o $@
    4544
    46 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
    47                 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
     45${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib /usr/local/bibliographies/pl.bib
    4846        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4947        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5553        -${BibTeX} ${basename $@}
    5654        # Make index from *.aux entries and input index at end of document
    57         makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
     55        makeindex -s indexstyle ${basename $@}.idx
    5856        ${LaTeX} ${basename $@}.tex
    5957        # Run again to get index title into table of contents
  • doc/user/user.tex

    r1048b31 r1f6e009  
    1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 %%
    3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    4 %%
    5 %% The contents of this file are covered under the licence agreement in the
    6 %% file "LICENCE" distributed with Cforall.
    7 %%
    8 %% user.tex --
    9 %%
    10 %% Author           : Peter A. Buhr
    11 %% Created On       : Wed Apr  6 14:53:29 2016
    12 %% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sat Apr 30 13:54:32 2016
    14 %% Update Count     : 221
    15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    16 
    171% requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
    18 
    19 % red highlighting ®...® (registered trademark sumbol)
    20 % blue highlighting ©...© (copyright symbol)
    21 % latex escape §...§ (section symbol)
    22 % keyword escape ¶...¶ (pilcrow symbol)
    23 % math escape $...$ (dollar symbol)
    242
    253\documentclass[openright,twoside]{article}
     
    275
    286% Latex packages used in the document.
    29 \usepackage[T1]{fontenc}                                % allow Latin1 (extended ASCII) characters
    30 \usepackage{textcomp}
    31 \usepackage[latin1]{inputenc}
    32 \usepackage{upquote}
     7
    338\usepackage{fullpage,times}
    34 \usepackage{epic,eepic}
    359\usepackage{xspace}
    3610\usepackage{varioref}
     
    3812\usepackage{footmisc}
    3913\usepackage{comment}
    40 \usepackage{latexsym}                                   % \Box
    41 \usepackage{mathptmx}                                   % better math font with "times"
     14\usepackage{latexsym}                                   % \Box
     15\usepackage{mathptmx}                                   % better math font with "times"
    4216\usepackage[pagewise]{lineno}
    4317\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     
    4822%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    4923
     24% Names used in the document.
     25
     26\newcommand{\CFA}{C$\forall$\xspace}    % set language symbolic name
     27\newcommand{\CFL}{Cforall\xspace}               % set language text name
     28\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
     29\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     30\newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
     31
     32%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     33
    5034% Bespoke macros used in the document.
    51 \input{common}
    52 
    53 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    54 
    55 % Names used in the document.
    56 
    57 \newcommand{\Version}{1.0.0}
    58 \newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
    59 
    60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    61 
    62 \setcounter{secnumdepth}{3}                             % number subsubsections
    63 \setcounter{tocdepth}{3}                                % subsubsections in table of contents
     35
     36\makeatletter
     37% allow escape sequence in lstinline
     38%\usepackage{etoolbox}
     39%\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
     40
     41\renewcommand\small{%
     42   \@setfontsize\small{8.5}{11}%
     43   \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
     44   \abovedisplayshortskip \z@ \@plus 2pt
     45   \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
     46   \def\@listi{\leftmargin\leftmargini
     47               \topsep 4pt \@plus 2pt \@minus 2pt
     48               \parsep 2pt \@pluspt \@minuspt
     49               \itemsep \parsep}%
     50   \belowdisplayskip \abovedisplayskip
     51}
     52\usepackage{relsize}            % must be after change to small
     53
     54\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
     55\renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
     56
     57%  Reduce size of section titles
     58\renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
     59\renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     60\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     61\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
     62
     63% index macros
     64\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
     65\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
     66\newcommand{\see}[1]{\emph{see} #1}
     67
     68% Define some commands that produce formatted index entries suitable for cross-references.
     69% ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
     70% implementations, and ``\use'' for their uses.
     71
     72%  \newcommand{\bold}[1]{{\bf #1}}
     73%  \def\spec{\@bsphack\begingroup
     74%             \def\protect##1{\string##1\space}\@sanitize
     75%             \@wrxref{|bold}}
     76\def\impl{\@bsphack\begingroup
     77          \def\protect##1{\string##1\space}\@sanitize
     78          \@wrxref{|definition}}
     79\newcommand{\indexcode}[1]{{\lstinline$#1$}}
     80\def\use{\@bsphack\begingroup
     81         \def\protect##1{\string##1\space}\@sanitize
     82         \@wrxref{|hyperpage}}
     83\def\@wrxref#1#2{\let\thepage\relax
     84    \xdef\@gtempa{\write\@indexfile{\string
     85    \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
     86    \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
     87%\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
     88%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
     89
     90% inline text and lowercase index: \Index{inline and lowercase index text}
     91% inline text and as-in index: \Index[as-is index text]{inline text}
     92% inline text but index with different as-is text: \Index[index text]{inline text}
     93\newcommand{\Index}{\@ifstar\@sIndex\@Index}
     94\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
     95\newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
     96
     97\newcommand{\newtermFontInline}{\emph}
     98\newcommand{\newterm}{\@ifstar\@snewterm\@newterm}
     99\newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
     100\newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
     101\makeatother
     102
     103% blocks and titles
     104\newenvironment{quote2}{%
     105        \list{}{\lstset{resetmargins=true}\leftmargin=\parindent\rightmargin\leftmargin}%
     106        \item\relax
     107}{%
     108        \endlist
     109}% quote2
     110\newenvironment{rationale}{%
     111  \begin{quotation}\noindent$\Box$\enspace
     112}{%
     113  \hfill\enspace$\Box$\end{quotation}
     114}%
     115\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
     116\newcommand{\rewrite}{\(\Rightarrow\)}
     117\newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
     118\newcommand{\examples}{\paragraph{Examples}~\par\noindent}
     119\newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
     120\newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
     121\newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
     122
     123% BNF macros
     124\def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
     125\let\endsyntax=\endtrivlist
     126\newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
     127\newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
     128\newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
     129\newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
     130\newcommand{\opt}{$_{opt}$\ }
     131
     132% adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
     133% \VRef{label} => Section 2.7, \VPageref{label} => page 17
     134% \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
     135\renewcommand{\reftextfaceafter}{\unskip}
     136\renewcommand{\reftextfacebefore}{\unskip}
     137\renewcommand{\reftextafter}{\unskip}
     138\renewcommand{\reftextbefore}{\unskip}
     139\renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
     140\renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
     141\newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
     142\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
     143
     144% Go programming language
     145\lstdefinelanguage{Golang}%
     146  {morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},%
     147   morekeywords=[2]{string,uint,uint8,uint16,uint32,uint64,int,int8,int16, int32,int64,
     148                bool,float32,float64,complex64,complex128,byte,rune,uintptr, error,interface},%
     149   morekeywords=[3]{map,slice,make,new,nil,len,cap,copy,close,true,false, delete,append,real,imag,complex,chan,},%
     150   morekeywords=[4]{for,break,continue,range,goto,switch,case,fallthrough,if, else,default,},%
     151   morekeywords=[5]{Println,Printf,Error,},%
     152   sensitive=true,%
     153   morecomment=[l]{//},%
     154   morecomment=[s]{/*}{*/},%
     155   morestring=[b]',%
     156   morestring=[b]",%
     157   morestring=[s]{`}{`},%
     158}
     159
     160% CFA based on ANSI C
     161\lstdefinelanguage{CFA}[ANSI]{C}%
     162{morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable,
     163        fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert,
     164        _Thread_local,throw,throwResume,try,},
     165}%
     166
     167\lstset{
     168language=CFA,
     169columns=flexible,
     170basicstyle=\sf\relsize{-1},
     171tabsize=4,
     172xleftmargin=\parindent,
     173escapechar=@,
     174mathescape=true,
     175keepspaces=true,
     176showstringspaces=false,
     177showlines=true,
     178}%
     179
     180\makeatletter
     181% replace/adjust listings characters that look bad in sanserif
     182\lst@CCPutMacro
     183\lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus
     184\lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
     185\lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
     186\lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
     187\lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
     188\lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
     189%\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
     190\@empty\z@\@empty
     191\makeatother
     192
     193\setcounter{secnumdepth}{3}     % number subsubsections
     194\setcounter{tocdepth}{3}                % subsubsections in table of contents
    64195\makeindex
    65196
     
    68199\begin{document}
    69200\pagestyle{headings}
    70 \linenumbers                                            % comment out to turn off line numbering
     201\linenumbers                                    % comment out to turn off line numbering
    71202
    72203\title{\Huge
     
    82213}% author
    83214\date{
    84 DRAFT \\
    85 \today
     215DRAFT\\\today
    86216}% date
    87217
     
    111241
    112242\CFA\footnote{Pronounced ``C-for-all'', and written \CFA, CFA, or \CFL.} is a modern general-purpose programming-language, designed an as evolutionary step forward from the C programming language.
    113 The syntax of the \CFA language builds from C, and should look immediately familiar to C programmers.
     243The syntax of the \CFA language builds from that of C, and should look immediately familiar to C programmers.
    114244% Any language feature that is not described here can be assumed to be using the standard C11 syntax.
    115 \CFA adds many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs and achieving C performance.
     245\CFA has added many modern programming-language features, which directly leads to increased safety and productivity, while maintaining interoperability with existing C programs, and maintaining C-like performance.
    116246Like C, \CFA is a statically typed, procedural language with a low-overhead runtime, meaning there is no global garbage-collection.
    117247The primary new features include parametric-polymorphism routines and types, exceptions, concurrency, and modules.
     
    124254New programs can be written in \CFA using a combination of C and \CFA features.
    125255\CC had a similar goal 30 years ago, but has struggled over the intervening time to incorporate modern programming-language features because of early design choices.
    126 \CFA has 30 years of hindsight and clean starting point.
     256\CFA has 30 years of hindsight and a much cleaner starting point than \CC.
    127257
    128258Like \CC, there may be both an old and new ways to achieve the same effect.
     
    149279\end{quote2}
    150280Both programs output the same result.
    151 While the \CFA I/O looks similar to the \CC output style, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).
     281While the \CFA I/O looks similar to the \CC style of output, there are several important differences, such as automatic spacing between variables as in Python (see also~\VRef{s:IOLibrary}).
    152282
    153283This document is a reference manual for the \CFA programming language, targeted at \CFA programmers.
    154 Implementers may refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
     284Implementers may also refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
    155285In its current state, this document covers the intended core features of the language.
    156286Changes to the syntax and additional features are expected to be included in later revisions.
     
    164294The original \CFA project~\cite{Ditchfield92} extended the C type system with parametric polymorphism and overloading, as opposed to the \CC approach of object-oriented extensions to the C type-system.
    165295A first implementation of the core Cforall language was created~\cite{Bilson03,Esteves04}, but at the time there was little interesting in extending C, so work did not continue.
    166 As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language because of legacy code-bases, so the \CFA project has been restarted.
    167 
    168 
    169 \section{Why fix C?}
     296As the saying goes, ``What goes around, comes around'', and there is now renewed interest in the C programming language, so the \CFA project has been restarted.
     297
     298
     299\section{Motivation: Why fix C?}
    170300
    171301Even with all its problems, C is a very popular programming language because it allows writing software at virtually any level in a computer system without restriction.
     
    184314Java~\cite{Java8}, Go~\cite{Go}, Rust~\cite{Rust} and D~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent.
    185315These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection.
    186 As a result, there is a significant learning curve to move to these languages, and C legacy-code must be rewritten.
     316As a result, there is a significant learning curve to move to these languages, and C legacy-code must be complete rewritten.
    187317These costs can be prohibitive for many companies with a large software base in C/\CC, and many programmers that require retraining to a new programming language.
    188318
     
    201331This feature allows users of \CFA to take advantage of the existing panoply of C libraries from inside their \CFA code.
    202332In fact, one of the biggest issues for any new programming language is establishing a minimum level of library code to support a large body of activities.
    203 Programming-language developers often state that adequate library support takes more work than designing and implementing the language itself.
     333Programming-language developers often state that adequate library support costs many times more than designing and implementing the language itself.
    204334Like \CC, \CFA starts with immediate access to all exiting C libraries, and in many cases, can easily wrap library routines with simpler and safer interfaces, at very low cost.
    205335
     
    208338Whereas, \CFA wraps each of these routines into one with the common name \lstinline@abs@.
    209339\begin{lstlisting}
     340extern "C" {
     341#include <stdlib.h>                     // provide C prototype for integer "abs" routine
     342} // extern "C"
     343
    210344char abs( char );
    211 extern "C" {
    212 int abs( int );                         // use default C routine for int
    213 } // extern "C"
    214 long int abs( long int );
     345long int abs( long int );       // @{\CFA}@ overload name "abs" for other types
    215346long long int abs( long long int );
    216347float abs( float );
     
    229360The name ``\lstinline@abs@'' evokes the notion of absolute value, and many mathematical types provide the notion of absolute value.
    230361Hence, knowing the name \lstinline@abs@ should be sufficient to apply it to any type where it is applicable.
    231 The time savings and safety of using one name uniformly versus $N$ unique names should not be underestimated.
    232 
    233 
    234 \section[Compiling CFA Program]{Compiling \CFA Program}
     362The time savings and safety of using one name uniformly versus @N@ unique names should not be underestimated.
     363
     364
     365\section{Compiling \CFA}
    235366
    236367The command \lstinline@cfa@ is used to compile \CFA program(s).
    237 This command works like the GNU \lstinline@gcc@\index{gcc} command, e.g.:
    238 \begin{lstlisting}
    239 cfa [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ]
    240 \end{lstlisting}
    241 \indexc{cfa}\index{compilation!cfa@\lstinline$cfa$}
    242 By default, \CFA programs having the following \lstinline@gcc@ flags turned on:
     368This command works like the GNU \lstinline@gcc@ command, e.g.:
     369\begin{lstlisting}
     370cfa [ gcc-options ] C/@{\CFA}@-files [ assembler/loader-files ]
     371\end{lstlisting}
     372The following additional option is available:
    243373\begin{description}
    244 \item\hspace*{-4pt}\Indexc{-std=gnu99}\index{compilation option!-std=gnu99@{\lstinline$-std=gnu99$}}
    245 The 1999 C standard plus GNU extensions.
    246 \item\hspace*{-4pt}\Indexc{-fgnu89-¶inline¶}\index{compilation option!-fgnu89-inline@{\lstinline$-fgnu89-¶inline¶$}}
    247 Use the traditional GNU semantics for inline routines in C99 mode.
    248 \end{description}
    249 The following new \CFA option is available:
    250 \begin{description}
    251 \item\hspace*{-4pt}\Indexc{-CFA}\index{compilation option!-CFA@{\lstinline$-CFA$}}
     374\item
     375\hspace*{-4pt}\lstinline@-CFA@
    252376Only the C preprocessor and the \CFA translator steps are performed and the transformed program is written to standard output, which makes it possible to examine the code generated by the \CFA translator.
    253377\end{description}
    254378
    255 The following preprocessor variables are available:
    256 \begin{description}
    257 \item\hspace*{-4pt}\Indexc{__CFA__}\index{preprocessor variables!__CFA__@{\lstinline$__CFA__$}}
    258 is always available during preprocessing and its value is the current major \Index{version number} of \CFA.\footnote{
    259 The C preprocessor allows only integer values in a preprocessor variable so a value like ``\Version'' is not allowed.
    260 Hence, the need to have three variables for the major, minor and patch version number.}
    261 
    262 \item\hspace*{-4pt}\Indexc{__CFA_MINOR__}\index{preprocessor variables!__CFA_MINOR__@{\lstinline$__CFA_MINOR__$}}
    263 is always available during preprocessing and its value is the current minor \Index{version number} of \CFA.
    264 
    265 \item\hspace*{-4pt}\Indexc{__CFA_PATCH__}\index{preprocessor variables!__CFA_PATCH__@\lstinline$__CFA_PATCH__$}
    266 is always available during preprocessing and its value is the current patch \Index{version number} of \CFA.
    267 
    268 \item\hspace*{-4pt}\Indexc{__CFORALL__}\index{preprocessor variables!__CFORALL__@\lstinline$__CFORALL__$}
    269 is always available during preprocessing and it has no value.
    270 \end{description}
    271 
    272 These preprocessor variables allow conditional compilation of programs that must work differently in these situations.
    273 For example, to toggle between C and \CFA extensions, using the following:
    274 \begin{lstlisting}
    275 #ifndef __CFORALL__
    276 #include <stdio.h>                      // C header file
    277 #else
    278 #include <fstream>                      // §\CFA{}§ header file
    279 #endif
    280 \end{lstlisting}
    281 which conditionally includes the correct header file, if the program is compiled using \lstinline@gcc@ or \lstinline@cfa@.
    282 
    283379
    284380\section{Underscores in Constants}
     
    286382Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:
    287383\begin{lstlisting}
    288 2®_®147®_®483®_®648;                            // decimal constant
     3842_147_483_648;                          // decimal constant
    28938556_ul;                                          // decimal unsigned long constant
    2903860_377;                                          // octal constant
     
    312408the type suffixes \lstinline@U@, \lstinline@L@, etc. may start with an underscore \lstinline@1_U@, \lstinline@1_ll@ or \lstinline@1.0E10_f@.
    313409\end{enumerate}
    314 It is significantly easier to read and enter long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).
     410It is significantly easier to read and type long constants when they are broken up into smaller groupings (most cultures use comma or period among digits for the same purpose).
    315411This extension is backwards compatible, matches with the use of underscore in variable names, and appears in Ada and Java.
    316412
     
    321417C declaration syntax is notoriously confusing and error prone.
    322418For example, many C programmers are confused by a declaration as simple as:
    323 \begin{quote2}
    324 \begin{tabular}{@{}ll@{}}
    325 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    326 int *x[ 5 ]
    327 \end{lstlisting}
    328 &
    329 \raisebox{-0.75\totalheight}{\input{Cdecl}}
    330 \end{tabular}
    331 \end{quote2}
    332 Is this an array of 5 pointers to integers or a pointer to an array of 5 integers?
     419\begin{lstlisting}
     420int *x[ 10 ]
     421\end{lstlisting}
     422Is this a pointer to an array of 10 integers or an array of 10 pointers to integers?
    333423Another example of confusion results from the fact that a routine name and its parameters are embedded within the return type, mimicking the way the return value is used at the routine's call site.
    334424For example, a routine returning a pointer to an array of integers is defined and used in the following way:
    335425\begin{lstlisting}
    336 int (*f())[ 5 ] {...};  // definition mimics usage
    337 ... (*f())[ 3 ] += 1;
     426int (*f())[ 10 ] {...};
     427... (*f())[ 3 ] += 1;           // definition mimics usage
    338428\end{lstlisting}
    339429Essentially, the return type is wrapped around the routine name in successive layers (like an onion).
     
    344434The only exception is bit field specification, which always appear to the right of the base type.
    345435C and the new \CFA declarations may appear together in the same program block, but cannot be mixed within a specific declaration.
     436Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{
     437At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},
     438e.g.:
     439\begin{lstlisting}
     440x;                                      // int x
     441*y;                                     // int *y
     442f( p1, p2 );            // int f( int p1, int p2 );
     443f( p1, p2 ) {}          // int f( int p1, int p2 ) {}
     444\end{lstlisting}
    346445
    347446In \CFA declarations, the same tokens are used as in C: the character \lstinline@*@ is used to indicate a pointer, square brackets \lstinline@[@\,\lstinline@]@ are used to represent an array, and parentheses \lstinline@()@ are used to indicate a routine parameter.
     
    352451\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{C}}        \\
    353452\begin{lstlisting}
    354 ®* int x, y;®
     453* int x, y;
    355454\end{lstlisting}
    356455&
     
    365464\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c@{\hspace{20pt}}}{\textbf{C}}        \\
    366465\begin{lstlisting}
    367 [ 5 ] int z;
    368 [ 5 ] * char w;
    369 * [ 5 ] double v;
     466[ 10 ] int z;
     467[ 10 ] * char w;
     468* [ 10 ] double v;
    370469struct s {
    371         int f0:3;
     470int f0:3;
    372471        * int f1;
    373         [ 5 ] * int f2;
     472        [ 10 ] * int f2;
    374473};
    375474\end{lstlisting}
    376475&
    377476\begin{lstlisting}
    378 int z[ 5 ];
    379 char *w[ 5 ];
    380 double (*v)[ 5 ];
     477int z[ 10 ];
     478char *w[ 10 ];
     479double (*v)[ 10 ];
    381480struct s {
    382481        int f0:3;
    383482        int *f1;
    384         int *f2[ 5 ]
     483        int *f2[ 10 ]
    385484};
    386485\end{lstlisting}
    387486&
    388487\begin{lstlisting}
    389 // array of 5 integers
    390 // array of 5 pointers to char
    391 // pointer to array of 5 doubles
     488// array of 10 integers
     489// array of 10 pointers to char
     490// pointer to array of 10 doubles
    392491
    393492// common bit field syntax
     
    398497\end{tabular}
    399498\end{quote2}
     499
     500As stated above, the two styles of declaration may appear together in the same block.
     501Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
     502Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
     503In general, mixing declaration styles in a routine or even a translation unit is not recommended, as it makes a program more difficult to read.
     504Therefore, it is suggested that an entire translation unit be written in one declaration style or the other.
    400505
    401506All type qualifiers, i.e., \lstinline@const@ and \lstinline@volatile@, are used in the normal way with the new declarations but appear left to right, e.g.:
     
    405510\begin{lstlisting}
    406511const * const int x;
    407 const * [ 5 ] const int y;
     512const * [ 10 ] const int y;
    408513\end{lstlisting}
    409514&
    410515\begin{lstlisting}
    411516int const * const x;
    412 const int (* const y)[ 5 ]
     517const int (* const y)[ 10 ]
    413518\end{lstlisting}
    414519&
    415520\begin{lstlisting}
    416521// const pointer to const integer
    417 // const pointer to array of 5 const integers
     522// const pointer to array of 10 const integers
    418523\end{lstlisting}
    419524\end{tabular}
     
    425530\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c@{\hspace{20pt}}}{\textbf{C}}        \\
    426531\begin{lstlisting}
    427 extern [ 5 ] int x;
     532extern [ 10 ] int x;
    428533static * const int y;
    429534\end{lstlisting}
    430535&
    431536\begin{lstlisting}
    432 int extern x[ 5 ];
     537int extern x[ 10 ];
    433538const int static *y;
    434539\end{lstlisting}
    435540&
    436541\begin{lstlisting}
    437 // externally visible array of 5 integers
     542// externally visible array of 10 integers
    438543// internally visible pointer to constant int
    439544\end{lstlisting}
    440545\end{tabular}
    441546\end{quote2}
    442 
    443 Unsupported are K\&R C declarations where the base type defaults to \lstinline@int@, if no type is specified\footnote{
    444 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}},
    445 e.g.:
    446 \begin{lstlisting}
    447 x;                                              // int x
    448 *y;                                             // int *y
    449 f( p1, p2 );                    // int f( int p1, int p2 );
    450 f( p1, p2 ) {}                  // int f( int p1, int p2 ) {}
    451 \end{lstlisting}
    452 
    453 As stated above, the two styles of declaration may appear together in the same block.
    454 Therefore, a programmer has the option of either continuing to use traditional C declarations or take advantage of the new style.
    455 Clearly, both styles need to be supported for some time due to existing C-style header-files, particularly for UNIX systems.
    456547
    457548
     
    464555\begin{lstlisting}
    465556y = (* int)x;
    466 i = sizeof([ 5 ] * int);
     557i = sizeof([ 10 ] * int);
    467558\end{lstlisting}
    468559&
    469560\begin{lstlisting}
    470561y = (int *)x;
    471 i = sizeof(int *[ 5 ]);
     562i = sizeof(int *[ 10 ]);
    472563\end{lstlisting}
    473564\end{tabular}
     
    480571The point of the new syntax is to allow returning multiple values from a routine~\cite{CLU,Galletly96}, e.g.:
    481572\begin{lstlisting}
    482 ®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) {
    483         §\emph{routine body}§
     573[ int o1, int o2, char o3 ] f( int i1, char i2, char i3 ) {
     574        @\emph{routine body}@
    484575}
    485576\end{lstlisting}
     
    492583Declaration qualifiers can only appear at the start of a routine definition, e.g.:
    493584\begin{lstlisting}
    494 extern [ int x ] g( int y ) {§\,§}
     585extern [ int x ] g( int y ) {}
    495586\end{lstlisting}
    496587Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified;
    497588in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in:
    498589\begin{lstlisting}
    499 [§\,§] g();                                             // no input or output parameters
     590[ ] g();                                        // no input or output parameters
    500591[ void ] g( void );                     // no input or output parameters
    501592\end{lstlisting}
     
    509600\CFA style declarations cannot be used to declare parameters for K\&R style routine definitions because of the following ambiguity:
    510601\begin{lstlisting}
    511 int (*f(x))[ 5 ] int x; {}
    512 \end{lstlisting}
    513 The string ``\lstinline@int (*f(x))[ 5 ]@'' declares a K\&R style routine of type returning a pointer to an array of 5 integers, while the string ``\lstinline@[ 5 ] int x@'' declares a \CFA style parameter x of type array of 5 integers.
     602int (*f(x))[ 10 ] int x; {}
     603\end{lstlisting}
     604The string ``\lstinline@int (*f(x))[ 10 ]@'' declares a K\&R style routine of type returning a pointer to an array of 10 integers, while the string ``\lstinline@[ 10 ] int x@'' declares a \CFA style parameter x of type array of 10 integers.
    514605Since the strings overlap starting with the open bracket, \lstinline@[@, there is an ambiguous interpretation for the string.
    515606As well, \CFA-style declarations cannot be used to declare parameters for C-style routine-definitions because of the following ambiguity:
     
    530621\begin{lstlisting}
    531622#define ptoa( n, d ) int (*n)[ d ]
    532 int f( ptoa(p,5) ) ...          // expands to int f( int (*p)[ 5 ] )
    533 [ int ] f( ptoa(p,5) ) ...      // expands to [ int ] f( int (*p)[ 5 ] )
     623int f( ptoa(p,10) ) ...         // expands to int f( int (*p)[ 10 ] )
     624[ int ] f( ptoa(p,10) ) ...     // expands to [ int ] f( int (*p)[ 10 ] )
    534625\end{lstlisting}
    535626Again, programmers are highly encouraged to use one declaration form or the other, rather than mixing the forms.
     
    548639Because the value in the return variable is automatically returned when a \CFA routine terminates, the \lstinline@return@ statement \emph{does not} contain an expression, as in:
    549640\begin{lstlisting}
    550 ®[ int x ]® f() {
     641[ int x ] f() {
    551642        ... x = 0; ... x = y; ...
    552         ®return;® // implicitly return x
     643        return; // implicitly return x
    553644}
    554645\end{lstlisting}
     
    606697for example, the following is incorrect:
    607698\begin{lstlisting}
    608 * [ int x ] f () fp;            // routine name "f" is not allowed
     699* [ int x ] f () fp;            // routine name ``f'' is not allowed
    609700\end{lstlisting}
    610701
     
    612703\section{Named and Default Arguments}
    613704
    614 Named and default arguments~\cite{Hardgrave76}\footnote{
     705Named and default arguments~\cite{Hardgrave76}.\footnote{
    615706Francez~\cite{Francez77} proposed a further extension to the named-parameter passing style, which specifies what type of communication (by value, by reference, by name) the argument is passed to the routine.}
    616707are two mechanisms to simplify routine call.
     
    773864\subsection{Type Nesting}
    774865
    775 \CFA allows \Index{type nesting}, and type qualification of the nested types, where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
     866C allows \Index{type nesting}, but the nested types are hoisted\index{type!hoisting} (refactored) into the enclosing scope.
    776867\begin{quote2}
    777868\begin{tabular}{@{}l@{\hspace{30pt}}l|l@{}}
     
    828919
    829920int fred() {
    830         s.t.c = ®S.®R;  // type qualification
    831         struct ®S.®T t = { ®S.®R, 1, 2 };
    832         enum ®S.®C c;
    833         union ®S.T.®U u;
     921        s.t.c = S.R;
     922        struct S.T t = { S.R, 1, 2 };
     923        enum S.C c;
     924        union S.T.U u;
    834925}
    835926\end{lstlisting}
    836927\end{tabular}
    837928\end{quote2}
    838 In the left example in C, types \lstinline@C@, \lstinline@U@ and \lstinline@T@ are implicitly hoisted outside of type \lstinline@S@ into the containing block scope.
    839 In the right example in \CFA, the types are not hoisted and accessed using the field-selection operator ``\lstinline@.@'' for type qualification, as does Java, rather than the \CC type-selection operator ``\lstinline@::@''.
     929
     930\CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.
     931Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.
     932Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
    840933
    841934
     
    850943which can be used to sort in ascending and descending order by locally redefining the less-than operator into greater-than.
    851944\begin{lstlisting}
    852 const unsigned int size = 5;
    853 int ia[size];
    854 ...                                             // assign values to array ia
    855 qsort( ia, size );              // sort ascending order using builtin ?<?
    856 {
    857         ®int ?<?( int x, int y ) { return x > y; }® // nested routine
    858         qsort( ia, size );      // sort descending order by local redefinition
    859 }
    860 \end{lstlisting}
    861 
    862 Nested routines are not first-class, meaning a nested routine cannot be returned if it has references to variables in its enclosing blocks;
    863 the only exception is references to the external block of the translation unit, as these variables persist for the duration of the program.
    864 The following program in undefined in \CFA (and \lstinline@gcc@\index{gcc})
    865 \begin{lstlisting}
    866 [* [int]( int )] foo() {                // int (*foo())( int )
    867         int ®i® = 7;
    868         int bar( int p ) {
    869                 ®i® += 1;                                       // dependent on local variable
    870                 sout | ®i® | endl;
    871         }
    872         return bar;                                     // undefined because of local dependence
    873 }
    874 int main() {
    875         * [int](int) fp = foo();        // int (*fp)(int)
    876     sout | fp( 3 ) | endl;
    877 }
    878 \end{lstlisting}
    879 because
    880 
    881 Currently, there are no \Index{lambda} expressions, i.e., unnamed routines because routine names are very important to properly select the correct routine.
     945const unsigned int size = 10;
     946int a[size];
     947
     948qsort( a, size );               // ascending order using built in ?<?
     949{                                               // descending order by local redefinition
     950        int ?<?( int a, int b ) { return a > b; } // nested routine
     951        qsort( a, size );
     952}
     953\end{lstlisting}
     954
     955
     956\section{Incompatible}
     957
     958The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
     959
     960\begin{enumerate}
     961\item
     962Change type of character literal \lstinline@int@ to \lstinline@char@.
     963This change allows overloading differentiation argument type matching, e.g.:
     964\begin{lstlisting}
     965int function( int i );
     966int function( char c );
     967function( 'x' );
     968\end{lstlisting}
     969It is preferable that this call match the second version of function rather than the first. \\
     970Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
     971\begin{lstlisting}
     972sizeof('x') == sizeof(int)
     973\end{lstlisting}
     974will not work the same as C++ programs. \\
     975Difficulty of converting: Simple. \\
     976How widely used: Programs which depend upon sizeof('x') are probably rare.
     977
     978\item
     979Change: String literals made \lstinline@const@ \\
     980The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.
     981The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\
     982Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.
     983Effect on original feature: Change to semantics of well-defined feature. \\
     984Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).
     985The most common cases are handled by a new but deprecated standard conversion:
     986\begin{lstlisting}
     987char* p = "abc"; // valid in C, deprecated in C++
     988char* q = expr ? "abc" : "de"; // valid in C, invalid in C++
     989\end{lstlisting}
     990How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.
     991
     992\item
     993Change: C++ does not have \emph{tentative definitions} as in C.
     994E.g., at file scope,
     995\begin{lstlisting}
     996int i;
     997int i;
     998\end{lstlisting}
     999is valid in C, invalid in C++.
     1000This makes it impossible to define mutually referential file-local static
     1001objects, if initializers are restricted to the syntactic forms of C. For example,
     1002\begin{lstlisting}
     1003struct X { int i; struct X *next; };
     1004static struct X a;
     1005static struct X b = { 0, &a };
     1006static struct X a = { 1, &b };
     1007\end{lstlisting}
     1008Rationale: This avoids having different initialization rules for builtin types and userdefined types.
     1009Effect on original feature: Deletion of semantically welldefined feature. \\
     1010Difficulty of converting: Semantic transformation.
     1011In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.
     1012How widely used: Seldom.
     1013
     1014\item
     1015Change: A struct is a scope in C++, not in C
     1016Rationale: Class scope is crucial to C++, and a struct is a class.
     1017Effect on original feature: Change to semantics of well-defined feature.
     1018Difficulty of converting: Semantic transformation.
     1019How widely used: C programs use struct extremely frequently, but the change is only noticeable when
     1020struct, enumeration, or enumerator names are referred to outside the struct. The latter is probably
     1021rare.
     1022
     1023\item
     1024Change: In C++, the name of a nested class is local to its enclosing class.
     1025In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class
     1026Example:
     1027\begin{lstlisting}
     1028struct X {
     1029struct Y { /* ... */ } y;
     1030};
     1031struct Y yy; // valid C, invalid C++
     1032\end{lstlisting}
     1033Rationale: C++ classes have member functions which require that classes establish scopes. The C rule
     1034would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining
     1035locality within a class. A coherent set of scope rules for C++ based on the C rule would be very
     1036complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples
     1037involving nested or local functions.
     1038Effect on original feature: Change of semantics of welldefined
     1039feature.
     1040Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of
     1041the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing
     1042struct is defined. Example:
     1043\begin{lstlisting}
     1044struct Y; // struct Y and struct X are at the same scope
     1045struct X {
     1046struct Y { /* ... */ } y;
     1047};
     1048\end{lstlisting}
     1049All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of
     1050the enclosing struct could be exported to the scope of the enclosing struct. Note: this is a consequence of
     1051the difference in scope rules, which is documented in 3.3.
     1052How widely used: Seldom.
     1053\end{enumerate}
    8821054
    8831055
     
    8891061The general syntax of a tuple is:
    8901062\begin{lstlisting}
    891 [ §\emph{exprlist}§ ]
     1063[ $\emph{exprlist}$ ]
    8921064\end{lstlisting}
    8931065where \lstinline@$\emph{exprlist}$@ is a list of one or more expressions separated by commas.
     
    9091081The general syntax of a tuple type is:
    9101082\begin{lstlisting}
    911 [ §\emph{typelist}§ ]
     1083[ @\emph{typelist}@ ]
    9121084\end{lstlisting}
    9131085where \lstinline@$\emph{typelist}$@ is a list of one or more legal \CFA or C type specifications separated by commas, which may include other tuple type specifications.
     
    9171089[ double, double, double ]
    9181090[ * int, int * ]                // mix of CFA and ANSI
    919 [ * [ 5 ] int, * * char, * [ [ int, int ] ] (int, int) ]
     1091[ * [ 10 ] int, * * char, * [ [ int, int ] ] (int, int) ]
    9201092\end{lstlisting}
    9211093Like tuples, tuple types may be nested, such as \lstinline@[ [ int, int ], int ]@, which is a 2-element tuple type whose first element is itself a tuple type.
     
    10131185First the right-hand tuple is flattened and then the values are assigned individually.
    10141186Flattening is also performed on tuple types.
    1015 For example, the type \lstinline@[ int, [ int, int ], int ]@ can be coerced, using flattening, into the type \lstinline@[ int, int, int, int ]@.
     1187For example, the type \lstinline@[ int, [ int, int ], int ]@ can be coerced, using flattening, into the type lstinline@[ int, int, int, int ]@.
    10161188
    10171189A \newterm{structuring coercion} is the opposite of flattening;
     
    10391211Mass assignment has the following form:
    10401212\begin{lstlisting}
    1041 [ §\emph{lvalue}§, ..., §\emph{lvalue}§ ] = §\emph{expr}§;
    1042 \end{lstlisting}
    1043 The left-hand side is a tuple of \emph{lvalues}, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.
     1213[ @\emph{lvalue}@, ..., @\emph{lvalue}@ ] = @\emph{expr}@;
     1214\end{lstlisting}
     1215The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.
    10441216\lstinline@$\emph{expr}$@ is any standard arithmetic expression.
    10451217Clearly, the types of the entities being assigned must be type compatible with the value of the expression.
     
    10781250Multiple assignment has the following form:
    10791251\begin{lstlisting}
    1080 [ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§ ];
    1081 \end{lstlisting}
    1082 The left-hand side is a tuple of \emph{lvalues}, and the right-hand side is a tuple of \emph{expr}s.
    1083 Each \emph{expr} appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \emph{lvalues} on the left-hand side of the statement using parallel semantics for each assignment.
     1252[ @\emph{lvalue}@, . . ., @\emph{lvalue}@ ] = [ @\emph{expr}@, . . ., @\emph{expr}@ ];
     1253\end{lstlisting}
     1254The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, and the right-hand side is a tuple of \lstinline@$\emph{expr}$@s.
     1255Each \lstinline@$\emph{expr}$@ appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \lstinline@$\emph{lvalues}$@ on the left-hand side of the statement using parallel semantics for each assignment.
    10841256An example of multiple assignment is:
    10851257\begin{lstlisting}
     
    11181290Cascade assignment has the following form:
    11191291\begin{lstlisting}
    1120 §\emph{tuple}§ = §\emph{tuple}§ = ... = §\emph{tuple}§;
     1292@\emph{tuple}@ = @\emph{tuple}@ = ... = @\emph{tuple}@;
    11211293\end{lstlisting}
    11221294and it has the same parallel semantics as for mass and multiple assignment.
     
    11361308Its general form is:
    11371309\begin{lstlisting}
    1138 §\emph{expr}§ . [ §\emph{fieldlist}§ ]
    1139 §\emph{expr}§ -> [ §\emph{fieldlist}§ ]
    1140 \end{lstlisting}
    1141 \emph{expr} is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.
    1142 Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}.
     1310@\emph{expr}@ . [ @\emph{fieldlist}@ ]
     1311@\emph{expr}@ -> [ @\emph{fieldlist}@ ]
     1312\end{lstlisting}
     1313\lstinline@$\emph{expr}$@ is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.
     1314Each element of \lstinline@$\emph{ fieldlist}$@ is an element of the record specified by \lstinline@$\emph{expr}$@.
    11431315A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is
    11441316the following:
     
    11801352\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{C}}        \\
    11811353\begin{lstlisting}
    1182 ®L1:® for ( ... ) {
    1183         ®L2:® for ( ... ) {
    1184                 ®L3:® for ( ... ) {
    1185                         ... break ®L1®; ...
    1186                         ... break ®L2®; ...
    1187                         ... break ®L3®; // or break
     1354L1: for ( ... ) {
     1355        L2: for ( ... ) {
     1356                L3: for ( ... ) {
     1357                        ... break L1; ...
     1358                        ... break L2; ...
     1359                        ... break L3; // or break
    11881360                }
    11891361        }
     
    12101382\multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{C}}        \\
    12111383\begin{lstlisting}
    1212 ®L1®: for ( ... ) {
    1213         ®L2®: for ( ... ) {
    1214                 ®L3®: for ( ... ) {
    1215                         ... continue ®L1®; ...
    1216                         ... continue ®L2®; ...
    1217                         ... continue ®L3®; ...
     1384L1: for ( ... ) {
     1385        L2: for ( ... ) {
     1386                L3: for ( ... ) {
     1387                        ... continue L1; ...
     1388                        ... continue L2; ...
     1389                        ... continue L3; ...
    12181390
    12191391                }
     
    14511623\begin{lstlisting}
    14521624switch ( i ) {
    1453   ®case 1, 3, 5®:
     1625  case 1, 3, 5:
    14541626        ...
    1455   ®case 2, 4, 6®:
     1627  case 2, 4, 6:
    14561628        ...
    14571629}
     
    14621634  case 1: case 3 : case 5:
    14631635        ...
    1464   case 2: case 4 : case 6:
     1636  case 2: case 4 : case 6: /* even values */
    14651637        ...
    14661638}
     
    14831655\begin{lstlisting}
    14841656switch ( i ) {
    1485   ®case 1~5:®
     1657  case 1~5
    14861658        ...
    1487   ®case 10~15:®
     1659  case 10~15
    14881660        ...
    14891661}
     
    15001672&
    15011673\begin{lstlisting}
    1502 
    15031674// 1, 2, 3, 4, 5
    15041675
     
    19972168
    19982169
    1999 \section{Auto Type-Inferencing}
    2000 
    2001 Auto type-inferencing occurs in a declaration where a variable's type is inferred from its initialization expression type.
    2002 \begin{quote2}
    2003 \begin{tabular}{@{}l@{\hspace{30pt}}ll@{}}
    2004 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CC}}        & \multicolumn{1}{c}{\lstinline@gcc@}\index{gcc} \\
    2005 \begin{lstlisting}
    2006 
    2007 auto j = 3.0 * 4;
    2008 int i;
    2009 auto k = i;
    2010 \end{lstlisting}
    2011 &
    2012 \begin{lstlisting}
    2013 #define expr 3.0 * i
    2014 typeof(expr) j = expr;
    2015 int i;
    2016 typeof(i) k = i;
    2017 \end{lstlisting}
    2018 &
    2019 \begin{lstlisting}
    2020 
    2021 // use type of initialization expression
    2022 
    2023 // use type of primary variable
    2024 \end{lstlisting}
    2025 \end{tabular}
    2026 \end{quote2}
    2027 The two important capabilities are:
    2028 \begin{itemize}
    2029 \item
    2030 preventing having to determine or write out long generic types,
    2031 \item
    2032 ensure secondary variables, related to a primary variable, always have the same type.
    2033 \end{itemize}
    2034 
    2035 In \CFA, \lstinline@typedef@ provides a mechanism to alias long type names with short ones, both globally and locally, but not eliminate the use of the short name.
    2036 \lstinline@gcc@ provides \lstinline@typeof@ to declare a secondary variable from a primary variable.
    2037 \CFA also relies heavily on the specification of the left-hand side of assignment for type inferencing, so in many cases it is crucial to specify the type of the left-hand side to select the correct type of the right-hand expression.
    2038 Only for overloaded routines with the same return type is variable type-inferencing possible.
    2039 Finally, \lstinline@auto@ presents the programming problem of tracking down a type when the type is actually needed.
    2040 For example, given
    2041 \begin{lstlisting}
    2042 auto j = ®...®
    2043 \end{lstlisting}
    2044 and the need to write a routine to compute using \lstinline@j@
    2045 \begin{lstlisting}
    2046 void rtn( ®...® parm );
    2047 rtn( j );
    2048 \end{lstlisting}
    2049 A programmer must work backwards to determine the type of \lstinline@j@'s initialization expression, reconstructing the possibly long generic type-name.
    2050 In this situation, having the type name or a short alias is very useful.
    2051 
    2052 There is also the conundrum in type inferencing of when to \emph{\Index{brand}} a type.
    2053 That is, when is the type of the variable more important than the type of its initialization expression.
    2054 For example, if a change is made in an initialization expression, it can cause hundreds or thousands of cascading type changes and/or errors.
    2055 At some point, a programmer wants the type of the variable to remain constant and the expression to be in error when it changes.
    2056 
    2057 Given \lstinline@typedef@ and \lstinline@typeof@ in \CFA, and the strong need to use the type of left-hand side in inferencing, auto type-inferencing is not supported at this time.
    2058 Should a significant need arise, this feature can be revisited.
    2059 
    2060 
    2061 \section{Generics}
     2170\section{Generics }
    20622171
    20632172\CFA supports parametric polymorphism to allow users to define generic functions and types.
     
    22592368
    22602369        try {
    2261                 throw 13;
     2370        throw 13;
    22622371        }
    22632372        catch(int e) {
    2264                 printf(.caught an exception: %d\n., e);
     2373        printf(.caught an exception: %d\n., e);
    22652374        }
    22662375\end{lstlisting}
     
    23482457
    23492458
    2350 \section{Syntactic Anomalies}
    2351 
    2352 The number 0 and 1 are treated specially in \CFA, and can be redefined as variables.
    2353 One syntactic anomaly is when a field in an structure is names 0 or 1:
    2354 \begin{lstlisting}
    2355 struct S {
    2356         int 0, 1;
    2357 } s;
    2358 \end{lstlisting}
    2359 The problem occurs in accesing these fields using the selection operation ``\lstinline@.@'':
    2360 \begin{lstlisting}
    2361 s.0 = 0;        // ambiguity with floating constant .0
    2362 s.1 = 1;        // ambiguity with floating constant .1
    2363 \end{lstlisting}
    2364 To make this work, a space is required after the field selection:
    2365 \begin{lstlisting}
    2366 ®s.§\textvisiblespace§0® = 0;
    2367 ®s.§\textvisiblespace§1® = 1;
    2368 \end{lstlisting}
    2369 While this sytact is awkward, it is unlikely many programers will name fields of a structure 0 or 1.
    2370 Like the \CC lexical problem with closing template-syntax, e.g, \lstinline@Foo<Bar<int®>>®@, this issue can be solved with a more powerful lexer/parser.
    2371 
    2372 There are several ambiguous cases with operator identifiers, e.g., \lstinline@int *?*?()@, where the string \lstinline@*?*?@ can be lexed as \lstinline@*@/\lstinline@?*?@ or \lstinline@*?@/\lstinline@*?@.
    2373 Since it is common practise to put a unary operator juxtaposed to an identifier, e.g., \lstinline@*i@, users will be annoyed if they cannot do this with respect to operator identifiers.
    2374 Even with this special hack, there are 5 general cases that cannot be handled.
    2375 The first case is for the function-call identifier \lstinline@?()@:
    2376 \begin{lstlisting}
    2377 int *§\textvisiblespace§?()();  // declaration: space required after '*'
    2378 *§\textvisiblespace§?()();              // expression: space required after '*'
    2379 \end{lstlisting}
    2380 Without the space, the string \lstinline@*?()@ is ambiguous without N character look ahead;
    2381 it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument/parameter list.
    2382 
    2383 The 4 remaining cases occur in expressions:
    2384 \begin{lstlisting}
    2385 i++§\textvisiblespace§?i:0;             // space required before '?'
    2386 i--§\textvisiblespace§?i:0;             // space required before '?'
    2387 i§\textvisiblespace§?++i:0;             // space required after '?'
    2388 i§\textvisiblespace§?--i:0;             // space required after '?'
    2389 \end{lstlisting}
    2390 In the first two cases, the string \lstinline@i++?@ is ambiguous, where this string can be lexed as \lstinline@i@ / \lstinline@++?@ or \lstinline@i++@ / \lstinline@?@;
    2391 it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument list.
    2392 In the second two cases, the string \lstinline@?++x@ is ambiguous, where this string can be lexed as \lstinline@?++@ / \lstinline@x@ or \lstinline@?@ / y\lstinline@++x@;
    2393 it requires scanning ahead to determine if there is a \lstinline@'('@, which is the start of an argument list.
     2459\section{I/O Library}
     2460\label{s:IOLibrary}
     2461
     2462The goal for \CFA I/O is to make I/O as simple as possible for the general case, while fully supporting polmorphism and user defined types in a consistent way.
     2463The general case is printing out a sequence of variables separated by whitespace.
     2464\begin{lstlisting}
     2465int x = 0, y = 1, z = 2;
     2466sout | x | y | z | endl;
     2467
     2468cout << x << " " << y << " " << z << endl;
     2469\end{lstlisting}
     2470The \CC form takes almost twice as many characters.
     2471
     2472The logical-or operator is used because it is the lowest priority overloadable operator, other than assignment.
     2473Therefore, most output expressions do not require parenthesis.
     2474\begin{lstlisting}
     2475int x = 0, y = 1, z = 2;
     2476sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
     2477
     2478cout << x * 3 << y + 1 << (z << 2) << (x == y) << (x | y) << (x || y) << (x > z ? 1 : 2) << endl;
     2479\end{lstlisting}
     2480
     2481Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction.
     2482
     2483\begin{figure}
     2484\begin{lstlisting}[mathescape=off]
     2485#include <fstream>
     2486
     2487int main() {
     2488        char c;
     2489        short int si;
     2490        unsigned short int usi;
     2491        int i;
     2492        unsigned int ui;
     2493        long int li;
     2494        unsigned long int uli;
     2495        long long int lli;
     2496        unsigned long long int ulli;
     2497        float f;
     2498        double d;
     2499        long double ld;
     2500        float _Complex fc;
     2501        double _Complex dc;
     2502        long double _Complex ldc;
     2503        char s1[10], s2[10];
     2504
     2505        ifstream in;
     2506        open( &in, "read.data", "r" );
     2507
     2508        &in | &c
     2509                | &si | &usi | &i | &ui | &li | &uli | &lli | &ulli
     2510                | &f | &d | &ld
     2511                | &fc | &dc | &ldc
     2512                | str( s1 ) | str( s2, 10 );
     2513
     2514        sout | c | ' ' | endl
     2515                 | si | usi | i | ui | li | uli | lli | ulli | endl
     2516                 | f | d | ld | endl
     2517                 | f | "" | d | "" | ld | endl;
     2518
     2519        sepSet( sout, ", $" );
     2520        sout | fc | dc | ldc | endl
     2521                 | sepOn | s1 | sepOff | s2 | endl
     2522                 | s1 | "" | s2 | endl;
     2523}
     2524
     2525$ cat read.data
     2526A 1 2 3 4 5 6 7 8 1.1 1.2 1.3 1.1+2.3 1.1-2.3 1.1-2.3 abc xyz
     2527$ a.out
     2528A
     25291 2 3 4 5 6 7 8
     25301.1 1.2 1.3
     25311.11.21.3
     25321.1+2.3i, $1.1-2.3i, $1.1-2.3i
     2533, $abcxyz
     2534abcxyz
     2535\end{lstlisting}
     2536\end{figure}
     2537
     2538
     2539\section{Standard Library}
     2540\label{s:StandardLibrary}
     2541
     2542The goal of the \CFA standard-library is to wrap many of the existing C library-routines that are explicitly polymorphic into implicitly polymorphic versions.
     2543
     2544
     2545\subsection{malloc}
     2546
     2547\begin{lstlisting}
     2548forall( otype T ) T * malloc( void );
     2549forall( otype T ) T * malloc( char fill );
     2550forall( otype T ) T * malloc( T * ptr, size_t size );
     2551forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
     2552forall( otype T ) T * calloc( size_t size );
     2553forall( otype T ) T * realloc( T * ptr, size_t size );
     2554forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
     2555
     2556forall( otype T ) T * aligned_alloc( size_t alignment );
     2557forall( otype T ) T * memalign( size_t alignment );             // deprecated
     2558forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
     2559
     2560forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
     2561forall( otype T ) T * memset( T * ptr );                                // remove when default value available
     2562\end{lstlisting}
     2563
     2564
     2565\subsection{ato/strto}
     2566
     2567\begin{lstlisting}
     2568int ato( const char * ptr );
     2569unsigned int ato( const char * ptr );
     2570long int ato( const char * ptr );
     2571unsigned long int ato( const char * ptr );
     2572long long int ato( const char * ptr );
     2573unsigned long long int ato( const char * ptr );
     2574float ato( const char * ptr );
     2575double ato( const char * ptr );
     2576long double ato( const char * ptr );
     2577float _Complex ato( const char * ptr );
     2578double _Complex ato( const char * ptr );
     2579long double _Complex ato( const char * ptr );
     2580
     2581int strto( const char * sptr, char ** eptr, int base );
     2582unsigned int strto( const char * sptr, char ** eptr, int base );
     2583long int strto( const char * sptr, char ** eptr, int base );
     2584unsigned long int strto( const char * sptr, char ** eptr, int base );
     2585long long int strto( const char * sptr, char ** eptr, int base );
     2586unsigned long long int strto( const char * sptr, char ** eptr, int base );
     2587float strto( const char * sptr, char ** eptr );
     2588double strto( const char * sptr, char ** eptr );
     2589long double strto( const char * sptr, char ** eptr );
     2590float _Complex strto( const char * sptr, char ** eptr );
     2591double _Complex strto( const char * sptr, char ** eptr );
     2592long double _Complex strto( const char * sptr, char ** eptr );
     2593\end{lstlisting}
     2594
     2595
     2596\subsection{bsearch/qsort}
     2597
     2598\begin{lstlisting}
     2599forall( otype T | { int ?<?( T, T ); } )
     2600T * bsearch( const T key, const T * arr, size_t dimension );
     2601
     2602forall( otype T | { int ?<?( T, T ); } )
     2603void qsort( const T * arr, size_t dimension );
     2604\end{lstlisting}
     2605
     2606
     2607\subsection{abs}
     2608
     2609\begin{lstlisting}
     2610char abs( char );
     2611extern "C" {
     2612int abs( int );         // use default C routine for int
     2613} // extern
     2614long int abs( long int );
     2615long long int abs( long long int );
     2616float abs( float );
     2617double abs( double );
     2618long double abs( long double );
     2619float _Complex abs( float _Complex );
     2620double _Complex abs( double _Complex );
     2621long double _Complex abs( long double _Complex );
     2622\end{lstlisting}
     2623
     2624
     2625\subsection{random}
     2626
     2627\begin{lstlisting}
     2628void randseed( long int s );
     2629char random();
     2630int random();
     2631unsigned int random();
     2632long int random();
     2633unsigned long int random();
     2634float random();
     2635double random();
     2636float _Complex random();
     2637double _Complex random();
     2638long double _Complex random();
     2639\end{lstlisting}
     2640
     2641
     2642\subsection{min/max/swap}
     2643
     2644\begin{lstlisting}
     2645forall( otype T | { int ?<?( T, T ); } )
     2646T min( const T t1, const T t2 );
     2647
     2648forall( otype T | { int ?>?( T, T ); } )
     2649T max( const T t1, const T t2 );
     2650
     2651forall( otype T )
     2652void swap( T * t1, T * t2 );
     2653\end{lstlisting}
    23942654
    23952655
     
    24162676
    24172677task creates a type with implicit locking, separate stack, and a thread
    2418 
    24192678
    24202679\subsection{Monitors}
     
    33173576
    33183577
    3319 \subsection[Comparing Key Features of CFA]{Comparing Key Features of \CFA}
     3578\subsection{Comparing Key Features of \CFA}
    33203579
    33213580
     
    35163775\multicolumn{1}{c|}{\textbf{\CFA/\CC}} & \multicolumn{1}{c|}{\textbf{Go}} & \multicolumn{1}{c}{\textbf{Rust}}   \\
    35173776\hline
    3518 \begin{lstlisting}[boxpos=t]
     3777\begin{lstlisting}
    35193778extern "C" {
    35203779#include <sys/types.h>
     
    35233782}
    35243783size_t fileSize( const char *path ) {
    3525         struct stat s;
     3784        stat s;
    35263785        stat(path, &s);
    35273786        return s.st_size;
     
    35293788\end{lstlisting}
    35303789&
    3531 \begin{lstlisting}[boxpos=t]
     3790\begin{lstlisting}
    35323791/*
    35333792#cgo
     
    35483807\end{lstlisting}
    35493808&
    3550 \begin{lstlisting}[boxpos=t]
     3809\begin{lstlisting}
    35513810use libc::{c_int, size_t};
     3811
     3812// The following declarations are
    35523813// translated from sys/stat.h
    35533814#[repr(C)]
     
    35573818        ...
    35583819}
     3820
    35593821#[link(name = "libc")]
    35603822extern {
     
    35623824        buf: *mut stat_t) -> c_int;
    35633825}
     3826
    35643827fn fileSize(path: *const u8) -> size_t
    35653828{
    35663829        unsafe {
    3567                 let mut buf: stat_t = uninit();
    3568                 stat(path, &mut buf);
    3569                 buf.st_size
     3830        let mut buf: stat_t = uninit();
     3831        stat(path, &mut buf);
     3832        buf.st_size
    35703833        }
    35713834}
     
    36903953
    36913954
    3692 \begin{comment}
    3693 \subsubsection{Modules / Packages}
     3955\subsubsection{Modules/Packages}
    36943956
    36953957\begin{lstlisting}
     
    37704032}
    37714033\end{lstlisting}
    3772 \end{comment}
    3773 
    37744034
    37754035\subsubsection{Parallel Tasks}
     
    39274187\end{flushleft}
    39284188
    3929 \lstset{basicstyle=\sf\relsize{-1}}
    3930 
    3931 
    39324189\subsection{Summary of Language Comparison}
    39334190
    39344191
    3935 \subsubsection[C++]{\CC}
     4192\subsubsection{\CC}
    39364193
    39374194\CC is a general-purpose programming language.
     
    39984255
    39994256
    4000 \appendix
    4001 
    4002 
    4003 \section{Incompatible}
    4004 
    4005 The following incompatibles exist between C and \CFA, and are similar to Annex C for \CC~\cite{ANSI14:C++}.
    4006 
    4007 \begin{enumerate}
    4008 \item
    4009 Change type of character literal \lstinline@int@ to \lstinline@char@.
    4010 This change allows overloading differentiation argument type matching, e.g.:
    4011 \begin{lstlisting}
    4012 int function( int i );
    4013 int function( char c );
    4014 function( 'x' );
    4015 \end{lstlisting}
    4016 It is preferable that this call match the second version of function rather than the first. \\
    4017 Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
    4018 \begin{lstlisting}
    4019 sizeof('x') == sizeof(int)
    4020 \end{lstlisting}
    4021 will not work the same as C++ programs. \\
    4022 Difficulty of converting: Simple. \\
    4023 How widely used: Programs which depend upon sizeof('x') are probably rare.
    4024 
    4025 \item
    4026 Change: String literals made \lstinline@const@ \\
    4027 The type of a string literal is changed from \lstinline@array of char@ to \lstinline@array of const char@.
    4028 The type of a wide string literal is changed from \lstinline@array of wchar_t@ to \lstinline@array of const wchar_t@. \\
    4029 Rationale: This avoids calling an inappropriate overloaded function, which might expect to be able to modify its argument.
    4030 Effect on original feature: Change to semantics of well-defined feature. \\
    4031 Difficulty of converting: Simple syntactic transformation, because string literals can be converted to \lstinline@char*;@ (4.2).
    4032 The most common cases are handled by a new but deprecated standard conversion:
    4033 \begin{lstlisting}
    4034 char* p = "abc"; // valid in C, deprecated in C++
    4035 char* q = expr ? "abc" : "de"; // valid in C, invalid in C++
    4036 \end{lstlisting}
    4037 How widely used: Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.
    4038 
    4039 \item
    4040 Change: C++ does not have \emph{tentative definitions} as in C.
    4041 E.g., at file scope,
    4042 \begin{lstlisting}
    4043 int i;
    4044 int i;
    4045 \end{lstlisting}
    4046 is valid in C, invalid in C++.
    4047 This makes it impossible to define mutually referential file-local static
    4048 objects, if initializers are restricted to the syntactic forms of C. For example,
    4049 \begin{lstlisting}
    4050 struct X { int i; struct X *next; };
    4051 static struct X a;
    4052 static struct X b = { 0, &a };
    4053 static struct X a = { 1, &b };
    4054 \end{lstlisting}
    4055 Rationale: This avoids having different initialization rules for builtin types and userdefined types.
    4056 Effect on original feature: Deletion of semantically welldefined feature. \\
    4057 Difficulty of converting: Semantic transformation.
    4058 In C++, the initializer for one of a set of mutuallyreferential filelocal static objects must invoke a function call to achieve the initialization.
    4059 How widely used: Seldom.
    4060 
    4061 \item
    4062 Change: A struct is a scope in C++, not in C \\
    4063 Rationale: Class scope is crucial to C++, and a struct is a class. \\
    4064 Effect on original feature: Change to semantics of well-defined feature. \\
    4065 Difficulty of converting: Semantic transformation. \\
    4066 How widely used: C programs use struct extremely frequently, but the change is only noticeable when struct, enumeration, or enumerator names are referred to outside the struct.
    4067 The latter is probably rare.
    4068 
    4069 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \CC.
    4070 Nested types are not hoisted and can be referenced using the field selection operator ``\lstinline@.@'', unlike the \CC scope-resolution operator ``\lstinline@::@''.
    4071 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
    4072 
    4073 \item
    4074 Change: In C++, the name of a nested class is local to its enclosing class.
    4075 In C the name of the nested class belongs to the same scope as the name of the outermost enclosing class
    4076 Example:
    4077 \begin{lstlisting}
    4078 struct X {
    4079 struct Y { /* ... */ } y;
    4080 };
    4081 struct Y yy; // valid C, invalid C++
    4082 \end{lstlisting}
    4083 Rationale: C++ classes have member functions which require that classes establish scopes.
    4084 The C rule would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining locality within a class. A coherent set of scope rules for C++ based on the C rule would be very complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples involving nested or local functions.
    4085 Effect on original feature: Change of semantics of welldefined feature.
    4086 Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:
    4087 \begin{lstlisting}
    4088 struct Y; // struct Y and struct X are at the same scope
    4089 struct X {
    4090 struct Y { /* ... */ } y;
    4091 };
    4092 \end{lstlisting}
    4093 All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of the enclosing struct could be exported to the scope of the enclosing struct.
    4094 Note: this is a consequence of the difference in scope rules, which is documented in 3.3.
    4095 How widely used: Seldom.
    4096 \end{enumerate}
    4097 
    4098 
    4099 \section{I/O Library}
    4100 \label{s:IOLibrary}
    4101 \index{input/output library}
    4102 
    4103 The goal for \CFA I/O is to make I/O as simple as possible for the general case, while fully supporting polmorphism and user defined types in a consistent way.
    4104 The general case is printing out a sequence of variables separated by whitespace.
    4105 \begin{quote2}
    4106 \begin{tabular}{@{}l@{\hspace{30pt}}l@{}}
    4107 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}       & \multicolumn{1}{c}{\textbf{\CC}}      \\
    4108 \begin{lstlisting}
    4109 int x = 0, y = 1, z = 2;
    4110 ®sout® ®|® x ®|® y ®|® z ®| endl®;
    4111 \end{lstlisting}
    4112 &
    4113 \begin{lstlisting}
    4114 
    4115 cout << x << " " << y << " " << z << endl;
    4116 \end{lstlisting}
    4117 \end{tabular}
    4118 \end{quote2}
    4119 The \CFA form is half as many characters, and is similar to \Index{Python} I/O with respect to implicit separators.
    4120 
    4121 The logical-or operator is used because it is the lowest-priority overloadable operator, other than assignment.
    4122 Therefore, fewer output expressions require parenthesis.
    4123 \begin{quote2}
    4124 \begin{tabular}{@{}ll@{}}
    4125 \textbf{\CFA:}
    4126 &
    4127 \begin{lstlisting}
    4128 sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
    4129 \end{lstlisting}
    4130 \\
    4131 \textbf{\CC:}
    4132 &
    4133 \begin{lstlisting}
    4134 cout << x * 3 << y + 1 << (z << 2) << (x == y) << (x | y) << (x || y) << (x > z ? 1 : 2) << endl;
    4135 \end{lstlisting}
    4136 \end{tabular}
    4137 \end{quote2}
    4138 Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction.
    4139 
    4140 The implicit seperator\index{I/O separator} character (space/blank) is a separator not a terminator.
    4141 The rules for implicitly adding the separator are:
    4142 \begin{enumerate}
    4143 \item
    4144 A seperator does not appear at the start or end of a line.
    4145 \begin{lstlisting}[belowskip=0pt]
    4146 sout | 1 | 2 | 3 | endl;
    4147 \end{lstlisting}
    4148 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4149 1 2 3
    4150 \end{lstlisting}
    4151 \item
    4152 A seperator does not appear before or after a character literal or variable.
    4153 \begin{lstlisting}
    4154 sout | '1' | '2' | '3' | endl;
    4155 123
    4156 \end{lstlisting}
    4157 \item
    4158 A seperator does not appear before or after a null (empty) C string
    4159 \begin{lstlisting}
    4160 sout | 1 | "" | 2 | "" | 3 | endl;
    4161 123
    4162 \end{lstlisting}
    4163 which is a local mechanism to disable insertion of the separator character.
    4164 \item
    4165 A seperator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¡¿«@
    4166 %$
    4167 \begin{lstlisting}[mathescape=off]
    4168 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
    4169 \end{lstlisting}
    4170 %$
    4171 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4172 x (1 x [2 x {3 x $4 x £5 x ¥6 x ¡7 x ¿8 x «9
    4173 \end{lstlisting}
    4174 %$
    4175 \item
    4176 A seperator does not appear after a C string ending with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline@,.:;!?)]}%¢»@
    4177 \begin{lstlisting}[belowskip=0pt]
    4178 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
    4179          | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
    4180 \end{lstlisting}
    4181 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4182 1, x 2. x 3: x 4; x 5! x 6? x 7) x 8] x 9} x 10% x 11¢ 12»
    4183 \end{lstlisting}
    4184 \item
    4185 A seperator does not appear before or after a C string begining/ending with the \Index{ASCII} quote or whitespace characters: \lstinline[showspaces=true]@`'" \t\v\f\r\n@
    4186 \begin{lstlisting}[belowskip=0pt]
    4187 sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;
    4188 \end{lstlisting}
    4189 \begin{lstlisting}[mathescape=off,showspaces=true,showtabs=true,aboveskip=0pt,belowskip=0pt]
    4190 x`1`x'2'x"3"x x 4 x x   1       x
    4191 \end{lstlisting}
    4192 \end{enumerate}
    4193 The following \CC-style \Index{manipulator}s allow further control over implicit seperation.
    4194 \begin{lstlisting}[mathescape=off,belowskip=0pt]
    4195 sout | sepOn | 1 | 2 | 3 | sepOn | endl;        // separator at start of line
    4196 \end{lstlisting}
    4197 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4198  1 2 3
    4199 \end{lstlisting}
    4200 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4201 sout | 1 | sepOff | 2 | 3 | endl;                       // turn off implicit separator temporarily
    4202 \end{lstlisting}
    4203 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4204 12 3
    4205 \end{lstlisting}
    4206 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4207 sout | sepDisable | 1 | 2 | 3 | endl;           // turn off implicit separation, affects all subsequent prints
    4208 \end{lstlisting}
    4209 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4210 123
    4211 \end{lstlisting}
    4212 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4213 sout | 1 | sepOn | 2 | 3 | endl;                        // turn on implicit separator temporarily
    4214 \end{lstlisting}
    4215 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4216 1 23
    4217 \end{lstlisting}
    4218 \begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4219 sout | sepEnable | 1 | 2 | 3 | endl;            // turn on implicit separation, affects all subsequent prints
    4220 \end{lstlisting}
    4221 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
    4222  1 2 3
    4223 \end{lstlisting}
    4224 \begin{lstlisting}[mathescape=off,aboveskip=0pt,aboveskip=0pt,belowskip=0pt]
    4225 sepSet( sout, ", $" );                                          // change separator from " " to ", $"
    4226 sout | 1 | 2 | 3 | endl;
    4227 \end{lstlisting}
    4228 %$
    4229 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt]
    4230 1, $2, $3
    4231 \end{lstlisting}
    4232 %$
    4233 \begin{comment}
    4234 #include <fstream>
    4235 
    4236 int main() {
    4237         int x = 3, y = 5, z = 7;
    4238         sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
    4239         sout | 1 | 2 | 3 | endl;
    4240         sout | '1' | '2' | '3' | endl;
    4241         sout | 1 | "" | 2 | "" | 3 | endl;
    4242         sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
    4243         sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
    4244                  | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
    4245         sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;
    4246         sout | sepOn | 1 | 2 | 3 | sepOn | endl;        // separator at start of line
    4247         sout | 1 | sepOff | 2 | 3 | endl;                       // turn off implicit separator temporarily
    4248         sout | sepDisable | 1 | 2 | 3 | endl;           // turn off implicit separation, affects all subsequent prints
    4249         sout | 1 | sepOn | 2 | 3 | endl;                        // turn on implicit separator temporarily
    4250         sout | sepEnable | 1 | 2 | 3 | endl;            // turn on implicit separation, affects all subsequent prints
    4251         sepSet( sout, ", $" );                                          // change separator from " " to ", $"
    4252         sout | 1 | 2 | 3 | endl;
    4253 
    4254 }
    4255 
    4256 // Local Variables: //
    4257 // tab-width: 4 //
    4258 // End: //
    4259 \end{comment}
    4260 %$
    4261 
    4262 
    4263 \section{Standard Library}
    4264 \label{s:StandardLibrary}
    4265 
    4266 The goal of the \CFA standard-library is to wrap many of the existing C library-routines that are explicitly polymorphic into implicitly polymorphic versions.
    4267 
    4268 
    4269 \subsection{malloc}
    4270 
    4271 \begin{lstlisting}
    4272 forall( otype T ) T * malloc( void );§\indexc{malloc}§
    4273 forall( otype T ) T * malloc( char fill );
    4274 forall( otype T ) T * malloc( T * ptr, size_t size );
    4275 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    4276 forall( otype T ) T * calloc( size_t nmemb );§\indexc{calloc}§
    4277 forall( otype T ) T * realloc( T * ptr, size_t size );§\indexc{ato}§
    4278 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
    4279 
    4280 forall( otype T ) T * aligned_alloc( size_t alignment );§\indexc{ato}§
    4281 forall( otype T ) T * memalign( size_t alignment );             // deprecated
    4282 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    4283 
    4284 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    4285 forall( otype T ) T * memset( T * ptr );                                // remove when default value available
    4286 \end{lstlisting}
    4287 
    4288 
    4289 \subsection{ato / strto}
    4290 
    4291 \begin{lstlisting}
    4292 int ato( const char * ptr );§\indexc{ato}§
    4293 unsigned int ato( const char * ptr );
    4294 long int ato( const char * ptr );
    4295 unsigned long int ato( const char * ptr );
    4296 long long int ato( const char * ptr );
    4297 unsigned long long int ato( const char * ptr );
    4298 float ato( const char * ptr );
    4299 double ato( const char * ptr );
    4300 long double ato( const char * ptr );
    4301 float _Complex ato( const char * ptr );
    4302 double _Complex ato( const char * ptr );
    4303 long double _Complex ato( const char * ptr );
    4304 
    4305 int strto( const char * sptr, char ** eptr, int base );
    4306 unsigned int strto( const char * sptr, char ** eptr, int base );
    4307 long int strto( const char * sptr, char ** eptr, int base );
    4308 unsigned long int strto( const char * sptr, char ** eptr, int base );
    4309 long long int strto( const char * sptr, char ** eptr, int base );
    4310 unsigned long long int strto( const char * sptr, char ** eptr, int base );
    4311 float strto( const char * sptr, char ** eptr );
    4312 double strto( const char * sptr, char ** eptr );
    4313 long double strto( const char * sptr, char ** eptr );
    4314 float _Complex strto( const char * sptr, char ** eptr );
    4315 double _Complex strto( const char * sptr, char ** eptr );
    4316 long double _Complex strto( const char * sptr, char ** eptr );
    4317 \end{lstlisting}
    4318 
    4319 
    4320 \subsection{bsearch / qsort}
    4321 
    4322 \begin{lstlisting}
    4323 forall( otype T | { int ?<?( T, T ); } )
    4324 T * bsearch( const T key, const T * arr, size_t dimension );§\indexc{bsearch}§
    4325 
    4326 forall( otype T | { int ?<?( T, T ); } )
    4327 void qsort( const T * arr, size_t dimension );§\indexc{qsort}§
    4328 \end{lstlisting}
    4329 
    4330 
    4331 \subsection{abs}
    4332 
    4333 \begin{lstlisting}
    4334 char abs( char );§\indexc{abs}§
    4335 int abs( int );
    4336 long int abs( long int );
    4337 long long int abs( long long int );
    4338 float abs( float );
    4339 double abs( double );
    4340 long double abs( long double );
    4341 float abs( float _Complex );
    4342 double abs( double _Complex );
    4343 long double abs( long double _Complex );
    4344 \end{lstlisting}
    4345 
    4346 
    4347 \subsection{random}
    4348 
    4349 \begin{lstlisting}
    4350 void rand48seed( long int s );§\indexc{rand48seed}§
    4351 char rand48();§\indexc{rand48}§
    4352 int rand48();
    4353 unsigned int rand48();
    4354 long int rand48();
    4355 unsigned long int rand48();
    4356 float rand48();
    4357 double rand48();
    4358 float _Complex rand48();
    4359 double _Complex rand48();
    4360 long double _Complex rand48();
    4361 \end{lstlisting}
    4362 
    4363 
    4364 \subsection{min / max / swap}
    4365 
    4366 \begin{lstlisting}
    4367 forall( otype T | { int ?<?( T, T ); } )
    4368 T min( const T t1, const T t2 );§\indexc{min}§
    4369 
    4370 forall( otype T | { int ?>?( T, T ); } )
    4371 T max( const T t1, const T t2 );§\indexc{max}§
    4372 
    4373 forall( otype T )
    4374 void swap( T * t1, T * t2 );§\indexc{swap}§
    4375 \end{lstlisting}
    4376 
    4377 
    4378 \section{Math Library}
    4379 \label{s:Math Library}
    4380 
    4381 The goal of the \CFA math-library is to wrap many of the existing C math library-routines that are explicitly polymorphic into implicitly polymorphic versions.
    4382 
    4383 
    4384 \subsection{General}
    4385 
    4386 \begin{lstlisting}
    4387 float fabs( float );§\indexc{fabs}§
    4388 double fabs( double );
    4389 long double fabs( long double );
    4390 float cabs( float _Complex );
    4391 double cabs( double _Complex );
    4392 long double cabs( long double _Complex );
    4393 
    4394 float ?%?( float, float );§\indexc{fmod}§
    4395 float fmod( float, float );
    4396 double ?%?( double, double );
    4397 double fmod( double, double );
    4398 long double ?%?( long double, long double );
    4399 long double fmod( long double, long double );
    4400 
    4401 float remainder( float, float );§\indexc{remainder}§
    4402 double remainder( double, double );
    4403 long double remainder( long double, long double );
    4404 
    4405 [ int, float ] remquo( float, float );§\indexc{remquo}§
    4406 float remquo( float, float, int * );
    4407 [ int, double ] remquo( double, double );
    4408 double remquo( double, double, int * );
    4409 [ int, long double ] remquo( long double, long double );
    4410 long double remquo( long double, long double, int * );
    4411 
    4412 [ int, float ] div( float, float );                                             // alternative name for remquo
    4413 float div( float, float, int * );§\indexc{div}§
    4414 [ int, double ] div( double, double );
    4415 double div( double, double, int * );
    4416 [ int, long double ] div( long double, long double );
    4417 long double div( long double, long double, int * );
    4418 
    4419 float fma( float, float, float );§\indexc{fma}§
    4420 double fma( double, double, double );
    4421 long double fma( long double, long double, long double );
    4422 
    4423 float fdim( float, float );§\indexc{fdim}§
    4424 double fdim( double, double );
    4425 long double fdim( long double, long double );
    4426 
    4427 float nan( const char * );§\indexc{nan}§
    4428 double nan( const char * );
    4429 long double nan( const char * );
    4430 \end{lstlisting}
    4431 
    4432 
    4433 \subsection{Exponential}
    4434 
    4435 \begin{lstlisting}
    4436 float exp( float );§\indexc{exp}§
    4437 double exp( double );
    4438 long double exp( long double );
    4439 float _Complex exp( float _Complex );
    4440 double _Complex exp( double _Complex );
    4441 long double _Complex exp( long double _Complex );
    4442 
    4443 float exp2( float );§\indexc{exp2}§
    4444 double exp2( double );
    4445 long double exp2( long double );
    4446 float _Complex exp2( float _Complex );
    4447 double _Complex exp2( double _Complex );
    4448 long double _Complex exp2( long double _Complex );
    4449 
    4450 float expm1( float );§\indexc{expm1}§
    4451 double expm1( double );
    4452 long double expm1( long double );
    4453 
    4454 float log( float );§\indexc{log}§
    4455 double log( double );
    4456 long double log( long double );
    4457 float _Complex log( float _Complex );
    4458 double _Complex log( double _Complex );
    4459 long double _Complex log( long double _Complex );
    4460 
    4461 float log2( float );§\indexc{log2}§
    4462 double log2( double );
    4463 long double log2( long double );
    4464 float _Complex log2( float _Complex );
    4465 double _Complex log2( double _Complex );
    4466 long double _Complex log2( long double _Complex );
    4467 
    4468 float log10( float );§\indexc{log10}§
    4469 double log10( double );
    4470 long double log10( long double );
    4471 float _Complex log10( float _Complex );
    4472 double _Complex log10( double _Complex );
    4473 long double _Complex log10( long double _Complex );
    4474 
    4475 float log1p( float );§\indexc{log1p}§
    4476 double log1p( double );
    4477 long double log1p( long double );
    4478 
    4479 int ilogb( float );§\indexc{ilogb}§
    4480 int ilogb( double );
    4481 int ilogb( long double );
    4482 
    4483 float logb( float );§\indexc{logb}§
    4484 double logb( double );
    4485 long double logb( long double );
    4486 \end{lstlisting}
    4487 
    4488 
    4489 \subsection{Power}
    4490 
    4491 \begin{lstlisting}
    4492 float sqrt( float );§\indexc{sqrt}§
    4493 double sqrt( double );
    4494 long double sqrt( long double );
    4495 float _Complex sqrt( float _Complex );
    4496 double _Complex sqrt( double _Complex );
    4497 long double _Complex sqrt( long double _Complex );
    4498 
    4499 float cbrt( float );§\indexc{cbrt}§
    4500 double cbrt( double );
    4501 long double cbrt( long double );
    4502 
    4503 float hypot( float, float );§\indexc{hypot}§
    4504 double hypot( double, double );
    4505 long double hypot( long double, long double );
    4506 
    4507 float pow( float, float );§\indexc{pow}§
    4508 double pow( double, double );
    4509 long double pow( long double, long double );
    4510 float _Complex pow( float _Complex, float _Complex );
    4511 double _Complex pow( double _Complex, double _Complex );
    4512 long double _Complex pow( long double _Complex, long double _Complex );
    4513 \end{lstlisting}
    4514 
    4515 
    4516 \subsection{Trigonometric}
    4517 
    4518 \begin{lstlisting}
    4519 float sin( float );§\indexc{sin}§
    4520 double sin( double );
    4521 long double sin( long double );
    4522 float _Complex sin( float _Complex );
    4523 double _Complex sin( double _Complex );
    4524 long double _Complex sin( long double _Complex );
    4525 
    4526 float cos( float );§\indexc{cos}§
    4527 double cos( double );
    4528 long double cos( long double );
    4529 float _Complex cos( float _Complex );
    4530 double _Complex cos( double _Complex );
    4531 long double _Complex cos( long double _Complex );
    4532 
    4533 float tan( float );§\indexc{tan}§
    4534 double tan( double );
    4535 long double tan( long double );
    4536 float _Complex tan( float _Complex );
    4537 double _Complex tan( double _Complex );
    4538 long double _Complex tan( long double _Complex );
    4539 
    4540 float asin( float );§\indexc{asin}§
    4541 double asin( double );
    4542 long double asin( long double );
    4543 float _Complex asin( float _Complex );
    4544 double _Complex asin( double _Complex );
    4545 long double _Complex asin( long double _Complex );
    4546 
    4547 float acos( float );§\indexc{acos}§
    4548 double acos( double );
    4549 long double acos( long double );
    4550 float _Complex acos( float _Complex );
    4551 double _Complex acos( double _Complex );
    4552 long double _Complex acos( long double _Complex );
    4553 
    4554 float atan( float );§\indexc{atan}§
    4555 double atan( double );
    4556 long double atan( long double );
    4557 float _Complex atan( float _Complex );
    4558 double _Complex atan( double _Complex );
    4559 long double _Complex atan( long double _Complex );
    4560 
    4561 float atan2( float, float );§\indexc{atan2}§
    4562 double atan2( double, double );
    4563 long double atan2( long double, long double );
    4564 
    4565 float atan( float, float );                                                             // alternative name for atan2
    4566 double atan( double, double );§\indexc{atan}§
    4567 long double atan( long double, long double );
    4568 \end{lstlisting}
    4569 
    4570 
    4571 \subsection{Hyperbolic}
    4572 
    4573 \begin{lstlisting}
    4574 float sinh( float );§\indexc{sinh}§
    4575 double sinh( double );
    4576 long double sinh( long double );
    4577 float _Complex sinh( float _Complex );
    4578 double _Complex sinh( double _Complex );
    4579 long double _Complex sinh( long double _Complex );
    4580 
    4581 float cosh( float );§\indexc{cosh}§
    4582 double cosh( double );
    4583 long double cosh( long double );
    4584 float _Complex cosh( float _Complex );
    4585 double _Complex cosh( double _Complex );
    4586 long double _Complex cosh( long double _Complex );
    4587 
    4588 float tanh( float );§\indexc{tanh}§
    4589 double tanh( double );
    4590 long double tanh( long double );
    4591 float _Complex tanh( float _Complex );
    4592 double _Complex tanh( double _Complex );
    4593 long double _Complex tanh( long double _Complex );
    4594 
    4595 float asinh( float );§\indexc{asinh}§
    4596 double asinh( double );
    4597 long double asinh( long double );
    4598 float _Complex asinh( float _Complex );
    4599 double _Complex asinh( double _Complex );
    4600 long double _Complex asinh( long double _Complex );
    4601 
    4602 float acosh( float );§\indexc{acosh}§
    4603 double acosh( double );
    4604 long double acosh( long double );
    4605 float _Complex acosh( float _Complex );
    4606 double _Complex acosh( double _Complex );
    4607 long double _Complex acosh( long double _Complex );
    4608 
    4609 float atanh( float );§\indexc{atanh}§
    4610 double atanh( double );
    4611 long double atanh( long double );
    4612 float _Complex atanh( float _Complex );
    4613 double _Complex atanh( double _Complex );
    4614 long double _Complex atanh( long double _Complex );
    4615 \end{lstlisting}
    4616 
    4617 
    4618 \subsection{Error / Gamma}
    4619 
    4620 \begin{lstlisting}
    4621 float erf( float );§\indexc{erf}§
    4622 double erf( double );
    4623 long double erf( long double );
    4624 float _Complex erf( float _Complex );
    4625 double _Complex erf( double _Complex );
    4626 long double _Complex erf( long double _Complex );
    4627 
    4628 float erfc( float );§\indexc{erfc}§
    4629 double erfc( double );
    4630 long double erfc( long double );
    4631 float _Complex erfc( float _Complex );
    4632 double _Complex erfc( double _Complex );
    4633 long double _Complex erfc( long double _Complex );
    4634 
    4635 float lgamma( float );§\indexc{lgamma}§
    4636 double lgamma( double );
    4637 long double lgamma( long double );
    4638 float lgamma( float, int * );
    4639 double lgamma( double, int * );
    4640 long double lgamma( long double, int * );
    4641 
    4642 float tgamma( float );§\indexc{tgamma}§
    4643 double tgamma( double );
    4644 long double tgamma( long double );
    4645 \end{lstlisting}
    4646 
    4647 
    4648 \subsection{Nearest Integer}
    4649 
    4650 \begin{lstlisting}
    4651 float floor( float );§\indexc{floor}§
    4652 double floor( double );
    4653 long double floor( long double );
    4654 
    4655 float ceil( float );§\indexc{ceil}§
    4656 double ceil( double );
    4657 long double ceil( long double );
    4658 
    4659 float trunc( float );§\indexc{trunc}§
    4660 double trunc( double );
    4661 long double trunc( long double );
    4662 
    4663 float rint( float );§\indexc{rint}§
    4664 long double rint( long double );
    4665 long int rint( float );
    4666 long int rint( double );
    4667 long int rint( long double );
    4668 long long int rint( float );
    4669 long long int rint( double );
    4670 long long int rint( long double );
    4671 
    4672 long int lrint( float );§\indexc{lrint}§
    4673 long int lrint( double );
    4674 long int lrint( long double );
    4675 long long int llrint( float );
    4676 long long int llrint( double );
    4677 long long int llrint( long double );
    4678 
    4679 float nearbyint( float );§\indexc{nearbyint}§
    4680 double nearbyint( double );
    4681 long double nearbyint( long double );
    4682 
    4683 float round( float );§\indexc{round}§
    4684 long double round( long double );
    4685 long int round( float );
    4686 long int round( double );
    4687 long int round( long double );
    4688 long long int round( float );
    4689 long long int round( double );
    4690 long long int round( long double );
    4691 
    4692 long int lround( float );§\indexc{lround}§
    4693 long int lround( double );
    4694 long int lround( long double );
    4695 long long int llround( float );
    4696 long long int llround( double );
    4697 long long int llround( long double );
    4698 \end{lstlisting}
    4699 
    4700 
    4701 \subsection{Manipulation}
    4702 
    4703 \begin{lstlisting}
    4704 float copysign( float, float );§\indexc{copysign}§
    4705 double copysign( double, double );
    4706 long double copysign( long double, long double );
    4707 
    4708 float frexp( float, int * );§\indexc{frexp}§
    4709 double frexp( double, int * );
    4710 long double frexp( long double, int * );
    4711 
    4712 float ldexp( float, int );§\indexc{ldexp}§
    4713 double ldexp( double, int );
    4714 long double ldexp( long double, int );
    4715 
    4716 [ float, float ] modf( float );§\indexc{modf}§
    4717 float modf( float, float * );
    4718 [ double, double ] modf( double );
    4719 double modf( double, double * );
    4720 [ long double, long double ] modf( long double );
    4721 long double modf( long double, long double * );
    4722 
    4723 float nextafter( float, float );§\indexc{nextafter}§
    4724 double nextafter( double, double );
    4725 long double nextafter( long double, long double );
    4726 
    4727 float nexttoward( float, long double );§\indexc{nexttoward}§
    4728 double nexttoward( double, long double );
    4729 long double nexttoward( long double, long double );
    4730 
    4731 float scalbn( float, int );§\indexc{scalbn}§
    4732 double scalbn( double, int );
    4733 long double scalbn( long double, int );
    4734 
    4735 float scalbln( float, long int );§\indexc{scalbln}§
    4736 double scalbln( double, long int );
    4737 long double scalbln( long double, long int );
    4738 \end{lstlisting}
    4739 
    4740 
    4741 \section{Rational Numbers}
    4742 \label{s:RationalNumbers}
    4743 
    4744 Rational numbers are numbers written as a ratio, i.e., as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.
    4745 When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.
    4746 
    4747 \begin{lstlisting}
    4748 // implementation
    4749 struct Rational {§\indexc{Rational}§
    4750         long int numerator, denominator;                                        // invariant: denominator > 0
    4751 }; // Rational
    4752 
    4753 // constants
    4754 extern struct Rational 0;
    4755 extern struct Rational 1;
    4756 
    4757 // constructors
    4758 Rational rational();
    4759 Rational rational( long int n );
    4760 Rational rational( long int n, long int d );
    4761 
    4762 // getter/setter for numerator/denominator
    4763 long int numerator( Rational r );
    4764 long int numerator( Rational r, long int n );
    4765 long int denominator( Rational r );
    4766 long int denominator( Rational r, long int d );
    4767 
    4768 // comparison
    4769 int ?==?( Rational l, Rational r );
    4770 int ?!=?( Rational l, Rational r );
    4771 int ?<?( Rational l, Rational r );
    4772 int ?<=?( Rational l, Rational r );
    4773 int ?>?( Rational l, Rational r );
    4774 int ?>=?( Rational l, Rational r );
    4775 
    4776 // arithmetic
    4777 Rational -?( Rational r );
    4778 Rational ?+?( Rational l, Rational r );
    4779 Rational ?-?( Rational l, Rational r );
    4780 Rational ?*?( Rational l, Rational r );
    4781 Rational ?/?( Rational l, Rational r );
    4782 
    4783 // conversion
    4784 double widen( Rational r );
    4785 Rational narrow( double f, long int md );
    4786 
    4787 // I/O
    4788 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, Rational * );
    4789 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, Rational );
    4790 \end{lstlisting}
    4791 
    4792 
    47934257\bibliographystyle{plain}
    4794 \bibliography{cfa}
     4258\bibliography{/usr/local/bibliographies/pl.bib}
    47954259
    47964260
  • src/CodeGen/CodeGenerator.cc

    r1048b31 r1f6e009  
    455455
    456456        void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
    457                 assert( false && "UntypedOffsetofExpr should not reach code generation" );
     457                assert( false );
    458458        }
    459459
     
    464464                output << ", " << mangleName( offsetofExpr->get_member() );
    465465                output << ")";
    466         }
    467 
    468         void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
    469                 assert( false && "OffsetPackExpr should not reach code generation" );
    470466        }
    471467 
  • src/CodeGen/CodeGenerator.h

    r1048b31 r1f6e009  
    6565                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6666                virtual void visit( OffsetofExpr *offsetofExpr );
    67                 virtual void visit( OffsetPackExpr *offsetPackExpr );
    6867                virtual void visit( LogicalExpr *logicalExpr );
    6968                virtual void visit( ConditionalExpr *conditionalExpr );
  • src/GenPoly/Box.cc

    r1048b31 r1f6e009  
    3030#include "FindFunction.h"
    3131#include "ScopedMap.h"
    32 #include "ScopedSet.h"
    3332#include "ScrubTyVars.h"
    3433
     
    6362                FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
    6463
    65                 /// Abstracts type equality for a list of parameter types
    66                 struct TypeList {
    67                         TypeList() : params() {}
    68                         TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
    69                         TypeList( std::list< Type* > &&_params ) : params( _params ) {}
    70 
    71                         TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
    72                         TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
     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); }
    7371
    7472                        /// Extracts types from a list of TypeExpr*
    75                         TypeList( const std::list< TypeExpr* >& _params ) : params() {
     73                        ConcreteType(AggregateDecl *_base, const std::list< TypeExpr* >& _params) : base(_base), params() {
    7674                                for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
    7775                                        params.push_back( (*param)->get_type()->clone() );
     
    7977                        }
    8078
    81                         TypeList& operator= ( const TypeList &that ) {
     79                        ConcreteType& operator= (const ConcreteType& that) {
    8280                                deleteAll( params );
    83 
    8481                                params.clear();
     82
     83                                base = that.base;
    8584                                cloneAll( that.params, params );
    8685
     
    8887                        }
    8988
    90                         TypeList& operator= ( TypeList &&that ) {
    91                                 deleteAll( params );
    92 
    93                                 params = std::move( that.params );
    94 
    95                                 return *this;
    96                         }
    97 
    98                         ~TypeList() { deleteAll( params ); }
    99 
    100                         bool operator== ( const TypeList& that ) const {
     89                        ~ConcreteType() { deleteAll( params ); }
     90
     91                        bool operator== (const ConcreteType& that) const {
     92                                if ( base != that.base ) return false;
     93
     94                                SymTab::Indexer dummy;
    10195                                if ( params.size() != that.params.size() ) return false;
    102 
    103                                 SymTab::Indexer dummy;
    10496                                for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
    10597                                        if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
     
    108100                        }
    109101
     102                        AggregateDecl *base;        ///< Base generic type
    110103                        std::list< Type* > params;  ///< Instantiation parameters
    111104                };
    112105
    113                 /// Maps a key and a TypeList to the some value, accounting for scope
    114                 template< typename Key, typename Value >
     106                /// Maps a concrete type to the some value, accounting for scope
     107                template< typename Value >
    115108                class InstantiationMap {
    116                         /// Wraps value for a specific (Key, TypeList) combination
    117                         typedef std::pair< TypeList, Value* > Instantiation;
    118                         /// List of TypeLists paired with their appropriate values
    119                         typedef std::vector< Instantiation > ValueList;
    120                         /// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
    121                         typedef ScopedMap< Key*, ValueList > InnerMap;
    122 
    123                         InnerMap instantiations;  ///< instantiations
     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
    124121
    125122                public:
    126123                        /// Starts a new scope
    127                         void beginScope() { instantiations.beginScope(); }
     124                        void beginScope() {
     125                                Scope scope;
     126                                scopes.push_back(scope);
     127                        }
    128128
    129129                        /// Ends a scope
    130                         void endScope() { instantiations.endScope(); }
    131 
    132                         /// Gets the value for the (key, typeList) pair, returns NULL on none such.
    133                         Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
    134                                 TypeList typeList( params );
    135                                
    136                                 // scan scopes for matches to the key
    137                                 for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
    138                                         for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
    139                                                 if ( inst->first == typeList ) return inst->second;
     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;
    140150                                        }
    141151                                }
    142                                 // no matching instantiations found
     152                                // no matching instantiation found
    143153                                return 0;
    144154                        }
    145 
    146                         /// Adds a value for a (key, typeList) pair to the current scope
    147                         void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
    148                                 instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
    149                         }
     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 ); }
    150168                };
    151169
     
    179197                        virtual void doEndScope();
    180198                  private:
     199                        /// Makes a new temporary array holding the offsets of the fields of `type`, and returns a new variable expression referencing it
     200                        Expression *makeOffsetArray( StructInstType *type );
    181201                        /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application
    182202                        void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes );
     
    205225                        ObjectDecl *makeTemporary( Type *type );
    206226
    207                         ScopedMap< std::string, DeclarationWithType *> assignOps;    ///< Currently known type variable assignment operators
    208                         ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;  ///< Currently known assignment operators
    209                         ScopedMap< std::string, DeclarationWithType* > adapters;     ///< Set of adapter functions in the current scope
    210                        
     227                        std::map< std::string, DeclarationWithType *> assignOps;
     228                        ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;
     229                        ScopedMap< std::string, DeclarationWithType* > adapters;
    211230                        DeclarationWithType *retval;
    212231                        bool useRetval;
     
    214233                };
    215234
    216                 /// * Moves polymorphic returns in function types to pointer-type parameters
    217                 /// * adds type size and assertion parameters to parameter lists
     235                /// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well
    218236                class Pass2 : public PolyMutator {
    219237                  public:
     
    226244                        virtual Type *mutate( PointerType *pointerType );
    227245                        virtual Type *mutate( FunctionType *funcType );
    228                        
    229246                  private:
    230247                        void addAdapters( FunctionType *functionType );
     
    236253                class GenericInstantiator : public DeclMutator {
    237254                        /// Map of (generic type, parameter list) pairs to concrete type instantiations
    238                         InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
     255                        InstantiationMap< AggregateDecl > instantiations;
    239256                        /// Namer for concrete types
    240257                        UniqueName typeNamer;
     
    261278                };
    262279
    263                 /// Replaces member and size/align/offsetof expressions on polymorphic generic types with calculated expressions.
    264                 /// * Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference
    265                 /// * Calculates polymorphic offsetof expressions from offset array
    266                 /// * Inserts dynamic calculation of polymorphic type layouts where needed
    267                 class PolyGenericCalculator : public PolyMutator {
    268                 public:
     280                /// Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference;
     281                /// also fixes offsetof expressions.
     282                class MemberExprFixer : public PolyMutator {
     283                  public:
    269284                        template< typename DeclClass >
    270285                        DeclClass *handleDecl( DeclClass *decl, Type *type );
     
    277292                        virtual Type *mutate( FunctionType *funcType );
    278293                        virtual Expression *mutate( MemberExpr *memberExpr );
    279                         virtual Expression *mutate( SizeofExpr *sizeofExpr );
    280                         virtual Expression *mutate( AlignofExpr *alignofExpr );
    281294                        virtual Expression *mutate( OffsetofExpr *offsetofExpr );
    282                         virtual Expression *mutate( OffsetPackExpr *offsetPackExpr );
    283 
    284                         virtual void doBeginScope();
    285                         virtual void doEndScope();
    286 
    287                 private:
    288                         /// Makes a new variable in the current scope with the given name, type & optional initializer
    289                         ObjectDecl *makeVar( const std::string &name, Type *type, Initializer *init = 0 );
    290                         /// returns true if the type has a dynamic layout; such a layout will be stored in appropriately-named local variables when the function returns
    291                         bool findGeneric( Type *ty );
    292                         /// adds type parameters to the layout call; will generate the appropriate parameters if needed
    293                         void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams );
    294 
    295                         /// Enters a new scope for type-variables, adding the type variables from ty
    296                         void beginTypeScope( Type *ty );
    297                         /// Exits the type-variable scope
    298                         void endTypeScope();
    299                        
    300                         ScopedSet< std::string > knownLayouts;          ///< Set of generic type layouts known in the current scope, indexed by sizeofName
    301                         ScopedSet< std::string > knownOffsets;          ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName
    302295                };
    303296
     
    349342                Pass2 pass2;
    350343                GenericInstantiator instantiator;
    351                 PolyGenericCalculator polyCalculator;
     344                MemberExprFixer memberFixer;
    352345                Pass3 pass3;
    353346               
     
    355348                mutateTranslationUnit/*All*/( translationUnit, pass1 );
    356349                mutateTranslationUnit/*All*/( translationUnit, pass2 );
     350//              instantiateGeneric( translationUnit );
    357351                instantiator.mutateDeclarationList( translationUnit );
    358                 mutateTranslationUnit/*All*/( translationUnit, polyCalculator );
     352                mutateTranslationUnit/*All*/( translationUnit, memberFixer );
    359353                mutateTranslationUnit/*All*/( translationUnit, pass3 );
    360354        }
     
    390384                for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
    391385                        TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );
    392                         std::string paramName = mangleType( &paramType );
    393                         layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    394                         layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
     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 ) );
    395388                }
    396389        }
    397390
    398391        /// Builds a layout function declaration
    399         FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) {
     392        FunctionDecl *buildLayoutFunctionDecl( const std::string &typeName, unsigned int functionNesting, FunctionType *layoutFnType ) {
    400393                // Routines at global scope marked "static" to prevent multiple definitions is separate translation units
    401394                // because each unit generates copies of the default routines for each aggregate.
    402395                FunctionDecl *layoutDecl = new FunctionDecl(
    403                         layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
     396                        "__layoutof_" + typeName, functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
    404397                layoutDecl->fixUniqueId();
    405398                return layoutDecl;
     
    468461                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    469462               
    470                 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     463                ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    471464                layoutFnType->get_parameters().push_back( sizeParam );
    472                 ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     465                ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    473466                layoutFnType->get_parameters().push_back( alignParam );
    474                 ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     467                ObjectDecl *offsetParam = new ObjectDecl( "__offsetof_" + structDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    475468                layoutFnType->get_parameters().push_back( offsetParam );
    476469                addOtypeParams( layoutFnType, otypeParams );
    477470
    478471                // build function decl
    479                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl, functionNesting, layoutFnType );
     472                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl->get_name(), functionNesting, layoutFnType );
    480473
    481474                // calculate struct layout in function body
     
    529522                PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    530523               
    531                 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
     524                ObjectDecl *sizeParam = new ObjectDecl( "__sizeof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    532525                layoutFnType->get_parameters().push_back( sizeParam );
    533                 ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
     526                ObjectDecl *alignParam = new ObjectDecl( "__alignof_" + unionDecl->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    534527                layoutFnType->get_parameters().push_back( alignParam );
    535528                addOtypeParams( layoutFnType, otypeParams );
    536529
    537530                // build function decl
    538                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl, functionNesting, layoutFnType );
     531                FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl->get_name(), functionNesting, layoutFnType );
    539532
    540533                // calculate union layout in function body
     
    660653
    661654                DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) {
    662                         // if this is a assignment function, put it in the map for this scope
     655                        // if this is a polymorphic assignment function, put it in the map for this scope
    663656                        if ( Type *assignedType = isAssignment( functionDecl ) ) {
    664657                                if ( ! dynamic_cast< TypeInstType* >( assignedType ) ) {
     
    669662                        if ( functionDecl->get_statements() ) {         // empty routine body ?
    670663                                doBeginScope();
    671                                 scopeTyVars.beginScope();
    672                                 assignOps.beginScope();
     664                                TyVarMap oldtyVars = scopeTyVars;
     665                                std::map< std::string, DeclarationWithType *> oldassignOps = assignOps;
    673666                                DeclarationWithType *oldRetval = retval;
    674667                                bool oldUseRetval = useRetval;
     
    711704                                functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) );
    712705
    713                                 scopeTyVars.endScope();
    714                                 assignOps.endScope();
     706                                scopeTyVars = oldtyVars;
     707                                assignOps = oldassignOps;
     708                                // std::cerr << "end FunctionDecl: ";
     709                                // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) {
     710                                //      std::cerr << i->first << " ";
     711                                // }
     712                                // std::cerr << "\n";
    715713                                retval = oldRetval;
    716714                                useRetval = oldUseRetval;
     
    745743                }
    746744
     745                Expression *Pass1::makeOffsetArray( StructInstType *ty ) {
     746                        std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();
     747
     748                        // make a new temporary array
     749                        Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     750                        std::stringstream lenGen;
     751                        lenGen << baseMembers.size();
     752                        ConstantExpr *lenExpr = new ConstantExpr( Constant( offsetType->clone(), lenGen.str() ) );
     753                        ObjectDecl *arrayTemp = makeTemporary( new ArrayType( Type::Qualifiers(), offsetType, lenExpr, false, false ) );
     754
     755                        // build initializer list for temporary
     756                        std::list< Initializer* > inits;
     757                        for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {
     758                                DeclarationWithType *memberDecl;
     759                                if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {
     760                                        memberDecl = origMember->clone();
     761                                } else {
     762                                        memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );
     763                                }
     764                                inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );
     765                        }
     766                        arrayTemp->set_init( new ListInit( inits ) );
     767
     768                        // return variable pointing to temporary
     769                        return new VariableExpr( arrayTemp );
     770                }
     771
    747772                void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) {
    748                         Type *polyType = isPolyType( parmType, exprTyVars );
    749                         if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    750                                 std::string typeName = mangleType( polyType );
    751                                 if ( seenTypes.count( typeName ) ) return;
     773                        Type *polyBase = hasPolyBase( parmType, exprTyVars );
     774                        if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
     775                                std::string sizeName = sizeofName( polyBase );
     776                                if ( seenTypes.count( sizeName ) ) return;
    752777
    753778                                arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) );
     
    755780                                arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) );
    756781                                arg++;
    757                                 if ( dynamic_cast< StructInstType* >( polyType ) ) {
     782                                if ( dynamic_cast< StructInstType* >( polyBase ) ) {
    758783                                        if ( StructInstType *argBaseStructType = dynamic_cast< StructInstType* >( argBaseType ) ) {
    759                                                 // zero-length arrays are forbidden by C, so don't pass offset for empty struct
    760                                                 if ( ! argBaseStructType->get_baseStruct()->get_members().empty() ) {
    761                                                         arg = appExpr->get_args().insert( arg, new OffsetPackExpr( argBaseStructType->clone() ) );
    762                                                         arg++;
    763                                                 }
     784                                                arg = appExpr->get_args().insert( arg, makeOffsetArray( argBaseStructType ) );
     785                                                arg++;
    764786                                        } else {
    765787                                                throw SemanticError( "Cannot pass non-struct type for generic struct" );
     
    767789                                }
    768790
    769                                 seenTypes.insert( typeName );
     791                                seenTypes.insert( sizeName );
    770792                        }
    771793                }
     
    909931                                        return;
    910932                                } else if ( arg->get_results().front()->get_isLvalue() ) {
    911                                         // VariableExpr and MemberExpr are lvalues; need to check this isn't coming from the second arg of a comma expression though (not an lvalue)
    912                                         if ( CommaExpr *commaArg = dynamic_cast< CommaExpr* >( arg ) ) {
    913                                                 commaArg->set_arg2( new AddressExpr( commaArg->get_arg2() ) );
    914                                         } else {
    915                                                 arg = new AddressExpr( arg );
    916                                         }
     933                                        // VariableExpr and MemberExpr are lvalues
     934                                        arg = new AddressExpr( arg );
    917935                                } else {
    918936                                        // use type computed in unification to declare boxed variables
     
    10091027                        } // for
    10101028                }
     1029
     1030
    10111031
    10121032                FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) {
     
    11251145                                addAssign->get_args().push_back( appExpr->get_args().front() );
    11261146                        } // if
    1127                         addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType ) ) ) );
     1147                        addAssign->get_args().push_back( new NameExpr( sizeofName( polyType ) ) );
    11281148                        addAssign->get_results().front() = appExpr->get_results().front()->clone();
    11291149                        if ( appExpr->get_env() ) {
     
    11521172                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    11531173                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1154                                                         multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
     1174                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
    11551175                                                        ret->get_args().push_back( appExpr->get_args().front() );
    11561176                                                        ret->get_args().push_back( multiply );
     
    11581178                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    11591179                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1160                                                         multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
     1180                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
    11611181                                                        ret->get_args().push_back( multiply );
    11621182                                                        ret->get_args().push_back( appExpr->get_args().back() );
     
    12211241                                                        UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) );
    12221242                                                        divide->get_args().push_back( appExpr );
    1223                                                         divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
     1243                                                        divide->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
    12241244                                                        divide->get_results().push_front( appExpr->get_results().front()->clone() );
    12251245                                                        if ( appExpr->get_env() ) {
     
    12311251                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12321252                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1233                                                         multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
     1253                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
    12341254                                                        appExpr->get_args().back() = multiply;
    12351255                                                } else if ( baseType2 ) {
    12361256                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12371257                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1238                                                         multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
     1258                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
    12391259                                                        appExpr->get_args().front() = multiply;
    12401260                                                } // if
     
    12461266                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    12471267                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1248                                                         multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) );
     1268                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType ) ) );
    12491269                                                        appExpr->get_args().back() = multiply;
    12501270                                                } // if
     
    12831303                        std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin();
    12841304
    1285                         TyVarMap exprTyVars( (TypeDecl::Kind)-1 );
     1305                        TyVarMap exprTyVars;
    12861306                        makeTyVarMap( function, exprTyVars );
    12871307                        ReferenceToType *polyRetType = isPolyRet( function );
     
    13061326
    13071327                        boxParams( appExpr, function, arg, exprTyVars );
     1328
    13081329                        passAdapters( appExpr, function, exprTyVars );
    13091330
     
    13851406                                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) {
    13861407                                        // find assignment operator for type variable
    1387                                         ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
     1408                                        std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
    13881409                                        if ( assignIter == assignOps.end() ) {
    13891410                                                throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() );
     
    14071428                                        std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin();
    14081429                                        for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) {
    1409                                                 // Add appropriate mapping to assignment expression environment
     1430                                                if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype)
     1431
     1432                                                std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
     1433                                                assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
     1434                                                DeclarationWithType *actualDecl = asserts.front();
     1435                                                TypeInstType *actualType = isTypeInstAssignment( actualDecl );
     1436                                                assert( actualType && "First assertion of type with assertions should be assignment operator" );
    14101437                                                TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt );
    14111438                                                assert( formalTypeExpr && "type parameters must be type expressions" );
    14121439                                                Type *formalType = formalTypeExpr->get_type();
    1413                                                 assignExpr->get_env()->add( (*forallIt)->get_name(), formalType );
    1414 
    1415                                                 // skip types with no assign op (ftype/dtype)
    1416                                                 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue;
    1417 
    1418                                                 // find assignment operator for formal type
     1440                                                assignExpr->get_env()->add( actualType->get_name(), formalType );
     1441                                               
    14191442                                                DeclarationWithType *assertAssign = 0;
    14201443                                                if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) {
    1421                                                         ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
     1444                                                        std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
    14221445                                                        if ( assertAssignIt == assignOps.end() ) {
    14231446                                                                throw SemanticError( "No assignment operation found for ", formalTypeInstType );
     
    14301453                                                        }
    14311454                                                }
    1432 
    1433                                                 // add inferred parameter for field assignment operator to assignment expression
    1434                                                 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
    1435                                                 assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
    1436                                                 DeclarationWithType *actualDecl = asserts.front();
     1455                                               
     1456
    14371457                                                assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
    14381458                                                        = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
     
    14601480
    14611481                Type * Pass1::mutate( PointerType *pointerType ) {
    1462                         scopeTyVars.beginScope();
     1482                        TyVarMap oldtyVars = scopeTyVars;
    14631483                        makeTyVarMap( pointerType, scopeTyVars );
    14641484
    14651485                        Type *ret = Mutator::mutate( pointerType );
    14661486
    1467                         scopeTyVars.endScope();
     1487                        scopeTyVars = oldtyVars;
    14681488                        return ret;
    14691489                }
    14701490
    14711491                Type * Pass1::mutate( FunctionType *functionType ) {
    1472                         scopeTyVars.beginScope();
     1492                        TyVarMap oldtyVars = scopeTyVars;
    14731493                        makeTyVarMap( functionType, scopeTyVars );
    14741494
    14751495                        Type *ret = Mutator::mutate( functionType );
    14761496
    1477                         scopeTyVars.endScope();
     1497                        scopeTyVars = oldtyVars;
    14781498                        return ret;
    14791499                }
     
    15401560
    15411561                Type * Pass2::mutate( PointerType *pointerType ) {
    1542                         scopeTyVars.beginScope();
     1562                        TyVarMap oldtyVars = scopeTyVars;
    15431563                        makeTyVarMap( pointerType, scopeTyVars );
    15441564
    15451565                        Type *ret = Mutator::mutate( pointerType );
    15461566
    1547                         scopeTyVars.endScope();
     1567                        scopeTyVars = oldtyVars;
    15481568                        return ret;
    15491569                }
    15501570
    15511571                Type *Pass2::mutate( FunctionType *funcType ) {
    1552                         scopeTyVars.beginScope();
     1572                        TyVarMap oldtyVars = scopeTyVars;
    15531573                        makeTyVarMap( funcType, scopeTyVars );
    15541574
     
    15671587                        ObjectDecl newPtr( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0,
    15681588                                           new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 );
     1589//   ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );
    15691590                        for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) {
    15701591                                ObjectDecl *sizeParm, *alignParm;
     
    15721593                                if ( (*tyParm)->get_kind() == TypeDecl::Any ) {
    15731594                                        TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm );
    1574                                         std::string parmName = mangleType( &parmType );
    15751595
    15761596                                        sizeParm = newObj.clone();
    1577                                         sizeParm->set_name( sizeofName( parmName ) );
     1597                                        sizeParm->set_name( sizeofName( &parmType ) );
    15781598                                        last = funcType->get_parameters().insert( last, sizeParm );
    15791599                                        ++last;
    15801600
    15811601                                        alignParm = newObj.clone();
    1582                                         alignParm->set_name( alignofName( parmName ) );
     1602                                        alignParm->set_name( alignofName( &parmType ) );
    15831603                                        last = funcType->get_parameters().insert( last, alignParm );
    15841604                                        ++last;
     
    15951615                        std::set< std::string > seenTypes; // sizeofName for generic types we've seen
    15961616                        for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) {
    1597                                 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
    1598                                 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    1599                                         std::string typeName = mangleType( polyType );
    1600                                         if ( seenTypes.count( typeName ) ) continue;
     1617                                Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars );
     1618                                if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
     1619                                        std::string sizeName = sizeofName( polyBase );
     1620                                        if ( seenTypes.count( sizeName ) ) continue;
    16011621
    16021622                                        ObjectDecl *sizeParm, *alignParm, *offsetParm;
    16031623                                        sizeParm = newObj.clone();
    1604                                         sizeParm->set_name( sizeofName( typeName ) );
     1624                                        sizeParm->set_name( sizeName );
    16051625                                        last = funcType->get_parameters().insert( last, sizeParm );
    16061626                                        ++last;
    16071627
    16081628                                        alignParm = newObj.clone();
    1609                                         alignParm->set_name( alignofName( typeName ) );
     1629                                        alignParm->set_name( alignofName( polyBase ) );
    16101630                                        last = funcType->get_parameters().insert( last, alignParm );
    16111631                                        ++last;
    16121632
    1613                                         if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyType ) ) {
    1614                                                 // NOTE zero-length arrays are illegal in C, so empty structs have no offset array
    1615                                                 if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) {
    1616                                                         offsetParm = newPtr.clone();
    1617                                                         offsetParm->set_name( offsetofName( typeName ) );
    1618                                                         last = funcType->get_parameters().insert( last, offsetParm );
    1619                                                         ++last;
    1620                                                 }
     1633                                        if ( dynamic_cast< StructInstType* >( polyBase ) ) {
     1634                                                offsetParm = newPtr.clone();
     1635                                                offsetParm->set_name( offsetofName( polyBase ) );
     1636                                                last = funcType->get_parameters().insert( last, offsetParm );
     1637                                                ++last;
    16211638                                        }
    16221639
    1623                                         seenTypes.insert( typeName );
     1640                                        seenTypes.insert( sizeName );
    16241641                                }
    16251642                        }
     
    16311648                        mutateAll( funcType->get_parameters(), *this );
    16321649
    1633                         scopeTyVars.endScope();
     1650                        scopeTyVars = oldtyVars;
    16341651                        return funcType;
    16351652                }
     
    18241841                }
    18251842
    1826 ////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
    1827 
    1828                 void PolyGenericCalculator::beginTypeScope( Type *ty ) {
    1829                         scopeTyVars.beginScope();
    1830                         makeTyVarMap( ty, scopeTyVars );
    1831                 }
    1832 
    1833                 void PolyGenericCalculator::endTypeScope() {
    1834                         scopeTyVars.endScope();
    1835                 }
     1843////////////////////////////////////////// MemberExprFixer ////////////////////////////////////////////////////
    18361844
    18371845                template< typename DeclClass >
    1838                 DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) {
    1839                         beginTypeScope( type );
    1840                         knownLayouts.beginScope();
    1841                         knownOffsets.beginScope();
     1846                DeclClass * MemberExprFixer::handleDecl( DeclClass *decl, Type *type ) {
     1847                        TyVarMap oldtyVars = scopeTyVars;
     1848                        makeTyVarMap( type, scopeTyVars );
    18421849
    18431850                        DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
    18441851
    1845                         knownOffsets.endScope();
    1846                         knownLayouts.endScope();
    1847                         endTypeScope();
     1852                        scopeTyVars = oldtyVars;
    18481853                        return ret;
    18491854                }
    18501855
    1851                 ObjectDecl * PolyGenericCalculator::mutate( ObjectDecl *objectDecl ) {
     1856                ObjectDecl * MemberExprFixer::mutate( ObjectDecl *objectDecl ) {
    18521857                        return handleDecl( objectDecl, objectDecl->get_type() );
    18531858                }
    18541859
    1855                 DeclarationWithType * PolyGenericCalculator::mutate( FunctionDecl *functionDecl ) {
     1860                DeclarationWithType * MemberExprFixer::mutate( FunctionDecl *functionDecl ) {
    18561861                        return handleDecl( functionDecl, functionDecl->get_functionType() );
    18571862                }
    18581863
    1859                 TypedefDecl * PolyGenericCalculator::mutate( TypedefDecl *typedefDecl ) {
     1864                TypedefDecl * MemberExprFixer::mutate( TypedefDecl *typedefDecl ) {
    18601865                        return handleDecl( typedefDecl, typedefDecl->get_base() );
    18611866                }
    18621867
    1863                 TypeDecl * PolyGenericCalculator::mutate( TypeDecl *typeDecl ) {
     1868                TypeDecl * MemberExprFixer::mutate( TypeDecl *typeDecl ) {
    18641869                        scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind();
    18651870                        return Mutator::mutate( typeDecl );
    18661871                }
    18671872
    1868                 Type * PolyGenericCalculator::mutate( PointerType *pointerType ) {
    1869                         beginTypeScope( pointerType );
     1873                Type * MemberExprFixer::mutate( PointerType *pointerType ) {
     1874                        TyVarMap oldtyVars = scopeTyVars;
     1875                        makeTyVarMap( pointerType, scopeTyVars );
    18701876
    18711877                        Type *ret = Mutator::mutate( pointerType );
    18721878
    1873                         endTypeScope();
     1879                        scopeTyVars = oldtyVars;
    18741880                        return ret;
    18751881                }
    18761882
    1877                 Type * PolyGenericCalculator::mutate( FunctionType *funcType ) {
    1878                         beginTypeScope( funcType );
    1879 
    1880                         // make sure that any type information passed into the function is accounted for
    1881                         for ( std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); fnParm != funcType->get_parameters().end(); ++fnParm ) {
    1882                                 // condition here duplicates that in Pass2::mutate( FunctionType* )
    1883                                 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
    1884                                 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    1885                                         knownLayouts.insert( mangleType( polyType ) );
    1886                                 }
    1887                         }
    1888                        
    1889                         Type *ret = Mutator::mutate( funcType );
    1890 
    1891                         endTypeScope();
     1883                Type * MemberExprFixer::mutate( FunctionType *functionType ) {
     1884                        TyVarMap oldtyVars = scopeTyVars;
     1885                        makeTyVarMap( functionType, scopeTyVars );
     1886
     1887                        Type *ret = Mutator::mutate( functionType );
     1888
     1889                        scopeTyVars = oldtyVars;
    18921890                        return ret;
    18931891                }
    18941892
    1895                 Statement *PolyGenericCalculator::mutate( DeclStmt *declStmt ) {
     1893                Statement *MemberExprFixer::mutate( DeclStmt *declStmt ) {
    18961894                        if ( ObjectDecl *objectDecl = dynamic_cast< ObjectDecl *>( declStmt->get_decl() ) ) {
    1897                                 if ( findGeneric( objectDecl->get_type() ) ) {
     1895                                if ( isPolyType( objectDecl->get_type(), scopeTyVars ) ) {
    18981896                                        // change initialization of a polymorphic value object
    18991897                                        // to allocate storage with alloca
    19001898                                        Type *declType = objectDecl->get_type();
    19011899                                        UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) );
    1902                                         alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType ) ) ) );
     1900                                        alloc->get_args().push_back( new NameExpr( sizeofName( declType ) ) );
    19031901
    19041902                                        delete objectDecl->get_init();
     
    19321930                        ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) );
    19331931                        UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) );
    1934                         fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType ) ) ) );
     1932                        fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType ) ) );
    19351933                        fieldOffset->get_args().push_back( fieldIndex );
    19361934                        return fieldOffset;
     
    19471945                }
    19481946               
    1949                 Expression *PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {
     1947                Expression *MemberExprFixer::mutate( MemberExpr *memberExpr ) {
    19501948                        // mutate, exiting early if no longer MemberExpr
    19511949                        Expression *expr = Mutator::mutate( memberExpr );
     
    19641962                        Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth );
    19651963                        if ( ! objectType ) return memberExpr;
    1966                         findGeneric( objectType ); // ensure layout for this type is available
    19671964
    19681965                        Expression *newMemberExpr = 0;
     
    19961993                }
    19971994
    1998                 ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) {
    1999                         ObjectDecl *newObj = new ObjectDecl( name, DeclarationNode::NoStorageClass, LinkageSpec::C, 0, type, init );
    2000                         stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) );
    2001                         return newObj;
    2002                 }
    2003 
    2004                 void PolyGenericCalculator::addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams ) {
    2005                         for ( std::list< Type* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
    2006                                 if ( findGeneric( *param ) ) {
    2007                                         // push size/align vars for a generic parameter back
    2008                                         std::string paramName = mangleType( *param );
    2009                                         layoutCall->get_args().push_back( new NameExpr( sizeofName( paramName ) ) );
    2010                                         layoutCall->get_args().push_back( new NameExpr( alignofName( paramName ) ) );
    2011                                 } else {
    2012                                         layoutCall->get_args().push_back( new SizeofExpr( (*param)->clone() ) );
    2013                                         layoutCall->get_args().push_back( new AlignofExpr( (*param)->clone() ) );
    2014                                 }
    2015                         }
    2016                 }
    2017 
    2018                 /// returns true if any of the otype parameters have a dynamic layout and puts all otype parameters in the output list
    2019                 bool findGenericParams( std::list< TypeDecl* > &baseParams, std::list< Expression* > &typeParams, std::list< Type* > &out ) {
    2020                         bool hasDynamicLayout = false;
    2021 
    2022                         std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
    2023                         std::list< Expression* >::const_iterator typeParam = typeParams.begin();
    2024                         for ( ; baseParam != baseParams.end() && typeParam != typeParams.end(); ++baseParam, ++typeParam ) {
    2025                                 // skip non-otype parameters
    2026                                 if ( (*baseParam)->get_kind() != TypeDecl::Any ) continue;
    2027                                 TypeExpr *typeExpr = dynamic_cast< TypeExpr* >( *typeParam );
    2028                                 assert( typeExpr && "all otype parameters should be type expressions" );
    2029 
    2030                                 Type *type = typeExpr->get_type();
    2031                                 out.push_back( type );
    2032                                 if ( isPolyType( type ) ) hasDynamicLayout = true;
    2033                         }
    2034                         assert( baseParam == baseParams.end() && typeParam == typeParams.end() );
    2035 
    2036                         return hasDynamicLayout;
    2037                 }
    2038 
    2039                 bool PolyGenericCalculator::findGeneric( Type *ty ) {
    2040                         if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
    2041                                 // duplicate logic from isPolyType()
    2042                                 if ( env ) {
    2043                                         if ( Type *newType = env->lookup( typeInst->get_name() ) ) {
    2044                                                 return findGeneric( newType );
    2045                                         } // if
    2046                                 } // if
    2047                                 if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) {
    2048                                         // NOTE assumes here that getting put in the scopeTyVars included having the layout variables set
    2049                                         return true;
    2050                                 }
    2051                                 return false;
    2052                         } else if ( StructInstType *structTy = dynamic_cast< StructInstType* >( ty ) ) {
    2053                                 // check if this type already has a layout generated for it
    2054                                 std::string typeName = mangleType( ty );
    2055                                 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
    2056 
    2057                                 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
    2058                                 std::list< Type* > otypeParams;
    2059                                 if ( ! findGenericParams( *structTy->get_baseParameters(), structTy->get_parameters(), otypeParams ) ) return false;
    2060 
    2061                                 // insert local variables for layout and generate call to layout function
    2062                                 knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
    2063                                 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    2064 
    2065                                 int n_members = structTy->get_baseStruct()->get_members().size();
    2066                                 if ( n_members == 0 ) {
    2067                                         // all empty structs have the same layout - size 1, align 1
    2068                                         makeVar( sizeofName( typeName ), layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
    2069                                         makeVar( alignofName( typeName ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
    2070                                         // NOTE zero-length arrays are forbidden in C, so empty structs have no offsetof array
    2071                                 } else {
    2072                                         ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
    2073                                         ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
    2074                                         ObjectDecl *offsetVar = makeVar( offsetofName( typeName ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) );
    2075 
    2076                                         // generate call to layout function
    2077                                         UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( structTy->get_baseStruct() ) ) );
    2078                                         layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
    2079                                         layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
    2080                                         layoutCall->get_args().push_back( new VariableExpr( offsetVar ) );
    2081                                         addOtypeParamsToLayoutCall( layoutCall, otypeParams );
    2082 
    2083                                         stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) );
    2084                                 }
    2085 
    2086                                 return true;
    2087                         } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) {
    2088                                 // check if this type already has a layout generated for it
    2089                                 std::string typeName = mangleType( ty );
    2090                                 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
    2091 
    2092                                 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
    2093                                 std::list< Type* > otypeParams;
    2094                                 if ( ! findGenericParams( *unionTy->get_baseParameters(), unionTy->get_parameters(), otypeParams ) ) return false;
    2095 
    2096                                 // insert local variables for layout and generate call to layout function
    2097                                 knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
    2098                                 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    2099 
    2100                                 ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
    2101                                 ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
    2102 
    2103                                 // generate call to layout function
    2104                                 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( unionTy->get_baseUnion() ) ) );
    2105                                 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
    2106                                 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
    2107                                 addOtypeParamsToLayoutCall( layoutCall, otypeParams );
    2108 
    2109                                 stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) );
    2110 
    2111                                 return true;
    2112                         }
    2113 
    2114                         return false;
    2115                 }
    2116 
    2117                 Expression *PolyGenericCalculator::mutate( SizeofExpr *sizeofExpr ) {
    2118                         Type *ty = sizeofExpr->get_type();
    2119                         if ( findGeneric( ty ) ) {
    2120                                 Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) );
    2121                                 delete sizeofExpr;
    2122                                 return ret;
    2123                         }
    2124                         return sizeofExpr;
    2125                 }
    2126 
    2127                 Expression *PolyGenericCalculator::mutate( AlignofExpr *alignofExpr ) {
    2128                         Type *ty = alignofExpr->get_type();
    2129                         if ( findGeneric( ty ) ) {
    2130                                 Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) );
    2131                                 delete alignofExpr;
    2132                                 return ret;
    2133                         }
    2134                         return alignofExpr;
    2135                 }
    2136 
    2137                 Expression *PolyGenericCalculator::mutate( OffsetofExpr *offsetofExpr ) {
     1995                Expression *MemberExprFixer::mutate( OffsetofExpr *offsetofExpr ) {
    21381996                        // mutate, exiting early if no longer OffsetofExpr
    21391997                        Expression *expr = Mutator::mutate( offsetofExpr );
     
    21422000
    21432001                        // only mutate expressions for polymorphic structs/unions
    2144                         Type *ty = offsetofExpr->get_type();
    2145                         if ( ! findGeneric( ty ) ) return offsetofExpr;
    2146                        
     2002                        Type *ty = isPolyType( offsetofExpr->get_type(), scopeTyVars );
     2003                        if ( ! ty ) return offsetofExpr;
     2004
    21472005                        if ( StructInstType *structType = dynamic_cast< StructInstType* >( ty ) ) {
    21482006                                // replace offsetof expression by index into offset array
     
    21602018                }
    21612019
    2162                 Expression *PolyGenericCalculator::mutate( OffsetPackExpr *offsetPackExpr ) {
    2163                         StructInstType *ty = offsetPackExpr->get_type();
    2164 
    2165                         Expression *ret = 0;
    2166                         if ( findGeneric( ty ) ) {
    2167                                 // pull offset back from generated type information
    2168                                 ret = new NameExpr( offsetofName( mangleType( ty ) ) );
    2169                         } else {
    2170                                 std::string offsetName = offsetofName( mangleType( ty ) );
    2171                                 if ( knownOffsets.find( offsetName ) != knownOffsets.end() ) {
    2172                                         // use the already-generated offsets for this type
    2173                                         ret = new NameExpr( offsetName );
    2174                                 } else {
    2175                                         knownOffsets.insert( offsetName );
    2176 
    2177                                         std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();
    2178                                         Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    2179 
    2180                                         // build initializer list for offset array
    2181                                         std::list< Initializer* > inits;
    2182                                         for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {
    2183                                                 DeclarationWithType *memberDecl;
    2184                                                 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {
    2185                                                         memberDecl = origMember->clone();
    2186                                                 } else {
    2187                                                         memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );
    2188                                                 }
    2189                                                 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );
    2190                                         }
    2191 
    2192                                         // build the offset array and replace the pack with a reference to it
    2193                                         ObjectDecl *offsetArray = makeVar( offsetName, new ArrayType( Type::Qualifiers(), offsetType, new ConstantExpr( Constant::from( baseMembers.size() ) ), false, false ),
    2194                                                         new ListInit( inits ) );
    2195                                         ret = new VariableExpr( offsetArray );
    2196                                 }
    2197                         }
    2198 
    2199                         delete offsetPackExpr;
    2200                         return ret;
    2201                 }
    2202 
    2203                 void PolyGenericCalculator::doBeginScope() {
    2204                         knownLayouts.beginScope();
    2205                         knownOffsets.beginScope();
    2206                 }
    2207 
    2208                 void PolyGenericCalculator::doEndScope() {
    2209                         knownLayouts.endScope();
    2210                         knownOffsets.endScope();
    2211                 }
    2212 
    22132020////////////////////////////////////////// Pass3 ////////////////////////////////////////////////////
    22142021
    22152022                template< typename DeclClass >
    22162023                DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) {
    2217                         scopeTyVars.beginScope();
     2024                        TyVarMap oldtyVars = scopeTyVars;
    22182025                        makeTyVarMap( type, scopeTyVars );
    22192026
     
    22212028                        ScrubTyVars::scrub( decl, scopeTyVars );
    22222029
    2223                         scopeTyVars.endScope();
     2030                        scopeTyVars = oldtyVars;
    22242031                        return ret;
    22252032                }
     
    22512058
    22522059                Type * Pass3::mutate( PointerType *pointerType ) {
    2253                         scopeTyVars.beginScope();
     2060                        TyVarMap oldtyVars = scopeTyVars;
    22542061                        makeTyVarMap( pointerType, scopeTyVars );
    22552062
    22562063                        Type *ret = Mutator::mutate( pointerType );
    22572064
    2258                         scopeTyVars.endScope();
     2065                        scopeTyVars = oldtyVars;
    22592066                        return ret;
    22602067                }
    22612068
    22622069                Type * Pass3::mutate( FunctionType *functionType ) {
    2263                         scopeTyVars.beginScope();
     2070                        TyVarMap oldtyVars = scopeTyVars;
    22642071                        makeTyVarMap( functionType, scopeTyVars );
    22652072
    22662073                        Type *ret = Mutator::mutate( functionType );
    22672074
    2268                         scopeTyVars.endScope();
     2075                        scopeTyVars = oldtyVars;
    22692076                        return ret;
    22702077                }
  • src/GenPoly/FindFunction.cc

    r1048b31 r1f6e009  
    5555                        TyVarMap::iterator var = tyVars.find( (*i)->get_name() );
    5656                        if ( var != tyVars.end() ) {
    57                                 tyVars.erase( var->first );
     57                                tyVars.erase( var );
    5858                        } // if
    5959                } // for
     
    6161
    6262        Type * FindFunction::mutate( FunctionType *functionType ) {
    63                 tyVars.beginScope();
     63                TyVarMap oldTyVars = tyVars;
    6464                handleForall( functionType->get_forall() );
    6565                mutateAll( functionType->get_returnVals(), *this );
     
    7272                        } // if
    7373                } // if
    74                 tyVars.endScope();
     74                tyVars = oldTyVars;
    7575                return ret;
    7676        }
    7777
    7878        Type * FindFunction::mutate( PointerType *pointerType ) {
    79                 tyVars.beginScope();
     79                TyVarMap oldTyVars = tyVars;
    8080                handleForall( pointerType->get_forall() );
    8181                Type *ret = Mutator::mutate( pointerType );
    82                 tyVars.endScope();
     82                tyVars = oldTyVars;
    8383                return ret;
    8484        }
  • src/GenPoly/GenPoly.cc

    r1048b31 r1f6e009  
    1616#include "GenPoly.h"
    1717
     18#include "SymTab/Mangler.h"
    1819#include "SynTree/Expression.h"
    1920#include "SynTree/Type.h"
     
    3738        ReferenceToType *isPolyRet( FunctionType *function ) {
    3839                if ( ! function->get_returnVals().empty() ) {
    39                         TyVarMap forallTypes( (TypeDecl::Kind)-1 );
     40                        TyVarMap forallTypes;
    4041                        makeTyVarMap( function, forallTypes );
    4142                        return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes );
     
    217218        }
    218219
     220        std::string sizeofName( Type *ty ) {
     221                return std::string( "_sizeof_" ) + SymTab::Mangler::mangleType( ty );
     222        }
     223
     224        std::string alignofName( Type *ty ) {
     225                return std::string( "_alignof_" ) + SymTab::Mangler::mangleType( ty );
     226        }
     227
     228        std::string offsetofName( Type* ty ) {
     229                return std::string( "_offsetof_" ) + SymTab::Mangler::mangleType( ty );
     230        }
     231
    219232} // namespace GenPoly
    220233
  • src/GenPoly/GenPoly.h

    r1048b31 r1f6e009  
    1717#define GENPOLY_H
    1818
     19#include <map>
    1920#include <string>
    2021#include <iostream>
    2122#include <utility>
    22 
    23 #include "ErasableScopedMap.h"
    24 
    25 #include "SymTab/Mangler.h"
    2623
    2724#include "SynTree/Declaration.h"
     
    3027
    3128namespace GenPoly {
    32         typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;
     29        typedef std::map< std::string, TypeDecl::Kind > TyVarMap;
    3330
    3431        /// A function needs an adapter if it returns a polymorphic value or if any of its
     
    7269        void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap );
    7370
    74         /// Gets the mangled name of this type; alias for SymTab::Mangler::mangleType().
    75         inline std::string mangleType( Type *ty ) { return SymTab::Mangler::mangleType( ty ); }
    76        
    77         /// Gets the name of the sizeof parameter for the type, given its mangled name
    78         inline std::string sizeofName( const std::string &name ) { return std::string( "_sizeof_" ) + name; }
     71        /// Gets the name of the sizeof parameter for the type
     72        std::string sizeofName( Type *ty );
    7973
    80         /// Gets the name of the alignof parameter for the type, given its mangled name
    81         inline std::string alignofName( const std::string &name ) { return std::string( "_alignof_" ) + name; }
     74        /// Gets the name of the alignof parameter for the type
     75        std::string alignofName( Type *ty );
    8276
    83         /// Gets the name of the offsetof parameter for the type, given its mangled name
    84         inline std::string offsetofName( const std::string &name ) { return std::string( "_offsetof_" ) + name; }
    85 
    86         /// Gets the name of the layout function for a given aggregate type, given its declaration
    87         inline std::string layoutofName( AggregateDecl *decl ) { return std::string( "_layoutof_" ) + decl->get_name(); }
    88        
     77        /// Gets the name of the offsetof parameter for the type
     78        std::string offsetofName( Type *ty );
    8979} // namespace GenPoly
    9080
  • src/GenPoly/Lvalue.cc

    r1048b31 r1f6e009  
    1717
    1818#include "Lvalue.h"
    19 
    20 #include "GenPoly.h"
    2119
    2220#include "SynTree/Declaration.h"
     
    6563
    6664        namespace {
    67                 Type* isLvalueRet( FunctionType *function ) {
    68                         if ( function->get_returnVals().empty() ) return 0;
    69                         Type *ty = function->get_returnVals().front()->get_type();
    70                         return ty->get_isLvalue() ? ty : 0;
     65                bool isLvalueRet( FunctionType *function ) {
     66                        if ( ! function->get_returnVals().empty() ) {
     67                                return function->get_returnVals().front()->get_type()->get_isLvalue();
     68                        } else {
     69                                return false;
     70                        } // if
    7171                }
    7272
     
    107107                        assert( function );
    108108
    109                         Type *funType = isLvalueRet( function );
    110                         if ( funType && ! isIntrinsicApp( appExpr ) ) {
    111                                 Expression *expr = appExpr;
    112                                 Type *appType = appExpr->get_results().front();
    113                                 if ( isPolyType( funType ) && ! isPolyType( appType ) ) {
    114                                         // make sure cast for polymorphic type is inside dereference
    115                                         expr = new CastExpr( appExpr, new PointerType( Type::Qualifiers(), appType->clone() ) );
    116                                 }
     109                        std::string typeName;
     110                        if ( isLvalueRet( function ) && ! isIntrinsicApp( appExpr ) ) {
    117111                                UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    118                                 deref->get_results().push_back( appType->clone() );
    119                                 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), appType );
    120                                 deref->get_args().push_back( expr );
     112                                deref->get_results().push_back( appExpr->get_results().front() );
     113                                appExpr->get_results().front() = new PointerType( Type::Qualifiers(), deref->get_results().front()->clone() );
     114                                deref->get_args().push_back( appExpr );
    121115                                return deref;
    122116                        } else {
  • src/GenPoly/PolyMutator.cc

    r1048b31 r1f6e009  
    2727        }
    2828
    29         PolyMutator::PolyMutator() : scopeTyVars( (TypeDecl::Kind)-1 ), env( 0 ) {}
     29        PolyMutator::PolyMutator() : env( 0 ) {
     30        }
    3031
    3132        void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) {
  • src/GenPoly/ScopedMap.h

    r1048b31 r1f6e009  
    1717#define _SCOPEDMAP_H
    1818
    19 #include <cassert>
    2019#include <iterator>
    2120#include <map>
     
    5150                        typedef typename scope_list::size_type size_type;
    5251
    53                         /// Checks if this iterator points to a valid item
    54                         bool is_valid() const {
    55                                 return it != (*scopes)[i].end();
    56                         }
    57 
    58                         /// Increments on invalid
    59                         iterator& next_valid() {
    60                                 if ( ! is_valid() ) { ++(*this); }
    61                                 return *this;
    62                         }
    63 
    64                         /// Decrements on invalid
    65                         iterator& prev_valid() {
    66                                 if ( ! is_valid() ) { --(*this); }
    67                                 return *this;
    68                         }
    69 
    7052                        iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i)
    7153                                : scopes(&_scopes), it(_it), i(_i) {}
     
    8567                                        --i;
    8668                                        it = (*scopes)[i].begin();
    87                                 } else {
    88                                         ++it;
    89                                 }
    90                                 return next_valid();
     69                                        return *this;
     70                                }
     71                                ++it;
     72                                return *this;
    9173                        }
    9274                        iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; }
     
    9981                                }
    10082                                --it;
    101                                 return prev_valid();
     83                                return *this;
    10284                        }
    10385                        iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; }
     
    122104                        typedef typename scope_list::size_type size_type;
    123105
    124                         /// Checks if this iterator points to a valid item
    125                         bool is_valid() const {
    126                                 return it != (*scopes)[i].end();
    127                         }
    128 
    129                         /// Increments on invalid
    130                         const_iterator& next_valid() {
    131                                 if ( ! is_valid() ) { ++(*this); }
    132                                 return *this;
    133                         }
    134 
    135                         /// Decrements on invalid
    136                         const_iterator& prev_valid() {
    137                                 if ( ! is_valid() ) { --(*this); }
    138                                 return *this;
    139                         }
    140 
    141106                        const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i)
    142107                                : scopes(&_scopes), it(_it), i(_i) {}
     
    161126                                        --i;
    162127                                        it = (*scopes)[i].begin();
    163                                 } else {
    164                                         ++it;
    165                                 }
    166                                 return next_valid();
     128                                        return *this;
     129                                }
     130                                ++it;
     131                                return *this;
    167132                        }
    168133                        const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; }
     
    175140                                }
    176141                                --it;
    177                                 return prev_valid();
     142                                return *this;
    178143                        }
    179144                        const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; }
     
    199164                void endScope() {
    200165                        scopes.pop_back();
    201                         assert( ! scopes.empty() );
    202166                }
    203167
     
    205169                ScopedMap() { beginScope(); }
    206170
    207                 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    208                 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    209                 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     171                iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     172                const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     173                const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    210174                iterator end() { return iterator(scopes, scopes[0].end(), 0); }
    211175                const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
     
    224188                        return end();
    225189                }
    226                 const_iterator find( const Key &key ) const {
    227                                 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->find( key ) );
    228                 }
     190                const_iterator find( const Key &key ) const { return const_iterator( find( key ) ); }
    229191               
    230192                /// Finds the given key in the outermost scope inside the given scope where it occurs
     
    238200                        return end();
    239201                }
    240                 const_iterator findNext( const_iterator &it, const Key &key ) const {
    241                                 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->findNext( it, key ) );
    242                 }
     202                const_iterator findNext( const_iterator &it, const Key &key ) const { return const_iterator( findNext( it, key ) ); }
    243203
    244204                /// Inserts the given key-value pair into the outermost scope
     
    248208                }
    249209                std::pair< iterator, bool > insert( const Key &key, const Value &value ) { return insert( std::make_pair( key, value ) ); }
    250 
    251                 Value& operator[] ( const Key &key ) {
    252                         iterator slot = find( key );
    253                         if ( slot != end() ) return slot->second;
    254                         return insert( key, Value() ).first->second;
    255                 }
     210               
    256211        };
    257212} // namespace GenPoly
  • src/GenPoly/ScrubTyVars.cc

    r1048b31 r1f6e009  
    6464                // sizeof( T ) => _sizeof_T parameter, which is the size of T
    6565                if ( Type *polyType = isPolyType( szeof->get_type() ) ) {
    66                         Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) );
     66                        Expression *expr = new NameExpr( sizeofName( polyType ) );
    6767                        return expr;
    6868                } else {
     
    7474                // alignof( T ) => _alignof_T parameter, which is the alignment of T
    7575                if ( Type *polyType = isPolyType( algnof->get_type() ) ) {
    76                         Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) );
     76                        Expression *expr = new NameExpr( alignofName( polyType ) );
    7777                        return expr;
    7878                } else {
  • src/InitTweak/InitModel.h

    r1048b31 r1f6e009  
    7575                        void visit( UntypedOffsetofExpr * ) { throw 0; }
    7676                        void visit( OffsetofExpr * ) { throw 0; }
    77                         void visit( OffsetPackExpr * ) { throw 0; }
    7877                        void visit( AttrExpr * ) { throw 0; }
    7978                        void visit( LogicalExpr * ) { throw 0; }
  • src/Parser/DeclarationNode.cc

    r1048b31 r1f6e009  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:53:17 2016
    13 // Update Count     : 161
     12// Last Modified On : Mon Mar 21 21:04:23 2016
     13// Update Count     : 142
    1414//
    1515
     
    188188        newnode->type->aggregate->name = assign_strptr( name );
    189189        if ( newnode->type->aggregate->name == "" ) {           // anonymous aggregate ?
    190                 newnode->type->aggregate->name = anonymous.newName();
     190                newnode->type->aggregate->name = DeclarationNode::anonymous.newName();
     191        } else if ( ! typedefTable.exists( newnode->type->aggregate->name ) ) {
     192                // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
     193                // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
     194                // if the name is explicitly used.
     195                typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD );
     196                DeclarationNode *typedf = new DeclarationNode;
     197                typedf->name = newnode->type->aggregate->name;
     198                newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );
    191199        } // if
    192200        newnode->type->aggregate->actuals = actuals;
     
    202210        if ( newnode->type->enumeration->name == "" ) {         // anonymous enumeration ?
    203211                newnode->type->enumeration->name = DeclarationNode::anonymous.newName();
     212        } else if ( ! typedefTable.exists( newnode->type->enumeration->name ) ) {
     213                // SKULLDUGGERY: Generate a typedef for the enumeration name so the enumeration does not have to be qualified by
     214                // "enum". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if
     215                // the name is explicitly used.
     216                typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD );
     217                DeclarationNode *typedf = new DeclarationNode;
     218                typedf->name = newnode->type->enumeration->name;
     219                newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );
    204220        } // if
    205221        newnode->type->enumeration->constants = constants;
  • src/Parser/ExpressionNode.cc

    r1048b31 r1f6e009  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  8 15:43:05 2016
    13 // Update Count     : 296
     12// Last Modified On : Sun Mar 13 12:34:38 2016
     13// Update Count     : 272
    1414//
    1515
     
    2222
    2323#include "ParseNode.h"
    24 #include "TypeData.h"
    2524#include "SynTree/Constant.h"
    2625#include "SynTree/Expression.h"
    27 #include "SynTree/Declaration.h"
    2826#include "Common/UnimplementedError.h"
    2927#include "parseutility.h"
     
    874872}
    875873
    876 
    877 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
    878 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
    879 
    880 CompoundLiteralNode::~CompoundLiteralNode() {
    881         delete kids;
    882         delete type;
    883 }
    884 
    885 CompoundLiteralNode *CompoundLiteralNode::clone() const {
    886         return new CompoundLiteralNode( *this );
    887 }
    888 
    889 void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
    890         os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
    891 
    892         os << string( indent + 2, ' ' ) << "type:" << endl;
    893         if ( type != 0 )
    894                 type->print( os, indent + 4 );
    895 
    896         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    897         if ( kids != 0 )
    898                 kids->printList( os, indent + 4 );
    899 }
    900 
    901 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
    902         os << "( ";
    903         if ( type ) type->print( os );
    904         os << ", ";
    905         if ( kids ) kids->printOneLine( os );
    906         os << ") ";
    907 }
    908 
    909 Expression *CompoundLiteralNode::build() const {
    910         Declaration * newDecl = type->build();                          // compound literal type
    911         if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    912                 return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() );
    913         // these types do not have associated type information
    914         } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
    915                 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), kids->build() );
    916         } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
    917                 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), kids->build() );
    918         } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
    919                 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), kids->build() );
    920         } else {
    921                 assert( false );
    922         } // if
    923 }
    924 
    925 
    926874ExpressionNode *flattenCommas( ExpressionNode *list ) {
    927875        if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
  • src/Parser/ParseNode.h

    r1048b31 r1f6e009  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // ParseNode.h --
     7// ParseNode.h -- 
    88//
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:28:16 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Apr 11 11:50:52 2016
    13 // Update Count     : 205
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:26:35 2016
     13// Update Count     : 190
    1414//
    1515
     
    108108
    109109        ConstantNode( Type, std::string * );
    110         ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {};
     110        ConstantNode( const ConstantNode &other ) : value( *new std::string( other.value ) ) {};
    111111        ~ConstantNode() { delete &value; }
    112112
     
    177177        enum Type { TupleC, Comma, TupleFieldSel, // n-adic
    178178                                // triadic
    179                                 Cond, NCond,
     179                                Cond, NCond, 
    180180                                // diadic
    181                                 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And,
    182                                 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
     181                                SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 
     182                                BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 
    183183                                Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    184184                                Index, FieldSel, PFieldSel, Range,
     
    309309        ValofExprNode( const ValofExprNode &other );
    310310        ~ValofExprNode();
    311 
     311 
    312312        virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    313313
     
    333333        enum BuiltinType { Valist };
    334334
    335         static const char *storageName[];
     335        static const char *storageName[]; 
    336336        static const char *qualifierName[];
    337337        static const char *basicTypeName[];
     
    427427class StatementNode : public ParseNode {
    428428  public:
    429         enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru,
     429        enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru, 
    430430                                While, Do,        For,
    431431                                Goto,  Continue,  Break,   Return,  Throw,
     
    535535        bool aggregate;
    536536        ExpressionNode *designator; // may be list
    537         InitializerNode *kids;
    538 };
    539 
    540 class CompoundLiteralNode : public ExpressionNode {
    541   public:
    542         CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
    543         CompoundLiteralNode( const CompoundLiteralNode &type );
    544         ~CompoundLiteralNode();
    545 
    546         virtual CompoundLiteralNode *clone() const;
    547 
    548         DeclarationNode *get_type() const { return type; }
    549         CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
    550 
    551         InitializerNode *get_initializer() const { return kids; }
    552         CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
    553 
    554         void print( std::ostream &, int indent = 0 ) const;
    555         void printOneLine( std::ostream &, int indent = 0 ) const;
    556 
    557         virtual Expression *build() const;
    558   private:
    559         DeclarationNode *type;
    560537        InitializerNode *kids;
    561538};
  • src/Parser/TypedefTable.cc

    r1048b31 r1f6e009  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:57:30 2016
    13 // Update Count     : 24
     12// Last Modified On : Mon Mar 21 18:18:58 2016
     13// Update Count     : 23
    1414//
    1515
     
    3333}
    3434
    35 int TypedefTable::isKind( const string &identifier ) const {
    36         tableType::const_iterator id_pos = table.find( identifier );
    37         // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
    38         if ( id_pos == table.end() ) return IDENTIFIER;
    39         return id_pos->second.begin()->kind;
    40 }
    41 
    4235void TypedefTable::changeKind( const string &identifier, kind_t kind ) {
    4336        tableType::iterator id_pos = table.find( identifier );
     
    4639}
    4740
    48 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
    49 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
    50 // if the name is explicitly used.
    51 void TypedefTable::makeTypedef( const string &name ) {
    52         if ( ! typedefTable.exists( name ) ) {
    53                 typedefTable.addToEnclosingScope( name, TypedefTable::TD );
    54         } // if
     41int TypedefTable::isKind( const string &identifier ) const {
     42        tableType::const_iterator id_pos = table.find( identifier );
     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;
    5546}
    5647
  • src/Parser/TypedefTable.h

    r1048b31 r1f6e009  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:59:56 2016
    13 // Update Count     : 27
     12// Last Modified On : Mon Mar 21 18:17:36 2016
     13// Update Count     : 24
    1414//
    1515
     
    5959        int isKind( const std::string &identifier ) const;
    6060        void changeKind( const std::string &identifier, kind_t kind );
    61 
    62         void makeTypedef( const std::string &name );
    63 
     61       
    6462        // "addToCurrentScope" adds the identifier/type pair to the current scope. This does less than you think it does,
    6563        // since each declaration is within its own scope.  Mostly useful for type parameters.
  • src/Parser/parser.cc

    r1048b31 r1f6e009  
    590590#define YYFINAL  249
    591591/* YYLAST -- Last index in YYTABLE.  */
    592 #define YYLAST   11449
     592#define YYLAST   11290
    593593
    594594/* YYNTOKENS -- Number of terminals.  */
    595595#define YYNTOKENS  133
    596596/* YYNNTS -- Number of nonterminals.  */
    597 #define YYNNTS  240
     597#define YYNNTS  238
    598598/* YYNRULES -- Number of rules.  */
    599 #define YYNRULES  754
     599#define YYNRULES  752
    600600/* YYNRULES -- Number of states.  */
    601 #define YYNSTATES  1581
     601#define YYNSTATES  1579
    602602
    603603/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    691691    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
    692692    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
    693     1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,  1318,
    694     1326,  1329,  1332,  1335,  1337,  1340,  1343,  1347,  1350,  1354,
    695     1356,  1359,  1363,  1366,  1369,  1374,  1375,  1377,  1380,  1383,
    696     1385,  1386,  1388,  1391,  1394,  1400,  1403,  1404,  1412,  1415,
    697     1420,  1421,  1424,  1425,  1427,  1429,  1431,  1437,  1443,  1449,
    698     1451,  1457,  1463,  1473,  1475,  1481,  1482,  1484,  1486,  1492,
    699     1494,  1496,  1502,  1508,  1510,  1514,  1518,  1523,  1525,  1527,
    700     1529,  1531,  1534,  1536,  1540,  1544,  1546,  1549,  1551,  1555,
    701     1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1575,
    702     1577,  1580,  1582,  1584,  1586,  1589,  1590,  1593,  1596,  1598,
    703     1603,  1604,  1606,  1609,  1613,  1618,  1621,  1624,  1626,  1629,
    704     1631,  1634,  1640,  1646,  1654,  1661,  1663,  1666,  1669,  1673,
    705     1675,  1678,  1681,  1686,  1689,  1694,  1695,  1700,  1703,  1705,
    706     1707,  1709,  1710,  1713,  1719,  1725,  1739,  1741,  1743,  1747,
    707     1751,  1754,  1758,  1762,  1765,  1770,  1772,  1779,  1789,  1790,
    708     1802,  1804,  1808,  1812,  1816,  1818,  1820,  1826,  1829,  1835,
    709     1836,  1838,  1840,  1844,  1845,  1847,  1849,  1851,  1853,  1854,
    710     1861,  1864,  1866,  1869,  1874,  1877,  1881,  1885,  1889,  1894,
    711     1900,  1906,  1912,  1919,  1921,  1923,  1925,  1929,  1930,  1936,
    712     1937,  1939,  1941,  1944,  1951,  1953,  1957,  1958,  1960,  1965,
    713     1967,  1969,  1971,  1973,  1976,  1978,  1981,  1984,  1986,  1990,
    714     1993,  1997,  2001,  2004,  2009,  2014,  2018,  2027,  2031,  2034,
    715     2036,  2039,  2046,  2055,  2059,  2062,  2066,  2070,  2075,  2080,
    716     2084,  2086,  2088,  2090,  2095,  2102,  2106,  2109,  2113,  2117,
    717     2122,  2127,  2131,  2134,  2136,  2139,  2142,  2144,  2148,  2151,
    718     2155,  2159,  2162,  2167,  2172,  2176,  2183,  2192,  2196,  2199,
    719     2201,  2204,  2207,  2210,  2214,  2218,  2221,  2226,  2231,  2235,
    720     2242,  2251,  2255,  2258,  2260,  2263,  2266,  2268,  2270,  2273,
    721     2277,  2281,  2284,  2289,  2296,  2305,  2307,  2310,  2313,  2315,
    722     2318,  2321,  2325,  2329,  2331,  2336,  2341,  2345,  2351,  2360,
    723     2364,  2367,  2371,  2373,  2379,  2385,  2392,  2399,  2401,  2404,
    724     2407,  2409,  2412,  2415,  2419,  2423,  2425,  2430,  2435,  2439,
    725     2445,  2454,  2458,  2460,  2463,  2465,  2468,  2475,  2481,  2488,
    726     2496,  2504,  2506,  2509,  2512,  2514,  2517,  2520,  2524,  2528,
    727     2530,  2535,  2540,  2544,  2553,  2557,  2559,  2561,  2564,  2566,
    728     2568,  2571,  2575,  2578,  2582,  2585,  2589,  2593,  2596,  2601,
    729     2605,  2608,  2612,  2615,  2620,  2624,  2627,  2634,  2641,  2648,
    730     2656,  2658,  2661,  2663,  2665,  2667,  2670,  2674,  2677,  2681,
    731     2684,  2688,  2692,  2697,  2700,  2704,  2709,  2712,  2718,  2724,
    732     2731,  2738,  2739,  2741,  2742
     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
    733733};
    734734
     
    736736static const yytype_int16 yyrhs[] =
    737737{
    738      301,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
     738     299,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
    739739      -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
    740740      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
     
    745745     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
    746746     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
    747      109,   274,   110,   114,   278,   371,   115,    -1,   143,   114,
     747     109,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
    748748     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    749749     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
     
    755755     141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
    756756      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
    757       37,   148,    -1,    37,   109,   274,   110,    -1,    38,   109,
    758      274,   116,   139,   110,    -1,    76,    -1,    76,   109,   275,
     757      37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
     758     272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
    759759     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
    760       66,   109,   274,   110,    -1,    94,   139,    -1,   120,    -1,
    761      121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   274,
    762      110,   150,    -1,   109,   274,   110,   165,    -1,   150,    -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,
    763763     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
    764764     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
     
    773773     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
    774774      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
    775       -1,   165,   372,    -1,    -1,   163,    -1,   111,   112,    -1,
     775      -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
    776776     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
    777777     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
     
    782782     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
    783783     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
    784      117,   311,   170,    -1,   114,   115,    -1,   114,   134,   134,
     784     117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
    785785     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
    786       -1,   211,    -1,    40,   211,    -1,   307,    -1,   170,   135,
     786      -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
    787787      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
    788788     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
     
    791791     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
    792792     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
    793       -1,   309,    -1,   178,    -1,   179,   116,   178,    -1,    44,
     793      -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
    794794     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
    795795      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
     
    813813     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
    814814     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
    815       -1,   224,    -1,   224,   308,    -1,   224,   356,    -1,   365,
    816      139,    -1,   365,    -1,    64,   198,   109,   141,   110,   132,
     815      -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
     816     139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
    817817      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
    818818      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
     
    826826      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
    827827      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
    828       29,   210,   132,    -1,   209,    29,   210,   132,    -1,   273,
    829       -1,   210,   116,   273,    -1,   212,    -1,   221,    -1,   213,
     828      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
     829      -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
    830830     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
    831       -1,   292,   135,   132,    -1,   295,   135,   132,    -1,   214,
    832      276,    -1,   230,   214,   276,    -1,   213,   135,   116,   134,
    833      271,   276,    -1,   366,   271,   310,    -1,   369,   271,   310,
    834       -1,   226,   369,   271,   310,    -1,   216,    -1,   226,   216,
     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,
    835835      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
    836      116,   134,   271,    -1,   111,   112,   271,   109,   134,   259,
    837      135,   110,    -1,   369,   271,   109,   134,   259,   135,   110,
    838       -1,   217,   271,   109,   134,   259,   135,   110,    -1,   111,
    839      134,   261,   135,   112,    -1,   111,   134,   261,   135,   116,
    840      134,   262,   135,   112,    -1,     3,   214,    -1,     3,   216,
    841       -1,   218,   135,   116,   134,   139,    -1,     3,   224,   308,
    842       -1,   219,   135,   116,   134,   308,    -1,   226,     3,   224,
    843      308,    -1,   224,     3,   308,    -1,   224,     3,   226,   308,
     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,
    844844      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
    845845     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
    846846     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
    847      223,   308,   310,   276,    -1,   222,   116,   311,   308,   310,
    848      276,    -1,   235,    -1,   239,    -1,   241,    -1,   282,    -1,
    849      236,    -1,   240,    -1,   242,    -1,   283,    -1,    -1,   226,
    850       -1,   227,    -1,   226,   227,    -1,   228,    -1,   313,    -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,
    851851      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
    852       -1,    13,   109,   229,   285,   110,    -1,   231,    -1,   226,
     852      -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
    853853     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
    854854      -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
     
    860860      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
    861861     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
    862      275,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
    863      275,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
     862     273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
     863     273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
    864864     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
    865865     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
    866866     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
    867867      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
    868      255,    -1,   246,   114,   247,   115,    -1,   246,   273,    -1,
    869       -1,   246,   273,   245,   114,   247,   115,    -1,   246,   109,
    870      291,   110,   114,   247,   115,    -1,   246,   284,    -1,    31,
    871      311,    -1,    32,   311,    -1,   248,    -1,   247,   248,    -1,
    872      249,   132,    -1,    40,   249,   132,    -1,   250,   132,    -1,
    873       40,   250,   132,    -1,   365,    -1,   365,   273,    -1,   249,
    874      116,   273,    -1,   249,   116,    -1,   224,   251,    -1,   250,
    875      116,   311,   251,    -1,    -1,   253,    -1,   317,   252,    -1,
    876      330,   252,    -1,   356,    -1,    -1,   253,    -1,   117,   162,
    877       -1,    30,   311,    -1,   254,   114,   257,   371,   115,    -1,
    878      254,   273,    -1,    -1,   254,   273,   256,   114,   257,   371,
    879      115,    -1,   273,   258,    -1,   257,   116,   273,   258,    -1,
    880       -1,   131,   162,    -1,    -1,   260,    -1,   262,    -1,   261,
    881       -1,   261,   135,   116,   134,   262,    -1,   262,   135,   116,
    882      134,    96,    -1,   261,   135,   116,   134,    96,    -1,   266,
    883       -1,   262,   135,   116,   134,   266,    -1,   261,   135,   116,
    884      134,   266,    -1,   261,   135,   116,   134,   262,   135,   116,
    885      134,   266,    -1,   267,    -1,   262,   135,   116,   134,   267,
    886       -1,    -1,   264,    -1,   265,    -1,   265,   135,   116,   134,
    887       96,    -1,   269,    -1,   268,    -1,   265,   135,   116,   134,
    888      269,    -1,   265,   135,   116,   134,   268,    -1,   268,    -1,
    889      361,   271,   372,    -1,   369,   271,   372,    -1,   226,   369,
    890      271,   372,    -1,   216,    -1,   269,    -1,   361,    -1,   369,
    891       -1,   226,   369,    -1,   370,    -1,   223,   335,   372,    -1,
    892      223,   339,   372,    -1,   223,    -1,   223,   350,    -1,   139,
    893       -1,   270,   116,   139,    -1,   137,    -1,    74,    -1,    75,
    894       -1,   138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,
    895       -1,    75,    -1,   365,    -1,   224,    -1,   224,   356,    -1,
    896      365,    -1,   370,    -1,   224,    -1,   224,   344,    -1,    -1,
    897      131,   277,    -1,   107,   277,    -1,   163,    -1,   114,   278,
    898      371,   115,    -1,    -1,   277,    -1,   279,   277,    -1,   278,
    899      116,   277,    -1,   278,   116,   279,   277,    -1,   280,   117,
    900       -1,   273,   117,    -1,   281,    -1,   280,   281,    -1,    80,
    901       -1,   113,   273,    -1,   111,   134,   163,   135,   112,    -1,
    902      111,   134,   309,   135,   112,    -1,   111,   134,   162,    96,
    903      162,   135,   112,    -1,   113,   111,   134,   146,   135,   112,
    904       -1,   283,    -1,   230,   283,    -1,   282,   232,    -1,   282,
    905      232,   226,    -1,   284,    -1,   226,   284,    -1,   283,   227,
    906       -1,    75,   109,   291,   110,    -1,   286,   372,    -1,   285,
    907      116,   286,   372,    -1,    -1,   288,   273,   287,   289,    -1,
    908      224,   335,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,
    909      289,   290,    -1,   129,   273,   109,   291,   110,    -1,   129,
    910      114,   134,   297,   115,    -1,   129,   109,   134,   285,   135,
    911      110,   114,   134,   297,   115,   109,   291,   110,    -1,   275,
    912       -1,   163,    -1,   291,   116,   275,    -1,   291,   116,   163,
    913       -1,    33,   293,    -1,   231,    33,   293,    -1,   292,   116,
    914      293,    -1,   294,   289,    -1,   294,   289,   131,   275,    -1,
    915      273,    -1,   272,   109,   134,   285,   135,   110,    -1,    36,
    916      273,   109,   134,   285,   135,   110,   114,   115,    -1,    -1,
    917       36,   273,   109,   134,   285,   135,   110,   114,   296,   297,
    918      115,    -1,   298,    -1,   297,   134,   298,    -1,   299,   135,
    919      132,    -1,   300,   135,   132,    -1,   214,    -1,   216,    -1,
    920      299,   135,   116,   134,   271,    -1,   224,   308,    -1,   300,
    921      135,   116,   134,   308,    -1,    -1,   302,    -1,   304,    -1,
    922      302,   134,   304,    -1,    -1,   302,    -1,   211,    -1,   306,
    923       -1,   197,    -1,    -1,     5,    82,   305,   114,   303,   115,
    924       -1,    40,   304,    -1,   307,    -1,   322,   172,    -1,   326,
    925      134,   206,   172,    -1,   215,   172,    -1,   223,   322,   172,
    926       -1,   226,   322,   172,    -1,   230,   322,   172,    -1,   230,
    927      226,   322,   172,    -1,   223,   326,   134,   206,   172,    -1,
    928      226,   326,   134,   206,   172,    -1,   230,   326,   134,   206,
    929      172,    -1,   230,   226,   326,   134,   206,   172,    -1,   317,
    930       -1,   322,    -1,   330,    -1,   162,   123,   162,    -1,    -1,
    931       64,   109,   141,   110,   311,    -1,    -1,   312,    -1,   313,
    932       -1,   312,   313,    -1,    39,   109,   109,   314,   110,   110,
    933       -1,   315,    -1,   314,   116,   315,    -1,    -1,   316,    -1,
    934      316,   109,   169,   110,    -1,   271,    -1,   233,    -1,   234,
    935       -1,   227,    -1,   318,   311,    -1,   319,    -1,   320,   311,
    936       -1,   321,   311,    -1,   137,    -1,   109,   318,   110,    -1,
    937      119,   317,    -1,   119,   226,   317,    -1,   109,   319,   110,
    938       -1,   318,   348,    -1,   109,   319,   110,   348,    -1,   109,
    939      320,   110,   349,    -1,   109,   320,   110,    -1,   109,   319,
    940      110,   109,   134,   263,   135,   110,    -1,   109,   321,   110,
    941       -1,   323,   311,    -1,   324,    -1,   325,   311,    -1,   318,
    942      109,   134,   263,   135,   110,    -1,   109,   324,   110,   109,
    943      134,   263,   135,   110,    -1,   109,   323,   110,    -1,   119,
    944      322,    -1,   119,   226,   322,    -1,   109,   324,   110,    -1,
    945      109,   324,   110,   348,    -1,   109,   325,   110,   349,    -1,
    946      109,   325,   110,    -1,   327,    -1,   328,    -1,   329,    -1,
    947      318,   109,   270,   110,    -1,   109,   328,   110,   109,   270,
    948      110,    -1,   109,   327,   110,    -1,   119,   326,    -1,   119,
    949      226,   326,    -1,   109,   328,   110,    -1,   109,   328,   110,
    950      348,    -1,   109,   329,   110,   349,    -1,   109,   329,   110,
    951       -1,   331,   311,    -1,   332,    -1,   333,   311,    -1,   334,
    952      311,    -1,   340,    -1,   109,   331,   110,    -1,   119,   330,
    953       -1,   119,   226,   330,    -1,   109,   332,   110,    -1,   331,
    954      348,    -1,   109,   332,   110,   348,    -1,   109,   333,   110,
    955      349,    -1,   109,   333,   110,    -1,   331,   109,   134,   263,
    956      135,   110,    -1,   109,   332,   110,   109,   134,   263,   135,
    957      110,    -1,   109,   334,   110,    -1,   318,   311,    -1,   336,
    958       -1,   337,   311,    -1,   338,   311,    -1,   119,   335,    -1,
    959      119,   226,   335,    -1,   109,   336,   110,    -1,   318,   354,
    960       -1,   109,   336,   110,   348,    -1,   109,   337,   110,   349,
    961       -1,   109,   337,   110,    -1,   318,   109,   134,   263,   135,
    962      110,    -1,   109,   336,   110,   109,   134,   263,   135,   110,
    963       -1,   109,   338,   110,    -1,   340,   311,    -1,   341,    -1,
    964      342,   311,    -1,   343,   311,    -1,    74,    -1,    75,    -1,
    965      119,   339,    -1,   119,   226,   339,    -1,   109,   341,   110,
    966       -1,   340,   354,    -1,   109,   341,   110,   354,    -1,   340,
    967      109,   134,   263,   135,   110,    -1,   109,   341,   110,   109,
    968      134,   263,   135,   110,    -1,   345,    -1,   346,   311,    -1,
    969      347,   311,    -1,   119,    -1,   119,   226,    -1,   119,   344,
    970       -1,   119,   226,   344,    -1,   109,   345,   110,    -1,   348,
    971       -1,   109,   345,   110,   348,    -1,   109,   346,   110,   349,
    972       -1,   109,   346,   110,    -1,   109,   134,   263,   135,   110,
    973       -1,   109,   345,   110,   109,   134,   263,   135,   110,    -1,
    974      109,   347,   110,    -1,   111,   112,    -1,   111,   112,   349,
    975       -1,   349,    -1,   111,   134,   163,   135,   112,    -1,   111,
    976      134,   119,   135,   112,    -1,   349,   111,   134,   163,   135,
    977      112,    -1,   349,   111,   134,   119,   135,   112,    -1,   351,
    978       -1,   352,   311,    -1,   353,   311,    -1,   119,    -1,   119,
    979      226,    -1,   119,   350,    -1,   119,   226,   350,    -1,   109,
    980      351,   110,    -1,   354,    -1,   109,   351,   110,   354,    -1,
    981      109,   352,   110,   349,    -1,   109,   352,   110,    -1,   109,
    982      134,   263,   135,   110,    -1,   109,   351,   110,   109,   134,
    983      263,   135,   110,    -1,   109,   353,   110,    -1,   355,    -1,
    984      355,   349,    -1,   349,    -1,   111,   112,    -1,   111,   134,
    985      226,   119,   135,   112,    -1,   111,   134,   226,   135,   112,
    986       -1,   111,   134,   226,   163,   135,   112,    -1,   111,   134,
    987        7,   225,   163,   135,   112,    -1,   111,   134,   226,     7,
    988      163,   135,   112,    -1,   357,    -1,   358,   311,    -1,   359,
    989      311,    -1,   119,    -1,   119,   226,    -1,   119,   356,    -1,
    990      119,   226,   356,    -1,   109,   357,   110,    -1,   348,    -1,
    991      109,   357,   110,   348,    -1,   109,   358,   110,   349,    -1,
    992      109,   358,   110,    -1,   109,   357,   110,   109,   134,   263,
    993      135,   110,    -1,   109,   359,   110,    -1,   361,    -1,   369,
    994       -1,   226,   369,    -1,   362,    -1,   363,    -1,   119,   224,
    995       -1,   226,   119,   224,    -1,   119,   370,    -1,   226,   119,
    996      370,    -1,   119,   360,    -1,   226,   119,   360,    -1,   111,
    997      112,   224,    -1,   364,   224,    -1,   111,   112,   349,   224,
    998       -1,   364,   349,   224,    -1,   349,   224,    -1,   111,   112,
    999      362,    -1,   364,   362,    -1,   111,   112,   349,   362,    -1,
    1000      364,   349,   362,    -1,   349,   362,    -1,   111,   134,   226,
    1001      119,   135,   112,    -1,   111,   134,   226,   163,   135,   112,
    1002       -1,   111,   134,   230,   163,   135,   112,    -1,   111,   134,
    1003      230,   226,   163,   135,   112,    -1,   369,    -1,   226,   369,
    1004       -1,   366,    -1,   367,    -1,   368,    -1,   119,   224,    -1,
    1005      226,   119,   224,    -1,   119,   370,    -1,   226,   119,   370,
    1006       -1,   119,   365,    -1,   226,   119,   365,    -1,   111,   112,
    1007      224,    -1,   111,   112,   349,   224,    -1,   349,   224,    -1,
    1008      111,   112,   367,    -1,   111,   112,   349,   367,    -1,   349,
    1009      367,    -1,   111,   134,   262,   135,   112,    -1,   111,   112,
    1010      109,   259,   110,    -1,   369,   109,   134,   259,   135,   110,
    1011       -1,   217,   109,   134,   259,   135,   110,    -1,    -1,   116,
    1012       -1,    -1,   131,   163,    -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
    10131013};
    10141014
     
    10521052    1368,  1374,  1375,  1377,  1379,  1384,  1386,  1388,  1390,  1395,
    10531053    1396,  1398,  1400,  1405,  1406,  1408,  1413,  1414,  1416,  1418,
    1054     1423,  1425,  1427,  1432,  1433,  1437,  1439,  1445,  1444,  1448,
    1055     1450,  1455,  1457,  1462,  1464,  1469,  1470,  1472,  1473,  1478,
    1056     1479,  1481,  1483,  1488,  1490,  1496,  1497,  1499,  1502,  1505,
    1057     1510,  1511,  1516,  1521,  1525,  1527,  1533,  1532,  1539,  1541,
    1058     1547,  1548,  1556,  1557,  1561,  1562,  1563,  1565,  1567,  1574,
    1059     1575,  1577,  1579,  1584,  1585,  1591,  1592,  1596,  1597,  1602,
    1060     1603,  1604,  1606,  1614,  1615,  1617,  1620,  1622,  1626,  1627,
    1061     1628,  1630,  1632,  1636,  1641,  1649,  1650,  1659,  1661,  1666,
    1062     1667,  1668,  1672,  1673,  1674,  1678,  1679,  1680,  1684,  1685,
    1063     1686,  1691,  1692,  1693,  1694,  1700,  1701,  1703,  1708,  1709,
    1064     1714,  1715,  1716,  1717,  1718,  1733,  1734,  1739,  1740,  1748,
    1065     1750,  1752,  1755,  1757,  1759,  1782,  1783,  1785,  1787,  1792,
    1066     1793,  1795,  1800,  1805,  1806,  1812,  1811,  1815,  1819,  1821,
    1067     1823,  1829,  1830,  1835,  1840,  1842,  1847,  1849,  1850,  1852,
    1068     1857,  1859,  1861,  1866,  1868,  1873,  1878,  1886,  1892,  1891,
    1069     1905,  1906,  1911,  1912,  1916,  1921,  1926,  1934,  1939,  1950,
    1070     1951,  1962,  1963,  1969,  1970,  1974,  1975,  1976,  1979,  1978,
    1071     1989,  1994,  1999,  2005,  2014,  2020,  2026,  2032,  2038,  2046,
    1072     2052,  2060,  2066,  2075,  2076,  2077,  2081,  2085,  2087,  2092,
    1073     2093,  2097,  2098,  2103,  2109,  2110,  2113,  2115,  2116,  2120,
    1074     2121,  2122,  2123,  2157,  2159,  2160,  2162,  2167,  2172,  2177,
    1075     2179,  2181,  2186,  2188,  2190,  2192,  2197,  2199,  2209,  2211,
    1076     2212,  2217,  2219,  2221,  2226,  2228,  2230,  2235,  2237,  2239,
    1077     2248,  2249,  2250,  2254,  2256,  2258,  2263,  2265,  2267,  2272,
    1078     2274,  2276,  2291,  2293,  2294,  2296,  2301,  2302,  2307,  2309,
    1079     2311,  2316,  2318,  2320,  2322,  2327,  2329,  2331,  2341,  2343,
    1080     2344,  2346,  2351,  2353,  2355,  2360,  2362,  2364,  2366,  2371,
    1081     2373,  2375,  2406,  2408,  2409,  2411,  2416,  2421,  2429,  2431,
    1082     2433,  2438,  2440,  2445,  2447,  2461,  2462,  2464,  2469,  2471,
    1083     2473,  2475,  2477,  2482,  2483,  2485,  2487,  2492,  2494,  2496,
    1084     2502,  2504,  2506,  2510,  2512,  2514,  2516,  2530,  2531,  2533,
    1085     2538,  2540,  2542,  2544,  2546,  2551,  2552,  2554,  2556,  2561,
    1086     2563,  2565,  2571,  2572,  2574,  2583,  2586,  2588,  2591,  2593,
    1087     2595,  2608,  2609,  2611,  2616,  2618,  2620,  2622,  2624,  2629,
    1088     2630,  2632,  2634,  2639,  2641,  2649,  2650,  2651,  2656,  2657,
    1089     2661,  2663,  2665,  2667,  2669,  2671,  2678,  2680,  2682,  2684,
    1090     2686,  2688,  2690,  2692,  2694,  2696,  2701,  2703,  2705,  2710,
    1091     2736,  2737,  2739,  2743,  2744,  2748,  2750,  2752,  2754,  2756,
    1092     2758,  2765,  2767,  2769,  2771,  2773,  2775,  2780,  2785,  2787,
    1093     2789,  2807,  2809,  2814,  2815
     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
    10941094};
    10951095#endif
     
    11561156  "sue_declaration_specifier", "sue_type_specifier",
    11571157  "typedef_declaration_specifier", "typedef_type_specifier",
    1158   "elaborated_type_name", "aggregate_name", "$@2", "aggregate_key",
     1158  "elaborated_type_name", "aggregate_name", "aggregate_key",
    11591159  "field_declaration_list", "field_declaration",
    11601160  "new_field_declaring_list", "field_declaring_list", "field_declarator",
    11611161  "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name",
    1162   "$@3", "enumerator_list", "enumerator_value_opt",
    1163   "new_parameter_type_list_opt", "new_parameter_type_list",
    1164   "new_parameter_list", "new_abstract_parameter_list",
    1165   "parameter_type_list_opt", "parameter_type_list", "parameter_list",
    1166   "new_parameter_declaration", "new_abstract_parameter_declaration",
    1167   "parameter_declaration", "abstract_parameter_declaration",
    1168   "identifier_list", "identifier_or_type_name",
    1169   "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name",
    1170   "type_name_no_function", "type_name", "initializer_opt", "initializer",
    1171   "initializer_list", "designation", "designator_list", "designator",
    1172   "typegen_declaration_specifier", "typegen_type_specifier",
    1173   "typegen_name", "type_parameter_list", "type_parameter", "$@4",
    1174   "type_class", "assertion_list_opt", "assertion", "type_name_list",
    1175   "type_declaring_list", "type_declarator", "type_declarator_name",
    1176   "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",
     1162  "enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt",
     1163  "new_parameter_type_list", "new_parameter_list",
     1164  "new_abstract_parameter_list", "parameter_type_list_opt",
     1165  "parameter_type_list", "parameter_list", "new_parameter_declaration",
     1166  "new_abstract_parameter_declaration", "parameter_declaration",
     1167  "abstract_parameter_declaration", "identifier_list",
     1168  "identifier_or_type_name", "no_01_identifier_or_type_name",
     1169  "no_attr_identifier_or_type_name", "type_name_no_function", "type_name",
     1170  "initializer_opt", "initializer", "initializer_list", "designation",
     1171  "designator_list", "designator", "typegen_declaration_specifier",
     1172  "typegen_type_specifier", "typegen_name", "type_parameter_list",
     1173  "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
     1174  "type_name_list", "type_declaring_list", "type_declarator",
     1175  "type_declarator_name", "trait_specifier", "$@3",
     1176  "trait_declaration_list", "trait_declaration",
    11771177  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
    11781178  "external_definition_list", "external_definition_list_opt",
    1179   "external_definition", "$@6", "external_function_definition",
     1179  "external_definition", "$@4", "external_function_definition",
    11801180  "function_definition", "declarator", "subrange", "asm_name_opt",
    11811181  "attribute_list_opt", "attribute_list", "attribute",
     
    12691269     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
    12701270     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
    1271      242,   242,   242,   243,   243,   244,   244,   245,   244,   244,
    1272      244,   246,   246,   247,   247,   248,   248,   248,   248,   249,
    1273      249,   249,   249,   250,   250,   251,   251,   251,   251,   251,
    1274      252,   252,   253,   254,   255,   255,   256,   255,   257,   257,
    1275      258,   258,   259,   259,   260,   260,   260,   260,   260,   261,
    1276      261,   261,   261,   262,   262,   263,   263,   264,   264,   265,
    1277      265,   265,   265,   266,   266,   266,   266,   266,   267,   267,
    1278      267,   267,   267,   268,   268,   269,   269,   270,   270,   271,
    1279      271,   271,   272,   272,   272,   273,   273,   273,   274,   274,
    1280      274,   275,   275,   275,   275,   276,   276,   276,   277,   277,
    1281      278,   278,   278,   278,   278,   279,   279,   280,   280,   281,
    1282      281,   281,   281,   281,   281,   282,   282,   282,   282,   283,
    1283      283,   283,   284,   285,   285,   287,   286,   286,   288,   288,
    1284      288,   289,   289,   290,   290,   290,   291,   291,   291,   291,
    1285      292,   292,   292,   293,   293,   294,   294,   295,   296,   295,
    1286      297,   297,   298,   298,   299,   299,   299,   300,   300,   301,
    1287      301,   302,   302,   303,   303,   304,   304,   304,   305,   304,
    1288      304,   306,   306,   306,   307,   307,   307,   307,   307,   307,
    1289      307,   307,   307,   308,   308,   308,   309,   310,   310,   311,
    1290      311,   312,   312,   313,   314,   314,   315,   315,   315,   316,
    1291      316,   316,   316,   317,   317,   317,   317,   318,   318,   319,
    1292      319,   319,   320,   320,   320,   320,   321,   321,   322,   322,
    1293      322,   323,   323,   323,   324,   324,   324,   325,   325,   325,
    1294      326,   326,   326,   327,   327,   327,   328,   328,   328,   329,
    1295      329,   329,   330,   330,   330,   330,   331,   331,   332,   332,
    1296      332,   333,   333,   333,   333,   334,   334,   334,   335,   335,
    1297      335,   335,   336,   336,   336,   337,   337,   337,   337,   338,
    1298      338,   338,   339,   339,   339,   339,   340,   340,   341,   341,
    1299      341,   342,   342,   343,   343,   344,   344,   344,   345,   345,
    1300      345,   345,   345,   346,   346,   346,   346,   347,   347,   347,
    1301      348,   348,   348,   349,   349,   349,   349,   350,   350,   350,
    1302      351,   351,   351,   351,   351,   352,   352,   352,   352,   353,
    1303      353,   353,   354,   354,   354,   355,   355,   355,   355,   355,
    1304      355,   356,   356,   356,   357,   357,   357,   357,   357,   358,
    1305      358,   358,   358,   359,   359,   360,   360,   360,   361,   361,
    1306      362,   362,   362,   362,   362,   362,   363,   363,   363,   363,
    1307      363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
    1308      365,   365,   365,   366,   366,   367,   367,   367,   367,   367,
    1309      367,   368,   368,   368,   368,   368,   368,   369,   370,   370,
    1310      370,   371,   371,   372,   372
     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
    13111311};
    13121312
     
    13501350       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
    13511351       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
    1352        1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
    1353        2,     2,     2,     1,     2,     2,     3,     2,     3,     1,
    1354        2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
    1355        0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
    1356        0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
    1357        5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
    1358        1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
    1359        1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
    1360        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1361        2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
    1362        0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
    1363        2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
    1364        2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
    1365        1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
    1366        2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
    1367        1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
    1368        1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
    1369        2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
    1370        5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
    1371        1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
    1372        1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
    1373        3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
    1374        2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
    1375        1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
    1376        4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
    1377        3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
    1378        2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
    1379        8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
    1380        3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
     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,
     1376       2,     1,     2,     2,     1,     3,     2,     3,     3,     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,
    13811383       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
    1382        2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
    1383        1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
    1384        8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
    1385        7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
    1386        4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
    1387        2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
    1388        2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
    1389        1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
    1390        3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
    1391        6,     0,     1,     0,     2
     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
    13921392};
    13931393
     
    13991399     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    14001400     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1401      327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
     1401     327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
    14021402       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
    1403        8,    14,    15,     0,     2,   294,   567,     9,   527,   525,
    1404      247,     3,   455,     3,   260,     0,     3,     3,     3,   248,
     1403       8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
     1404     247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
    14051405       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
    14061406     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
    1407      363,     0,     0,   364,   289,   475,   479,     3,     3,     0,
    1408        2,   521,   526,   531,   299,     0,     0,   549,   579,   549,
    1409        2,   590,   591,   592,   294,     0,   733,   734,     0,    12,
     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,
    14101410     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
    1411      293,   528,   305,   393,   550,   551,   371,   372,    12,   446,
    1412      447,    11,   442,   445,     0,   505,   500,   491,   446,   447,
    1413        0,     0,   530,   221,     0,   294,     0,     0,     0,     0,
    1414        0,     0,     0,     0,   294,   294,     2,     0,   735,   295,
    1415      584,   596,   739,   732,   730,   737,     0,     0,     0,   254,
    1416        2,     0,   534,   440,   441,   439,     0,     0,     0,     0,
    1417      549,     0,   636,   637,     0,     0,   547,   543,   549,   564,
    1418      549,   549,   544,     2,   545,   549,   603,   549,   549,   606,
     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,
    14191419       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
    1420      297,   308,   342,   354,   480,     0,     2,     0,   455,   262,
    1421      295,   335,   350,   357,   476,     0,     2,     0,   311,   336,
    1422      343,   344,     0,   351,   355,   358,   362,   447,   294,   294,
    1423      366,   370,     0,   395,   477,   481,     0,     0,     0,     1,
    1424      294,     2,   532,   578,   580,   294,     2,   743,   295,   746,
    1425      547,   547,   295,     0,     0,     0,   273,   549,   544,     2,
    1426      294,     0,     0,   294,   552,     2,   503,     2,   556,     0,
     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,
    14271427       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
    14281428      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
    14291429      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
    14301430      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
    1431      105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
    1432      583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
    1433        0,   294,   744,     2,   294,     3,   427,     0,   435,   295,
    1434      294,   307,   334,   287,   349,   356,     3,     3,   409,   413,
    1435      423,   428,   475,   294,   429,   708,   709,   294,   430,   432,
    1436      294,     2,   585,   597,   731,     2,     2,   249,     2,   460,
    1437        0,   458,   457,   456,   141,     2,     2,   251,     2,     2,
     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,
    14381438     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
    1439        0,     0,     0,     0,     0,     0,   569,   608,     0,   455,
    1440        2,   563,   572,   662,   565,   566,   535,   294,     2,   602,
    1441      611,   604,   605,     0,   276,   294,   294,   340,   295,     0,
    1442      295,     0,   294,   736,   740,   738,   536,   294,   547,   255,
    1443      263,   309,     0,     2,   537,   294,   501,   337,   338,   283,
    1444      352,   359,     0,   294,     2,   385,   294,   373,     0,     0,
    1445      379,   730,     0,   751,   400,     0,   478,   502,   252,   253,
    1446      522,   294,   437,     0,   294,   237,     0,     2,   239,     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,
    14471447     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
    1448      547,   294,   488,   490,   489,     0,     0,   753,     0,   294,
    1449        0,   294,   492,   294,   562,   560,   561,   559,     0,   554,
    1450      557,     0,     0,   294,    56,   294,    69,    52,   294,    62,
    1451      294,   294,    50,    51,    64,     2,   127,     0,     0,   449,
    1452        0,   448,   111,   294,    54,    55,    17,     0,    29,    30,
     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,
    14531453      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
    14541454     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
    14551455       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1456        0,     0,     0,     0,     0,     0,     0,   108,     2,   648,
    1457      454,   645,   549,   549,   653,   482,   294,     2,   587,   588,
    1458        0,   599,   600,     0,     2,   742,   745,   111,   294,     2,
    1459      294,     0,   710,   295,   714,   705,   706,   712,     0,     2,
    1460        2,   670,   549,   753,   619,   549,   549,   753,   549,   633,
    1461      549,   549,   684,   436,   667,   549,   549,   675,   682,   294,
    1462      431,   295,     0,     0,   294,   720,   295,   725,   753,   717,
    1463      294,   722,   753,   294,   294,   294,     0,   111,     0,    18,
    1464        5,     2,     0,    19,     0,   461,   751,     0,     0,   467,
    1465      241,     0,   294,     0,     0,     0,   547,   571,   575,   577,
    1466      607,   610,   614,   617,   570,   609,     0,   284,   660,     0,
     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,
    14671467     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
    1468      538,   294,     0,     0,     0,     0,   294,   294,     0,     0,
    1469      694,   383,   386,   390,   549,   390,   699,   389,   691,   549,
    1470      549,   365,   374,   382,   375,   549,   377,   380,   294,   752,
    1471        0,     0,   398,     0,   295,     3,   416,     3,   420,   419,
    1472      593,     0,   533,   294,     3,     3,   294,   435,   295,     3,
    1473      429,   430,     2,     0,     0,     0,   487,   306,   294,   483,
    1474      485,     3,     2,     2,     0,   504,     3,     0,   556,   129,
     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,
    14751475       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
    1476        0,     0,   111,   294,    20,     0,    21,     0,   694,   450,
     1476       0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
    14771477       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
    14781478      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
    14791479      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
    1480       97,    99,     0,     0,   754,   294,     0,     0,     0,   649,
    1481      650,   646,   647,   499,   498,   294,     0,     3,   294,   716,
    1482      294,   721,   295,   294,   294,   294,   664,   707,   663,     2,
    1483      294,     0,     0,     0,     0,     0,     0,     0,     0,   685,
    1484        0,   671,   622,   638,   672,     2,   618,   625,   433,   620,
    1485      621,   434,     2,   632,   641,   634,   635,   668,   669,   683,
    1486      711,   715,   713,   753,   268,     2,   747,     2,   424,   719,
    1487      724,   425,     0,   403,     3,     3,     3,     3,   455,     3,
    1488        0,     2,   470,   466,   752,     0,   462,   469,     2,   465,
    1489      468,     0,   294,   242,   264,     3,   272,   274,     0,   455,
    1490        2,   573,   574,     2,   612,   613,     0,   661,   539,     3,
    1491      346,   345,   348,   347,   294,   540,     0,   541,   294,   376,
    1492      378,     2,     0,     0,     0,     0,   104,   392,   695,   696,
    1493      387,   391,   388,   692,   693,   381,   385,   294,   400,   394,
    1494      401,   751,     0,     0,   438,   240,     0,     0,     3,     2,
    1495      670,   431,     0,   529,     0,   753,   491,     0,   294,   294,
    1496      294,     0,   553,   555,   130,     0,     0,   215,     0,     0,
     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,
    14971497       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
    1498        0,   128,   695,   460,    70,    71,   110,   115,     3,   109,
     1498       0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
    14991499       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
    1500        3,   652,   656,   659,   651,     3,   594,     3,   718,   723,
    1501        2,   294,     3,     3,   295,     0,     3,   624,   628,   631,
    1502      640,   674,   678,   681,   294,     3,   623,   639,   673,   294,
    1503      294,   426,   294,   294,   748,     0,     0,     0,     0,   256,
    1504        0,   104,     0,     3,     3,     0,   463,     0,   459,     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,
    15051505       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
    15061506       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
    15071507       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
    1508      138,   145,   147,     0,     0,     0,   285,   294,   294,   549,
    1509        0,   542,   294,   111,   698,   702,   704,   697,   384,   368,
    1510      399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
    1511      486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
    1512        0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
    1513        3,    37,   751,   109,     0,     3,   663,    42,     3,    40,
    1514        3,    34,     0,     3,   101,   103,     0,     2,   654,   655,
    1515        0,     0,   294,     0,     0,     0,     3,   640,     0,     2,
    1516      626,   627,     2,   642,     2,   676,   677,     0,     0,     3,
    1517        0,     3,     3,     3,     3,   411,   410,   414,     2,     2,
    1518      750,   749,   112,     0,     0,     0,     0,     3,   464,     3,
    1519        0,   243,   146,     3,   295,   294,     0,     0,     0,     0,
    1520        2,   191,     0,   189,     0,     0,     0,     0,     0,     0,
    1521        0,     0,   111,     0,   549,   151,   148,   294,     0,     0,
    1522      267,   279,     3,     3,   548,   615,   369,     2,   700,   701,
    1523      397,   294,   266,   294,     0,   517,   494,   294,     0,     0,
    1524      493,   508,     0,     0,     0,   216,     0,   225,    58,   109,
    1525        0,     0,   116,   113,     0,     0,     0,     0,     0,     0,
    1526       23,     0,   657,   294,   582,   265,   726,   727,   728,     0,
    1527      679,   294,   294,   294,     3,     3,     0,   687,     0,     0,
    1528        0,     0,   294,   294,     3,   546,   471,   472,     0,     0,
    1529      246,   295,     0,     0,     0,     0,   294,   192,   190,     0,
    1530      187,   193,     0,     0,     0,     0,   197,   200,   198,   194,
    1531        0,   195,    35,   129,   144,   142,   244,     0,     0,   294,
    1532      418,   422,   421,     0,   511,     2,   512,     2,   513,   507,
    1533      294,   228,     0,   226,     0,   228,     3,   663,    31,   114,
    1534        2,    45,     2,    43,    41,    28,   112,    26,     3,   729,
    1535        3,     3,     3,     0,     0,   686,   688,   629,   643,   269,
    1536        2,   408,     3,   407,     0,   474,   471,   129,     0,     0,
    1537      129,     3,     0,   129,   188,     0,     2,     2,   209,   199,
    1538        0,     0,     0,     0,   140,   576,   616,     3,     2,     0,
    1539        0,     2,   229,     0,     0,   217,     0,     0,     0,     0,
    1540        0,     0,     0,     0,     0,   689,   690,   294,     0,   473,
    1541      152,     0,     0,     2,   165,   129,   154,     0,   182,     0,
    1542      129,     0,     2,   156,     0,     2,     0,     2,     2,     2,
    1543      196,    32,     0,   294,   516,   518,   509,     0,     0,     0,
    1544        0,   114,    38,     3,     3,   658,   630,   644,   680,   412,
    1545      129,   158,   161,     0,   160,   164,     3,   167,   166,     0,
    1546      129,   184,   129,     3,     0,   294,     0,   294,     0,     2,
    1547        0,     2,   139,   703,     2,   230,   231,     0,   227,   218,
    1548        0,     0,     0,   153,     0,     0,   163,   233,   168,     2,
    1549      235,   183,     0,   186,   172,   201,     3,   210,   214,   203,
    1550        3,     0,   294,     0,   294,     0,     0,     0,    39,    46,
    1551       44,   159,   162,   129,     0,   169,   294,   129,   129,     0,
    1552      173,     0,     0,   694,   211,   212,   213,     0,   202,     3,
    1553      204,     3,   294,   219,   232,   149,   170,   155,   129,   236,
    1554      185,   180,   178,   174,   157,   129,     0,   695,     0,     0,
    1555        0,     0,   150,   171,   181,   175,   179,   178,   176,     3,
    1556        3,     0,     0,   495,   177,   205,   207,     3,     3,   206,
    1557      208
     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
    15581557};
    15591558
     
    15621561{
    15631562      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
    1564      306,   786,   787,  1148,  1149,   307,   308,   309,   310,   311,
     1563     306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
    15651564     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
    1566      526,   997,   322,   998,   555,   974,  1079,  1545,  1081,  1082,
    1567     1083,  1084,  1546,  1085,  1086,  1462,  1463,  1424,  1425,  1426,
    1568     1524,  1525,  1529,  1530,  1565,  1566,  1087,  1382,  1088,  1089,
    1569     1316,  1317,  1318,  1506,  1090,   144,   980,   981,   982,  1403,
    1570     1487,  1498,  1499,   476,   477,   902,   903,  1060,    49,    50,
     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,
    15711570      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
    15721571     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
    15731572      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
    1574       79,    80,   462,    81,   456,   457,   458,   459,   701,   940,
    1575      702,    82,    83,   465,   463,   722,   882,   883,   356,   357,
    1576      725,   726,   727,   358,   359,   360,   361,   473,   340,   134,
    1577      135,   530,   324,   169,   655,   656,   657,   658,   659,    84,
    1578      120,    86,   496,   497,   966,   498,   276,   502,   325,    87,
    1579      136,   137,    88,  1340,  1126,  1127,  1128,  1129,    89,    90,
    1580      743,    91,   272,    92,    93,   186,  1054,   689,   411,   124,
    1581       94,   508,   509,   510,   187,   267,   189,   190,   191,   268,
    1582       97,    98,    99,   100,   101,   102,   103,   194,   195,   196,
    1583      197,   198,   852,   614,   615,   616,   617,   199,   619,   620,
    1584      621,   580,   581,   582,   583,   706,   104,   623,   624,   625,
    1585      626,   627,   628,   939,   708,   709,   710,   604,   364,   365,
    1586      366,   367,   326,   163,   106,   107,   108,   369,   720,   577
     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
    15871586};
    15881587
    15891588/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15901589   STATE-NUM.  */
    1591 #define YYPACT_NINF -1332
     1590#define YYPACT_NINF -1356
    15921591static const yytype_int16 yypact[] =
    15931592{
    1594     3506,  8076, -1332,    12, -1332, -1332, -1332, -1332, -1332, -1332,
    1595    -1332,    61, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1596    -1332, -1332, -1332, -1332, -1332, -1332,   102,   102,   102,  1011,
    1597     1062,    86,  5961,   228, -1332, -1332, -1332, -1332, -1332,   138,
    1598    -1332, -1332, -1332,   684,   144,  9470, -1332, -1332, -1332, -1332,
    1599    -1332, -1332,   190,   182, -1332,  1658, -1332, -1332, -1332, -1332,
    1600      201,  1834,   303,    32,  4928, -1332, -1332,  9508,  1650, -1332,
    1601    -1332, -1332,   615,   401,  4443,   184,   589,   615,  1225, -1332,
    1602    -1332,   848,   938, -1332,   615,  1259, -1332,   301, -1332,   486,
    1603      503, -1332, -1332, -1332, -1332,   316,   182,   102, -1332,   102,
    1604    -1332, -1332, -1332, -1332,  9240,  1658, -1332, -1332,  1658, -1332,
    1605     9354,   391, -1332, -1332, -1332,  1948,  9876, -1332,   810,   810,
    1606      810, -1332, -1332, -1332,   102, -1332, -1332, -1332,   426,   447,
    1607      456, -1332, -1332, -1332,   477, -1332, -1332, -1332, -1332, -1332,
    1608      485,   495, -1332, -1332,    36,  8974,  2459,   272,   545,   579,
    1609      623,   632,   671,   733,  8777,  7372,   596,   719, -1332,  9546,
    1610    -1332, -1332, -1332, -1332,   739, -1332,   209,  3245,  3245, -1332,
    1611      760,   213, -1332, -1332, -1332, -1332,   770,   237,   353,   362,
    1612      102,   755, -1332, -1332,  1834,  1803,   846, -1332,    70, -1332,
    1613      102,   102,   182, -1332, -1332,    98, -1332,   102,   102, -1332,
    1614     2479,   820,   843,   810,  5405, -1332, -1332,   844,  9470, -1332,
    1615    -1332,   615, -1332, -1332, -1332,   182, -1332,  1658,   190, -1332,
    1616     7926, -1332,   810,   810,   810,   182, -1332,  1011, -1332,  2880,
    1617    -1332, -1332,   827,   810, -1332,   810, -1332,   138,  8974,  8891,
    1618      857, -1332,  1062,   864,   810, -1332,  1011,   870,   879, -1332,
    1619     5961,   735, -1332, -1332, -1332,  9437, -1332, -1332,  3894, -1332,
    1620      846,    69,  9876,  6310,  1948,  2479, -1332,   114, -1332, -1332,
    1621     9354,  1658,   875, 11374, -1332, -1332,   546, -1332, 11116,   886,
    1622      926, 10861,   905, 10919, 10938, -1332,   919, -1332, -1332, -1332,
    1623    -1332, 10996, 10996,   735,  8632,   928, 10919,  9088, -1332, -1332,
    1624    -1332, -1332, -1332, -1332,   949, -1332,   840,  2531, 10919, -1332,
    1625      516,   336,   425,   270,   704,   934,   936,   960,   997,    52,
    1626    -1332, -1332,   974,   356, -1332,   290, -1332, -1332,  2459, -1332,
    1627    -1332,   600,   996, -1332,   701,   996,  1007,   138, -1332, -1332,
    1628     1010,  9240, -1332,  1018,  8746, -1332, -1332,  1849,  1084,  8347,
    1629     5405,   615, -1332,   615,   810,   810, -1332, -1332, -1332, -1332,
    1630    -1332, -1332,   810,  9914,  1658, -1332, -1332,  9987,  1975, -1332,
    1631     9012, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1030,  3059,
    1632    10919, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1633    -1332, -1332, -1332, -1332, -1332,  1948, -1332,   773,  1012,  1034,
    1634     1040,   889,  1045,  1051,  1053,  1803, -1332, -1332,  1063,   190,
    1635     1064, -1332, -1332,  1066, -1332, -1332, -1332,  9437, -1332, -1332,
    1636    -1332, -1332, -1332,  2479, -1332,  8974,  8974, -1332,   810,  1948,
    1637     6923,  1658,  8420, -1332, -1332, -1332, -1332,  9437,    69, -1332,
    1638    -1332,   615,   182, -1332, -1332,  9437, -1332,  3625, -1332, -1332,
    1639      810,   810,   464, 10025,  1068,   907,  9695, -1332,   437,   475,
    1640     1062, -1332,  1067,  1069,  1047,  1070,   810, -1332, -1332, -1332,
    1641    -1332, 10283, -1332,   522,  6793, -1332,   182,  1074, -1332,  1948,
    1642    11198,  6368, -1332, -1332, -1332, -1332,   939,  2479, -1332,  8493,
    1643      846,  5374, -1332, -1332, -1332,   828,   610,   974,  1062, 11374,
    1644      861,  9354, -1332, 11374, -1332, -1332, -1332, -1332,   618, -1332,
    1645     1073,   926,   326,  8632, -1332, 10025, -1332, -1332,  8632, -1332,
    1646     8860,  8632, -1332, -1332, -1332,  1077, -1332,   619,  1082,   630,
    1647     1087, -1332,  5066,  7012, -1332, -1332, -1332,    47, -1332, -1332,
    1648    10784, -1332,   474, 10784, -1332, -1332, -1332, -1332, -1332, -1332,
    1649    -1332, -1332, -1332, -1332,  6310,  6310, -1332, 10919, 10919, 10919,
    1650    10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919,
    1651    10919, 10919, 10919, 10919, 10919,  4001,  6310, -1332,   356,   777,
    1652    -1332, -1332,   102,   102, -1332, -1332,  8974, -1332, -1332,  1066,
    1653      735, -1332,  1066, 10842, -1332, -1332, -1332,  6075,  7012,  1086,
    1654     9202,  1093, -1332, 10055, -1332, -1332,   739, -1332,  1094,   690,
    1655     1096,  1090,   157,   974, -1332,   102,   102,   974,   166, -1332,
    1656      102,   102,  1066, -1332, -1332,   102,   102, -1332,   996, 10137,
    1657     1658, 11343,   372,   531, 10137, -1332,  6678, -1332,   974, -1332,
    1658     9914, -1332,   285,  8042,  8042,  8042,  1658, -1332,  5183,  1085,
    1659      453,  1030,   955,  1095,  1097, -1332,  1099,  3245,   590, -1332,
    1660     1182,  1658,  8042,   735,  1948,   735,   846,   706,   996, -1332,
    1661    -1332,   806,   996, -1332, -1332, -1332,   926, -1332,   996,   182,
    1662    10283, -1332,   647,  1107,   688,  1108, -1332,  1109,   182, -1332,
    1663    -1332,  9437,   182,  1105,   497,   502, 10167,  7492,  1400, 10919,
    1664     1678, -1332, -1332,  1103,    62,  1103, -1332, -1332, -1332,   102,
    1665      102, -1332, -1332,  1062, -1332,   102, -1332, -1332,  8891,  1062,
    1666     1110, 10919, -1332,  1062, 11343, -1332, -1332,  1113, -1332, -1332,
    1667    -1332,   735, -1332, 11271, 10919, -1332,  8042,   718,  8347, -1332,
    1668    -1332,   739,  1114,  1115,   828,  2655, -1332, -1332, 11374, -1332,
    1669    -1332,  1116, -1332, -1332,  1122, -1332,  1116,  1123, 11116,  6310,
    1670      163,  1092,    54,  1131,  1128,  1135,   928,  1130,  1138, -1332,
    1671     1140,  1141,  9733,  7132, -1332,  6310, -1332,   630,  1274, -1332,
    1672     5523,  6310,  1139, -1332, -1332,  1030,   695, -1332,  6310, -1332,
    1673    -1332,   741, -1332, -1332, -1332, -1332, -1332,   516,   516,   336,
    1674      336,   425,   425,   425,   425,   270,   270,   704,   934,   936,
    1675      960,   997, 10919,   754, -1332, 10283,  1150,  1151,  1153,   777,
    1676    -1332, -1332, -1332, -1332, -1332, 10283,   748, 10919,  8042, -1332,
    1677     9914, -1332,  7612,  9316,  9126,  7372, -1332, -1332, -1332,   690,
    1678    10283,   950,  1164,  1165,  1171,  1172,  1179,  1180,  1181, -1332,
    1679     3591,  1090, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1680    -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
    1681    -1332, -1332, -1332,   974, -1332, -1332, -1332, -1332, -1332, -1332,
    1682    -1332, -1332,  1183, -1332,  1184,  1187, -1332, -1332,   190,  1139,
    1683     5183, -1332, -1332, -1332,  3059,  1185, -1332, -1332, -1332, -1332,
    1684    -1332,  1062,  6532,  1270, -1332, -1332, -1332, -1332,  1173,   190,
    1685    -1332, -1332,  1066, -1332, -1332,  1066,   152,  1066, -1332, -1332,
    1686    -1332, -1332, -1332, -1332,  9584, -1332,   182, -1332,  8891, -1332,
    1687    -1332,  1193,   795,  1199,  1200,  1204, -1332, -1332,  1678, -1332,
    1688    -1332, -1332, -1332, -1332, -1332, -1332,   907,  9763,  1047, -1332,
    1689    -1332,  1069,  1205,  1201, -1332, -1332,  1206,  1207, -1332,   718,
    1690     1989, -1332,   634, -1332,  2655,   974, -1332,  1211, 11374, 10205,
    1691     8974,  1214, -1332, -1332,  1212,  1217,  1213, -1332, 10919,   229,
    1692      205,  1215, -1332,  1202,   735,  1202,  7012,  6310, -1332, -1332,
    1693     1202, -1332,  1274,  3059, -1332, -1332, -1332, -1332,  1220,  6310,
    1694     1228,   735,  5183, -1332, 10784, -1332,   735, -1332, -1332,  6310,
    1695    -1332,   863,   996, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1696     1030,  8746, -1332, -1332,  7732,  1219, -1332,   876,   996, -1332,
    1697      883,   896,   996, -1332,   810,  4775, -1332, -1332, -1332, 10283,
    1698    10283, -1332,  8420,  8420, -1332,  1221,  1226,  1233,  1235, -1332,
    1699     1234,   643,   137,  1139, -1332,   735, -1332,  3245, -1332,  6310,
    1700      517, -1332,  6892,  1245,  1249, 10726,  1253,  1258,   330,   380,
    1701      387,  6310,  1265,   182,  6310,  6310,  1256,   294,  1269,  1250,
    1702    -1332, -1332, -1332,  1277, -1332, -1332, -1332, -1332, -1332, -1332,
    1703    -1332, -1332, -1332,  1062,  1285,  6310, -1332, 10283, 10283,   102,
    1704     1287, -1332,  9845,  9622,   932,   996, -1332, -1332, -1332, -1332,
    1705    -1332,  1286, -1332, -1332, -1332, -1332,  1293,  1989, -1332, -1332,
    1706     1275, -1332,  1116, -1332, -1332,  1948,  1290, -1332, -1332, -1332,
    1707      749,  1292, -1332,    54,  1295, 10919,  1279,    54,    54,  1305,
    1708     1301, -1332,  1099,  6310,  1308,  1220,   605,    89,  1306, -1332,
    1709     1301, -1332,  1312,  1306, -1332, -1332,  1317, -1332, -1332,  1066,
    1710     1319,  1322,  7252,  1323,  1325,  1326, -1332, -1332,  1329, -1332,
    1711    -1332,  1066, -1332, -1332, -1332, -1332,  1066,  6310,  6310, 10919,
    1712     1330, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1713    -1332, -1332, -1332, 10919, 10919,  1332,  1335,  1306, -1332, -1332,
    1714     1062, -1332, -1332, -1332,  7853, 10205,  6310,  6310,  1394,  6310,
    1715    -1332, -1332,  1321, -1332,  1324,  6310,  1327,  1331,  6310,  1013,
    1716     1333,    97,  8265,  1262,   102, -1332, -1332,  6532,  1334,   537,
    1717    -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
    1718    -1332, 10544, -1332,  8493,  1345, -1332, -1332, 10205,   562,   563,
    1719    -1332,  1343,  1344,   926,  1352, -1332,   450, -1332, -1332,  6310,
    1720     1355,  1349, -1332, -1332,  1356,   543,   613,   735,  1357,  1358,
    1721    -1332,  1361, -1332, 10283, -1332, -1332, -1332, -1332, -1332,  1365,
    1722    -1332, 10283, 10283, 10283, -1332, -1332,  1367, -1332,  1368,  1371,
    1723     1372,   668,  8115,  8231, -1332, -1332,   457, -1332,  1376,  1378,
    1724    -1332,  8566,   750,   782,  1387,   793,  6762, -1332, -1332,   598,
    1725    -1332, -1332,   803,  1388,  1393,   182,  1445,   882, -1332, -1332,
    1726     6310, -1332, 10784, 10726, -1332, -1332, -1332,  1396,  1404, 10283,
    1727    -1332, -1332, -1332,  1401, -1332, -1332, -1332, -1332, -1332, -1332,
    1728    10205,   926,   254, -1332,  1384,   926,  1220,   366, -1332, -1332,
    1729    -1332, -1332, -1332, -1332, -1332, -1332,  1405, -1332, -1332, -1332,
    1730    -1332, -1332, -1332,  1406,  1409, -1332, -1332, -1332, -1332, -1332,
    1731    -1332, -1332,  1414, -1332,  1413, -1332, -1332, 10726,    84,  6310,
    1732    10726, -1332,  1417,  6310, -1332,    99,  1433,  1434, -1332, -1332,
    1733     1422,  1425,  1408,   852, -1332, -1332, -1332, -1332, -1332,  1658,
    1734     1948,  1421,   949,   918, 10919, -1332,   832,  1426,  6310,   735,
    1735      735,  1427,  1431,  1440,  1441, -1332, -1332,  8420,  1428, -1332,
    1736     1501, 10919,  1437, -1332, -1332, 10637, -1332,   845, -1332,  1424,
    1737    10726,  1436, -1332, -1332,  1460, -1332,  1461, -1332,  1476,  1481,
    1738    -1332,  1446,  1471, 10205, -1332, -1332, -1332,   926,   735,  1472,
    1739     1452,  1468, -1332,  1306,  1306, -1332, -1332, -1332, -1332, -1332,
    1740    10726,   295, -1332,   940, -1332, -1332,  5671, -1332, -1332,  1454,
    1741     6310, -1332,  6310,  5671,   182, 10025,   182, 10025,  1478, -1332,
    1742     1482, -1332, -1332, -1332,  1480,   949, -1332,   850, -1332, -1332,
    1743     6310,  1479,  1487, -1332, 10919, 10919, -1332, -1332,  1054,   123,
    1744    -1332, -1332,  1465, -1332,  1054, -1332, -1332,  1818,   735, -1332,
    1745    -1332,   182, 10025,   182, 10025,  1492,  1474,   735, -1332, -1332,
    1746    -1332, -1332, -1332, 10637,  1488,  1054,  6242,  6310, 10548,  1495,
    1747     1054,  1502,  1818,  2347, -1332, -1332, -1332,  1505, -1332, -1332,
    1748    -1332, -1332,  8974, -1332, -1332, -1332, 10415, -1332, 10637, -1332,
    1749    -1332,  1484, 10322, -1332, -1332, 10548,   182,  2347,   182,  1509,
    1750     1510,   853, -1332, 10415, -1332, -1332, -1332, 10322, -1332, -1332,
    1751    -1332,   182,   182, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1752    -1332
     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
    17531751};
    17541752
     
    17561754static const yytype_int16 yypgoto[] =
    17571755{
    1758    -1332,  4383,  1919, -1332,  1457, -1332,    41,     0,  -257, -1332,
    1759      544,  -527,  -514,  -956,  -190,  3713, -1332,  1485,   580,   585,
    1760      548,   602,  1055,  1052,  1056,  1059,  1061, -1332,  -217,  -341,
    1761     5350,  -699,  -697,  -922, -1332,   -83,  -701,  -678, -1332,   561,
    1762    -1332,   399, -1087, -1332, -1332,   141, -1332, -1329,  -838,   252,
    1763    -1332, -1332, -1332, -1332,    71, -1078, -1332, -1332, -1332, -1332,
    1764    -1332, -1332,   325, -1308,    57, -1332,  -297, -1332,   504,   305,
    1765    -1332,   173, -1332,  -305, -1332, -1332, -1332,   558,  -799, -1332,
    1766    -1332,    11, -1027,   151,   658, -1332, -1332, -1332,   -52, -1332,
    1767      117,   913,  -200,  1494,  4071, -1332, -1332,    19,   107,   365,
    1768     -232,  1565, -1332,  2150, -1332, -1332,   134,  2571, -1332,  3063,
    1769     1550, -1332, -1332, -1332,  -643,  -431,  1210,  1216,   707,   947,
    1770      188, -1332, -1332, -1332,   945,   723,  -404, -1332,  -520,  -362,
    1771      293, -1332, -1332,  -990,  -995,   965,  1194,  1083,   304, -1332,
    1772      150,   317,   -75,  -197,  -129,   679,   781, -1332,  1020, -1332,
    1773     3338,  1566,  -427,   948, -1332, -1332,   710, -1332,  -230, -1332,
    1774      -89, -1332, -1332, -1332, -1266,   433, -1332, -1332, -1332,  1195,
    1775    -1332,    22, -1332, -1332,  -865,  -105, -1331,   -98,  1750, -1332,
    1776     2253, -1332,   929, -1332,  -168,   288,  -180,  -179,  -173,     2,
    1777      -34,   -29,   -28,   687,    75,    77,    92,  -161,  -162,  -153,
    1778     -151,  -148,  -320,  -530,  -516,  -495,  -552,  -307,  -529, -1332,
    1779    -1332,  -506,  1106,  1117,  1121,  2218,  5180,  -562,  -569,  -544,
    1780     -538,  -550, -1332,  -429,  -691,  -685,  -671,  -611,  -246,  -241,
    1781    -1332, -1332,  1149,   273,   -84, -1332,  3714,    76,  -612,  -441
     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
    17821780};
    17831781
     
    17851783   positive, shift that token.  If negative, reduce the rule which
    17861784   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1787 #define YYTABLE_NINF -525
     1785#define YYTABLE_NINF -523
    17881786static const yytype_int16 yytable[] =
    17891787{
    1790       47,   112,    96,   427,   398,   399,   768,   933,   452,   148,
    1791      266,   400,   113,   934,   149,   150,   791,   406,   871,    67,
    1792      259,   439,   401,   512,   407,   712,   707,   935,   613,   112,
    1793      112,   402,    47,   403,    96,  1203,   404,  1092,   382,   383,
    1794      846,   618,   111,    47,   895,    47,   505,   160,  1187,   854,
    1795     1153,    67,  1185,  1186,   142,    47,   749,    48,   975,   853,
    1796      201,    47,   857,   192,    47,   847,   215,    47,   864,   225,
    1797      342,   848,   751,   820,  1401,   947,   756,  1145,   218,   842,
    1798      845,   112,   112,   995,   398,   399,   933,   279,   409,    48,
    1799     1464,   400,   934,   843,   121,   424,  1468,   406,   605,  1197,
    1800      779,    31,   401,  1091,   407,    47,   935,    68,    47,    31,
    1801      202,   402,   679,   403,   844,    47,   404,    61,   151,   109,
    1802      152,   165,   637,   884,   884,   884,   641,   739,  1421,  1422,
    1803       41,    42,   688,   408,    75,   153,   290,    31,   446,    68,
    1804      692,    31,   884,  1421,  1422,   280,    47,   574,   160,    61,
    1805      148,    54,   114,    31,    47,   149,   150,   467,   783,    47,
    1806     1320,   372,   482,   484,  1464,   978,    75,  -234,  -234,  1510,
    1807      122,   211,   858,   410,  1265,   746,   861,  1484,   483,   251,
    1808      140,   410,   575,    54,    47,    47,   165,   160,     2,   205,
    1809        4,     5,     6,     7,  1468,   141,    31,   878,  1423,  1468,
    1810       47,   881,  1266,   478,  1539,    31,  1541,   418,    47,   410,
    1811      160,   527,   677,  1432,   842,   209,   884,    47,   219,  1468,
    1812       47,   327,   442,   488,  1080,   410,  1468,   112,   843,  1321,
    1813      148,   240,   243,  1193,   536,   149,   150,   674,  -234,   143,
    1814      886,   887,   112,   740,   675,   536,   112,   145,  1187,   844,
    1815       47,   112,    96,    35,   760,    36,   154,   596,   905,   151,
    1816     1194,   152,  1099,  1202,    47,    47,   855,   160,   610,    67,
    1817      846,    47,   470,   105,   105,   862,   153,   610,    47,  1203,
    1818      976,   885,   885,   885,   435,  1102,   342,   703,    95,  1038,
    1819      666,   857,   472,   112,   705,   847,   170,   167,  1187,  1037,
    1820      885,   848,  1185,  1186,   618,   105,   200,    48,   884,   842,
    1821     1025,   536,  1155,  1014,   327,  1136,    -3,   180,   681,   674,
    1822       95,   168,  1137,   843,   686,   376,   675,   441,    47,   386,
    1823      372,   147,   958,    95,   524,   739,   536,  1346,  1135,  1111,
    1824      105,   377,   682,   684,   844,   387,   435,    47,    47,   188,
    1825      683,   685,    95,   389,   605,    95,   831,    68,   937,   176,
    1826      564,   565,  1092,  1404,    47,   478,   285,    61,    47,   390,
    1827     1217,   440,   479,   165,   885,  1220,  1221,    41,    42,   653,
    1828      950,   251,   329,   605,    75,   478,   926,  1208,   605,    75,
    1829      846,  1494,   464,   478,   483,    47,   566,   567,   854,   880,
    1830      585,    54,   109,   521,  -290,    47,   586,   372,   536,   260,
    1831      871,   739,   261,    41,    42,   847,   576,   246,  1194,   916,
    1832      607,   848,  1187,    47,  1017,   251,   755,  1459,  1091,    47,
    1833      527,    47,  1041,   228,    95,   527,   761,   229,   527,  1203,
    1834      233,  1552,   235,   762,  1262,   770,  1203,    95,   342,   244,
    1835     1553,   740,   109,  1453,  1454,    47,   211,   560,   561,   109,
    1836      112,  1563,  1211,    41,    42,   578,   885,   410,  1567,   391,
    1837       41,    42,   397,   188,   112,   579,  -112,  1568,   393,    47,
    1838     1173,  1175,   936,  1408,   874,   392,   249,    47,   875,   372,
    1839     1151,    47,   813,    96,   394,    47,    95,  -112,   112,  1203,
    1840      112,   327,   327,  -520,   936,   979,  1215,  1383,    95,  1107,
    1841       67,   824,  1213,   562,   563,   111,   712,   707,   398,   399,
    1842      653,   438,   263,   105,  1119,   400,   505,   740,   896,   654,
    1843     1261,  1036,   406,  -469,   479,   -10,   401,   112,    95,   407,
    1844      653,  1122,   112,   653,   618,   402,   109,   403,    48,  1080,
    1845      404,    75,   486,   713,   479,  1038,  -443,    41,    42,   907,
    1846     1344,   767,   479,  1107,  -469,  -444,  -469,  1345,   909,   714,
    1847     -469,    75,  -112,  -112,   693,   490,   228,   327,   784,    75,
    1848      586,   767,   507,   790,   767,   789,   275,   211,  -112,  1019,
    1849      112,   715,  -291,   831,   277,  1008,   327,    47,    68,     8,
    1850        9,    10,    11,    12,   278,  1381,   737,   716,    61,    47,
    1851      717,    47,   342,   713,   172,   109,    95,   833,   715,     2,
    1852      205,     4,     5,     6,     7,    75,    41,    42,    31,   929,
    1853       47,   472,   730,  1200,   930,   557,   612,  1134,   731,   478,
    1854      558,   559,    54,   876,  1036,  1394,    47,   877,   750,  1201,
    1855      754,   176,   112,  1200,  1350,   330,    34,   252,    55,    55,
    1856     1523,    47,   327,   112,    47,   112,  1528,  1500,   638,  1326,
    1857      897,   712,   642,  1051,  1500,   500,   607,   501,  1335,  1337,
    1858     1184,   955,  1431,   831,    35,   109,    36,  1548,   342,   331,
    1859       55,  1049,  1555,   188,  1336,  1338,    41,    42,    47,  1420,
    1860       47,   898,  1428,   652,   906,   872,   908,   899,   370,   587,
    1861      607,   410,  1096,   112,   775,  -112,   228,  -112,   233,   112,
    1862      747,  -112,    55,   112,  1352,    55,   748,  1549,   757,   774,
    1863     1384,   112,   161,   332,   758,   775,  -112,  -112,   441,   777,
    1864     1130,   410,   333,   704,    47,    47,   876,  1467,   193,   778,
    1865     1118,   216,  1471,   416,   226,  -105,    37,   920,    47,  -105,
    1866       40,   936,    37,   775,   105,  1056,    40,    41,    42,  1502,
    1867      674,  1503,   954,    41,    42,   605,   436,   675,   703,    95,
    1868     1369,   334,  1493,   612,  1370,   705,   444,     8,     9,    10,
    1869       11,    12,  1154,    43,  1254,  1393,   568,   569,   922,   839,
    1870      739,   610,   892,   146,   775,  1003,   228,   109,   479,   611,
    1871      590,  1004,   410,   347,   737,   910,    31,   410,    41,    42,
    1872        8,     9,    10,    11,    12,    75,  1550,   959,   371,   610,
    1873      763,   211,   764,   161,  1177,   765,  1252,   960,   771,    47,
    1874     1256,   933,  1051,   335,    34,   211,   373,   934,   375,    31,
    1875      479,    47,  1294,  1295,   833,   528,  1007,  1004,  1016,  1250,
    1876     1377,   935,   831,   945,   731,   586,   775,    75,  1562,   948,
    1877      775,  1009,   161,   464,  1562,   384,   979,    34,    55,   388,
    1878      979,   979,   251,   329,   410,  1562,   578,   396,   410,  1562,
    1879      737,   941,  1378,   941,   653,   161,   579,   841,   775,   612,
    1880       37,   112,   653,  1380,    40,   329,   410,   443,    55,   775,
    1881      408,    41,    42,  1385,   115,   913,   740,   410,   936,   775,
    1882      109,    67,   138,   237,    47,   537,   538,   539,  1198,   425,
    1883     1372,    41,    42,   109,   873,   138,   139,   744,    47,   211,
    1884     1390,  1391,  1450,  1078,    41,    42,    47,   745,  1447,   540,
    1885      888,   541,   426,   542,   543,  1469,   431,   238,   158,   449,
    1886     1516,   775,   239,  1573,    47,   904,  1517,  1441,  1004,   586,
    1887      752,  -367,  1157,   919,   410,   753,   936,   936,  -396,    37,
    1888     1123,   182,   183,    40,   112,  1169,   932,   410,   704,   491,
    1889       41,    42,  1172,   653,   610,   511,  1342,   740,   418,   670,
    1890      410,   112,   468,   690,   653,  1174,   112,   610,   290,    68,
    1891      109,   469,   138,   139,   515,   373,   698,   257,   410,    61,
    1892     1245,    41,    42,   158,   699,  1139,   700,   109,   520,   138,
    1893      139,   536,   841,   612,  1447,  1448,    75,   732,    41,    42,
    1894      532,  1237,  1147,   410,   654,   767,   327,  1147,   488,   329,
    1895      410,  1061,   242,    54,   570,   112,  1495,  1496,   323,   855,
    1896      329,   610,   507,  1449,   571,   653,   891,   339,   112,   112,
    1897      112,  1313,  1314,  1315,   528,  1351,  1353,  1354,  1535,   528,
    1898     1461,  1205,   528,   128,  1402,   129,   130,   131,  1402,   572,
    1899      347,   573,   373,   112,    41,    42,  1147,   872,  1421,  1422,
    1900        8,     9,    10,    11,    12,   576,  1078,   338,  1010,  1212,
    1901     1214,  1216,   801,   802,   803,   804,  -440,   429,  1015,   594,
    1902     1124,   433,   667,  1302,  1303,    47,  1305,   841,  1107,    31,
    1903      597,   441,  1309,  1026,   109,  1312,   138,   139,   342,   612,
    1904      797,   798,   647,   654,   668,    41,    42,   799,   800,    55,
    1905      669,   323,   455,  1521,  1461,   671,    37,    34,   182,   183,
    1906       40,   672,    37,   673,   182,   183,    40,    41,    42,    68,
    1907      805,   806,   676,    41,    42,   105,   678,   256,   721,   479,
    1908      696,   718,   759,   433,   723,   719,   495,   936,  -238,   772,
    1909     1485,   347,   776,   609,   162,   610,    75,   780,   834,   609,
    1910      112,   610,   -12,   611,   936,   836,   838,   529,   849,   611,
    1911      158,   901,   -13,    54,   893,   894,   218,   921,   923,   928,
    1912      699,   924,    47,  -417,   977,   949,   704,   653,  -292,  -524,
    1913      963,   970,   748,   972,   704,     8,     9,    10,    11,    12,
    1914      918,   983,   105,  1061,   984,   985,    67,   987,   988,   925,
    1915      989,   990,   612,   927,   595,   999,   347,   602,  1123,   162,
    1916     1011,  1012,  -293,  1013,    31,   112,   112,   112,  1078,     8,
    1917        9,    10,    11,    12,  1027,  1028,   635,   936,   936,   737,
    1918      639,  1029,  1030,   339,     8,     9,    10,    11,    12,  1031,
    1919     1032,  1033,    34,  1044,  -405,  1445,  1427,  -404,    31,  1093,
    1920     1058,   347,   347,   347,  1095,  1103,  1147,  1147,  1147,  1104,
    1921     1105,   211,  1561,    31,  1106,  1112,   993,  1113,  1114,  1115,
    1922      347,  1121,   653,   653,  1131,  1205,    34,  1132,   775,  1167,
    1923     1133,  1138,  1182,  1183,    68,   105,  1143,  1188,   323,   323,
    1924     1146,    34,  1189,  1190,    61,  1191,  1192,   537,   538,   539,
    1925     1300,  1123,   398,   399,  1206,   209,   219,   434,  1207,   400,
    1926      737,    75,  1209,   767,  1078,   406,   455,  1210,  1222,   455,
    1927      401,   540,   407,   541,  1218,   542,  1322,   653,    54,   402,
    1928      653,   403,  1225,   777,   404,   410,  1224,   115,   460,   674,
    1929     1232,  1233,    -3,   778,   347,  1230,   675,  1235,  1124,    47,
    1930       47,  1240,  1534,  1242,   500,  1246,  1251,  1253,   441,   112,
    1931      112,  1255,   495,    68,   323,  1258,   495,  1259,  1078,   434,
    1932     1263,  1078,  1267,   479,  1270,   653,   529,  1272,   529,  1274,
    1933      653,   529,  1275,   323,   529,  1276,   728,  1277,  1278,  1280,
    1934       75,  1304,  1287,   531,  1296,   339,   162,  1297,   112,  1325,
    1935     1147,  1147,   440,  1307,  1123,  1333,  1308,    54,  1339,  1310,
    1936      653,  1341,  1343,  1311,  1348,  1319,  1078,  1347,  1349,  1355,
    1937     1356,  1078,    37,  1357,   182,   183,    40,  1359,   105,  1365,
    1938     1366,  1367,  1368,    41,    42,  1205,   347,  1101,  1375,  1486,
    1939     1376,  1124,  1205,   347,    64,   116,  1379,  1386,   148,   323,
    1940      105,  1078,  1387,   149,   150,  1315,  1395,    47,   112,   698,
    1941      829,   410,   175,   602,  1396,  1398,  1405,   112,  1415,   700,
    1942      105,  1416,  1408,   653,  -406,  1419,    64,  1430,   653,  1434,
    1943     1436,  1438,    47,    47,  1439,   160,  1446,  1455,  1451,   159,
    1944     1440,  1456,   870,  1460,  1370,  1205,   653,   602,   653,  1536,
    1945     1457,  1458,   653,   879,  1465,   653,  1470,    47,  1544,   372,
    1946       55,   220,   175,   653,  1078,   175,  1358,   653,  1472,  1078,
    1947     1474,  1476,  1478,    68,  1360,  1361,  1362,  1480,  1482,   105,
    1948       68,  1483,  1488,   479,  1489,  1490,  1501,  1078,  1511,  1078,
    1949      479,  1519,  1513,  1078,  1124,  1515,  1078,  1527,   258,  1520,
    1950       75,  1542,   460,  1547,  1078,   460,  1543,    75,  1078,   339,
    1951     1554,   175,  1556,   105,   213,  1558,  1564,    54,   327,  1571,
    1952     1572,  1223,  1397,   808,    54,   807,  1324,    55,   809,   212,
    1953      214,   455,   810,    68,  1219,   811,  1522,  1433,  1574,   231,
    1954      328,  1389,  1257,   479,   347,   728,  1504,   241,   258,   349,
    1955     1406,  1229,   942,  1108,     2,   205,     4,     5,     6,     7,
    1956       75,   495,   531,   694,   531,   729,   213,   531,   951,   695,
    1957      531,  1110,  1142,   826,   175,  1057,  1120,    54,   900,   405,
    1958     1334,   212,   214,   227,   816,   339,   742,   973,     8,     9,
    1959       10,    11,    12,     0,   423,   817,   965,   428,   430,   818,
    1960      347,   347,   159,  1444,     0,     0,     0,     0,     0,   213,
    1961        0,     0,     0,     0,     0,     0,   105,    31,     0,    35,
    1962       55,    36,     0,   447,   212,   214,     0,   450,   175,   451,
    1963       37,     0,   173,   174,    40,   175,     0,     0,   466,   105,
    1964        0,    41,    42,  1018,    64,    34,   105,   829,     0,   480,
    1965       37,     0,   182,   183,    40,     0,     0,     0,     0,   487,
    1966        0,    41,    42,     0,     0,     0,     0,   430,   517,     0,
    1967      213,     0,     0,     0,     0,     0,   123,   126,   127,     0,
    1968      728,   534,   535,     0,     0,   212,   214,   698,     0,   410,
    1969      728,     0,     0,   556,     0,     0,     0,   700,     0,   105,
    1970        0,     0,     0,     0,   175,   728,     0,     0,   213,     0,
    1971        0,     0,   213,     8,     9,    10,    11,    12,     0,     0,
    1972      486,   175,     0,   212,   214,   175,     0,   212,   214,   535,
    1973        0,     0,     0,     0,     0,   258,     0,   829,   603,     0,
    1974        0,   455,    31,   506,   631,     0,     0,   253,     0,   254,
    1975        0,     0,     0,     0,     0,     0,     0,   636,     0,     0,
    1976      455,   636,    55,    55,   258,   535,     0,   460,     0,     0,
    1977       34,     0,     0,     0,   729,    37,  1388,   182,   183,    40,
    1978        0,   495,  1125,   323,     0,    55,    41,    42,   175,     0,
    1979       37,     0,   182,   183,    40,     0,     0,     0,     0,   213,
    1980        0,    41,    42,     0,     0,    55,    37,     0,   182,   183,
    1981       40,   480,   184,     0,   212,   214,     0,    41,    42,     0,
    1982        0,    37,   185,   173,   174,    40,   349,  1532,     0,   410,
    1983      395,   480,    41,    42,   870,     0,     0,  1533,     0,   480,
    1984      414,   415,     0,   184,     0,   419,     0,   421,   422,     0,
    1985      347,   347,     0,   185,     0,     0,     0,     0,   371,    55,
    1986        0,     0,     0,     0,    55,   724,     0,     0,   430,     0,
    1987      166,     0,   171,     0,     0,   177,   178,   179,     0,   181,
    1988      213,     0,     0,   738,     0,    64,     0,     0,     0,     0,
    1989        0,     0,     0,   430,   232,   212,   214,   430,    55,     8,
    1990        9,    10,    11,    12,   728,   728,   247,   248,     0,   729,
    1991        0,     0,   212,     0,     0,   455,   829,     0,     0,   729,
    1992       37,     0,   182,   183,    40,     0,   258,   349,    31,     0,
    1993      213,    41,    42,     0,   729,  1505,     0,  1509,     0,     0,
    1994        0,     0,   794,   795,   796,   212,   214,    37,     0,   173,
    1995      174,    40,     0,     0,   175,     0,    34,   264,    41,    42,
    1996        0,     0,   728,   728,     0,     0,     0,   265,     0,     0,
    1997        0,     0,  1538,   819,  1540,   347,     0,   460,     0,     0,
    1998        0,     0,     0,     0,   375,   535,     0,   175,     0,     0,
    1999        0,   636,   832,     0,   603,     0,   460,     0,   959,     0,
    2000      610,    55,     0,   175,     0,   851,     0,     0,   960,     0,
    2001        0,     0,     0,     0,     0,     0,     0,  1569,   175,  1570,
    2002        0,     0,     0,   603,    55,     0,     0,     0,   603,     0,
    2003        0,    55,  1577,  1578,   636,   339,     0,   349,   349,   349,
     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,
    20042081       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2005       73,     0,     0,   213,     0,     0,   349,     0,     0,     0,
    2006     1125,     0,     0,     0,     0,     0,     0,     0,   212,   214,
    2007        0,     0,     0,     0,   724,     0,     0,     0,     0,     0,
    2008        0,   213,    73,     0,    55,   480,   213,     0,     0,     0,
    2009      258,   738,     0,     0,   938,     0,   212,   214,     0,     0,
    2010        0,   212,   214,     0,     0,     0,  1331,     0,     0,     0,
    2011        0,     0,     0,     0,     0,   175,     0,   221,     0,   535,
    2012        0,     0,     0,     0,     0,     0,     0,   480,     0,     0,
    2013      349,     0,     0,   729,   729,     0,     0,     0,   728,   964,
    2014        0,     0,   430,     0,     0,     0,   728,   728,   728,     0,
    2015        0,   460,     0,  1125,     0,     0,     0,     0,     0,     0,
    2016        0,     0,     0,   601,   608,   994,   258,   738,     0,     0,
    2017        0,     0,   992,     0,   213,   632,   633,     0,     0,   125,
    2018      125,   125,     0,     0,     0,     0,     0,     0,   213,   212,
    2019      214,   729,   729,     0,   728,     0,     0,     0,     0,     0,
    2020        0,     0,     0,   212,   214,   352,     0,     0,     0,   724,
    2021        0,     0,   535,     0,     0,     0,     0,     0,     0,   724,
    2022        0,     0,   349,   506,   636,     0,     0,  1024,   636,   832,
    2023        0,     0,   821,   822,   724,     0,     0,     0,     0,     0,
    2024        0,     0,     0,     0,  1035,     0,     0,     0,     0,     0,
    2025      125,     0,   125,     0,     0,     0,  1125,     8,     9,    10,
    2026       11,    12,   856,     0,     0,   859,   860,     0,   863,     0,
    2027      865,   866,     0,     0,     0,   867,   868,   274,     0,   448,
    2028        0,   175,   213,     0,     0,     0,    31,     0,  1507,     0,
    2029     1507,     0,     0,     0,     0,     0,    64,   212,   214,     0,
    2030       73,     0,     0,     0,     0,    73,   412,     0,     0,     0,
    2031        0,     0,     0,   420,    34,     0,     0,     0,   636,    37,
    2032        0,   182,   183,    40,     0,  1507,     0,  1507,     0,     0,
    2033       41,    42,     0,   125,     0,  1332,     0,     0,     0,     0,
    2034        0,   125,     0,   125,   125,     0,     0,     0,   125,     0,
    2035      125,   125,     0,     0,  1117,   323,  1532,     0,   410,   943,
    2036      944,     0,   430,   116,     0,   946,  1533,   729,     0,     8,
    2037        9,    10,    11,    12,     0,   729,   729,   729,     0,     0,
    2038      349,     0,     0,     0,     0,   412,     0,     0,     0,     8,
    2039        9,    10,    11,    12,     0,     0,     0,     0,    31,     0,
    2040      221,     0,     0,     0,     0,     0,   535,     0,     0,     0,
    2041        0,     0,     0,     0,     0,   603,     0,     0,    31,     0,
    2042      125,     0,     0,   729,     0,     0,    34,     0,   428,     0,
    2043        0,    37,     0,   724,   724,    40,   349,   349,     0,     0,
    2044        0,   584,    41,    42,     0,     0,    34,   517,     0,   588,
    2045        0,    37,   591,   182,   183,    40,  1204,     0,     0,     0,
    2046        0,     0,    41,    42,     0,     0,     0,    73,    43,     0,
    2047        0,    76,     0,     0,   213,     0,     0,     0,   146,     0,
    2048        0,     0,   352,     0,     0,     0,     0,    73,   264,   212,
    2049      214,   724,   724,     0,     0,    73,     0,   636,   265,     0,
    2050        0,     0,     0,    76,     0,     0,     0,     0,     0,     0,
    2051        0,     0,     0,     0,     0,   412,     0,     0,     0,   420,
    2052        0,   352,     0,     0,  1508,     0,  1508,     0,   544,   545,
    2053      546,   547,   548,   549,   550,   551,   552,   553,   222,   352,
    2054        0,    73,     0,     0,   952,     0,   953,     0,     0,     0,
    2055        0,     0,     0,   956,   957,     0,   738,     0,   962,     0,
    2056        0,  1508,   554,  1508,   535,     8,     9,    10,    11,    12,
    2057      967,     0,     0,     0,     0,   971,     0,     0,     0,   175,
    2058        0,     0,     0,   352,     0,     0,     0,     0,     0,     0,
    2059        0,     0,     0,     0,    31,     0,     0,     0,     0,  1301,
    2060        0,  1000,     0,     0,   412,     0,     0,     0,     0,     0,
    2061        0,     0,     0,     0,     0,     0,   258,     0,     0,     0,
    2062        0,    64,    34,     0,     0,     0,   354,    37,     0,     0,
    2063        0,    40,     0,     0,     0,   724,     0,   738,    41,    42,
    2064        0,   116,     0,     0,     0,     0,   601,     0,   352,     0,
    2065        0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
    2066        0,     0,     0,     0,   744,     0,     0,   724,     0,   212,
    2067      214,     0,     0,     0,   745,   724,   724,   724,     0,     0,
    2068        0,     0,     0,     0,     0,     0,   349,   349,     0,     0,
    2069        0,     0,     0,   352,   352,   352,   584,   584,     0,     0,
    2070     1204,     0,     0,  1045,  1046,  1047,  1048,     0,  1050,     0,
    2071        0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
    2072        0,    76,     0,   724,  1094,     0,    76,     0,     0,     0,
    2073      352,     0,     0,     0,   116,   125,   125,     0,  1100,     0,
    2074        0,    73,     0,     0,     0,     0,     0,   352,     0,  1234,
    2075        0,   213,     0,     0,     0,     0,   175,     0,     0,     0,
    2076        0,     0,     0,     0,     0,   125,   212,   214,   125,   125,
    2077        0,   125,     0,   125,   125,     0,     0,  1116,   125,   125,
    2078        0,     0,     0,    73,     0,   911,   352,     0,     0,   914,
     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,
    20792278       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2080       18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
    2081        0,   349,     0,     0,     0,     0,     0,  1144,     0,    31,
    2082        0,   222,   412,   352,  1152,     0,     0,     0,     0,  1156,
    2083        0,     0,     0,     0,  1160,     0,  1161,   116,     0,     0,
    2084     1163,  1164,  1165,     0,     0,  1168,     0,    34,     0,     0,
    2085        0,     0,     0,     0,  1180,     0,     0,   125,  -294,     0,
    2086     1204,     0,   125,   125,     0,   352,     0,  1204,   125,     0,
    2087        0,     0,  1195,  1196,  1323,   352,     0,     0,   352,     0,
    2088        0,     0,     0,   221,     0,   352,     0,     0,    76,     0,
    2089      352,     0,     0,     0,     0,     0,     0,     0,     0,  1226,
    2090        0,     0,  1228,   354,     0,     0,     0,     0,    76,     0,
    2091        0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
    2092     1204,     0,     0,     0,     0,     0,     0,  1557,     0,     0,
    2093        0,     0,     0,     0,     0,     0,     0,   584,     0,     0,
    2094        0,  1244,   354,     0,     0,     0,     0,  1248,  1249,     0,
    2095        0,     0,    73,     0,     0,     0,     0,     0,     0,  1260,
    2096      354,     0,    76,    78,  1264,     0,     0,  1268,     0,  1269,
    2097        0,     0,  1271,     0,     0,     0,     0,     0,     0,     0,
    2098        0,     0,     0,     0,     0,  1279,     0,     0,     0,     0,
    2099        0,     0,     0,     0,     0,    78,   281,   282,  1286,   283,
    2100     1288,  1289,  1290,  1291,   354,     0,     0,     0,     0,     0,
    2101        0,     0,     0,     0,     0,     0,  1298,     0,  1299,     0,
    2102        0,     0,   171,     0,     0,   284,     0,     0,     0,     0,
    2103      223,   649,     0,   138,   139,   286,   352,     0,   287,   650,
    2104      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2105      412,  1327,  1328,   293,     0,     0,     0,     0,     0,     0,
    2106        0,     0,     0,     0,     0,     0,     0,     0,   294,   354,
    2107      651,     0,   652,   379,     0,     0,     0,   296,   380,   298,
    2108      299,   300,   301,     0,     0,     0,     0,     0,     0,   352,
    2109      352,     0,   352,   352,     0,     0,     0,     0,     0,     0,
    2110        0,     0,     0,  1363,  1364,     0,     0,     0,     0,     0,
    2111        0,     0,    73,  1374,   354,   354,   354,     0,   355,     0,
    2112        0,     0,     0,     0,     0,     0,     0,     0,     0,  1158,
    2113        0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
    2114        0,     0,     0,     0,     0,  1170,     0,   352,   352,     0,
    2115        0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
    2116        0,     0,    76,     0,     0,  1407,     0,     0,   354,     0,
    2117        0,     0,     0,     0,     0,     0,     0,  1411,     0,  1412,
    2118     1413,  1414,   281,   282,     0,   283,     0,     0,     0,     0,
    2119        0,  1418,     0,     0,     0,     0,     0,     0,     0,     0,
    2120     1429,     0,     0,     0,    76,     0,     0,   354,     0,     0,
    2121        0,   284,   352,    78,     0,     0,  1442,   285,    78,     0,
    2122        0,   286,  1238,     0,   287,   288,   289,   290,    41,    42,
    2123        0,   291,   292,     0,     0,     0,     0,     0,    85,   293,
    2124        0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
    2125        0,     0,   125,     0,   294,   221,   378,     0,     0,   379,
    2126        0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
    2127       85,     0,  1491,  1492,     0,     0,     0,    73,     0,     0,
    2128        0,     0,     0,     0,     0,  1497,   354,     0,     0,     0,
    2129        0,   352,  1497,   352,     0,     0,   354,     0,     0,   354,
    2130        0,     0,     0,     0,   222,   224,   354,     0,     0,     0,
    2131        0,   354,     0,   223,     0,     0,     0,     0,     0,     0,
    2132        0,     0,     0,   352,     0,  1531,     0,     0,     0,  1537,
    2133        0,   352,   352,   352,     0,     0,     0,     0,     0,     0,
    2134        0,     0,   352,   352,     0,     0,     0,     0,     0,     0,
    2135        0,     0,     0,     0,     0,     0,    73,     0,  1559,     0,
    2136     1560,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2137        0,     0,     0,    76,     0,     0,     0,   125,     0,   352,
    2138       78,     0,     0,     0,     0,     0,     0,     0,  1575,  1576,
    2139        0,     0,     0,   362,     0,   355,  1579,  1580,     0,     0,
    2140       78,     0,     0,     0,     0,     0,  -519,     0,    78,     1,
    2141        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    2142       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2143       22,    23,    24,    25,   355,     0,    26,    27,    28,    29,
    2144        0,     0,    30,     0,     0,    31,    32,     0,     0,     0,
    2145        0,     0,   355,     0,    78,     0,     0,   354,     0,     0,
    2146        0,     0,     0,     0,     0,     0,     0,   352,     0,     0,
    2147       33,     0,     0,    34,     0,    35,     0,    36,    37,     0,
    2148       38,    39,    40,     0,     0,     0,     0,     0,    85,    41,
    2149       42,     0,     0,    85,     0,     0,   355,     0,  1034,     0,
    2150        0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
    2151      354,   354,     0,   354,   354,    43,    73,    44,     0,     0,
    2152        0,     0,     0,    73,     0,    45,     0,     0,   281,   282,
    2153       31,   283,     0,    76,     0,     8,     9,    10,    11,    12,
    2154       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2155       23,    24,    25,  -295,     0,     0,     0,   284,    34,     0,
    2156        0,   355,     0,   285,    31,     0,     0,   286,   354,   354,
    2157      287,   288,   289,   290,    41,    42,    73,   291,   292,     0,
    2158        0,     0,     0,     0,     0,   293,     0,     0,   224,     0,
    2159        0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
    2160      294,     0,   378,  -295,     0,     0,   355,   355,   355,   296,
    2161      827,   298,   299,   300,   301,     0,     0,     0,     0,     0,
    2162        0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
    2163        0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
    2164        0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
    2165        0,     0,     0,     0,    78,    85,     0,     0,     0,   164,
    2166      355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2167      362,     0,     0,     0,     0,    85,   222,     0,   217,     0,
    2168        0,     0,     0,    85,     0,     0,     0,     0,     0,     0,
    2169        0,     0,     0,     0,     0,     0,    78,     0,    76,   355,
    2170        0,     0,     0,     0,     0,     0,     0,     0,     0,   362,
    2171        0,     0,   354,     0,   354,     0,     0,     0,     0,     0,
    2172        0,     0,     0,     0,   164,     0,     0,   362,     0,    85,
    2173      271,     0,     0,     0,     0,     0,   355,     0,     0,     0,
    2174        0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
    2175        0,     0,   354,   354,   354,     0,     0,     0,     0,   164,
    2176        0,     0,     0,   354,   354,     0,     0,     0,     0,   368,
    2177        0,   362,     0,   374,     0,     0,     0,    76,   355,     0,
    2178        0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
    2179        0,   355,     0,     0,     0,     0,   223,     0,   355,     0,
    2180      354,     0,     0,   355,     8,     9,    10,    11,    12,    13,
    2181       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2182       24,    25,   164,     0,    26,    27,    28,     0,     0,     0,
    2183        0,     0,     0,    31,   217,     0,   362,     0,     0,     0,
     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,
    21842292       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2185        0,     0,   164,   461,     0,     0,     0,     0,     0,     0,
    2186        0,    34,     0,     0,     0,    78,     0,     0,   206,    39,
    2187        0,     0,     0,     0,     0,     0,   374,     0,     0,     0,
    2188        0,   362,   362,   362,   164,     0,     0,     0,   354,     0,
    2189        0,     0,     0,     0,   514,     0,   516,   519,     0,     0,
    2190      362,     0,     0,     0,   522,   523,     0,     0,   461,   516,
    2191      516,   164,     0,   270,     0,     0,     0,     0,   362,     0,
    2192        0,   516,     0,     0,     0,     0,     0,     0,     0,    85,
    2193        0,     0,     0,     0,     0,   362,     0,    76,   281,   282,
    2194        0,   283,     0,     0,    76,     0,     0,     0,     0,   355,
    2195        0,     0,     0,     0,     0,     0,     0,   516,   606,     0,
    2196        0,     0,     0,   630,     0,     0,     0,   284,     0,     0,
    2197        0,    85,     0,   285,   362,     0,     0,   286,     0,     0,
    2198      287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
    2199        0,     0,     0,   516,     0,   293,     0,    76,     0,     0,
    2200        0,     0,   355,   355,     0,   355,   355,     0,     0,     0,
    2201      294,   362,   378,     0,     0,     0,     0,     0,   812,   296,
    2202      380,   298,   299,   300,   301,    78,     0,     0,     0,     0,
    2203        0,     0,     0,     0,     0,   210,     0,     0,     0,   164,
    2204      164,     0,     0,     0,     0,   230,   368,   234,     0,   236,
    2205        0,     0,     0,   362,     0,     0,   245,     0,     0,     0,
    2206      355,   355,     0,   362,     0,     0,   362,   461,     0,     0,
    2207      461,   224,     0,   362,     0,     0,     0,     0,   362,     0,
    2208        0,     0,     0,     0,     0,     0,     0,   210,     0,   234,
    2209      236,   245,     0,     0,     0,     0,     0,     0,     0,     0,
    2210        0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
    2211        0,     0,     0,     0,     0,   164,     0,     0,     0,     0,
    2212        0,     0,     0,     0,     0,   355,     0,   461,     0,   461,
    2213      210,     0,   461,     0,   164,   461,     0,     0,     0,     0,
    2214       85,     0,     0,     0,     0,     0,     0,   368,     0,     0,
     2293       0,     0,     0,     0,     0,   640,     0,     0,   341,     0,
    22152294       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2216        0,     0,     0,     0,     0,     0,     0,     0,   223,     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,
    22172347     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
    2218      516,   516,   516,   516,   516,   516,   516,   516,     0,     0,
    2219       78,   210,     0,   234,   236,   245,     0,     0,     0,     0,
    2220      164,     0,     0,     0,   355,     0,   355,     0,     0,     0,
    2221        0,     0,   368,   516,   606,     0,     0,   837,     0,     0,
    2222        0,     0,     0,     0,   362,     0,     0,     0,     0,   210,
    2223        0,     0,     0,   210,     0,     0,   355,     0,     0,     0,
    2224        0,     0,     0,   606,   355,   355,   355,     0,   606,   504,
    2225        0,     0,     0,     0,     0,   355,   355,   368,   368,   368,
    2226        0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
    2227        0,     0,     0,     0,     0,     0,   368,   362,   362,     0,
    2228      362,   362,     0,     0,     0,     0,     0,     0,     0,     0,
    2229        0,     0,   355,     0,     0,     0,     0,     0,     0,   210,
    2230       85,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2231        0,   741,   516,     0,     0,     0,     0,     0,     0,     0,
    2232      210,     0,     0,     0,     0,   234,   236,   155,     0,     0,
    2233        0,     0,   461,   245,   516,   362,   362,     0,     0,     0,
    2234        0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
    2235      368,     0,   961,     8,     9,    10,    11,    12,    13,    14,
    2236       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2237       25,     0,     0,   250,     0,     0,   210,     0,     0,     0,
    2238      355,     0,    31,   255,     0,     0,     0,   741,     0,     0,
    2239        0,     0,     0,   516,   210,     0,     0,     0,     0,   210,
    2240      362,   210,     0,     0,     0,     0,     0,     0,     0,     0,
    2241       34,     0,     0,     0,     0,     0,     0,     0,   210,     0,
    2242        0,   210,   210,     0,     0,   516,     0,     0,     0,    78,
    2243        0,     0,     0,     0,     0,     0,    78,   210,     0,   155,
    2244      516,     0,   368,   224,     0,     0,   630,     0,     0,   368,
    2245        0,   210,     0,   385,     0,     0,     0,     0,   210,     0,
    2246        0,     0,     0,     0,     0,    85,     0,     0,     0,     0,
    2247        0,     0,     0,     0,     0,     0,   417,     0,     0,   362,
    2248        0,   362,     0,     0,     0,     0,     0,     0,     0,    78,
    2249      432,     0,     0,     0,     0,     0,     0,     0,     0,   437,
    2250        0,     0,     0,     0,     0,     0,     0,     0,     0,   445,
    2251        0,   362,     0,     0,     0,     0,     0,     0,     0,   362,
    2252      362,   362,     0,     0,     0,     0,     0,     0,     0,     0,
    2253      362,   362,     0,     0,   471,     0,     0,     0,     0,   481,
    2254        0,     0,   461,     0,    85,     0,     0,     0,     0,     0,
    2255        0,     0,   489,     0,     0,     0,     0,     0,   499,     0,
    2256      503,   461,     0,     0,     0,     0,     0,   362,     0,     0,
    2257        0,     0,     0,     0,   210,     0,     0,     0,   533,     0,
    2258        0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
    2259        0,   516,     0,     0,     0,     0,     0,     0,     0,     0,
    2260      368,     0,   210,     0,     0,     0,     0,   210,     0,     0,
     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,
    22612353       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2262        0,   593,   516,     0,     0,     0,   598,     0,     0,     0,
    2263        0,     0,     0,     0,   516,   606,     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,
    22642365       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2265        0,     0,     0,     0,   644,   362,   368,   368,   645,   646,
    2266        0,   648,     0,     0,     0,     0,     0,     0,   660,   661,
    2267        0,   662,   663,     0,   664,   516,   665,     0,     0,     0,
    2268        0,     0,  1178,     0,     0,     8,     9,    10,    11,    12,
    2269        0,     0,     0,   593,     0,   210,     0,     0,     0,     0,
    2270        0,   680,     0,     0,    85,     0,     0,     0,     0,   210,
    2271        0,    85,   281,   282,    31,   283,   461,     0,     0,     0,
    2272        0,     0,     0,     0,     0,     0,   691,     0,     0,   504,
    2273        0,     0,     0,     0,     0,     0,     0,   697,     0,     0,
    2274        0,   284,    34,     0,     0,     0,     0,   285,   516,     0,
    2275        0,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2276      733,   291,   292,     0,    85,     0,   736,     0,     0,   293,
    2277        0,   471,     0,     0,     0,     0,   741,     0,     0,     0,
    2278        0,     0,     0,     0,   294,     0,   378,     0,     0,     0,
    2279      210,     0,   516,   296,  1179,   298,   299,   300,   301,     0,
    2280        0,     0,     0,   210,     0,     0,   516,   516,   773,     0,
    2281        0,     0,     0,     0,     0,     0,     0,     0,   217,     0,
    2282        0,     0,   210,     0,   788,     0,     0,     0,     0,     0,
    2283        0,   204,     2,   205,     4,     5,     6,     7,     8,     9,
    2284       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2285       20,    21,    22,    23,    24,    25,     0,   741,    26,    27,
    2286       28,   815,     0,     0,     0,     0,     0,    31,     0,     0,
    2287      825,     0,     0,     0,     0,     0,     0,   828,     0,     0,
    2288        0,     0,   835,     0,     0,     0,     0,     0,     0,     0,
    2289        0,     0,     0,   850,     0,    34,     0,    35,     0,    36,
    2290       37,     0,   206,    39,    40,     0,   368,   368,     0,   210,
    2291        0,    41,    42,     0,     0,   217,     0,     0,     0,     0,
    2292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2293        0,     0,     0,     0,   890,   210,     0,    43,     0,   207,
    2294        0,     0,     0,     0,     0,     0,     0,   208,     0,     0,
    2295        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2296        0,     0,     0,   210,     0,     0,     0,     0,     0,     0,
    2297      835,     0,     0,     0,     0,     0,     8,     9,    10,    11,
    2298       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2299       22,    23,    24,    25,  -294,   210,    26,    27,    28,     0,
    2300        0,     0,     0,     0,     0,    31,   210,     0,     0,     0,
    2301        0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
    2302        0,     0,     0,     0,     0,   250,     0,     0,     0,     0,
    2303        0,   368,     0,    34,   516,   968,   969,     0,     0,     0,
    2304       38,    39,     0,     0,  -294,     0,     0,     0,     0,   986,
    2305        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2306        0,     0,     0,     0,     0,     0,  1001,     0,  1002,     0,
    2307        0,     0,  1006,     0,     0,   643,     0,   338,     0,     0,
    2308        0,     0,     0,     0,     0,   110,     0,     0,   210,   461,
    2309        0,   461,     0,     0,     0,     0,     0,     0,     0,     0,
    2310        0,     0,     0,     0,     0,     0,     0,   516,   516,     0,
    2311        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2312      281,   282,     0,   283,     0,     0,   461,     0,   461,     0,
    2313        0,     0,     0,     0,     0,     0,     0,     0,  1039,     0,
    2314        0,     0,     0,     0,     0,  1040,     0,     0,     0,   284,
    2315        0,     0,     0,     0,     0,   285,   164,     0,  1042,   286,
    2316     1043,     0,   287,   288,   289,   290,    41,    42,     0,   291,
    2317      292,     0,     0,     0,  1055,   210,     0,   293,     0,     0,
    2318        0,  1059,     0,     0,     0,     0,     0,     0,     0,     0,
    2319        0,     0,   294,  1097,   378,     0,  1098,     0,     0,   781,
    2320        0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
    2321        0,     0,     0,     0,   598,     0,     0,     0,     0,     0,
    2322        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2323        0,     0,     0,     0,   341,   363,     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,
    23242370       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    23252371       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2326        0,     0,     0,     0,     0,     0,     0,     0,   413,     0,
    2327        0,     0,   210,     0,     0,   413,     0,     1,     2,     3,
    2328        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2329       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2330       24,    25,     0,  1162,    26,    27,    28,    29,     0,     0,
    2331       30,     0,     0,    31,    32,     8,     9,    10,    11,    12,
    2332       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2333       23,    24,    25,     0,     0,    26,    27,    28,    33,     0,
    2334        0,    34,     0,    35,    31,    36,    37,   413,    38,    39,
    2335       40,     0,     0,     0,     0,     0,     0,    41,    42,   533,
    2336        0,     0,     0,     0,     0,     0,  1227,     0,     0,     0,
    2337        0,     0,    34,     0,     0,     0,     0,     0,     0,    38,
    2338       39,     0,     0,    43,     0,    44,     0,     0,     0,  -523,
    2339        0,     0,     0,    45,     0,   321,  1241,     0,     0,     0,
    2340        0,  1243,     0,   413,     0,   345,     0,     0,     0,  1247,
    2341        0,   413,   589,     0,   413,   592,     0,   381,   381,     0,
    2342        0,     0,     0,     0,   363,     0,     0,     0,   622,     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,
    23432379       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2344     1273,     0,     0,     0,     0,     0,     0,   640,     0,     0,
    2345      341,     0,  1281,     0,     0,  1282,     0,  1283,     0,     0,
    2346      281,   282,     0,   283,     0,     0,     0,     0,     0,     0,
    2347        0,  1292,  1293,     0,     0,     0,     0,   413,     0,     0,
    2348        0,   413,     0,     0,     0,     0,     0,     0,   321,   284,
    2349        0,     0,     0,  1306,     0,   285,     0,     0,     0,   286,
    2350        0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
    2351      292,     0,   363,   485,     0,     0,     0,   293,     0,     0,
    2352     1329,     0,     0,     0,     0,     0,     0,     0,   210,     0,
    2353        0,     0,   294,     0,   378,   413,     0,   993,     0,     0,
    2354        0,   296,   380,   298,   299,   300,   301,     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,
    23552389       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2356        0,     0,     0,     0,     0,     0,   413,     0,     0,   363,
    2357        0,     0,     0,     0,     1,     2,   205,     4,     5,     6,
    2358        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2359       17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
    2360        0,    26,    27,    28,    29,     0,     0,    30,     0,   413,
    2361       31,     0,   341,   363,     0,     0,     0,     0,  1399,     0,
    2362     1400,     0,     0,     0,     0,     0,     0,     0,     0,   381,
    2363        0,     0,     0,  1409,     0,  1410,     0,     0,    34,     0,
    2364       35,     0,    36,     0,     0,    38,    39,     0,     0,  -294,
    2365        0,     0,     0,  1417,     0,     0,     0,     0,   413,   413,
    2366        0,     0,     0,     0,     0,     0,     0,     0,     0,  1435,
    2367     1437,     0,     0,     0,     0,     0,     0,   830,   363,     0,
    2368      363,  1443,    44,     0,  1247,     0,     0,     0,     0,   622,
    2369      110,   622,   622,     0,     0,     0,     0,     0,   622,     0,
    2370        0,     0,     0,     0,     0,     0,  1466,     0,   869,   363,
    2371        0,     0,     0,     0,   363,  1473,     0,     0,  1475,     0,
    2372     1477,  1479,  1481,   363,   363,   363,     0,     0,     0,     0,
    2373        0,   735,     0,     0,     0,     0,     0,     0,     0,     0,
    2374        0,     0,   363,     0,     0,     0,     0,   413,   912,     0,
    2375        0,   413,   915,     0,     0,     0,     0,     0,   917,     0,
    2376        0,     0,  1512,     0,  1514,     0,     0,  1247,     0,     0,
    2377      769,     0,     0,     0,     0,     0,   341,   363,   413,     0,
    2378      413,     0,  1526,   782,   413,     0,     0,     0,     0,     0,
    2379      769,     0,     0,   769,     0,     0,     0,     0,     0,     0,
    2380        0,     0,     0,     0,   792,   793,     0,     0,     0,     0,
    2381        0,     0,     0,     0,     0,     0,   363,   622,     0,     0,
    2382        0,     0,     0,     0,     0,     0,   814,     0,     0,     0,
    2383        0,     0,     0,     0,     0,     0,   823,     0,     0,     0,
    2384        0,     0,     0,   345,     0,     0,     0,     0,   782,     0,
    2385        0,     0,   341,   363,     0,     0,     0,   413,   413,     0,
    2386        0,     0,     0,     0,     1,     2,     3,     4,     5,     6,
     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,
    23872395       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    23882396      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2389        0,    26,    27,    28,    29,     0,     0,    30,   889,   413,
    2390       31,    32,     0,     0,     0,     0,     0,   381,   363,     0,
    2391        0,     0,     0,     0,   830,   363,     0,     0,     0,   622,
    2392        0,   622,     0,     0,     0,    33,     0,     0,    34,     0,
    2393       35,   622,    36,    37,     0,    38,    39,    40,     0,     0,
    2394        0,     0,     0,     0,    41,    42,     0,   345,     0,     0,
     2397     516,    26,    27,    28,    29,     0,     0,    30,     0,     0,
     2398      31,    32,     0,   363,     0,     0,     0,     0,   996,     0,
    23952399       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2396        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2397       43,     0,    44,     0,     0,     0,     0,     0,     0,     0,
    2398       45,     0,     0,     0,     0,     8,     9,    10,    11,    12,
    2399       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2400       23,    24,    25,  -294,   830,    26,    27,    28,     0,     0,
    2401        0,     0,   413,     0,    31,     0,     0,     0,   413,     0,
    2402        0,     0,     0,   782,     0,   991,   413,     0,     0,     0,
    2403        0,   996,     0,     0,     0,     0,     0,     0,  1005,   622,
    2404      622,     0,    34,     0,     0,     0,     0,    37,     0,   336,
    2405      337,    40,     0,  -294,     0,     0,     0,     0,    41,    42,
    2406        0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
    2407        0,     0,   413,     0,     0,     0,     0,     0,     0,     0,
    2408        0,     0,  1022,  1023,   643,   345,   338,     0,     0,     0,
    2409        0,   413,  1159,     0,   634,     0,     0,     0,     0,     0,
    2410      345,   363,     0,     0,     0,     0,     0,   413,  1171,     0,
    2411      622,   622,  1176,     0,     0,     0,     0,     0,     0,     0,
    2412        0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
    2413        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2414     1053,     0,     0,     0,   381,     1,     2,   205,     4,     5,
    2415        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2416       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2417        0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
    2418        0,    31,     0,   830,   413,  1239,     0,     0,     0,     0,
    2419        0,     0,     0,     0,     0,     0,     0,   622,     0,     0,
    2420        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2421        0,    35,     0,    36,     0,     0,    38,    39,     0,     0,
    2422      321,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2423        0,     0,     0,     0,     0,     0,  1140,  1141,     0,     0,
    2424        0,     0,   363,   381,     0,     0,     0,   281,   282,   996,
    2425      283,     0,  1150,    44,   769,     0,     0,     0,     0,     0,
    2426        0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
    2427        0,     0,     0,     0,  1166,     0,   284,     0,     0,     0,
    2428        0,     0,   285,     0,     0,  1181,   286,     0,     0,   287,
    2429      288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
    2430        0,     0,   341,     0,   293,   281,   282,   381,   283,  1199,
    2431        0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
    2432        0,   378,     0,   363,   996,   996,     0,     0,   296,   380,
    2433      298,   299,   300,   301,   284,     0,     0,     0,     0,     0,
    2434      285,     0,     0,     0,   286,  1231,     0,   287,   288,   289,
    2435      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2436        0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
    2437        0,     0,   363,   363,     0,     0,     0,   294,     0,   378,
    2438        0,     0,     0,     0,     0,     0,   296,   734,   298,   299,
    2439      300,   301,     0,   996,     0,     0,     0,     0,     0,     0,
    2440        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2441        0,     0,   889,     0,     0,     0,     0,     0,     0,     0,
    2442        0,     0,     0,     0,     0,     0,     0,  1284,  1285,     0,
    2443        0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
     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,
    24442413       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    24452414      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    24462415       0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
    2447      282,    31,  1062,  1063,     0,  1064,     0,     0,  1065,  1066,
     2416     282,    31,  1062,  1063,  1390,  1064,   769,     0,  1065,  1066,
    24482417    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
    2449        0,     0,     0,  1074,  1075,     0,    33,   363,   284,    34,
    2450        0,    35,     0,    36,   649,     0,    38,    39,   286,   996,
     2418       0,     0,     0,  1074,  1075,     0,    33,     0,   284,    34,
     2419       0,    35,     0,    36,   649,     0,    38,    39,   286,     0,
    24512420       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    24522421       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
     
    24542423       0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
    24552424     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
    2456     1077,     0,     0,     0,  -129,     0,     0,     0,     0,     0,
    2457     1392,     0,   769,     0,     0,     0,     0,     0,     0,     0,
    2458        0,     0,     0,     0,     0,     0,     0,   413,     8,     9,
     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,
     2564      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     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,
     2568       0,     0,     0,     0,     0,     0,     0,     0,     0,     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,
     2770       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
     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,
    24592837      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    24602838      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2461       28,     0,   413,   413,     0,     0,     0,    31,     0,     0,
     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,
    24622846       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2463        0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
    2464        0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
    2465        0,     0,   206,    39,     0,     0,     0,     0,  1452,     0,
    2466        0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
    2467        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2468       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2469        0,     0,    26,    27,    28,    29,     0,   629,    30,   281,
    2470      282,    31,   283,     8,     9,    10,    11,    12,    13,    14,
    2471       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2472       25,     0,     0,    26,    27,    28,     0,     0,   284,    34,
    2473        0,    35,    31,    36,   285,     0,    38,    39,   286,     0,
    2474     1518,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2475        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2476       34,     0,     0,     0,     0,   109,     0,    38,    39,     0,
    2477        0,   294,     0,  1076,     0,     0,    41,    42,     0,     0,
    2478      296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
    2479        0,     0,   321,     0,  -129,     1,     2,   205,     4,     5,
    2480        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2481       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2482        0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
    2483      282,    31,   283,     8,     9,    10,    11,    12,    13,    14,
    2484       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2485       25,     0,     0,    26,    27,    28,     0,     0,   284,    34,
    2486        0,    35,    31,    36,   285,     0,    38,    39,   286,     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,
    24872883       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2488        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2489       34,     0,     0,     0,     0,     0,     0,   206,    39,     0,
    2490        0,   294,     0,    44,     0,     0,     0,     0,     0,     0,
    2491      296,   297,   298,   299,   300,   301,     2,   205,     4,     5,
    2492        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2493       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2494        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2495      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
     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,
    24962899       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2497        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2498        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2499        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2500        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    25012900       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2502        0,   294,     0,   343,     0,     0,     0,     0,   781,     0,
    2503      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2504        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2505       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2506        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2507      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2508        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2509        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2510        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2511        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2512        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2513        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2514        0,   294,     0,   931,     0,     0,     0,     0,   781,     0,
    2515      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2516        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2517       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2518        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2519      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2520        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2521        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2522        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2523        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2524        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2525        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2526        0,   294,     0,   931,     0,     0,     0,     0,   781,     0,
    2527      296,   600,   298,   299,   300,   301,     2,   205,     4,     5,
    2528        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2529       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2530        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2531      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2532        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2533        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2534        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2535        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2536        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2537        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2538        0,   294,     0,   343,     0,     0,     0,     0,     0,     0,
    2539      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2540        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2541       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2542        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2543      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2545        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2546        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2547        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2548        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2549        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2550        0,   294,     0,   931,     0,     0,     0,     0,     0,     0,
    2551      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2552        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2553       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2554        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2555      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2556        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2557        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2558        0,    35,     0,    36,   285,     0,   206,    39,   286,     0,
    2559        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2560        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2561        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2562        0,   294,     0,  1020,     0,     0,     0,     0,     0,     0,
    2563      296,  1021,   298,   299,   300,   301,     2,   205,     4,     5,
    2564        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2565       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2566        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2567      282,    31,   283,     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,     0,     0,   284,    34,
    2570        0,    35,     0,    36,   285,     0,   206,    39,   286,     0,
    2571        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2572        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2573        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2574        0,   294,     0,   378,     0,     0,     0,     0,     0,     0,
    2575      296,   380,   298,   299,   300,   301,   204,     2,   205,     4,
     2901       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
     2902       0,    36,     0,     0,   206,    39,   474,     2,   205,     4,
    25762903       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    25772904      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     
    25802907       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25812908       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2582       34,     0,    35,     0,    36,     0,     0,   206,    39,     0,
    2583        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2584       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2585       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2586        0,     0,     0,     0,   207,    31,     0,     0,     0,     0,
    2587        0,     0,   270,     0,     0,     0,     0,     0,     0,     0,
    2588        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2589        0,     0,     0,    34,     0,    35,     0,    36,    37,     0,
    2590      206,    39,    40,     0,     0,     0,     0,     0,     0,    41,
    2591       42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2592        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2593        0,     0,     0,     0,     0,    43,     0,   207,     0,     0,
    2594        0,     0,     0,     0,     0,   208,     2,   205,     4,     5,
    2595        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2596       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2597        0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
    2598        0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
    2599       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2600       22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
    2601        0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
     2909      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
    26022910     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    26032911      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2604       23,    24,    25,    34,     0,    26,    27,    28,   109,     0,
    2605       38,    39,  -402,   687,    31,     0,     0,     0,     0,    41,
    2606       42,   634,     0,     0,     0,     0,     0,     0,     0,     0,
    2607        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2608        0,     0,    34,     0,    35,     0,    36,    44,     0,    38,
    2609       39,     0,     0,     0,     0,   110,     0,     0,     0,     0,
    2610        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2611        0,  1371,     0,     0,     0,     0,     0,     0,     0,     0,
    2612        0,     0,     0,     0,     0,     0,   687,     0,     0,     0,
    2613        0,     0,     0,     0,   634,     2,   205,     4,     5,     6,
    2614        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2615       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2616        0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
    2617       31,     0,     0,     0,     0,     8,     9,    10,    11,    12,
    2618       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2619       23,    24,    25,  -294,     0,    26,    27,    28,    34,     0,
    2620       35,     0,    36,     0,    31,    38,    39,     0,     0,     0,
    2621        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2622        0,     0,     0,     0,     0,     0,     0,  1373,     0,     0,
    2623        0,     0,    34,     0,     0,     0,     0,    37,     0,   336,
    2624      337,    40,   687,  -294,     0,     0,     0,     0,    41,    42,
    2625      634,     2,   205,     4,     5,     6,     7,     8,     9,    10,
    2626       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2627       21,    22,    23,    24,    25,     0,   338,    26,    27,    28,
    2628        0,     0,     0,     0,   110,     0,    31,     0,     0,     0,
     2912      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     2913       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
    26292914       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26302915       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2631        0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
    2632        0,   206,    39,     0,     2,   205,     4,     5,     6,     7,
    2633        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2634       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2635       26,    27,    28,     0,     0,     0,     0,     0,   269,    31,
    2636        0,     0,     0,     0,     0,     0,   629,     0,     0,     0,
    2637        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2638        0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
    2639        0,    36,     0,     0,    38,    39,     0,     2,   205,     4,
     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,
    26403271       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    26413272      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2642       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2643        0,   687,    31,     0,     0,     0,     0,     0,     0,   634,
    2644        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2645        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2646       34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
    2647        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2648       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2649       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2650        0,     0,     0,     0,   599,    31,     0,     0,     0,     0,
    2651        0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
    2652        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2653        0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
    2654      206,    39,     8,     9,    10,    11,    12,    13,    14,    15,
     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,
    26553282      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2656        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2657      282,    31,   283,     0,     0,     0,     0,   207,     0,     0,
    2658        0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
    2659        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2660        0,     0,     0,     0,   285,     0,    38,    39,   286,     0,
    2661        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2662        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2663        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2664        0,   294,     0,   525,     0,     0,   170,     0,     0,     0,
    2665      296,   297,   298,   299,   300,   301,     8,     9,    10,    11,
    2666       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2667       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2668        0,     0,     0,   281,   282,    31,   283,     8,     9,    10,
    2669       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2670       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2671        0,     0,   284,    34,     0,     0,    31,     0,   285,     0,
    2672       38,    39,   286,     0,     0,   287,   288,   289,   290,    41,
    2673       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2674      293,     0,     0,     0,    34,     0,     0,     0,     0,    37,
    2675        0,   336,   337,    40,     0,   294,     0,   599,    -3,     0,
    2676       41,    42,     0,     0,   296,   600,   298,   299,   300,   301,
    2677        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2678       18,    19,    20,    21,    22,    23,    24,    25,   338,     0,
    2679       26,    27,    28,     0,     0,     0,   110,   281,   282,    31,
    2680      283,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2681       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2682        0,    26,    27,    28,     0,     0,   284,    34,     0,     0,
    2683       31,   453,   649,     0,    38,    39,   286,     0,     0,   287,
    2684      288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
    2685        0,     0,     0,     0,   293,     0,     0,     0,    34,     0,
    2686        0,     0,     0,     0,     0,    38,    39,     0,     0,   294,
    2687      -35,   766,     0,     0,     0,     0,     0,     0,   296,   297,
    2688      298,   299,   300,   301,     8,     9,    10,    11,    12,    13,
    2689       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2690       24,    25,   454,     0,    26,    27,    28,     0,     0,     0,
    2691      110,   281,   282,    31,   283,     0,     0,     0,     0,     0,
    2692        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2693       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2694      284,    34,    26,    27,    28,     0,   285,     0,    38,    39,
    2695      286,    31,     0,   287,   288,   289,   290,    41,    42,     0,
    2696      291,   292,     0,     0,     0,     0,     0,     0,   293,     0,
    2697        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2698        0,     0,     0,   294,     0,   295,    38,    39,     0,     0,
    2699        0,     0,   296,   297,   298,   299,   300,   301,     8,     9,
     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,
     3335       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     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,
    27003418      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2701       20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2702       28,   643,     0,   338,     0,   281,   282,    31,   283,     0,
    2703        0,   110,     0,     0,     0,     0,     8,     9,    10,    11,
    2704       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2705       22,    23,    24,    25,   284,    34,    26,    27,    28,     0,
    2706      285,     0,    38,    39,   286,    31,     0,   287,   288,   289,
    2707      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2708        0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
    2709        0,     0,     0,    34,     0,     0,     0,   294,     0,   156,
    2710       38,    39,     0,     0,     0,     0,   296,   297,   298,   299,
    2711      300,   301,     8,     9,    10,    11,    12,    13,    14,    15,
    2712       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2713        0,     0,    26,    27,    28,   643,     0,   338,     0,   281,
    2714      282,    31,   283,     0,     0,   634,     0,     0,     0,     0,
    2715        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2716       18,    19,    20,    21,    22,    23,    24,    25,   284,    34,
    2717       26,    27,    28,     0,   285,     0,    38,    39,   286,    31,
    2718        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2719        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2720        0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
    2721        0,   294,     0,   599,    38,    39,     0,     0,     0,     0,
    2722      296,   600,   298,   299,   300,   301,     8,     9,    10,    11,
    2723       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2724       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2725        0,   256,     0,   281,   282,    31,   283,     0,     0,   110,
    2726        0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    2727       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2728       24,    25,   284,    34,    26,    27,    28,     0,   285,     0,
    2729       38,    39,   286,    31,     0,   287,   288,   289,   290,    41,
    2730       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2731      293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2732        0,    34,     0,     0,     0,   294,     0,   378,    38,    39,
    2733        0,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2734      474,     2,   205,     4,     5,     6,     7,     8,     9,    10,
    2735       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2736       21,    22,    23,    24,    25,   156,     0,    26,    27,    28,
    2737        0,     0,     0,   110,     0,     0,    31,     0,     0,     0,
    2738        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2739       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2740       26,    27,    28,     0,    34,     0,    35,     0,    36,    31,
    2741        0,    38,    39,     0,     0,     0,     0,     0,     8,     9,
    2742       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2743       20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
    2744       28,     0,    37,     0,    38,    39,    40,    31,     0,     0,
    2745        0,    -3,     0,    41,    42,     0,     8,     9,    10,    11,
    2746       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2747       22,    23,    24,    25,     0,    34,    26,    27,    28,    43,
    2748       37,   156,    38,    39,    40,    31,     0,     0,     0,    45,
    2749        0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
    2750       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2751       24,    25,     0,    34,    26,    27,    28,    43,    37,    44,
    2752      206,    39,    40,    31,     0,     0,     0,    45,     0,    41,
    2753       42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2754       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2755     -294,    34,    26,    27,    28,    43,    37,   269,   336,   337,
    2756       40,    31,     0,     0,     0,   208,     0,    41,    42,     0,
    2757        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2758        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2759        0,     0,     0,   643,     0,   338,    38,    39,     0,     0,
    2760     -294,     0,     0,   634,     0,     8,     9,    10,    11,    12,
    2761       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2762       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2763        0,   643,     0,   338,    31,   453,     0,     0,     0,     0,
    2764        0,   634,     0,     8,     9,    10,    11,    12,    13,    14,
    2765       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2766       25,  -294,    34,    26,    27,    28,     0,     0,     0,    38,
    2767       39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    2768       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2769       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2770       34,     0,    31,   453,     0,     0,   454,    38,    39,     0,
    2771      711,  -294,     0,     0,   110,     0,     0,     0,     0,     0,
    2772        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2773       34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
    2774        0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
    2775        0,     0,   110,     0,     0,     8,     9,    10,    11,    12,
    2776       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2777       23,    24,    25,     0,   454,    26,    27,    28,  1109,     0,
    2778        0,     0,   110,     0,    31,   453,     8,     9,    10,    11,
    2779       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2780       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2781        0,     0,    34,     0,     0,    31,     0,     0,     0,    38,
    2782       39,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    2783       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2784       24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
    2785      206,    39,     0,    31,     0,     0,   454,     0,     0,     0,
    2786     1236,     0,     0,     0,   110,     0,     0,     0,     0,     0,
    2787        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2788        0,    34,     0,     0,     0,     0,     0,   269,    38,    39,
    2789        0,     0,     0,     0,     0,   270,     0,     8,     9,    10,
    2790       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2791       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2792        0,     0,     0,     0,     0,   256,    31,     0,     0,     0,
    2793        0,     0,     0,   634,     0,     8,     9,    10,    11,    12,
    2794       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2795       23,    24,    25,     0,    34,    26,    27,    28,     0,     0,
    2796        0,    38,    39,     0,    31,     8,     9,    10,    11,    12,
    2797       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2798       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2799        0,     0,    34,     0,    31,     0,     0,     0,   338,    38,
    2800       39,     0,     0,     0,     0,     0,   634,     0,     0,     0,
    2801        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2802        0,     0,    34,     0,     0,     0,     0,     0,     0,   206,
    2803       39,     0,     0,     0,     0,     0,   454,     0,     0,     0,
    2804        0,     0,     0,     0,   110,     0,     0,     8,     9,    10,
    2805       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2806       21,    22,    23,    24,    25,     0,   269,    26,    27,    28,
    2807        0,     0,     0,     0,   629,     0,    31,     8,     9,    10,
    2808       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2809       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2810        0,     0,     0,     0,    34,     0,    31,     0,     0,     0,
    2811        0,    38,    39,     0,     0,     8,     9,    10,    11,    12,
    2812       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2813       23,    24,    25,     0,    34,    26,    27,    28,     0,     0,
    2814        0,    38,    39,     0,    31,     0,     0,     0,   599,     0,
    2815        0,     0,     0,     0,     0,     0,   634,     0,     0,     0,
    2816        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2817        0,     0,    34,     0,     0,     0,     0,     0,   338,    38,
    2818       39,     0,     0,     0,     0,     0,   110,     2,   205,     4,
    2819        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2820       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2821       25,     0,     0,    26,    27,    28,    44,     0,     0,     0,
    2822        0,     0,    31,     0,   110,     0,     0,     0,     0,     0,
    2823        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2824        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2825       34,     0,    35,     0,    36,     0,     0,    38,    39,   281,
    2826      282,     0,   283,  1063,     0,  1064,     0,     0,  1065,  1066,
    2827     1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1551,  1073,
    2828        0,     0,     0,  1074,  1075,     0,    33,     0,   284,     0,
    2829        0,     0,     0,  -415,   649,     0,     0,     0,   286,     0,
    2830        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2831        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2832        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2833        0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
    2834      296,   380,   298,   299,   300,   301,     0,     0,     0,     0,
    2835     1077,     0,   281,   282,  -129,   283,  1063,     0,  1064,     0,
    2836        0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,     0,
    2837        0,     0,  1073,     0,     0,     0,  1074,  1075,     0,    33,
    2838        0,   284,     0,     0,     0,     0,     0,   649,     0,     0,
    2839        0,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2840        0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
    2841        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2842        0,     0,     0,     0,   294,     0,   378,     0,     0,   170,
    2843        0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
    2844        0,     0,     0,  1077,     0,     0,     0,  -129,     2,   205,
    2845        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2846       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2847       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2848        0,     0,     0,    31,     0,   281,   282,     0,   283,  1063,
    2849        0,  1064,  1421,  1422,  1065,  1066,  1067,  1068,  1069,  1070,
    2850     1071,  1072,     0,     0,  1551,  1073,     0,     0,     0,  1074,
    2851     1075,    34,    33,    35,   284,    36,     0,     0,    38,    39,
    2852      649,     0,     0,     0,   286,     0,     0,   287,   288,   289,
    2853      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2854     1330,     0,   293,     0,     0,     0,     0,     0,     0,     0,
    2855        0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
    2856        0,     0,   170,     0,     0,     0,   296,   380,   298,   299,
    2857      300,   301,     0,     0,   281,   282,  1077,   283,  1063,     0,
    2858     1064,  1421,  1422,  1065,  1066,  1067,  1068,  1069,  1070,  1071,
    2859     1072,     0,     0,     0,  1073,     0,     0,     0,  1074,  1075,
    2860        0,    33,     0,   284,     0,     0,     0,     0,     0,   649,
    2861        0,     0,     0,   286,     0,     0,   287,   288,   289,   290,
    2862       41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
    2863        0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
    2864        0,     0,     0,     0,     0,     0,   294,     0,   378,     0,
    2865        0,   170,     0,     0,     0,   296,   380,   298,   299,   300,
    2866      301,     0,     0,   281,   282,  1077,   283,  1063,     0,  1064,
    2867        0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
    2868        0,     0,     0,  1073,     0,     0,     0,  1074,  1075,     0,
    2869       33,     0,   284,     0,     0,     0,     0,     0,   649,     0,
    2870        0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
    2871       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2872      293,   281,   282,     0,   283,     0,     0,     0,     0,     0,
    2873        0,     0,     0,     0,     0,   294,     0,   378,     0,     0,
    2874      170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2875      284,     0,     0,     0,  1077,     0,   649,     0,     0,     0,
    2876      286,     0,     0,   287,   288,   289,   290,    41,    42,     0,
    2877      291,   292,     0,     0,     0,     0,     0,     0,   293,   281,
    2878      282,     0,   283,     0,     0,     0,     0,     0,     0,     0,
    2879        0,     0,     0,   294,     0,   785,     0,     0,   281,   282,
    2880        0,   283,   296,   380,   298,   299,   300,   301,   284,     0,
    2881        0,     0,     0,     0,   285,     0,     0,     0,   286,     0,
    2882        0,   287,   288,   289,   290,    41,    42,   284,   291,   292,
    2883        0,     0,     0,   285,     0,     0,   293,   286,     0,     0,
    2884      287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
    2885        0,   294,     0,   378,     0,   293,   281,   282,     0,   283,
    2886      296,   827,   298,   299,   300,   301,     0,     0,     0,     0,
    2887      513,     0,     0,     0,     0,   281,   282,     0,   283,   296,
    2888      380,   298,   299,   300,   301,   284,     0,     0,     0,     0,
    2889        0,   285,     0,     0,     0,   286,     0,     0,   287,   288,
    2890      289,   290,    41,    42,   284,   291,   292,     0,     0,     0,
    2891      285,     0,     0,   293,   286,     0,     0,   287,   288,   289,
    2892      290,    41,    42,     0,   291,   292,     0,     0,   294,     0,
    2893        0,     0,   293,   281,   282,     0,   283,   296,   380,   298,
    2894      299,   300,   301,     0,     0,     0,     0,   518,     0,     0,
    2895        0,     0,     0,     0,     0,     0,   296,   380,   298,   299,
    2896      300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
    2897        0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
    2898       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2899      293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2900        0,     0,     0,     0,     0,   521,     0,     0,     0,     0,
    2901        0,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2902        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2903       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2904       22,    23,    24,    25,     0,     0,     0,     0,     0,     0,
    2905        0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
    2906        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2907        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2908        0,     0,     0,    34,     0,    35,     0,    36,    37,     0,
    2909      173,   174,    40,     0,     0,     0,     0,     0,     0,    41,
    2910       42,   204,     2,   205,     4,     5,     6,     7,     8,     9,
    2911       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2912       20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2913       28,     0,     0,     0,     0,     0,     0,    31,     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,     0,     0,     0,    34,     0,    35,     0,    36,
    2917        0,     0,   206,    39,   474,     2,   205,     4,     5,     6,
    2918        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2919       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2920        0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
    2921       31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2922        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2923        0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
    2924       35,     0,    36,     0,     0,    38,    39,     2,   205,     4,
    2925        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2926       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2927       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2928        0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
    2929       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2930       24,    25,     0,     0,    26,    27,    28,   492,   493,   494,
    2931       34,     0,    35,    31,    36,     0,     0,   206,    39,     0,
    2932        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2933        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2934        0,    34,     0,     0,     0,     0,     0,     0,    38,    39
    2935 };
    2936 
    2937 #define yypact_value_is_default(yystate) \
    2938   ((yystate) == (-1332))
    2939 
    2940 #define yytable_value_is_error(yytable_value) \
    2941   YYID (0)
    2942 
    2943 static const yytype_int16 yycheck[] =
    2944 {
    2945        0,     1,     0,   203,   184,   184,   520,   698,   238,    43,
    2946      115,   184,     1,   698,    43,    43,   543,   185,   629,     0,
    2947      104,   218,   184,   280,   185,   456,   455,   698,   348,    29,
    2948       30,   184,    32,   184,    32,  1062,   184,   902,   167,   168,
    2949      609,   348,     1,    43,   656,    45,   278,    45,  1043,   611,
    2950     1006,    32,  1042,  1043,    32,    55,   497,     0,   759,   611,
    2951       28,    61,   612,    61,    64,   609,    64,    67,   618,    67,
    2952      154,   609,   499,   579,  1340,   718,   503,   999,    67,   609,
    2953      609,    81,    82,   780,   264,   264,   777,    51,   186,    32,
    2954     1421,   264,   777,   609,    82,   200,  1425,   265,   344,  1055,
    2955      529,    39,   264,   902,   265,   105,   777,     0,   108,    39,
    2956       78,   264,   417,   264,   609,   115,   264,     0,    43,    72,
    2957       43,    45,   363,   643,   644,   645,   367,   489,    44,    45,
    2958       83,    84,   437,    64,     0,    43,    82,    39,   227,    32,
    2959      445,    39,   662,    44,    45,   109,   146,    95,   146,    32,
    2960      184,     0,     1,    39,   154,   184,   184,   246,   111,   159,
    2961       63,   159,   260,   261,  1495,   111,    32,    44,    45,  1477,
    2962      109,    64,   613,   111,    85,   495,   617,  1443,   109,   109,
    2963       30,   111,   130,    32,   184,   185,   110,   185,     4,     5,
    2964        6,     7,     8,     9,  1523,   109,    39,   638,   114,  1528,
    2965      200,   642,   113,   255,  1512,    39,  1514,   109,   208,   111,
    2966      208,   294,   409,   114,   744,    64,   736,   217,    67,  1548,
    2967      220,   145,   220,   109,   902,   111,  1555,   227,   744,   132,
    2968      264,    81,    82,    96,    82,   264,   264,   405,   115,    11,
    2969      644,   645,   242,   489,   405,    82,   246,   109,  1243,   744,
    2970      250,   251,   250,    69,   511,    71,   112,   341,   662,   184,
    2971      123,   184,   110,  1062,   264,   265,   109,   265,   111,   250,
    2972      839,   271,   250,     0,     1,   109,   184,   111,   278,  1306,
    2973      117,   643,   644,   645,   208,   928,   370,   455,     0,   851,
    2974      395,   841,   251,   293,   455,   839,   114,   107,  1293,   851,
    2975      662,   839,  1292,  1293,   611,    32,     3,   250,   828,   839,
    2976      839,    82,  1009,   819,   238,   110,   132,   116,   423,   487,
    2977       32,   131,   117,   839,   429,   116,   487,   220,   328,   116,
    2978      328,    43,   736,    45,   293,   697,    82,  1259,   109,   951,
    2979       67,   132,   425,   426,   839,   132,   270,   347,   348,    61,
    2980      425,   426,    64,   116,   600,    67,   597,   250,   699,    55,
    2981       90,    91,  1227,   109,   364,   417,    72,   250,   368,   132,
    2982     1071,   220,   255,   297,   736,  1074,  1075,    83,    84,   379,
    2983      721,   109,   110,   629,   250,   437,   691,  1065,   634,   255,
    2984      959,    96,   242,   445,   109,   395,   126,   127,   960,   640,
    2985      110,   250,    72,   109,     3,   405,   116,   405,    82,   105,
    2986     1021,   773,   108,    83,    84,   959,   131,   116,   123,   676,
    2987      344,   959,  1417,   423,   828,   109,   501,  1417,  1227,   429,
    2988      513,   431,   873,    68,   146,   518,   110,    72,   521,  1466,
    2989       75,  1528,    77,   117,  1143,   520,  1473,   159,   532,    84,
    2990     1528,   697,    72,  1409,  1410,   455,   349,   121,   122,    72,
    2991      460,  1548,   132,    83,    84,   109,   828,   111,  1555,   116,
    2992       83,    84,   184,   185,   474,   119,   110,  1555,   116,   479,
    2993     1030,  1031,   699,   117,   112,   132,     0,   487,   116,   487,
    2994     1004,   491,   575,   491,   132,   495,   208,   131,   498,  1526,
    2995      500,   425,   426,     0,   721,   762,   119,  1306,   220,   938,
    2996      491,   586,   132,    88,    89,   474,   947,   946,   698,   698,
    2997      520,   217,   131,   250,   965,   698,   758,   773,   657,   379,
    2998     1142,   851,   700,    80,   417,   109,   698,   537,   250,   700,
    2999      540,   968,   542,   543,   851,   698,    72,   698,   491,  1227,
    3000      698,   417,   264,   116,   437,  1117,   109,    83,    84,   664,
    3001      110,   520,   445,   992,   111,   109,   113,   117,   666,   132,
    3002      117,   437,   115,   116,   110,   271,   211,   501,   537,   445,
    3003      116,   540,   278,   542,   543,   111,   109,   480,   131,   830,
    3004      590,   116,     3,   834,   109,   812,   520,   597,   491,    10,
    3005       11,    12,    13,    14,   109,  1306,   489,   132,   491,   609,
    3006      460,   611,   696,   116,    53,    72,   328,   598,   116,     4,
    3007        5,     6,     7,     8,     9,   491,    83,    84,    39,   132,
    3008      630,   590,   110,   116,   132,   119,   348,   978,   116,   691,
    3009      124,   125,   491,   112,   964,  1323,   646,   116,   498,   132,
    3010      500,   347,   652,   116,   111,   110,    67,    96,     0,     1,
    3011     1498,   661,   586,   663,   664,   665,  1504,  1466,   364,   132,
    3012       80,  1102,   368,   890,  1473,   129,   600,   131,   116,   116,
    3013     1042,   733,  1383,   924,    69,    72,    71,  1525,   772,   110,
    3014       32,   888,  1530,   405,   132,   132,    83,    84,   698,  1377,
    3015      700,   111,  1380,   113,   663,   629,   665,   117,   112,   109,
    3016      634,   111,   909,   713,   116,   110,   351,   112,   353,   719,
    3017      110,   116,    64,   723,   111,    67,   116,  1526,   110,   110,
    3018      132,   731,    45,   110,   116,   116,   131,   132,   631,   109,
    3019      970,   111,   110,   455,   744,   745,   112,  1425,    61,   119,
    3020      116,    64,  1430,   192,    67,   112,    72,   110,   758,   116,
    3021       76,   978,    72,   116,   491,   894,    76,    83,    84,  1470,
    3022      938,  1472,   731,    83,    84,  1021,   215,   938,   946,   491,
    3023      112,   110,  1460,   495,   116,   946,   225,    10,    11,    12,
    3024       13,    14,  1009,   109,  1135,  1322,    92,    93,   110,   109,
    3025     1162,   111,   652,   119,   116,   110,   441,    72,   691,   119,
    3026      109,   116,   111,   155,   697,   109,    39,   111,    83,    84,
    3027       10,    11,    12,    13,    14,   691,  1527,   109,   109,   111,
    3028      513,   724,   515,   146,  1034,   518,  1133,   119,   521,   839,
    3029     1137,  1532,  1059,   110,    67,   738,   159,  1532,   109,    39,
    3030      733,   851,  1193,  1194,   835,   294,   115,   116,   110,   110,
    3031      110,  1532,  1103,   713,   116,   116,   116,   733,  1546,   719,
    3032      116,   117,   185,   723,  1552,   115,  1133,    67,   220,   109,
    3033     1137,  1138,   109,   110,   111,  1563,   109,   132,   111,  1567,
    3034      773,   703,   110,   705,   894,   208,   119,   609,   116,   611,
    3035       72,   901,   902,   110,    76,   110,   111,   220,   250,   116,
    3036       64,    83,    84,   110,     1,   109,  1162,   111,  1135,   116,
    3037       72,   902,    74,    75,   924,    85,    86,    87,  1057,   109,
    3038     1292,    83,    84,    72,   630,    74,    75,   109,   938,   832,
    3039       58,    59,   110,   902,    83,    84,   946,   119,   116,   109,
    3040      646,   111,   109,   113,   114,   110,   112,   109,    45,   132,
    3041      110,   116,   114,   110,   964,   661,   116,   115,   116,   116,
    3042      109,   114,   109,   680,   111,   114,  1193,  1194,   114,    72,
    3043      969,    74,    75,    76,   984,   109,   698,   111,   700,   114,
    3044       83,    84,   109,   993,   111,   109,  1253,  1243,   109,   110,
    3045      111,  1001,   132,   442,  1004,   109,  1006,   111,    82,   902,
    3046       72,   132,    74,    75,   109,   328,   109,   104,   111,   902,
    3047     1125,    83,    84,   110,   117,   984,   119,    72,   109,    74,
    3048       75,    82,   744,   745,   116,   117,   902,   476,    83,    84,
    3049      112,   109,  1001,   111,   894,  1004,   970,  1006,   109,   110,
    3050      111,   901,   114,   902,   120,  1055,   116,   117,   145,   109,
    3051      110,   111,   758,  1404,   128,  1065,   111,   154,  1068,  1069,
    3052     1070,    58,    59,    60,   513,  1265,  1266,  1267,  1507,   518,
    3053     1421,  1062,   521,    72,  1341,    74,    75,    76,  1345,   129,
    3054      432,    94,   405,  1093,    83,    84,  1055,  1021,    44,    45,
    3055       10,    11,    12,    13,    14,   131,  1065,   111,   815,  1068,
    3056     1069,  1070,   564,   565,   566,   567,   109,   204,   825,   109,
    3057      969,   208,   110,  1206,  1207,  1125,  1209,   839,  1557,    39,
    3058      112,  1024,  1215,   840,    72,  1218,    74,    75,  1222,   851,
    3059      560,   561,   112,   993,   110,    83,    84,   562,   563,   491,
    3060      110,   238,   239,  1494,  1495,   110,    72,    67,    74,    75,
    3061       76,   110,    72,   110,    74,    75,    76,    83,    84,  1062,
    3062      568,   569,   109,    83,    84,   902,   112,   111,   131,  1062,
    3063      112,   114,   109,   270,   114,   116,   273,  1404,   114,   112,
    3064     1447,   533,   110,   109,    45,   111,  1062,   110,   112,   109,
    3065     1200,   111,   117,   119,  1421,   112,   112,   294,   112,   119,
    3066      297,    29,   117,  1062,   117,   116,  1205,   110,   110,   114,
    3067      117,   112,  1222,   110,   132,   115,   938,  1227,     3,   115,
    3068      115,   109,   116,   110,   946,    10,    11,    12,    13,    14,
    3069      679,   110,   969,  1093,   116,   110,  1227,   117,   110,   688,
    3070      110,   110,   964,   692,   341,   116,   598,   344,  1247,   110,
    3071      110,   110,     3,   110,    39,  1265,  1266,  1267,  1227,    10,
    3072       11,    12,    13,    14,   110,   110,   363,  1494,  1495,  1162,
    3073      367,   110,   110,   370,    10,    11,    12,    13,    14,   110,
    3074      110,   110,    67,   110,   110,  1400,  1379,   110,    39,    29,
    3075      115,   643,   644,   645,   131,   112,  1265,  1266,  1267,   110,
    3076      110,  1204,  1542,    39,   110,   110,   114,   116,   112,   112,
    3077      662,   110,  1322,  1323,   110,  1306,    67,   110,   116,   110,
    3078      117,   116,  1039,  1040,  1227,  1062,   116,   116,   425,   426,
    3079      112,    67,   116,   110,  1227,   110,   112,    85,    86,    87,
    3080     1200,  1340,  1532,  1532,   109,  1204,  1205,   208,   109,  1532,
    3081     1243,  1227,   109,  1322,  1323,  1533,   453,   109,   112,   456,
    3082     1532,   109,  1533,   111,   109,   113,   114,  1377,  1227,  1532,
    3083     1380,  1532,   132,   109,  1532,   111,   117,   474,   239,  1557,
    3084     1097,  1098,   115,   119,   736,   110,  1557,   110,  1247,  1399,
    3085     1400,   115,  1507,   110,   129,   115,   114,   112,  1301,  1409,
    3086     1410,   132,   499,  1306,   501,   110,   503,   116,  1377,   270,
    3087      112,  1380,   116,  1306,   112,  1425,   513,   110,   515,   110,
    3088     1430,   518,   110,   520,   521,   112,   471,   112,   112,   110,
    3089     1306,    47,   112,   294,   112,   532,   297,   112,  1448,   115,
    3090     1409,  1410,  1301,   132,  1443,   110,   132,  1306,   115,   132,
    3091     1460,   117,   110,   132,   115,   132,  1425,   112,   112,   112,
    3092      112,  1430,    72,   112,    74,    75,    76,   112,  1205,   112,
    3093      112,   110,   110,    83,    84,  1466,   828,   926,   112,  1448,
    3094      112,  1340,  1473,   835,     0,     1,   109,   109,  1532,   586,
    3095     1227,  1460,   109,  1532,  1532,    60,   110,  1507,  1508,   109,
    3096      597,   111,    55,   600,   110,   114,   132,  1517,   112,   119,
    3097     1247,   112,   117,  1523,   110,   112,    32,   110,  1528,    96,
    3098       96,   109,  1532,  1533,   109,  1533,   115,   110,   112,    45,
    3099      132,   110,   629,    42,   116,  1526,  1546,   634,  1548,  1508,
    3100      110,   110,  1552,   640,   117,  1555,   132,  1557,  1517,  1557,
    3101      902,    67,   105,  1563,  1523,   108,  1273,  1567,   132,  1528,
    3102      110,   110,    96,  1466,  1281,  1282,  1283,    96,   132,  1306,
    3103     1473,   110,   110,  1466,   132,   117,   132,  1546,   110,  1548,
    3104     1473,   112,   110,  1552,  1443,   115,  1555,   132,   104,   112,
    3105     1466,   109,   453,   115,  1563,   456,   132,  1473,  1567,   696,
    3106      115,   154,   110,  1340,    64,   110,   132,  1466,  1542,   110,
    3107      110,  1077,  1329,   571,  1473,   570,  1227,   969,   572,    64,
    3108       64,   718,   573,  1526,  1073,   574,  1495,  1385,  1567,    74,
    3109      146,  1316,  1138,  1526,   986,   680,  1473,    81,   154,   155,
    3110     1345,  1093,   705,   946,     4,     5,     6,     7,     8,     9,
    3111     1526,   748,   513,   453,   515,   471,   116,   518,   723,   453,
    3112      521,   948,   993,   590,   217,   894,   966,  1526,   658,   185,
    3113     1247,   116,   116,    33,   578,   772,   491,   758,    10,    11,
    3114       12,    13,    14,    -1,   200,   578,   748,   203,   204,   578,
    3115     1042,  1043,   208,  1399,    -1,    -1,    -1,    -1,    -1,   159,
    3116       -1,    -1,    -1,    -1,    -1,    -1,  1443,    39,    -1,    69,
    3117     1062,    71,    -1,   229,   159,   159,    -1,   233,   271,   235,
    3118       72,    -1,    74,    75,    76,   278,    -1,    -1,   244,  1466,
    3119       -1,    83,    84,   830,   250,    67,  1473,   834,    -1,   255,
    3120       72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   265,
    3121       -1,    83,    84,    -1,    -1,    -1,    -1,   273,   283,    -1,
    3122      220,    -1,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,
    3123      815,   296,   297,    -1,    -1,   220,   220,   109,    -1,   111,
    3124      825,    -1,    -1,   308,    -1,    -1,    -1,   119,    -1,  1526,
    3125       -1,    -1,    -1,    -1,   347,   840,    -1,    -1,   258,    -1,
    3126       -1,    -1,   262,    10,    11,    12,    13,    14,    -1,    -1,
    3127     1532,   364,    -1,   258,   258,   368,    -1,   262,   262,   344,
    3128       -1,    -1,    -1,    -1,    -1,   341,    -1,   924,   344,    -1,
    3129       -1,   928,    39,   278,   350,    -1,    -1,    97,    -1,    99,
    3130       -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,
    3131      947,   367,  1204,  1205,   370,   380,    -1,   718,    -1,    -1,
    3132       67,    -1,    -1,    -1,   680,    72,  1315,    74,    75,    76,
    3133       -1,   968,   969,   970,    -1,  1227,    83,    84,   431,    -1,
    3134       72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   349,
    3135       -1,    83,    84,    -1,    -1,  1247,    72,    -1,    74,    75,
    3136       76,   417,   109,    -1,   349,   349,    -1,    83,    84,    -1,
    3137       -1,    72,   119,    74,    75,    76,   432,   109,    -1,   111,
    3138      180,   437,    83,    84,  1021,    -1,    -1,   119,    -1,   445,
    3139      190,   191,    -1,   109,    -1,   195,    -1,   197,   198,    -1,
    3140     1292,  1293,    -1,   119,    -1,    -1,    -1,    -1,   109,  1301,
    3141       -1,    -1,    -1,    -1,  1306,   471,    -1,    -1,   474,    -1,
    3142       51,    -1,    53,    -1,    -1,    56,    57,    58,    -1,    60,
    3143      430,    -1,    -1,   489,    -1,   491,    -1,    -1,    -1,    -1,
    3144       -1,    -1,    -1,   499,    75,   430,   430,   503,  1340,    10,
    3145       11,    12,    13,    14,  1039,  1040,    87,    88,    -1,   815,
    3146       -1,    -1,   447,    -1,    -1,  1102,  1103,    -1,    -1,   825,
    3147       72,    -1,    74,    75,    76,    -1,   532,   533,    39,    -1,
    3148      480,    83,    84,    -1,   840,  1474,    -1,  1476,    -1,    -1,
    3149       -1,    -1,   557,   558,   559,   480,   480,    72,    -1,    74,
    3150       75,    76,    -1,    -1,   597,    -1,    67,   109,    83,    84,
    3151       -1,    -1,  1097,  1098,    -1,    -1,    -1,   119,    -1,    -1,
    3152       -1,    -1,  1511,   579,  1513,  1417,    -1,   928,    -1,    -1,
    3153       -1,    -1,    -1,    -1,   109,   600,    -1,   630,    -1,    -1,
    3154       -1,   597,   598,    -1,   600,    -1,   947,    -1,   109,    -1,
    3155      111,  1443,    -1,   646,    -1,   611,    -1,    -1,   119,    -1,
    3156       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1556,   661,  1558,
    3157       -1,    -1,    -1,   629,  1466,    -1,    -1,    -1,   634,    -1,
    3158       -1,  1473,  1571,  1572,   640,  1222,    -1,   643,   644,   645,
     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,
    31593432      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3160        0,    -1,    -1,   603,    -1,    -1,   662,    -1,    -1,    -1,
    3161     1247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   603,   603,
    3162       -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,    -1,    -1,
    3163       -1,   631,    32,    -1,  1526,   691,   636,    -1,    -1,    -1,
    3164      696,   697,    -1,    -1,   700,    -1,   631,   631,    -1,    -1,
    3165       -1,   636,   636,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
    3166       -1,    -1,    -1,    -1,    -1,   758,    -1,    67,    -1,   734,
    3167       -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,
    3168      736,    -1,    -1,  1039,  1040,    -1,    -1,    -1,  1273,   745,
    3169       -1,    -1,   748,    -1,    -1,    -1,  1281,  1282,  1283,    -1,
    3170       -1,  1102,    -1,  1340,    -1,    -1,    -1,    -1,    -1,    -1,
    3171       -1,    -1,    -1,   344,   345,   780,   772,   773,    -1,    -1,
    3172       -1,    -1,   778,    -1,   724,   356,   357,    -1,    -1,    26,
    3173       27,    28,    -1,    -1,    -1,    -1,    -1,    -1,   738,   724,
    3174      724,  1097,  1098,    -1,  1329,    -1,    -1,    -1,    -1,    -1,
    3175       -1,    -1,    -1,   738,   738,   155,    -1,    -1,    -1,   815,
    3176       -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,    -1,   825,
    3177       -1,    -1,   828,   758,   830,    -1,    -1,   833,   834,   835,
    3178       -1,    -1,   582,   583,   840,    -1,    -1,    -1,    -1,    -1,
    3179       -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,    -1,    -1,
    3180       97,    -1,    99,    -1,    -1,    -1,  1443,    10,    11,    12,
    3181       13,    14,   612,    -1,    -1,   615,   616,    -1,   618,    -1,
    3182      620,   621,    -1,    -1,    -1,   625,   626,   124,    -1,   229,
    3183       -1,   924,   832,    -1,    -1,    -1,    39,    -1,  1475,    -1,
    3184     1477,    -1,    -1,    -1,    -1,    -1,   902,   832,   832,    -1,
    3185      250,    -1,    -1,    -1,    -1,   255,   188,    -1,    -1,    -1,
    3186       -1,    -1,    -1,   195,    67,    -1,    -1,    -1,   924,    72,
    3187       -1,    74,    75,    76,    -1,  1512,    -1,  1514,    -1,    -1,
    3188       83,    84,    -1,   180,    -1,  1241,    -1,    -1,    -1,    -1,
    3189       -1,   188,    -1,   190,   191,    -1,    -1,    -1,   195,    -1,
    3190      197,   198,    -1,    -1,   960,  1542,   109,    -1,   111,   709,
    3191      710,    -1,   968,   969,    -1,   715,   119,  1273,    -1,    10,
    3192       11,    12,    13,    14,    -1,  1281,  1282,  1283,    -1,    -1,
    3193      986,    -1,    -1,    -1,    -1,   267,    -1,    -1,    -1,    10,
    3194       11,    12,    13,    14,    -1,    -1,    -1,    -1,    39,    -1,
    3195      350,    -1,    -1,    -1,    -1,    -1,  1021,    -1,    -1,    -1,
    3196       -1,    -1,    -1,    -1,    -1,  1021,    -1,    -1,    39,    -1,
    3197      267,    -1,    -1,  1329,    -1,    -1,    67,    -1,  1034,    -1,
    3198       -1,    72,    -1,  1039,  1040,    76,  1042,  1043,    -1,    -1,
    3199       -1,   323,    83,    84,    -1,    -1,    67,  1062,    -1,   331,
    3200       -1,    72,   334,    74,    75,    76,  1062,    -1,    -1,    -1,
    3201       -1,    -1,    83,    84,    -1,    -1,    -1,   417,   109,    -1,
    3202       -1,     0,    -1,    -1,  1024,    -1,    -1,    -1,   119,    -1,
    3203       -1,    -1,   432,    -1,    -1,    -1,    -1,   437,   109,  1024,
    3204     1024,  1097,  1098,    -1,    -1,   445,    -1,  1103,   119,    -1,
    3205       -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    3206       -1,    -1,    -1,    -1,    -1,   397,    -1,    -1,    -1,   401,
    3207       -1,   471,    -1,    -1,  1475,    -1,  1477,    -1,    97,    98,
    3208       99,   100,   101,   102,   103,   104,   105,   106,    67,   489,
    3209       -1,   491,    -1,    -1,   725,    -1,   727,    -1,    -1,    -1,
    3210       -1,    -1,    -1,   734,   735,    -1,  1162,    -1,   739,    -1,
    3211       -1,  1512,   131,  1514,  1179,    10,    11,    12,    13,    14,
    3212      751,    -1,    -1,    -1,    -1,   756,    -1,    -1,    -1,  1222,
    3213       -1,    -1,    -1,   533,    -1,    -1,    -1,    -1,    -1,    -1,
    3214       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,  1205,
    3215       -1,   782,    -1,    -1,   486,    -1,    -1,    -1,    -1,    -1,
    3216       -1,    -1,    -1,    -1,    -1,    -1,  1222,    -1,    -1,    -1,
    3217       -1,  1227,    67,    -1,    -1,    -1,   155,    72,    -1,    -1,
    3218       -1,    76,    -1,    -1,    -1,  1241,    -1,  1243,    83,    84,
    3219       -1,  1247,    -1,    -1,    -1,    -1,   827,    -1,   598,    -1,
    3220       -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,    -1,    -1,
    3221       -1,    -1,    -1,    -1,   109,    -1,    -1,  1273,    -1,  1204,
    3222     1204,    -1,    -1,    -1,   119,  1281,  1282,  1283,    -1,    -1,
    3223       -1,    -1,    -1,    -1,    -1,    -1,  1292,  1293,    -1,    -1,
    3224       -1,    -1,    -1,   643,   644,   645,   578,   579,    -1,    -1,
    3225     1306,    -1,    -1,   884,   885,   886,   887,    -1,   889,    -1,
    3226       -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3227       -1,   250,    -1,  1329,   905,    -1,   255,    -1,    -1,    -1,
    3228      680,    -1,    -1,    -1,  1340,   582,   583,    -1,   919,    -1,
    3229       -1,   691,    -1,    -1,    -1,    -1,    -1,   697,    -1,  1099,
    3230       -1,  1301,    -1,    -1,    -1,    -1,  1399,    -1,    -1,    -1,
    3231       -1,    -1,    -1,    -1,    -1,   612,  1301,  1301,   615,   616,
    3232       -1,   618,    -1,   620,   621,    -1,    -1,   958,   625,   626,
    3233       -1,    -1,    -1,   733,    -1,   667,   736,    -1,    -1,   671,
    3234       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3235       20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
    3236       -1,  1417,    -1,    -1,    -1,    -1,    -1,   998,    -1,    39,
    3237       -1,   350,   704,   773,  1005,    -1,    -1,    -1,    -1,  1010,
    3238       -1,    -1,    -1,    -1,  1015,    -1,  1017,  1443,    -1,    -1,
    3239     1021,  1022,  1023,    -1,    -1,  1026,    -1,    67,    -1,    -1,
    3240       -1,    -1,    -1,    -1,  1035,    -1,    -1,   704,    78,    -1,
    3241     1466,    -1,   709,   710,    -1,   815,    -1,  1473,   715,    -1,
    3242       -1,    -1,  1053,  1054,  1224,   825,    -1,    -1,   828,    -1,
    3243       -1,    -1,    -1,   833,    -1,   835,    -1,    -1,   417,    -1,
    3244      840,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,
    3245       -1,    -1,  1083,   432,    -1,    -1,    -1,    -1,   437,    -1,
    3246       -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,    -1,
    3247     1526,    -1,    -1,    -1,    -1,    -1,    -1,  1533,    -1,    -1,
    3248       -1,    -1,    -1,    -1,    -1,    -1,    -1,   819,    -1,    -1,
    3249       -1,  1122,   471,    -1,    -1,    -1,    -1,  1128,  1129,    -1,
    3250       -1,    -1,   902,    -1,    -1,    -1,    -1,    -1,    -1,  1140,
    3251      489,    -1,   491,     0,  1145,    -1,    -1,  1148,    -1,  1150,
    3252       -1,    -1,  1153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3253       -1,    -1,    -1,    -1,    -1,  1166,    -1,    -1,    -1,    -1,
    3254       -1,    -1,    -1,    -1,    -1,    32,    37,    38,  1179,    40,
    3255     1181,  1182,  1183,  1184,   533,    -1,    -1,    -1,    -1,    -1,
    3256       -1,    -1,    -1,    -1,    -1,    -1,  1197,    -1,  1199,    -1,
    3257       -1,    -1,  1203,    -1,    -1,    66,    -1,    -1,    -1,    -1,
    3258       67,    72,    -1,    74,    75,    76,   986,    -1,    79,    80,
    3259       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3260      932,  1232,  1233,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3261       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   598,
    3262      111,    -1,   113,   114,    -1,    -1,    -1,   118,   119,   120,
    3263      121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,  1039,
    3264     1040,    -1,  1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,
    3265       -1,    -1,    -1,  1284,  1285,    -1,    -1,    -1,    -1,    -1,
    3266       -1,    -1,  1062,  1294,   643,   644,   645,    -1,   155,    -1,
    3267       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1011,
    3268       -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,    -1,
    3269       -1,    -1,    -1,    -1,    -1,  1027,    -1,  1097,  1098,    -1,
    3270       -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3271       -1,    -1,   691,    -1,    -1,  1346,    -1,    -1,   697,    -1,
    3272       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1358,    -1,  1360,
    3273     1361,  1362,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
    3274       -1,  1372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3275     1381,    -1,    -1,    -1,   733,    -1,    -1,   736,    -1,    -1,
    3276       -1,    66,  1162,   250,    -1,    -1,  1397,    72,   255,    -1,
    3277       -1,    76,  1104,    -1,    79,    80,    81,    82,    83,    84,
    3278       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,     0,    94,
    3279       -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,
    3280       -1,    -1,  1099,    -1,   109,  1205,   111,    -1,    -1,   114,
    3281       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3282       32,    -1,  1453,  1454,    -1,    -1,    -1,  1227,    -1,    -1,
    3283       -1,    -1,    -1,    -1,    -1,  1466,   815,    -1,    -1,    -1,
    3284       -1,  1241,  1473,  1243,    -1,    -1,   825,    -1,    -1,   828,
    3285       -1,    -1,    -1,    -1,   833,    67,   835,    -1,    -1,    -1,
    3286       -1,   840,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,
    3287       -1,    -1,    -1,  1273,    -1,  1506,    -1,    -1,    -1,  1510,
    3288       -1,  1281,  1282,  1283,    -1,    -1,    -1,    -1,    -1,    -1,
    3289       -1,    -1,  1292,  1293,    -1,    -1,    -1,    -1,    -1,    -1,
    3290       -1,    -1,    -1,    -1,    -1,    -1,  1306,    -1,  1539,    -1,
    3291     1541,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3292       -1,    -1,    -1,   902,    -1,    -1,    -1,  1224,    -1,  1329,
    3293      417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1569,  1570,
    3294       -1,    -1,    -1,   155,    -1,   432,  1577,  1578,    -1,    -1,
    3295      437,    -1,    -1,    -1,    -1,    -1,     0,    -1,   445,     3,
    3296        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3297       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3298       24,    25,    26,    27,   471,    -1,    30,    31,    32,    33,
    3299       -1,    -1,    36,    -1,    -1,    39,    40,    -1,    -1,    -1,
    3300       -1,    -1,   489,    -1,   491,    -1,    -1,   986,    -1,    -1,
    3301       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1417,    -1,    -1,
    3302       64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
    3303       74,    75,    76,    -1,    -1,    -1,    -1,    -1,   250,    83,
    3304       84,    -1,    -1,   255,    -1,    -1,   533,    -1,     7,    -1,
    3305       -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
    3306     1039,  1040,    -1,  1042,  1043,   109,  1466,   111,    -1,    -1,
    3307       -1,    -1,    -1,  1473,    -1,   119,    -1,    -1,    37,    38,
    3308       39,    40,    -1,  1062,    -1,    10,    11,    12,    13,    14,
    3309       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3310       25,    26,    27,    28,    -1,    -1,    -1,    66,    67,    -1,
    3311       -1,   598,    -1,    72,    39,    -1,    -1,    76,  1097,  1098,
    3312       79,    80,    81,    82,    83,    84,  1526,    86,    87,    -1,
    3313       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,   350,    -1,
    3314       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3315      109,    -1,   111,    78,    -1,    -1,   643,   644,   645,   118,
    3316      119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,    -1,
    3317       -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,
    3318       -1,    -1,    -1,  1162,    -1,    -1,    -1,    -1,    -1,    -1,
    3319       -1,    -1,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,
    3320       -1,    -1,    -1,    -1,   691,   417,    -1,    -1,    -1,    45,
    3321      697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3322      432,    -1,    -1,    -1,    -1,   437,  1205,    -1,    64,    -1,
    3323       -1,    -1,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,
    3324       -1,    -1,    -1,    -1,    -1,    -1,   733,    -1,  1227,   736,
    3325       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   471,
    3326       -1,    -1,  1241,    -1,  1243,    -1,    -1,    -1,    -1,    -1,
    3327       -1,    -1,    -1,    -1,   110,    -1,    -1,   489,    -1,   491,
    3328      116,    -1,    -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,
    3329       -1,    -1,    -1,    -1,  1273,    -1,    -1,    -1,    -1,    -1,
    3330       -1,    -1,  1281,  1282,  1283,    -1,    -1,    -1,    -1,   145,
    3331       -1,    -1,    -1,  1292,  1293,    -1,    -1,    -1,    -1,   155,
    3332       -1,   533,    -1,   159,    -1,    -1,    -1,  1306,   815,    -1,
    3333       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   825,    -1,
    3334       -1,   828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,
    3335     1329,    -1,    -1,   840,    10,    11,    12,    13,    14,    15,
    3336       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3337       26,    27,   208,    -1,    30,    31,    32,    -1,    -1,    -1,
    3338       -1,    -1,    -1,    39,   220,    -1,   598,    -1,    -1,    -1,
     3433      -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,   370,    -1,
    33393434      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3340       -1,    -1,   238,   239,    -1,    -1,    -1,    -1,    -1,    -1,
    3341       -1,    67,    -1,    -1,    -1,   902,    -1,    -1,    74,    75,
    3342       -1,    -1,    -1,    -1,    -1,    -1,   262,    -1,    -1,    -1,
    3343       -1,   643,   644,   645,   270,    -1,    -1,    -1,  1417,    -1,
    3344       -1,    -1,    -1,    -1,   281,    -1,   283,   284,    -1,    -1,
    3345      662,    -1,    -1,    -1,   291,   292,    -1,    -1,   294,   296,
    3346      297,   297,    -1,   119,    -1,    -1,    -1,    -1,   680,    -1,
    3347       -1,   308,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   691,
    3348       -1,    -1,    -1,    -1,    -1,   697,    -1,  1466,    37,    38,
    3349       -1,    40,    -1,    -1,  1473,    -1,    -1,    -1,    -1,   986,
    3350       -1,    -1,    -1,    -1,    -1,    -1,    -1,   344,   344,    -1,
    3351       -1,    -1,    -1,   349,    -1,    -1,    -1,    66,    -1,    -1,
    3352       -1,   733,    -1,    72,   736,    -1,    -1,    76,    -1,    -1,
    3353       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    3354       -1,    -1,    -1,   380,    -1,    94,    -1,  1526,    -1,    -1,
    3355       -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,    -1,    -1,
    3356      109,   773,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
    3357      119,   120,   121,   122,   123,  1062,    -1,    -1,    -1,    -1,
    3358       -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,   425,
    3359      426,    -1,    -1,    -1,    -1,    74,   432,    76,    -1,    78,
    3360       -1,    -1,    -1,   815,    -1,    -1,    85,    -1,    -1,    -1,
    3361     1097,  1098,    -1,   825,    -1,    -1,   828,   453,    -1,    -1,
    3362      456,   833,    -1,   835,    -1,    -1,    -1,    -1,   840,    -1,
    3363       -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,   118,
    3364      119,   120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3365       -1,    -1,    -1,   489,    -1,    -1,    -1,    -1,    -1,    -1,
    3366       -1,    -1,    -1,    -1,    -1,   501,    -1,    -1,    -1,    -1,
    3367       -1,    -1,    -1,    -1,    -1,  1162,    -1,   513,    -1,   515,
    3368      159,    -1,   518,    -1,   520,   521,    -1,    -1,    -1,    -1,
    3369      902,    -1,    -1,    -1,    -1,    -1,    -1,   533,    -1,    -1,
     3435      -1,    -1,    -1,  1473,    -1,  1475,    -1,    -1,    -1,    -1,
     3436      37,    38,    -1,    40,    -1,   397,    -1,    -1,  1020,   401,
    33703437      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3371       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1205,    -1,
    3372      557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
    3373      567,   568,   569,   570,   571,   572,   573,   574,    -1,    -1,
    3374     1227,   220,    -1,   222,   223,   224,    -1,    -1,    -1,    -1,
    3375      586,    -1,    -1,    -1,  1241,    -1,  1243,    -1,    -1,    -1,
    3376       -1,    -1,   598,   600,   600,    -1,    -1,   603,    -1,    -1,
    3377       -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,   258,
    3378       -1,    -1,    -1,   262,    -1,    -1,  1273,    -1,    -1,    -1,
    3379       -1,    -1,    -1,   629,  1281,  1282,  1283,    -1,   634,   278,
    3380       -1,    -1,    -1,    -1,    -1,  1292,  1293,   643,   644,   645,
    3381       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1306,
    3382       -1,    -1,    -1,    -1,    -1,    -1,   662,  1039,  1040,    -1,
    3383     1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3384       -1,    -1,  1329,    -1,    -1,    -1,    -1,    -1,    -1,   328,
    3385     1062,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3386       -1,   697,   699,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3387      349,    -1,    -1,    -1,    -1,   354,   355,    44,    -1,    -1,
    3388       -1,    -1,   718,   362,   721,  1097,  1098,    -1,    -1,    -1,
    3389       -1,    -1,    -1,    -1,    -1,    -1,    -1,   734,    -1,    -1,
    3390      736,    -1,   738,    10,    11,    12,    13,    14,    15,    16,
    3391       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3392       27,    -1,    -1,    90,    -1,    -1,   405,    -1,    -1,    -1,
    3393     1417,    -1,    39,   100,    -1,    -1,    -1,   773,    -1,    -1,
    3394       -1,    -1,    -1,   780,   423,    -1,    -1,    -1,    -1,   428,
    3395     1162,   430,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3396       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,
    3397       -1,   450,   451,    -1,    -1,   812,    -1,    -1,    -1,  1466,
    3398       -1,    -1,    -1,    -1,    -1,    -1,  1473,   466,    -1,   156,
    3399      827,    -1,   828,  1205,    -1,    -1,   832,    -1,    -1,   835,
    3400       -1,   480,    -1,   170,    -1,    -1,    -1,    -1,   487,    -1,
    3401       -1,    -1,    -1,    -1,    -1,  1227,    -1,    -1,    -1,    -1,
    3402       -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,    -1,  1241,
    3403       -1,  1243,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1526,
    3404      207,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,
    3405       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   226,
    3406       -1,  1273,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1281,
    3407     1282,  1283,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3408     1292,  1293,    -1,    -1,   251,    -1,    -1,    -1,    -1,   256,
    3409       -1,    -1,   928,    -1,  1306,    -1,    -1,    -1,    -1,    -1,
    3410       -1,    -1,   269,    -1,    -1,    -1,    -1,    -1,   275,    -1,
    3411      277,   947,    -1,    -1,    -1,    -1,    -1,  1329,    -1,    -1,
    3412       -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,   295,    -1,
    3413       -1,    -1,    -1,    -1,   970,    -1,    -1,    -1,    -1,    -1,
    3414       -1,   978,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3415      986,    -1,   631,    -1,    -1,    -1,    -1,   636,    -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,
    34163485      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3417       -1,   338,  1009,    -1,    -1,    -1,   343,    -1,    -1,    -1,
    3418       -1,    -1,    -1,    -1,  1021,  1021,    -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,
    34193493      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3420       -1,    -1,    -1,    -1,   371,  1417,  1042,  1043,   375,   376,
    3421       -1,   378,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,
    3422       -1,   388,   389,    -1,   391,  1062,   393,    -1,    -1,    -1,
    3423       -1,    -1,     7,    -1,    -1,    10,    11,    12,    13,    14,
    3424       -1,    -1,    -1,   410,    -1,   724,    -1,    -1,    -1,    -1,
    3425       -1,   418,    -1,    -1,  1466,    -1,    -1,    -1,    -1,   738,
    3426       -1,  1473,    37,    38,    39,    40,  1102,    -1,    -1,    -1,
    3427       -1,    -1,    -1,    -1,    -1,    -1,   443,    -1,    -1,   758,
    3428       -1,    -1,    -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,
    3429       -1,    66,    67,    -1,    -1,    -1,    -1,    72,  1135,    -1,
    3430       -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3431      477,    86,    87,    -1,  1526,    -1,   483,    -1,    -1,    94,
    3432       -1,   488,    -1,    -1,    -1,    -1,  1162,    -1,    -1,    -1,
    3433       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3434      819,    -1,  1179,   118,   119,   120,   121,   122,   123,    -1,
    3435       -1,    -1,    -1,   832,    -1,    -1,  1193,  1194,   525,    -1,
    3436       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,
    3437       -1,    -1,   851,    -1,   541,    -1,    -1,    -1,    -1,    -1,
    3438       -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    3439       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3440       22,    23,    24,    25,    26,    27,    -1,  1243,    30,    31,
    3441       32,   578,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    3442      587,    -1,    -1,    -1,    -1,    -1,    -1,   594,    -1,    -1,
    3443       -1,    -1,   599,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3444       -1,    -1,    -1,   610,    -1,    67,    -1,    69,    -1,    71,
    3445       72,    -1,    74,    75,    76,    -1,  1292,  1293,    -1,   938,
    3446       -1,    83,    84,    -1,    -1,  1301,    -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,
    34473505      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3448       -1,    -1,    -1,    -1,   651,   964,    -1,   109,    -1,   111,
    3449       -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,
    3450       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3451       -1,    -1,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,
    3452      687,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3453       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3454       24,    25,    26,    27,    28,  1024,    30,    31,    32,    -1,
    3455       -1,    -1,    -1,    -1,    -1,    39,  1035,    -1,    -1,    -1,
    3456       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1404,    -1,    -1,
    3457       -1,    -1,    -1,    -1,    -1,   742,    -1,    -1,    -1,    -1,
    3458       -1,  1417,    -1,    67,  1421,   752,   753,    -1,    -1,    -1,
    3459       74,    75,    -1,    -1,    78,    -1,    -1,    -1,    -1,   766,
    3460       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3461       -1,    -1,    -1,    -1,    -1,    -1,   783,    -1,   785,    -1,
    3462       -1,    -1,   789,    -1,    -1,   109,    -1,   111,    -1,    -1,
    3463       -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,  1117,  1475,
    3464       -1,  1477,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3465       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1494,  1495,    -1,
    3466       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3467       37,    38,    -1,    40,    -1,    -1,  1512,    -1,  1514,    -1,
    3468       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   855,    -1,
    3469       -1,    -1,    -1,    -1,    -1,   862,    -1,    -1,    -1,    66,
    3470       -1,    -1,    -1,    -1,    -1,    72,  1542,    -1,   875,    76,
    3471      877,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3472       87,    -1,    -1,    -1,   891,  1204,    -1,    94,    -1,    -1,
    3473       -1,   898,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3474       -1,    -1,   109,   910,   111,    -1,   913,    -1,    -1,   116,
    3475       -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
    3476       -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,
    3477       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3478       -1,    -1,    -1,    -1,   154,   155,    -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,
    34793510      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    34803511      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3481       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
    3482       -1,    -1,  1301,    -1,    -1,   195,    -1,     3,     4,     5,
    3483        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3484       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3485       26,    27,    -1,  1020,    30,    31,    32,    33,    -1,    -1,
    3486       36,    -1,    -1,    39,    40,    10,    11,    12,    13,    14,
    3487       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3488       25,    26,    27,    -1,    -1,    30,    31,    32,    64,    -1,
    3489       -1,    67,    -1,    69,    39,    71,    72,   267,    74,    75,
    3490       76,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,  1076,
    3491       -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,    -1,    -1,
    3492       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
    3493       75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,   115,
    3494       -1,    -1,    -1,   119,    -1,   145,  1113,    -1,    -1,    -1,
    3495       -1,  1118,    -1,   323,    -1,   155,    -1,    -1,    -1,  1126,
    3496       -1,   331,   332,    -1,   334,   335,    -1,   167,   168,    -1,
    3497       -1,    -1,    -1,    -1,   344,    -1,    -1,    -1,   348,    -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,
    34983519      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3499     1157,    -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,
    3500      370,    -1,  1169,    -1,    -1,  1172,    -1,  1174,    -1,    -1,
    3501       37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
    3502       -1,  1188,  1189,    -1,    -1,    -1,    -1,   397,    -1,    -1,
    3503       -1,   401,    -1,    -1,    -1,    -1,    -1,    -1,   238,    66,
    3504       -1,    -1,    -1,  1210,    -1,    72,    -1,    -1,    -1,    76,
    3505       -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3506       87,    -1,   432,   263,    -1,    -1,    -1,    94,    -1,    -1,
    3507     1237,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1557,    -1,
    3508       -1,    -1,   109,    -1,   111,   455,    -1,   114,    -1,    -1,
    3509       -1,   118,   119,   120,   121,   122,   123,    -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,
    35103529      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3511       -1,    -1,    -1,    -1,    -1,    -1,   486,    -1,    -1,   489,
    3512       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
    3513        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3514       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3515       -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,   529,
    3516       39,    -1,   532,   533,    -1,    -1,    -1,    -1,  1335,    -1,
    3517     1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
    3518       -1,    -1,    -1,  1350,    -1,  1352,    -1,    -1,    67,    -1,
    3519       69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,
    3520       -1,    -1,    -1,  1370,    -1,    -1,    -1,    -1,   578,   579,
    3521       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1386,
    3522     1387,    -1,    -1,    -1,    -1,    -1,    -1,   597,   598,    -1,
    3523      600,  1398,   111,    -1,  1401,    -1,    -1,    -1,    -1,   609,
    3524      119,   611,   612,    -1,    -1,    -1,    -1,    -1,   618,    -1,
    3525       -1,    -1,    -1,    -1,    -1,    -1,  1423,    -1,   628,   629,
    3526       -1,    -1,    -1,    -1,   634,  1432,    -1,    -1,  1435,    -1,
    3527     1437,  1438,  1439,   643,   644,   645,    -1,    -1,    -1,    -1,
    3528       -1,   481,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3529       -1,    -1,   662,    -1,    -1,    -1,    -1,   667,   668,    -1,
    3530       -1,   671,   672,    -1,    -1,    -1,    -1,    -1,   678,    -1,
    3531       -1,    -1,  1479,    -1,  1481,    -1,    -1,  1484,    -1,    -1,
    3532      520,    -1,    -1,    -1,    -1,    -1,   696,   697,   698,    -1,
    3533      700,    -1,  1499,   533,   704,    -1,    -1,    -1,    -1,    -1,
    3534      540,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,    -1,
    3535       -1,    -1,    -1,    -1,   554,   555,    -1,    -1,    -1,    -1,
    3536       -1,    -1,    -1,    -1,    -1,    -1,   736,   737,    -1,    -1,
    3537       -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,    -1,
    3538       -1,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,    -1,
    3539       -1,    -1,    -1,   593,    -1,    -1,    -1,    -1,   598,    -1,
    3540       -1,    -1,   772,   773,    -1,    -1,    -1,   777,   778,    -1,
    3541       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
     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,
    35423535       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    35433536      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3544       -1,    30,    31,    32,    33,    -1,    -1,    36,   648,   819,
    3545       39,    40,    -1,    -1,    -1,    -1,    -1,   657,   828,    -1,
    3546       -1,    -1,    -1,    -1,   834,   835,    -1,    -1,    -1,   839,
    3547       -1,   841,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
    3548       69,   851,    71,    72,    -1,    74,    75,    76,    -1,    -1,
    3549       -1,    -1,    -1,    -1,    83,    84,    -1,   697,    -1,    -1,
     3537    1062,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
     3538      39,    40,    -1,  1415,    -1,    -1,    -1,    -1,  1142,    -1,
    35503539      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3551       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3552      109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3553      119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3554       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3555       25,    26,    27,    28,   924,    30,    31,    32,    -1,    -1,
    3556       -1,    -1,   932,    -1,    39,    -1,    -1,    -1,   938,    -1,
    3557       -1,    -1,    -1,   773,    -1,   775,   946,    -1,    -1,    -1,
    3558       -1,   781,    -1,    -1,    -1,    -1,    -1,    -1,   788,   959,
    3559      960,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3560       75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
    3561       -1,    -1,    -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,
    3562       -1,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3563       -1,    -1,   832,   833,   109,   835,   111,    -1,    -1,    -1,
    3564       -1,  1011,  1012,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    3565      850,  1021,    -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,
    3566     1030,  1031,  1032,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3567       -1,    -1,  1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,
    3568       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3569      890,    -1,    -1,    -1,   894,     3,     4,     5,     6,     7,
    3570        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3571       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3572       -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
    3573       -1,    39,    -1,  1103,  1104,  1105,    -1,    -1,    -1,    -1,
    3574       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1117,    -1,    -1,
    3575       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3576       -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,
    3577      970,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3578       -1,    -1,    -1,    -1,    -1,    -1,   986,   987,    -1,    -1,
    3579       -1,    -1,  1162,   993,    -1,    -1,    -1,    37,    38,   999,
    3580       40,    -1,  1002,   111,  1004,    -1,    -1,    -1,    -1,    -1,
    3581       -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3582       -1,    -1,    -1,    -1,  1024,    -1,    66,    -1,    -1,    -1,
    3583       -1,    -1,    72,    -1,    -1,  1035,    76,    -1,    -1,    79,
    3584       80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
    3585       -1,    -1,  1222,    -1,    94,    37,    38,  1057,    40,  1059,
    3586       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    3587       -1,   111,    -1,  1243,  1074,  1075,    -1,    -1,   118,   119,
    3588      120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,    -1,
    3589       72,    -1,    -1,    -1,    76,  1095,    -1,    79,    80,    81,
    3590       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    3591       -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3592       -1,    -1,  1292,  1293,    -1,    -1,    -1,   109,    -1,   111,
    3593       -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    3594      122,   123,    -1,  1143,    -1,    -1,    -1,    -1,    -1,    -1,
    3595       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3596       -1,    -1,  1162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3597       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1177,  1178,    -1,
    3598       -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
     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,
    35993553       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    36003554      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    36013555      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
    3602       38,    39,    40,    41,    -1,    43,    -1,    -1,    46,    47,
     3556      38,    39,    40,    41,  1318,    43,  1320,    -1,    46,    47,
    36033557      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
    3604       -1,    -1,    -1,    61,    62,    -1,    64,  1417,    66,    67,
    3605       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1259,
     3558      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    67,
     3559      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    36063560      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    36073561      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     
    36093563      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    36103564     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3611      128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
    3612     1320,    -1,  1322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3613       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1507,    10,    11,
    3614       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3615       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    3616       32,    -1,  1532,  1533,    -1,    -1,    -1,    39,    -1,    -1,
     3565     128,    -1,  1406,    -1,   132,    -1,    -1,    -1,    -1,    -1,
     3566       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3567      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3568      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3569      33,    -1,    -1,    36,    37,    38,    39,    40,    -1,    -1,
    36173570      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3618       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1557,    -1,    -1,
    3619       -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
    3620       -1,    -1,    74,    75,    -1,    -1,    -1,    -1,  1408,    -1,
    3621       -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
    3622        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3623       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3624       -1,    -1,    30,    31,    32,    33,    -1,   119,    36,    37,
    3625       38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
     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,
     3581      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     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,
    36263597      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3627       27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
    3628       -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
    3629     1490,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3630       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3631       67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
    3632       -1,   109,    -1,   111,    -1,    -1,    83,    84,    -1,    -1,
    3633      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3634       -1,    -1,  1542,    -1,   132,     3,     4,     5,     6,     7,
    3635        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3636       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3637       -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
    3638       38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
     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,
    36393609      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3640       27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
    3641       -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
    3642       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3643       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3644       67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
    3645       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3646      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3647        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3648       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3649       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3650       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     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,
    36513644      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3652       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3653       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3654       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3655       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    36563645      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3657       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
    3658      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3659        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3660       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3661       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3662       38,    39,    40,    -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,
    36633656      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3664       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3665       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3666       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3667       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    36683657      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3669       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
    3670      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3671        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3672       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3673       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3674       38,    39,    40,    -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,
     3689      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3690      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
     3691      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
    36753692      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3676       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3677       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3678       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3679       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    36803693      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3681       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
    3682      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3683        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3684       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3685       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3686       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3687       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3688       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3689       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3690       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3691       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3692       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3693       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3694      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3695        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3696       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3697       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3698       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3699       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3701       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3702       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3703       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3704       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3705       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3706      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3707        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3708       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3709       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3710       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3712       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3713       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3714       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3715       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3716       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3717       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3718      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3719        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3720       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3721       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3722       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3723       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3724       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3725       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3726       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3727       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3728       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3729       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3730      118,   119,   120,   121,   122,   123,     3,     4,     5,     6,
     3694      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
     3695      -1,    74,    75,    -1,    -1,    78,     3,     4,     5,     6,
    37313696       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    37323697      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3733       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3734       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3698      27,    -1,    -1,    30,    31,    32,    33,    -1,   111,    36,
     3699      -1,    -1,    39,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    37353700      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37363701      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3737       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
     3702      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     3,
    37383703       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    37393704      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     
    37423707      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37433708      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3744       -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
    3745       74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
    3746       84,    -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,
    37473715      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3748       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
    3749       -1,    -1,    -1,    -1,    -1,   119,     4,     5,     6,     7,
    3750        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3751       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3752       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
    3753       -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3754       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3755       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
    3756       -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
     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,
    37573722       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    37583723      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3759       25,    26,    27,    67,    -1,    30,    31,    32,    72,    -1,
    3760       74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,    83,
    3761       84,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     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,
    37623734      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3763       -1,    -1,    67,    -1,    69,    -1,    71,   111,    -1,    74,
    3764       75,    -1,    -1,    -1,    -1,   119,    -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,
    37653737      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3766       -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3767       -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3768       -1,    -1,    -1,    -1,   119,     4,     5,     6,     7,     8,
    3769        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3770       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3771       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    3772       39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3773       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3774       25,    26,    27,    28,    -1,    30,    31,    32,    67,    -1,
    3775       69,    -1,    71,    -1,    39,    74,    75,    -1,    -1,    -1,
    3776       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3777       -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,
    3778       -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3779       75,    76,   111,    78,    -1,    -1,    -1,    -1,    83,    84,
    3780      119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3781       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3782       23,    24,    25,    26,    27,    -1,   111,    30,    31,    32,
    3783       -1,    -1,    -1,    -1,   119,    -1,    39,    -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,
    37843748      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37853749      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3786       -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
    3787       -1,    74,    75,    -1,     4,     5,     6,     7,     8,     9,
     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,
    37883753      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3789       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3790       30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,
    3791       -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
     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,
    37923757      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37933758      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     
    38073772      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38083773      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
    3809       74,    75,    10,    11,    12,    13,    14,    15,    16,    17,
    3810       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3811       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3812       38,    39,    40,    -1,    -1,    -1,    -1,   111,    -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,
    38133778      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
    3814       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3815       -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,
    3816       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3817       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    38183779      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3819       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    3820      118,   119,   120,   121,   122,   123,    10,    11,    12,    13,
    3821       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3822       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3823       -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
     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,
    38243816      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3825       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3826       -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
    3827       74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
    3828       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    3829       94,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
    3830       -1,    74,    75,    76,    -1,   109,    -1,   111,   112,    -1,
    3831       83,    84,    -1,    -1,   118,   119,   120,   121,   122,   123,
     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,
    38323853      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3833       20,    21,    22,    23,    24,    25,    26,    27,   111,    -1,
    3834       30,    31,    32,    -1,    -1,    -1,   119,    37,    38,    39,
     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,
    38353895      40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3836       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3837       -1,    30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,
    3838       39,    40,    72,    -1,    74,    75,    76,    -1,    -1,    79,
    3839       80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
    3840       -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,
    3841       -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
    3842      110,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
    3843      120,   121,   122,   123,    10,    11,    12,    13,    14,    15,
     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,
    38443907      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3845       26,    27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,
    3846      119,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
     3908      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3909      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
    38473910      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    38483911      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3849       66,    67,    30,    31,    32,    -1,    72,    -1,    74,    75,
    3850       76,    39,    -1,    79,    80,    81,    82,    83,    84,    -1,
    3851       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
     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,
    38523915      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3853       -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,
    3854       -1,    -1,   118,   119,   120,   121,   122,   123,    10,    11,
    3855       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3856       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    3857       32,   109,    -1,   111,    -1,    37,    38,    39,    40,    -1,
    3858       -1,   119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3859       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3860       24,    25,    26,    27,    66,    67,    30,    31,    32,    -1,
    3861       72,    -1,    74,    75,    76,    39,    -1,    79,    80,    81,
    3862       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    3863       -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3864       -1,    -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,
    3865       74,    75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    3866      122,   123,    10,    11,    12,    13,    14,    15,    16,    17,
    3867       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3868       -1,    -1,    30,    31,    32,   109,    -1,   111,    -1,    37,
    3869       38,    39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,
    3870       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3871       20,    21,    22,    23,    24,    25,    26,    27,    66,    67,
    3872       30,    31,    32,    -1,    72,    -1,    74,    75,    76,    39,
    3873       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3874       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3875       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
    3876       -1,   109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,
    3877      118,   119,   120,   121,   122,   123,    10,    11,    12,    13,
    3878       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3879       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3880       -1,   111,    -1,    37,    38,    39,    40,    -1,    -1,   119,
    3881       -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3882       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3883       26,    27,    66,    67,    30,    31,    32,    -1,    72,    -1,
    3884       74,    75,    76,    39,    -1,    79,    80,    81,    82,    83,
    3885       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    3886       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3887       -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,
    3888       -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    3889        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3890       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3891       23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
    3892       -1,    -1,    -1,   119,    -1,    -1,    39,    -1,    -1,    -1,
    3893       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3894       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3895       30,    31,    32,    -1,    67,    -1,    69,    -1,    71,    39,
    3896       -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    10,    11,
    3897       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3898       22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
    3899       32,    -1,    72,    -1,    74,    75,    76,    39,    -1,    -1,
    3900       -1,   114,    -1,    83,    84,    -1,    10,    11,    12,    13,
    3901       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3902       24,    25,    26,    27,    -1,    67,    30,    31,    32,   109,
    3903       72,   111,    74,    75,    76,    39,    -1,    -1,    -1,   119,
    3904       -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
    3905       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3906       26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
    3907       74,    75,    76,    39,    -1,    -1,    -1,   119,    -1,    83,
    3908       84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3909       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3910       28,    67,    30,    31,    32,   109,    72,   111,    74,    75,
    3911       76,    39,    -1,    -1,    -1,   119,    -1,    83,    84,    -1,
    3912       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3914       -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,
    3915       78,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
     3916      -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,    -1,
     3917      -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
    39163918      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    39173919      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3918       -1,   109,    -1,   111,    39,    40,    -1,    -1,    -1,    -1,
     3920      -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,    -1,
    39193921      -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
    39203922      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3921       27,    28,    67,    30,    31,    32,    -1,    -1,    -1,    74,
     3923      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
    39223924      75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    39233925      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    39243926      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3925       67,    -1,    39,    40,    -1,    -1,   111,    74,    75,    -1,
    3926      115,    78,    -1,    -1,   119,    -1,    -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,
    39273929      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    39283930      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     
    39303932      -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
    39313933      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3932       25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
    3933       -1,    -1,   119,    -1,    39,    40,    10,    11,    12,    13,
     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,
    39343947      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    39353948      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3936       -1,    -1,    67,    -1,    -1,    39,    -1,    -1,    -1,    74,
    3937       75,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
     3949      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
     3950      -1,    -1,   119,    -1,    10,    11,    12,    13,    14,    15,
    39383951      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    39393952      26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
    3940       74,    75,    -1,    39,    -1,    -1,   111,    -1,    -1,    -1,
    3941      115,    -1,    -1,    -1,   119,    -1,    -1,    -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,
    39423986      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3943       -1,    67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,
    3944       -1,    -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,
    3945       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3946       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3947       -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
    3948       -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
    3949       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3950       25,    26,    27,    -1,    67,    30,    31,    32,    -1,    -1,
    3951       -1,    74,    75,    -1,    39,    10,    11,    12,    13,    14,
    3952       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3953       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3954       -1,    -1,    67,    -1,    39,    -1,    -1,    -1,   111,    74,
    3955       75,    -1,    -1,    -1,    -1,    -1,   119,    -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,
    39563995      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3957       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
    3958       75,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3959       -1,    -1,    -1,    -1,   119,    -1,    -1,    10,    11,    12,
    3960       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3961       23,    24,    25,    26,    27,    -1,   111,    30,    31,    32,
    3962       -1,    -1,    -1,    -1,   119,    -1,    39,    10,    11,    12,
    3963       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3964       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3965       -1,    -1,    -1,    -1,    67,    -1,    39,    -1,    -1,    -1,
    3966       -1,    74,    75,    -1,    -1,    10,    11,    12,    13,    14,
    3967       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3968       25,    26,    27,    -1,    67,    30,    31,    32,    -1,    -1,
    3969       -1,    74,    75,    -1,    39,    -1,    -1,    -1,   111,    -1,
    3970       -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    3971       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3972       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,   111,    74,
    3973       75,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,     6,
    3974        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3975       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3976       27,    -1,    -1,    30,    31,    32,   111,    -1,    -1,    -1,
    3977       -1,    -1,    39,    -1,   119,    -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,
    39784039      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    39794040      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3980       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    37,
    3981       38,    -1,    40,    41,    -1,    43,    -1,    -1,    46,    47,
    3982       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
    3983       -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
    3984       -1,    -1,    -1,   110,    72,    -1,    -1,    -1,    76,    -1,
    3985       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3986       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3987       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3988       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    3989      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3990      128,    -1,    37,    38,   132,    40,    41,    -1,    43,    -1,
    3991       -1,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
    3992       -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,
    3993       -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
    3994       -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3995       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3996       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3997       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
    3998       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3999       -1,    -1,    -1,   128,    -1,    -1,    -1,   132,     4,     5,
    4000        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    4001       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4002       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4003       -1,    -1,    -1,    39,    -1,    37,    38,    -1,    40,    41,
    4004       -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
    4005       52,    53,    -1,    -1,    56,    57,    -1,    -1,    -1,    61,
    4006       62,    67,    64,    69,    66,    71,    -1,    -1,    74,    75,
    4007       72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
    4008       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    4009       96,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4010       -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
    4011       -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
    4012      122,   123,    -1,    -1,    37,    38,   128,    40,    41,    -1,
    4013       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
    4014       53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
    4015       -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
    4016       -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
    4017       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
    4018       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4019       -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
    4020       -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
    4021      123,    -1,    -1,    37,    38,   128,    40,    41,    -1,    43,
    4022       -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
    4023       -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,
    4024       64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
    4025       -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
    4026       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    4027       94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
    4028       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
    4029      114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    4030       66,    -1,    -1,    -1,   128,    -1,    72,    -1,    -1,    -1,
    4031       76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
    4032       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
    4033       38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4034       -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
    4035       -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
    4036       -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
    4037       -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
    4038       -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
    4039       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    4040       -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
    4041      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    4042      109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,
    4043      119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
    4044       -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
    4045       81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
    4046       72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
    4047       82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
    4048       -1,    -1,    94,    37,    38,    -1,    40,   118,   119,   120,
    4049      121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
    4050       -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    4051      122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
    4052       -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
    4053       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    4054       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4055       -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,
    4056       -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    4057        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    4058       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    4059       24,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,
    4060       -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
    4061       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4062       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4063       -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
    4064       74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
    4065       84,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    4066       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    4067       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    4068       32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    4069       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4070       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4071       -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
    4072       -1,    -1,    74,    75,     3,     4,     5,     6,     7,     8,
    4073        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    4074       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    4075       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    4076       39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4077       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4078       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
    4079       69,    -1,    71,    -1,    -1,    74,    75,     4,     5,     6,
     4041      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
     4042      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
    40804043       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    40814044      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    40824045      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4083       -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
    4084       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4085       26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
    4086       67,    -1,    69,    39,    71,    -1,    -1,    74,    75,    -1,
     4046      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    40874047      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    40884048      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4089       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75
     4049      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
     4050       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     4051      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     4052      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
     4053      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
     4054      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4055      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     4056      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
     4057      75
    40904058};
    40914059
     
    41024070     222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
    41034071     233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
    4104      244,   246,   254,   255,   282,   283,   284,   292,   295,   301,
    4105      302,   304,   306,   307,   313,   318,   322,   323,   324,   325,
    4106      326,   327,   328,   329,   349,   366,   367,   368,   369,    72,
     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,
    41074075     119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
    4108      283,    82,   109,   311,   312,   313,   311,   311,    72,    74,
    4109       75,    76,   138,   139,   272,   273,   293,   294,    74,    75,
    4110      273,   109,   304,    11,   198,   109,   119,   318,   323,   324,
    4111      325,   327,   328,   329,   112,   134,   111,   217,   224,   226,
    4112      322,   326,   365,   366,   369,   370,   135,   107,   131,   276,
    4113      114,   135,   172,    74,    75,   137,   271,   135,   135,   135,
    4114      116,   135,    74,    75,   109,   119,   308,   317,   318,   319,
    4115      320,   321,   322,   326,   330,   331,   332,   333,   334,   340,
     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,
    41164084       3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
    4117      227,   231,   234,   243,   284,   322,   326,   369,   214,   216,
    4118      226,   236,   240,   242,   283,   322,   326,    33,   232,   232,
     4085     227,   231,   234,   243,   282,   320,   324,   367,   214,   216,
     4086     226,   236,   240,   242,   281,   320,   324,    33,   232,   232,
    41194087     227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
    4120      273,   284,   114,   273,   232,   227,   116,   135,   135,     0,
    4121      134,   109,   172,   311,   311,   134,   111,   224,   226,   367,
    4122      271,   271,   226,   131,   109,   119,   308,   318,   322,   111,
    4123      119,   369,   305,   229,   313,   109,   289,   109,   109,    51,
     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,
    41244092     109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
    41254093      82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
    41264094     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
    41274095     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    4128      161,   163,   165,   224,   275,   291,   365,   370,   226,   110,
     4096     161,   163,   165,   224,   273,   289,   363,   368,   226,   110,
    41294097     110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
    4130      271,   349,   367,   111,   119,   163,   216,   217,   223,   226,
    4131      230,   231,   236,   239,   240,   242,   261,   262,   266,   267,
    4132      268,   269,   283,   349,   361,   362,   363,   364,   369,   370,
    4133      112,   109,   322,   326,   369,   109,   116,   132,   111,   114,
    4134      119,   163,   277,   277,   115,   134,   116,   132,   109,   116,
    4135      132,   116,   132,   116,   132,   311,   132,   318,   319,   320,
    4136      321,   331,   332,   333,   334,   226,   317,   330,    64,   310,
    4137      111,   311,   348,   349,   311,   311,   172,   134,   109,   311,
    4138      348,   311,   311,   226,   308,   109,   109,   225,   226,   224,
    4139      226,   112,   134,   224,   365,   370,   172,   134,   271,   276,
    4140      216,   231,   322,   326,   172,   134,   293,   226,   236,   132,
    4141      226,   226,   291,    40,   111,   224,   247,   248,   249,   250,
    4142      365,   369,   245,   257,   273,   256,   226,   293,   132,   132,
    4143      304,   134,   139,   270,     3,   135,   206,   207,   221,   223,
    4144      226,   134,   310,   109,   310,   163,   318,   226,   109,   134,
    4145      271,   114,    33,    34,    35,   224,   285,   286,   288,   134,
    4146      129,   131,   290,   134,   227,   233,   234,   271,   314,   315,
    4147      316,   109,   141,   109,   148,   109,   148,   150,   109,   148,
     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,
    41484116     109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
    4149      274,   365,   112,   134,   150,   150,    82,    85,    86,    87,
     4117     272,   363,   112,   134,   150,   150,    82,    85,    86,    87,
    41504118     109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
    41514119     103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
    41524120     121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
    4153      120,   128,   129,    94,    95,   130,   131,   372,   109,   119,
    4154      344,   345,   346,   347,   348,   110,   116,   109,   348,   349,
    4155      109,   348,   349,   134,   109,   224,   367,   112,   134,   111,
    4156      119,   135,   224,   226,   360,   361,   369,   370,   135,   109,
    4157      111,   119,   318,   335,   336,   337,   338,   339,   340,   341,
    4158      342,   343,   349,   350,   351,   352,   353,   354,   355,   119,
    4159      369,   226,   135,   135,   119,   224,   226,   362,   271,   224,
    4160      349,   362,   271,   109,   134,   134,   134,   112,   134,    72,
    4161       80,   111,   113,   140,   273,   277,   278,   279,   280,   281,
    4162      134,   134,   134,   134,   134,   134,   308,   110,   110,   110,
    4163      110,   110,   110,   110,   317,   330,   109,   276,   112,   206,
    4164      134,   308,   168,   275,   168,   275,   308,   111,   206,   310,
    4165      172,   134,   206,   110,   249,   250,   112,   134,   109,   117,
    4166      119,   251,   253,   317,   318,   330,   348,   356,   357,   358,
    4167      359,   115,   248,   116,   132,   116,   132,   273,   114,   116,
    4168      371,   131,   258,   114,   226,   263,   264,   265,   268,   269,
    4169      110,   116,   172,   134,   119,   163,   134,   223,   226,   262,
    4170      361,   369,   302,   303,   109,   119,   335,   110,   116,   372,
    4171      273,   285,   109,   114,   273,   275,   285,   110,   116,   109,
    4172      141,   110,   117,   274,   274,   274,   111,   139,   145,   163,
    4173      275,   274,   112,   134,   110,   116,   110,   109,   119,   356,
     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,
    41744142     110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
    41754143     139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
    41764144     152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
    4177      158,   159,   117,   168,   163,   134,   345,   346,   347,   226,
    4178      344,   311,   311,   163,   275,   134,   270,   119,   134,   224,
    4179      349,   362,   226,   230,   112,   134,   112,   369,   112,   109,
    4180      134,   318,   336,   337,   338,   341,   351,   352,   353,   112,
    4181      134,   226,   335,   339,   350,   109,   311,   354,   372,   311,
    4182      311,   372,   109,   311,   354,   311,   311,   311,   311,   349,
    4183      224,   360,   370,   271,   112,   116,   112,   116,   372,   224,
    4184      362,   372,   259,   260,   261,   262,   259,   259,   271,   163,
    4185      134,   111,   273,   117,   116,   371,   277,    80,   111,   117,
    4186      281,    29,   208,   209,   271,   259,   139,   308,   139,   310,
    4187      109,   348,   349,   109,   348,   349,   141,   349,   172,   263,
     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,
    41884156     110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
    4189      132,   111,   318,   357,   358,   359,   161,   162,   226,   356,
    4190      252,   253,   252,   311,   311,   273,   311,   247,   273,   115,
    4191      162,   257,   135,   135,   139,   221,   135,   135,   259,   109,
    4192      119,   369,   135,   115,   226,   286,   287,   135,   134,   134,
    4193      109,   135,   110,   315,   168,   169,   117,   132,   111,   141,
     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,
    41944162     199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
    41954163     110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
    41964164     135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
    4197      263,   110,   110,   110,   344,   263,   110,   259,   224,   362,
    4198      111,   119,   163,   163,   226,   341,   263,   110,   110,   110,
    4199      110,   110,   110,   110,     7,   226,   335,   339,   350,   134,
    4200      134,   372,   134,   134,   110,   135,   135,   135,   135,   276,
    4201      135,   161,   162,   163,   309,   134,   277,   279,   115,   134,
    4202      210,   273,    40,    41,    43,    46,    47,    48,    49,    50,
     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,
    42034171      51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
    42044172     170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
    4205      197,   211,   307,    29,   135,   131,   276,   134,   134,   110,
    4206      135,   172,   247,   112,   110,   110,   110,   356,   251,   115,
    4207      258,   371,   110,   116,   112,   112,   135,   226,   116,   372,
    4208      289,   110,   285,   214,   216,   224,   297,   298,   299,   300,
    4209      291,   110,   110,   117,   162,   109,   110,   117,   116,   139,
    4210      163,   163,   278,   116,   135,   166,   112,   139,   146,   147,
    4211      163,   145,   135,   146,   161,   165,   135,   109,   348,   349,
    4212      135,   135,   134,   135,   135,   135,   163,   110,   135,   109,
    4213      348,   349,   109,   354,   109,   354,   349,   225,     7,   119,
    4214      135,   163,   263,   263,   262,   266,   266,   267,   116,   116,
    4215      110,   110,   112,    96,   123,   135,   135,   146,   277,   163,
    4216      116,   132,   211,   215,   226,   230,   109,   109,   170,   109,
    4217      109,   132,   139,   132,   139,   119,   139,   169,   109,   172,
    4218      164,   164,   112,   143,   117,   132,   135,   134,   135,   210,
    4219      110,   163,   263,   263,   311,   110,   115,   109,   348,   349,
    4220      115,   134,   110,   134,   135,   308,   115,   134,   135,   135,
    4221      110,   114,   199,   112,   162,   132,   199,   201,   110,   116,
    4222      135,   371,   164,   112,   135,    85,   113,   116,   135,   135,
    4223      112,   135,   110,   134,   110,   110,   112,   112,   112,   135,
    4224      110,   134,   134,   134,   163,   163,   135,   112,   135,   135,
    4225      135,   135,   134,   134,   162,   162,   112,   112,   135,   135,
    4226      273,   226,   168,   168,    47,   168,   134,   132,   132,   168,
    4227      132,   132,   168,    58,    59,    60,   193,   194,   195,   132,
    4228       63,   132,   114,   311,   174,   115,   132,   135,   135,   134,
    4229       96,   268,   269,   110,   298,   116,   132,   116,   132,   115,
    4230      296,   117,   141,   110,   110,   117,   166,   112,   115,   112,
    4231      111,   147,   111,   147,   147,   112,   112,   112,   263,   112,
    4232      263,   263,   263,   135,   135,   112,   112,   110,   110,   112,
    4233      116,    96,   262,    96,   135,   112,   112,   110,   110,   109,
    4234      110,   169,   190,   211,   132,   110,   109,   109,   172,   195,
    4235       58,    59,   163,   144,   170,   110,   110,   263,   114,   134,
    4236      134,   297,   141,   202,   109,   132,   202,   135,   117,   134,
    4237      134,   135,   135,   135,   135,   112,   112,   134,   135,   112,
    4238      170,    44,    45,   114,   180,   181,   182,   168,   170,   135,
    4239      110,   169,   114,   182,    96,   134,    96,   134,   109,   109,
    4240      132,   115,   135,   134,   271,   308,   115,   116,   117,   162,
    4241      110,   112,   163,   146,   146,   110,   110,   110,   110,   266,
    4242       42,   162,   178,   179,   309,   117,   134,   170,   180,   110,
    4243      132,   170,   132,   134,   110,   134,   110,   134,    96,   134,
    4244       96,   134,   132,   110,   297,   141,   139,   203,   110,   132,
    4245      117,   135,   135,   170,    96,   116,   117,   135,   204,   205,
    4246      211,   132,   169,   169,   204,   172,   196,   224,   365,   172,
    4247      196,   110,   134,   110,   134,   115,   110,   116,   163,   112,
    4248      112,   162,   178,   181,   183,   184,   134,   132,   181,   185,
    4249      186,   135,   109,   119,   308,   356,   139,   135,   172,   196,
    4250      172,   196,   109,   132,   139,   170,   175,   115,   181,   211,
    4251      169,    56,   175,   188,   115,   181,   110,   226,   110,   135,
    4252      135,   291,   170,   175,   132,   187,   188,   175,   188,   172,
    4253      172,   110,   110,   110,   187,   135,   135,   172,   172,   135,
    4254      135
     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
    42554222};
    42564223
     
    52135180/* Line 1806 of yacc.c  */
    52145181#line 374 "parser.yy"
    5215     { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
     5182    { (yyval.en) = 0; }
    52165183    break;
    52175184
     
    70647031/* Line 1806 of yacc.c  */
    70657032#line 1440 "parser.yy"
    7066     {
    7067                         typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
    7068                         (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 );
    7069                 }
     7033    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
    70707034    break;
    70717035
     
    70737037
    70747038/* Line 1806 of yacc.c  */
    7075 #line 1445 "parser.yy"
    7076     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     7039#line 1442 "parser.yy"
     7040    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
    70777041    break;
    70787042
     
    70807044
    70817045/* Line 1806 of yacc.c  */
    7082 #line 1447 "parser.yy"
    7083     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }
     7046#line 1444 "parser.yy"
     7047    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    70847048    break;
    70857049
     
    70877051
    70887052/* Line 1806 of yacc.c  */
    7089 #line 1449 "parser.yy"
    7090     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
     7053#line 1446 "parser.yy"
     7054    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    70917055    break;
    70927056
     
    70957059/* Line 1806 of yacc.c  */
    70967060#line 1451 "parser.yy"
    7097     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     7061    { (yyval.aggKey) = DeclarationNode::Struct; }
    70987062    break;
    70997063
     
    71017065
    71027066/* Line 1806 of yacc.c  */
    7103 #line 1456 "parser.yy"
    7104     { (yyval.aggKey) = DeclarationNode::Struct; }
     7067#line 1453 "parser.yy"
     7068    { (yyval.aggKey) = DeclarationNode::Union; }
    71057069    break;
    71067070
     
    71097073/* Line 1806 of yacc.c  */
    71107074#line 1458 "parser.yy"
    7111     { (yyval.aggKey) = DeclarationNode::Union; }
     7075    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    71127076    break;
    71137077
     
    71157079
    71167080/* Line 1806 of yacc.c  */
    7117 #line 1463 "parser.yy"
    7118     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    7119     break;
    7120 
    7121   case 374:
    7122 
    7123 /* Line 1806 of yacc.c  */
    7124 #line 1465 "parser.yy"
     7081#line 1460 "parser.yy"
    71257082    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    71267083    break;
    71277084
    7128   case 376:
    7129 
    7130 /* Line 1806 of yacc.c  */
    7131 #line 1471 "parser.yy"
     7085  case 375:
     7086
     7087/* Line 1806 of yacc.c  */
     7088#line 1466 "parser.yy"
    71327089    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    71337090    break;
    71347091
    7135   case 378:
    7136 
    7137 /* Line 1806 of yacc.c  */
    7138 #line 1474 "parser.yy"
     7092  case 377:
     7093
     7094/* Line 1806 of yacc.c  */
     7095#line 1469 "parser.yy"
    71397096    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    71407097    break;
    71417098
     7099  case 379:
     7100
     7101/* Line 1806 of yacc.c  */
     7102#line 1475 "parser.yy"
     7103    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     7104    break;
     7105
    71427106  case 380:
    71437107
    71447108/* Line 1806 of yacc.c  */
    7145 #line 1480 "parser.yy"
    7146     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     7109#line 1477 "parser.yy"
     7110    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    71477111    break;
    71487112
     
    71507114
    71517115/* Line 1806 of yacc.c  */
    7152 #line 1482 "parser.yy"
    7153     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     7116#line 1479 "parser.yy"
     7117    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    71547118    break;
    71557119
     
    71587122/* Line 1806 of yacc.c  */
    71597123#line 1484 "parser.yy"
    7160     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     7124    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    71617125    break;
    71627126
     
    71647128
    71657129/* Line 1806 of yacc.c  */
    7166 #line 1489 "parser.yy"
    7167     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7130#line 1486 "parser.yy"
     7131    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    71687132    break;
    71697133
     
    71727136/* Line 1806 of yacc.c  */
    71737137#line 1491 "parser.yy"
    7174     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     7138    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    71757139    break;
    71767140
     
    71787142
    71797143/* Line 1806 of yacc.c  */
     7144#line 1493 "parser.yy"
     7145    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     7146    break;
     7147
     7148  case 386:
     7149
     7150/* Line 1806 of yacc.c  */
    71807151#line 1496 "parser.yy"
    7181     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    7182     break;
    7183 
    7184   case 386:
    7185 
    7186 /* Line 1806 of yacc.c  */
    7187 #line 1498 "parser.yy"
    7188     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     7152    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71897153    break;
    71907154
     
    71927156
    71937157/* Line 1806 of yacc.c  */
    7194 #line 1501 "parser.yy"
     7158#line 1499 "parser.yy"
    71957159    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71967160    break;
    71977161
    7198   case 388:
    7199 
    7200 /* Line 1806 of yacc.c  */
    7201 #line 1504 "parser.yy"
    7202     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7162  case 389:
     7163
     7164/* Line 1806 of yacc.c  */
     7165#line 1505 "parser.yy"
     7166    { (yyval.en) = 0; }
    72037167    break;
    72047168
     
    72067170
    72077171/* Line 1806 of yacc.c  */
    7208 #line 1510 "parser.yy"
     7172#line 1507 "parser.yy"
     7173    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     7174    break;
     7175
     7176  case 391:
     7177
     7178/* Line 1806 of yacc.c  */
     7179#line 1512 "parser.yy"
     7180    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     7181    break;
     7182
     7183  case 393:
     7184
     7185/* Line 1806 of yacc.c  */
     7186#line 1521 "parser.yy"
     7187    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     7188    break;
     7189
     7190  case 394:
     7191
     7192/* Line 1806 of yacc.c  */
     7193#line 1523 "parser.yy"
     7194    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
     7195    break;
     7196
     7197  case 395:
     7198
     7199/* Line 1806 of yacc.c  */
     7200#line 1525 "parser.yy"
     7201    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     7202    break;
     7203
     7204  case 396:
     7205
     7206/* Line 1806 of yacc.c  */
     7207#line 1530 "parser.yy"
     7208    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     7209    break;
     7210
     7211  case 397:
     7212
     7213/* Line 1806 of yacc.c  */
     7214#line 1532 "parser.yy"
     7215    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     7216    break;
     7217
     7218  case 398:
     7219
     7220/* Line 1806 of yacc.c  */
     7221#line 1537 "parser.yy"
    72097222    { (yyval.en) = 0; }
    72107223    break;
    72117224
    7212   case 391:
    7213 
    7214 /* Line 1806 of yacc.c  */
    7215 #line 1512 "parser.yy"
    7216     { (yyval.en) = (yyvsp[(1) - (1)].en); }
    7217     break;
    7218 
    7219   case 392:
    7220 
    7221 /* Line 1806 of yacc.c  */
    7222 #line 1517 "parser.yy"
     7225  case 399:
     7226
     7227/* Line 1806 of yacc.c  */
     7228#line 1539 "parser.yy"
    72237229    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    72247230    break;
    72257231
    7226   case 394:
    7227 
    7228 /* Line 1806 of yacc.c  */
    7229 #line 1526 "parser.yy"
    7230     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    7231     break;
    7232 
    7233   case 395:
    7234 
    7235 /* Line 1806 of yacc.c  */
    7236 #line 1528 "parser.yy"
    7237     {
    7238                         typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
    7239                         (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 );
    7240                 }
    7241     break;
    7242 
    7243   case 396:
    7244 
    7245 /* Line 1806 of yacc.c  */
    7246 #line 1533 "parser.yy"
    7247     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    7248     break;
    7249 
    7250   case 397:
    7251 
    7252 /* Line 1806 of yacc.c  */
    7253 #line 1535 "parser.yy"
    7254     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    7255     break;
    7256 
    7257   case 398:
    7258 
    7259 /* Line 1806 of yacc.c  */
    7260 #line 1540 "parser.yy"
    7261     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    7262     break;
    7263 
    7264   case 399:
    7265 
    7266 /* Line 1806 of yacc.c  */
    7267 #line 1542 "parser.yy"
    7268     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    7269     break;
    7270 
    72717232  case 400:
    72727233
    72737234/* Line 1806 of yacc.c  */
    7274 #line 1547 "parser.yy"
    7275     { (yyval.en) = 0; }
    7276     break;
    7277 
    7278   case 401:
    7279 
    7280 /* Line 1806 of yacc.c  */
    7281 #line 1549 "parser.yy"
    7282     { (yyval.en) = (yyvsp[(2) - (2)].en); }
    7283     break;
    7284 
    7285   case 402:
     7235#line 1546 "parser.yy"
     7236    { (yyval.decl) = 0; }
     7237    break;
     7238
     7239  case 404:
     7240
     7241/* Line 1806 of yacc.c  */
     7242#line 1554 "parser.yy"
     7243    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7244    break;
     7245
     7246  case 405:
    72867247
    72877248/* Line 1806 of yacc.c  */
    72887249#line 1556 "parser.yy"
    7289     { (yyval.decl) = 0; }
     7250    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72907251    break;
    72917252
     
    72937254
    72947255/* Line 1806 of yacc.c  */
    7295 #line 1564 "parser.yy"
     7256#line 1558 "parser.yy"
     7257    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7258    break;
     7259
     7260  case 408:
     7261
     7262/* Line 1806 of yacc.c  */
     7263#line 1566 "parser.yy"
    72967264    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72977265    break;
    72987266
    7299   case 407:
    7300 
    7301 /* Line 1806 of yacc.c  */
    7302 #line 1566 "parser.yy"
    7303     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7304     break;
    7305 
    7306   case 408:
     7267  case 409:
    73077268
    73087269/* Line 1806 of yacc.c  */
    73097270#line 1568 "parser.yy"
    7310     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7271    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73117272    break;
    73127273
    73137274  case 410:
     7275
     7276/* Line 1806 of yacc.c  */
     7277#line 1570 "parser.yy"
     7278    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     7279    break;
     7280
     7281  case 412:
    73147282
    73157283/* Line 1806 of yacc.c  */
     
    73187286    break;
    73197287
    7320   case 411:
    7321 
    7322 /* Line 1806 of yacc.c  */
    7323 #line 1578 "parser.yy"
     7288  case 413:
     7289
     7290/* Line 1806 of yacc.c  */
     7291#line 1581 "parser.yy"
     7292    { (yyval.decl) = 0; }
     7293    break;
     7294
     7295  case 416:
     7296
     7297/* Line 1806 of yacc.c  */
     7298#line 1588 "parser.yy"
     7299    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7300    break;
     7301
     7302  case 419:
     7303
     7304/* Line 1806 of yacc.c  */
     7305#line 1595 "parser.yy"
    73247306    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73257307    break;
    73267308
    7327   case 412:
    7328 
    7329 /* Line 1806 of yacc.c  */
    7330 #line 1580 "parser.yy"
    7331     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    7332     break;
    7333 
    7334   case 414:
    7335 
    7336 /* Line 1806 of yacc.c  */
    7337 #line 1586 "parser.yy"
     7309  case 420:
     7310
     7311/* Line 1806 of yacc.c  */
     7312#line 1597 "parser.yy"
    73387313    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73397314    break;
    73407315
    7341   case 415:
    7342 
    7343 /* Line 1806 of yacc.c  */
    7344 #line 1591 "parser.yy"
    7345     { (yyval.decl) = 0; }
    7346     break;
    7347 
    7348   case 418:
    7349 
    7350 /* Line 1806 of yacc.c  */
    7351 #line 1598 "parser.yy"
    7352     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7353     break;
    7354 
    7355   case 421:
    7356 
    7357 /* Line 1806 of yacc.c  */
    7358 #line 1605 "parser.yy"
    7359     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7360     break;
    7361 
    73627316  case 422:
    73637317
    73647318/* Line 1806 of yacc.c  */
    7365 #line 1607 "parser.yy"
    7366     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7319#line 1606 "parser.yy"
     7320    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7321    break;
     7322
     7323  case 423:
     7324
     7325/* Line 1806 of yacc.c  */
     7326#line 1609 "parser.yy"
     7327    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    73677328    break;
    73687329
     
    73707331
    73717332/* Line 1806 of yacc.c  */
    7372 #line 1616 "parser.yy"
    7373     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7374     break;
    7375 
    7376   case 425:
    7377 
    7378 /* Line 1806 of yacc.c  */
    7379 #line 1619 "parser.yy"
    7380     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7381     break;
    7382 
    7383   case 426:
     7333#line 1611 "parser.yy"
     7334    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     7335    break;
     7336
     7337  case 429:
    73847338
    73857339/* Line 1806 of yacc.c  */
    73867340#line 1621 "parser.yy"
    7387     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     7341    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73887342    break;
    73897343
     
    73917345
    73927346/* Line 1806 of yacc.c  */
    7393 #line 1631 "parser.yy"
    7394     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7395     break;
    7396 
    7397   case 433:
    7398 
    7399 /* Line 1806 of yacc.c  */
    7400 #line 1637 "parser.yy"
     7347#line 1627 "parser.yy"
    74017348    {
    74027349                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    74057352    break;
    74067353
    7407   case 434:
    7408 
    7409 /* Line 1806 of yacc.c  */
    7410 #line 1642 "parser.yy"
     7354  case 432:
     7355
     7356/* Line 1806 of yacc.c  */
     7357#line 1632 "parser.yy"
    74117358    {
    74127359                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    74157362    break;
    74167363
     7364  case 434:
     7365
     7366/* Line 1806 of yacc.c  */
     7367#line 1641 "parser.yy"
     7368    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7369    break;
     7370
     7371  case 435:
     7372
     7373/* Line 1806 of yacc.c  */
     7374#line 1650 "parser.yy"
     7375    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     7376    break;
     7377
    74177378  case 436:
    74187379
    74197380/* Line 1806 of yacc.c  */
    7420 #line 1651 "parser.yy"
     7381#line 1652 "parser.yy"
     7382    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     7383    break;
     7384
     7385  case 448:
     7386
     7387/* Line 1806 of yacc.c  */
     7388#line 1677 "parser.yy"
    74217389    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    74227390    break;
    74237391
    7424   case 437:
    7425 
    7426 /* Line 1806 of yacc.c  */
    7427 #line 1660 "parser.yy"
    7428     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    7429     break;
    7430 
    7431   case 438:
    7432 
    7433 /* Line 1806 of yacc.c  */
    7434 #line 1662 "parser.yy"
    7435     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    7436     break;
    7437 
    7438   case 450:
    7439 
    7440 /* Line 1806 of yacc.c  */
    7441 #line 1687 "parser.yy"
     7392  case 452:
     7393
     7394/* Line 1806 of yacc.c  */
     7395#line 1685 "parser.yy"
    74427396    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    74437397    break;
    74447398
     7399  case 453:
     7400
     7401/* Line 1806 of yacc.c  */
     7402#line 1690 "parser.yy"
     7403    { (yyval.in) = 0; }
     7404    break;
     7405
    74457406  case 454:
    74467407
    74477408/* Line 1806 of yacc.c  */
    7448 #line 1695 "parser.yy"
    7449     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7409#line 1692 "parser.yy"
     7410    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    74507411    break;
    74517412
     
    74537414
    74547415/* Line 1806 of yacc.c  */
    7455 #line 1700 "parser.yy"
     7416#line 1694 "parser.yy"
     7417    { (yyval.in) = (yyvsp[(2) - (2)].in); }
     7418    break;
     7419
     7420  case 456:
     7421
     7422/* Line 1806 of yacc.c  */
     7423#line 1698 "parser.yy"
     7424    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     7425    break;
     7426
     7427  case 457:
     7428
     7429/* Line 1806 of yacc.c  */
     7430#line 1699 "parser.yy"
     7431    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     7432    break;
     7433
     7434  case 458:
     7435
     7436/* Line 1806 of yacc.c  */
     7437#line 1704 "parser.yy"
    74567438    { (yyval.in) = 0; }
    74577439    break;
    74587440
    7459   case 456:
    7460 
    7461 /* Line 1806 of yacc.c  */
    7462 #line 1702 "parser.yy"
    7463     { (yyval.in) = (yyvsp[(2) - (2)].in); }
    7464     break;
    7465 
    7466   case 457:
    7467 
    7468 /* Line 1806 of yacc.c  */
    7469 #line 1704 "parser.yy"
    7470     { (yyval.in) = (yyvsp[(2) - (2)].in); }
    7471     break;
    7472 
    7473   case 458:
    7474 
    7475 /* Line 1806 of yacc.c  */
    7476 #line 1708 "parser.yy"
    7477     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    7478     break;
    7479 
    7480   case 459:
     7441  case 460:
     7442
     7443/* Line 1806 of yacc.c  */
     7444#line 1706 "parser.yy"
     7445    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     7446    break;
     7447
     7448  case 461:
     7449
     7450/* Line 1806 of yacc.c  */
     7451#line 1707 "parser.yy"
     7452    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     7453    break;
     7454
     7455  case 462:
    74817456
    74827457/* Line 1806 of yacc.c  */
    74837458#line 1709 "parser.yy"
    7484     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    7485     break;
    7486 
    7487   case 460:
    7488 
    7489 /* Line 1806 of yacc.c  */
    7490 #line 1714 "parser.yy"
    7491     { (yyval.in) = 0; }
    7492     break;
    7493 
    7494   case 462:
    7495 
    7496 /* Line 1806 of yacc.c  */
    7497 #line 1716 "parser.yy"
    7498     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    7499     break;
    7500 
    7501   case 463:
    7502 
    7503 /* Line 1806 of yacc.c  */
    7504 #line 1717 "parser.yy"
    7505     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     7459    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    75067460    break;
    75077461
     
    75097463
    75107464/* Line 1806 of yacc.c  */
    7511 #line 1719 "parser.yy"
    7512     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     7465#line 1725 "parser.yy"
     7466    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    75137467    break;
    75147468
     
    75167470
    75177471/* Line 1806 of yacc.c  */
    7518 #line 1735 "parser.yy"
    7519     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     7472#line 1731 "parser.yy"
     7473    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     7474    break;
     7475
     7476  case 467:
     7477
     7478/* Line 1806 of yacc.c  */
     7479#line 1739 "parser.yy"
     7480    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    75207481    break;
    75217482
     
    75247485/* Line 1806 of yacc.c  */
    75257486#line 1741 "parser.yy"
    7526     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     7487    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    75277488    break;
    75287489
     
    75307491
    75317492/* Line 1806 of yacc.c  */
    7532 #line 1749 "parser.yy"
    7533     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     7493#line 1744 "parser.yy"
     7494    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    75347495    break;
    75357496
     
    75377498
    75387499/* Line 1806 of yacc.c  */
    7539 #line 1751 "parser.yy"
    7540     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     7500#line 1746 "parser.yy"
     7501    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    75417502    break;
    75427503
     
    75447505
    75457506/* Line 1806 of yacc.c  */
    7546 #line 1754 "parser.yy"
    7547     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     7507#line 1748 "parser.yy"
     7508    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    75487509    break;
    75497510
     
    75517512
    75527513/* Line 1806 of yacc.c  */
    7553 #line 1756 "parser.yy"
    7554     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    7555     break;
    7556 
    7557   case 473:
    7558 
    7559 /* Line 1806 of yacc.c  */
    7560 #line 1758 "parser.yy"
    7561     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     7514#line 1750 "parser.yy"
     7515    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    75627516    break;
    75637517
     
    75657519
    75667520/* Line 1806 of yacc.c  */
    7567 #line 1760 "parser.yy"
    7568     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     7521#line 1774 "parser.yy"
     7522    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     7523    break;
     7524
     7525  case 475:
     7526
     7527/* Line 1806 of yacc.c  */
     7528#line 1776 "parser.yy"
     7529    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    75697530    break;
    75707531
    75717532  case 476:
     7533
     7534/* Line 1806 of yacc.c  */
     7535#line 1778 "parser.yy"
     7536    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     7537    break;
     7538
     7539  case 478:
    75727540
    75737541/* Line 1806 of yacc.c  */
     
    75767544    break;
    75777545
    7578   case 477:
     7546  case 479:
    75797547
    75807548/* Line 1806 of yacc.c  */
     
    75837551    break;
    75847552
    7585   case 478:
    7586 
    7587 /* Line 1806 of yacc.c  */
    7588 #line 1788 "parser.yy"
    7589     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    7590     break;
    7591 
    75927553  case 480:
    75937554
    75947555/* Line 1806 of yacc.c  */
    7595 #line 1794 "parser.yy"
    7596     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7597     break;
    7598 
    7599   case 481:
    7600 
    7601 /* Line 1806 of yacc.c  */
    7602 #line 1796 "parser.yy"
    7603     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7556#line 1791 "parser.yy"
     7557    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    76047558    break;
    76057559
     
    76077561
    76087562/* Line 1806 of yacc.c  */
    7609 #line 1801 "parser.yy"
    7610     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     7563#line 1797 "parser.yy"
     7564    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     7565    break;
     7566
     7567  case 483:
     7568
     7569/* Line 1806 of yacc.c  */
     7570#line 1802 "parser.yy"
     7571    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    76117572    break;
    76127573
     
    76147575
    76157576/* Line 1806 of yacc.c  */
    7616 #line 1807 "parser.yy"
    7617     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    7618     break;
    7619 
    7620   case 485:
     7577#line 1804 "parser.yy"
     7578    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     7579    break;
     7580
     7581  case 486:
     7582
     7583/* Line 1806 of yacc.c  */
     7584#line 1810 "parser.yy"
     7585    { (yyval.tclass) = DeclarationNode::Type; }
     7586    break;
     7587
     7588  case 487:
    76217589
    76227590/* Line 1806 of yacc.c  */
    76237591#line 1812 "parser.yy"
    7624     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    7625     break;
    7626 
    7627   case 486:
     7592    { (yyval.tclass) = DeclarationNode::Ftype; }
     7593    break;
     7594
     7595  case 488:
    76287596
    76297597/* Line 1806 of yacc.c  */
    76307598#line 1814 "parser.yy"
    7631     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    7632     break;
    7633 
    7634   case 488:
    7635 
    7636 /* Line 1806 of yacc.c  */
    7637 #line 1820 "parser.yy"
    7638     { (yyval.tclass) = DeclarationNode::Type; }
     7599    { (yyval.tclass) = DeclarationNode::Dtype; }
    76397600    break;
    76407601
     
    76427603
    76437604/* Line 1806 of yacc.c  */
    7644 #line 1822 "parser.yy"
    7645     { (yyval.tclass) = DeclarationNode::Ftype; }
     7605#line 1819 "parser.yy"
     7606    { (yyval.decl) = 0; }
    76467607    break;
    76477608
     
    76497610
    76507611/* Line 1806 of yacc.c  */
    7651 #line 1824 "parser.yy"
    7652     { (yyval.tclass) = DeclarationNode::Dtype; }
     7612#line 1821 "parser.yy"
     7613    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    76537614    break;
    76547615
     
    76567617
    76577618/* Line 1806 of yacc.c  */
    7658 #line 1829 "parser.yy"
    7659     { (yyval.decl) = 0; }
    7660     break;
    7661 
    7662   case 492:
    7663 
    7664 /* Line 1806 of yacc.c  */
    7665 #line 1831 "parser.yy"
    7666     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    7667     break;
    7668 
    7669   case 493:
    7670 
    7671 /* Line 1806 of yacc.c  */
    7672 #line 1836 "parser.yy"
     7619#line 1826 "parser.yy"
    76737620    {
    76747621                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    76777624    break;
    76787625
     7626  case 492:
     7627
     7628/* Line 1806 of yacc.c  */
     7629#line 1831 "parser.yy"
     7630    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     7631    break;
     7632
     7633  case 493:
     7634
     7635/* Line 1806 of yacc.c  */
     7636#line 1833 "parser.yy"
     7637    { (yyval.decl) = 0; }
     7638    break;
     7639
    76797640  case 494:
    76807641
    76817642/* Line 1806 of yacc.c  */
     7643#line 1838 "parser.yy"
     7644    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     7645    break;
     7646
     7647  case 496:
     7648
     7649/* Line 1806 of yacc.c  */
    76827650#line 1841 "parser.yy"
    7683     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    7684     break;
    7685 
    7686   case 495:
     7651    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     7652    break;
     7653
     7654  case 497:
    76877655
    76887656/* Line 1806 of yacc.c  */
    76897657#line 1843 "parser.yy"
    7690     { (yyval.decl) = 0; }
    7691     break;
    7692 
    7693   case 496:
     7658    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     7659    break;
     7660
     7661  case 498:
    76947662
    76957663/* Line 1806 of yacc.c  */
    76967664#line 1848 "parser.yy"
    7697     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    7698     break;
    7699 
    7700   case 498:
    7701 
    7702 /* Line 1806 of yacc.c  */
    7703 #line 1851 "parser.yy"
    7704     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     7665    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    77057666    break;
    77067667
     
    77087669
    77097670/* Line 1806 of yacc.c  */
    7710 #line 1853 "parser.yy"
    7711     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     7671#line 1850 "parser.yy"
     7672    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    77127673    break;
    77137674
     
    77157676
    77167677/* Line 1806 of yacc.c  */
    7717 #line 1858 "parser.yy"
    7718     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     7678#line 1852 "parser.yy"
     7679    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    77197680    break;
    77207681
     
    77227683
    77237684/* Line 1806 of yacc.c  */
    7724 #line 1860 "parser.yy"
    7725     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     7685#line 1857 "parser.yy"
     7686    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    77267687    break;
    77277688
     
    77297690
    77307691/* Line 1806 of yacc.c  */
    7731 #line 1862 "parser.yy"
    7732     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     7692#line 1859 "parser.yy"
     7693    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    77337694    break;
    77347695
     
    77367697
    77377698/* Line 1806 of yacc.c  */
    7738 #line 1867 "parser.yy"
    7739     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    7740     break;
    7741 
    7742   case 504:
    7743 
    7744 /* Line 1806 of yacc.c  */
    7745 #line 1869 "parser.yy"
    7746     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    7747     break;
    7748 
    7749   case 505:
    7750 
    7751 /* Line 1806 of yacc.c  */
    7752 #line 1874 "parser.yy"
     7699#line 1864 "parser.yy"
    77537700    {
    77547701                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    77577704    break;
    77587705
    7759   case 506:
    7760 
    7761 /* Line 1806 of yacc.c  */
    7762 #line 1879 "parser.yy"
     7706  case 504:
     7707
     7708/* Line 1806 of yacc.c  */
     7709#line 1869 "parser.yy"
    77637710    {
    77647711                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    77677714    break;
    77687715
    7769   case 507:
    7770 
    7771 /* Line 1806 of yacc.c  */
    7772 #line 1887 "parser.yy"
     7716  case 505:
     7717
     7718/* Line 1806 of yacc.c  */
     7719#line 1877 "parser.yy"
    77737720    {
    77747721                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    77777724    break;
    77787725
    7779   case 508:
    7780 
    7781 /* Line 1806 of yacc.c  */
    7782 #line 1892 "parser.yy"
     7726  case 506:
     7727
     7728/* Line 1806 of yacc.c  */
     7729#line 1882 "parser.yy"
    77837730    {
    77847731                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    77877734    break;
    77887735
    7789   case 509:
    7790 
    7791 /* Line 1806 of yacc.c  */
    7792 #line 1897 "parser.yy"
     7736  case 507:
     7737
     7738/* Line 1806 of yacc.c  */
     7739#line 1887 "parser.yy"
    77937740    {
    77947741                        typedefTable.leaveTrait();
     
    77987745    break;
    77997746
    7800   case 511:
     7747  case 509:
     7748
     7749/* Line 1806 of yacc.c  */
     7750#line 1897 "parser.yy"
     7751    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     7752    break;
     7753
     7754  case 512:
    78017755
    78027756/* Line 1806 of yacc.c  */
    78037757#line 1907 "parser.yy"
    7804     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    7805     break;
    7806 
    7807   case 514:
    7808 
    7809 /* Line 1806 of yacc.c  */
    7810 #line 1917 "parser.yy"
    78117758    {
    78127759                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78157762    break;
    78167763
    7817   case 515:
    7818 
    7819 /* Line 1806 of yacc.c  */
    7820 #line 1922 "parser.yy"
     7764  case 513:
     7765
     7766/* Line 1806 of yacc.c  */
     7767#line 1912 "parser.yy"
    78217768    {
    78227769                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78257772    break;
    78267773
    7827   case 516:
    7828 
    7829 /* Line 1806 of yacc.c  */
    7830 #line 1927 "parser.yy"
     7774  case 514:
     7775
     7776/* Line 1806 of yacc.c  */
     7777#line 1917 "parser.yy"
    78317778    {
    78327779                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    78357782    break;
    78367783
    7837   case 517:
    7838 
    7839 /* Line 1806 of yacc.c  */
    7840 #line 1935 "parser.yy"
     7784  case 515:
     7785
     7786/* Line 1806 of yacc.c  */
     7787#line 1925 "parser.yy"
    78417788    {
    78427789                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78457792    break;
    78467793
    7847   case 518:
    7848 
    7849 /* Line 1806 of yacc.c  */
    7850 #line 1940 "parser.yy"
     7794  case 516:
     7795
     7796/* Line 1806 of yacc.c  */
     7797#line 1930 "parser.yy"
    78517798    {
    78527799                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78557802    break;
    78567803
    7857   case 519:
    7858 
    7859 /* Line 1806 of yacc.c  */
    7860 #line 1950 "parser.yy"
     7804  case 517:
     7805
     7806/* Line 1806 of yacc.c  */
     7807#line 1940 "parser.yy"
    78617808    {}
    78627809    break;
    78637810
    7864   case 520:
    7865 
    7866 /* Line 1806 of yacc.c  */
    7867 #line 1952 "parser.yy"
     7811  case 518:
     7812
     7813/* Line 1806 of yacc.c  */
     7814#line 1942 "parser.yy"
    78687815    {
    78697816                        if ( theTree ) {
     
    78757822    break;
    78767823
    7877   case 522:
    7878 
    7879 /* Line 1806 of yacc.c  */
    7880 #line 1964 "parser.yy"
     7824  case 520:
     7825
     7826/* Line 1806 of yacc.c  */
     7827#line 1954 "parser.yy"
    78817828    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    78827829    break;
    78837830
    7884   case 523:
     7831  case 521:
     7832
     7833/* Line 1806 of yacc.c  */
     7834#line 1959 "parser.yy"
     7835    { (yyval.decl) = 0; }
     7836    break;
     7837
     7838  case 525:
     7839
     7840/* Line 1806 of yacc.c  */
     7841#line 1967 "parser.yy"
     7842    {}
     7843    break;
     7844
     7845  case 526:
    78857846
    78867847/* Line 1806 of yacc.c  */
    78877848#line 1969 "parser.yy"
    7888     { (yyval.decl) = 0; }
    7889     break;
    7890 
    7891   case 527:
    7892 
    7893 /* Line 1806 of yacc.c  */
    7894 #line 1977 "parser.yy"
    7895     {}
    7896     break;
    7897 
    7898   case 528:
    7899 
    7900 /* Line 1806 of yacc.c  */
    7901 #line 1979 "parser.yy"
    79027849    {
    79037850                        linkageStack.push( linkage );
     
    79067853    break;
    79077854
    7908   case 529:
    7909 
    7910 /* Line 1806 of yacc.c  */
    7911 #line 1984 "parser.yy"
     7855  case 527:
     7856
     7857/* Line 1806 of yacc.c  */
     7858#line 1974 "parser.yy"
    79127859    {
    79137860                        linkage = linkageStack.top();
     
    79177864    break;
    79187865
     7866  case 528:
     7867
     7868/* Line 1806 of yacc.c  */
     7869#line 1980 "parser.yy"
     7870    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     7871    break;
     7872
    79197873  case 530:
    79207874
    79217875/* Line 1806 of yacc.c  */
    79227876#line 1990 "parser.yy"
    7923     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    7924     break;
    7925 
    7926   case 532:
    7927 
    7928 /* Line 1806 of yacc.c  */
    7929 #line 2000 "parser.yy"
    79307877    {
    79317878                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79357882    break;
    79367883
    7937   case 533:
    7938 
    7939 /* Line 1806 of yacc.c  */
    7940 #line 2006 "parser.yy"
     7884  case 531:
     7885
     7886/* Line 1806 of yacc.c  */
     7887#line 1996 "parser.yy"
    79417888    {
    79427889                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79467893    break;
    79477894
    7948   case 534:
    7949 
    7950 /* Line 1806 of yacc.c  */
    7951 #line 2015 "parser.yy"
     7895  case 532:
     7896
     7897/* Line 1806 of yacc.c  */
     7898#line 2005 "parser.yy"
    79527899    {
    79537900                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79577904    break;
    79587905
    7959   case 535:
    7960 
    7961 /* Line 1806 of yacc.c  */
    7962 #line 2021 "parser.yy"
     7906  case 533:
     7907
     7908/* Line 1806 of yacc.c  */
     7909#line 2011 "parser.yy"
    79637910    {
    79647911                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79687915    break;
    79697916
    7970   case 536:
    7971 
    7972 /* Line 1806 of yacc.c  */
    7973 #line 2027 "parser.yy"
     7917  case 534:
     7918
     7919/* Line 1806 of yacc.c  */
     7920#line 2017 "parser.yy"
    79747921    {
    79757922                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79797926    break;
    79807927
    7981   case 537:
    7982 
    7983 /* Line 1806 of yacc.c  */
    7984 #line 2033 "parser.yy"
     7928  case 535:
     7929
     7930/* Line 1806 of yacc.c  */
     7931#line 2023 "parser.yy"
    79857932    {
    79867933                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79907937    break;
    79917938
    7992   case 538:
    7993 
    7994 /* Line 1806 of yacc.c  */
    7995 #line 2039 "parser.yy"
     7939  case 536:
     7940
     7941/* Line 1806 of yacc.c  */
     7942#line 2029 "parser.yy"
    79967943    {
    79977944                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80017948    break;
    80027949
    8003   case 539:
    8004 
    8005 /* Line 1806 of yacc.c  */
    8006 #line 2047 "parser.yy"
     7950  case 537:
     7951
     7952/* Line 1806 of yacc.c  */
     7953#line 2037 "parser.yy"
    80077954    {
    80087955                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80127959    break;
    80137960
    8014   case 540:
    8015 
    8016 /* Line 1806 of yacc.c  */
    8017 #line 2053 "parser.yy"
     7961  case 538:
     7962
     7963/* Line 1806 of yacc.c  */
     7964#line 2043 "parser.yy"
    80187965    {
    80197966                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80237970    break;
    80247971
    8025   case 541:
    8026 
    8027 /* Line 1806 of yacc.c  */
    8028 #line 2061 "parser.yy"
     7972  case 539:
     7973
     7974/* Line 1806 of yacc.c  */
     7975#line 2051 "parser.yy"
    80297976    {
    80307977                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80347981    break;
    80357982
    8036   case 542:
    8037 
    8038 /* Line 1806 of yacc.c  */
    8039 #line 2067 "parser.yy"
     7983  case 540:
     7984
     7985/* Line 1806 of yacc.c  */
     7986#line 2057 "parser.yy"
    80407987    {
    80417988                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80457992    break;
    80467993
    8047   case 546:
     7994  case 544:
     7995
     7996/* Line 1806 of yacc.c  */
     7997#line 2072 "parser.yy"
     7998    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     7999    break;
     8000
     8001  case 547:
    80488002
    80498003/* Line 1806 of yacc.c  */
    80508004#line 2082 "parser.yy"
    8051     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    8052     break;
    8053 
    8054   case 549:
    8055 
    8056 /* Line 1806 of yacc.c  */
    8057 #line 2092 "parser.yy"
    80588005    { (yyval.decl) = 0; }
    80598006    break;
    80608007
    8061   case 552:
    8062 
    8063 /* Line 1806 of yacc.c  */
    8064 #line 2099 "parser.yy"
     8008  case 550:
     8009
     8010/* Line 1806 of yacc.c  */
     8011#line 2089 "parser.yy"
    80658012    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    80668013    break;
    80678014
    8068   case 553:
    8069 
    8070 /* Line 1806 of yacc.c  */
    8071 #line 2105 "parser.yy"
     8015  case 551:
     8016
     8017/* Line 1806 of yacc.c  */
     8018#line 2095 "parser.yy"
    80728019    { (yyval.decl) = 0; }
    80738020    break;
    80748021
     8022  case 557:
     8023
     8024/* Line 1806 of yacc.c  */
     8025#line 2110 "parser.yy"
     8026    {}
     8027    break;
     8028
     8029  case 558:
     8030
     8031/* Line 1806 of yacc.c  */
     8032#line 2111 "parser.yy"
     8033    {}
     8034    break;
     8035
    80758036  case 559:
    80768037
    80778038/* Line 1806 of yacc.c  */
    8078 #line 2120 "parser.yy"
     8039#line 2112 "parser.yy"
    80798040    {}
    80808041    break;
     
    80838044
    80848045/* Line 1806 of yacc.c  */
    8085 #line 2121 "parser.yy"
     8046#line 2113 "parser.yy"
    80868047    {}
    80878048    break;
     
    80908051
    80918052/* Line 1806 of yacc.c  */
    8092 #line 2122 "parser.yy"
    8093     {}
    8094     break;
    8095 
    8096   case 562:
    8097 
    8098 /* Line 1806 of yacc.c  */
    8099 #line 2123 "parser.yy"
    8100     {}
     8053#line 2148 "parser.yy"
     8054    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81018055    break;
    81028056
     
    81048058
    81058059/* Line 1806 of yacc.c  */
     8060#line 2151 "parser.yy"
     8061    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8062    break;
     8063
     8064  case 564:
     8065
     8066/* Line 1806 of yacc.c  */
     8067#line 2153 "parser.yy"
     8068    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8069    break;
     8070
     8071  case 565:
     8072
     8073/* Line 1806 of yacc.c  */
    81068074#line 2158 "parser.yy"
    8107     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8108     break;
    8109 
    8110   case 565:
    8111 
    8112 /* Line 1806 of yacc.c  */
    8113 #line 2161 "parser.yy"
    8114     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8115     break;
    8116 
    8117   case 566:
    8118 
    8119 /* Line 1806 of yacc.c  */
    8120 #line 2163 "parser.yy"
    8121     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8122     break;
    8123 
    8124   case 567:
    8125 
    8126 /* Line 1806 of yacc.c  */
    8127 #line 2168 "parser.yy"
    81288075    {
    81298076                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    81328079    break;
    81338080
     8081  case 566:
     8082
     8083/* Line 1806 of yacc.c  */
     8084#line 2163 "parser.yy"
     8085    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8086    break;
     8087
     8088  case 567:
     8089
     8090/* Line 1806 of yacc.c  */
     8091#line 2168 "parser.yy"
     8092    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8093    break;
     8094
    81348095  case 568:
    81358096
    81368097/* Line 1806 of yacc.c  */
    8137 #line 2173 "parser.yy"
     8098#line 2170 "parser.yy"
     8099    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8100    break;
     8101
     8102  case 569:
     8103
     8104/* Line 1806 of yacc.c  */
     8105#line 2172 "parser.yy"
    81388106    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81398107    break;
    81408108
    8141   case 569:
    8142 
    8143 /* Line 1806 of yacc.c  */
    8144 #line 2178 "parser.yy"
     8109  case 570:
     8110
     8111/* Line 1806 of yacc.c  */
     8112#line 2177 "parser.yy"
     8113    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8114    break;
     8115
     8116  case 571:
     8117
     8118/* Line 1806 of yacc.c  */
     8119#line 2179 "parser.yy"
     8120    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8121    break;
     8122
     8123  case 572:
     8124
     8125/* Line 1806 of yacc.c  */
     8126#line 2181 "parser.yy"
     8127    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8128    break;
     8129
     8130  case 573:
     8131
     8132/* Line 1806 of yacc.c  */
     8133#line 2183 "parser.yy"
     8134    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8135    break;
     8136
     8137  case 574:
     8138
     8139/* Line 1806 of yacc.c  */
     8140#line 2188 "parser.yy"
     8141    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8142    break;
     8143
     8144  case 575:
     8145
     8146/* Line 1806 of yacc.c  */
     8147#line 2190 "parser.yy"
     8148    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8149    break;
     8150
     8151  case 576:
     8152
     8153/* Line 1806 of yacc.c  */
     8154#line 2200 "parser.yy"
     8155    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8156    break;
     8157
     8158  case 578:
     8159
     8160/* Line 1806 of yacc.c  */
     8161#line 2203 "parser.yy"
     8162    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8163    break;
     8164
     8165  case 579:
     8166
     8167/* Line 1806 of yacc.c  */
     8168#line 2208 "parser.yy"
     8169    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8170    break;
     8171
     8172  case 580:
     8173
     8174/* Line 1806 of yacc.c  */
     8175#line 2210 "parser.yy"
     8176    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8177    break;
     8178
     8179  case 581:
     8180
     8181/* Line 1806 of yacc.c  */
     8182#line 2212 "parser.yy"
     8183    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8184    break;
     8185
     8186  case 582:
     8187
     8188/* Line 1806 of yacc.c  */
     8189#line 2217 "parser.yy"
    81458190    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81468191    break;
    81478192
    8148   case 570:
    8149 
    8150 /* Line 1806 of yacc.c  */
    8151 #line 2180 "parser.yy"
     8193  case 583:
     8194
     8195/* Line 1806 of yacc.c  */
     8196#line 2219 "parser.yy"
    81528197    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81538198    break;
    81548199
    8155   case 571:
    8156 
    8157 /* Line 1806 of yacc.c  */
    8158 #line 2182 "parser.yy"
     8200  case 584:
     8201
     8202/* Line 1806 of yacc.c  */
     8203#line 2221 "parser.yy"
    81598204    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81608205    break;
    81618206
    8162   case 572:
    8163 
    8164 /* Line 1806 of yacc.c  */
    8165 #line 2187 "parser.yy"
     8207  case 585:
     8208
     8209/* Line 1806 of yacc.c  */
     8210#line 2226 "parser.yy"
     8211    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8212    break;
     8213
     8214  case 586:
     8215
     8216/* Line 1806 of yacc.c  */
     8217#line 2228 "parser.yy"
     8218    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8219    break;
     8220
     8221  case 587:
     8222
     8223/* Line 1806 of yacc.c  */
     8224#line 2230 "parser.yy"
     8225    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8226    break;
     8227
     8228  case 591:
     8229
     8230/* Line 1806 of yacc.c  */
     8231#line 2245 "parser.yy"
     8232    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     8233    break;
     8234
     8235  case 592:
     8236
     8237/* Line 1806 of yacc.c  */
     8238#line 2247 "parser.yy"
     8239    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     8240    break;
     8241
     8242  case 593:
     8243
     8244/* Line 1806 of yacc.c  */
     8245#line 2249 "parser.yy"
     8246    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8247    break;
     8248
     8249  case 594:
     8250
     8251/* Line 1806 of yacc.c  */
     8252#line 2254 "parser.yy"
     8253    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8254    break;
     8255
     8256  case 595:
     8257
     8258/* Line 1806 of yacc.c  */
     8259#line 2256 "parser.yy"
     8260    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8261    break;
     8262
     8263  case 596:
     8264
     8265/* Line 1806 of yacc.c  */
     8266#line 2258 "parser.yy"
     8267    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8268    break;
     8269
     8270  case 597:
     8271
     8272/* Line 1806 of yacc.c  */
     8273#line 2263 "parser.yy"
     8274    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8275    break;
     8276
     8277  case 598:
     8278
     8279/* Line 1806 of yacc.c  */
     8280#line 2265 "parser.yy"
     8281    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8282    break;
     8283
     8284  case 599:
     8285
     8286/* Line 1806 of yacc.c  */
     8287#line 2267 "parser.yy"
     8288    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8289    break;
     8290
     8291  case 600:
     8292
     8293/* Line 1806 of yacc.c  */
     8294#line 2282 "parser.yy"
     8295    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8296    break;
     8297
     8298  case 602:
     8299
     8300/* Line 1806 of yacc.c  */
     8301#line 2285 "parser.yy"
     8302    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8303    break;
     8304
     8305  case 603:
     8306
     8307/* Line 1806 of yacc.c  */
     8308#line 2287 "parser.yy"
     8309    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8310    break;
     8311
     8312  case 605:
     8313
     8314/* Line 1806 of yacc.c  */
     8315#line 2293 "parser.yy"
     8316    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8317    break;
     8318
     8319  case 606:
     8320
     8321/* Line 1806 of yacc.c  */
     8322#line 2298 "parser.yy"
     8323    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8324    break;
     8325
     8326  case 607:
     8327
     8328/* Line 1806 of yacc.c  */
     8329#line 2300 "parser.yy"
     8330    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8331    break;
     8332
     8333  case 608:
     8334
     8335/* Line 1806 of yacc.c  */
     8336#line 2302 "parser.yy"
     8337    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8338    break;
     8339
     8340  case 609:
     8341
     8342/* Line 1806 of yacc.c  */
     8343#line 2307 "parser.yy"
    81668344    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    81678345    break;
    81688346
    8169   case 573:
    8170 
    8171 /* Line 1806 of yacc.c  */
    8172 #line 2189 "parser.yy"
     8347  case 610:
     8348
     8349/* Line 1806 of yacc.c  */
     8350#line 2309 "parser.yy"
    81738351    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81748352    break;
    81758353
    8176   case 574:
    8177 
    8178 /* Line 1806 of yacc.c  */
    8179 #line 2191 "parser.yy"
     8354  case 611:
     8355
     8356/* Line 1806 of yacc.c  */
     8357#line 2311 "parser.yy"
    81808358    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81818359    break;
    81828360
    8183   case 575:
    8184 
    8185 /* Line 1806 of yacc.c  */
    8186 #line 2193 "parser.yy"
     8361  case 612:
     8362
     8363/* Line 1806 of yacc.c  */
     8364#line 2313 "parser.yy"
    81878365    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81888366    break;
    81898367
    8190   case 576:
    8191 
    8192 /* Line 1806 of yacc.c  */
    8193 #line 2198 "parser.yy"
     8368  case 613:
     8369
     8370/* Line 1806 of yacc.c  */
     8371#line 2318 "parser.yy"
     8372    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8373    break;
     8374
     8375  case 614:
     8376
     8377/* Line 1806 of yacc.c  */
     8378#line 2320 "parser.yy"
    81948379    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81958380    break;
    81968381
    8197   case 577:
    8198 
    8199 /* Line 1806 of yacc.c  */
    8200 #line 2200 "parser.yy"
     8382  case 615:
     8383
     8384/* Line 1806 of yacc.c  */
     8385#line 2322 "parser.yy"
    82018386    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82028387    break;
    82038388
    8204   case 578:
    8205 
    8206 /* Line 1806 of yacc.c  */
    8207 #line 2210 "parser.yy"
     8389  case 616:
     8390
     8391/* Line 1806 of yacc.c  */
     8392#line 2332 "parser.yy"
    82088393    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82098394    break;
    82108395
    8211   case 580:
    8212 
    8213 /* Line 1806 of yacc.c  */
    8214 #line 2213 "parser.yy"
     8396  case 618:
     8397
     8398/* Line 1806 of yacc.c  */
     8399#line 2335 "parser.yy"
    82158400    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82168401    break;
    82178402
    8218   case 581:
    8219 
    8220 /* Line 1806 of yacc.c  */
    8221 #line 2218 "parser.yy"
     8403  case 619:
     8404
     8405/* Line 1806 of yacc.c  */
     8406#line 2337 "parser.yy"
     8407    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8408    break;
     8409
     8410  case 620:
     8411
     8412/* Line 1806 of yacc.c  */
     8413#line 2342 "parser.yy"
     8414    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8415    break;
     8416
     8417  case 621:
     8418
     8419/* Line 1806 of yacc.c  */
     8420#line 2344 "parser.yy"
     8421    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8422    break;
     8423
     8424  case 622:
     8425
     8426/* Line 1806 of yacc.c  */
     8427#line 2346 "parser.yy"
     8428    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8429    break;
     8430
     8431  case 623:
     8432
     8433/* Line 1806 of yacc.c  */
     8434#line 2351 "parser.yy"
     8435    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8436    break;
     8437
     8438  case 624:
     8439
     8440/* Line 1806 of yacc.c  */
     8441#line 2353 "parser.yy"
     8442    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8443    break;
     8444
     8445  case 625:
     8446
     8447/* Line 1806 of yacc.c  */
     8448#line 2355 "parser.yy"
     8449    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8450    break;
     8451
     8452  case 626:
     8453
     8454/* Line 1806 of yacc.c  */
     8455#line 2357 "parser.yy"
     8456    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8457    break;
     8458
     8459  case 627:
     8460
     8461/* Line 1806 of yacc.c  */
     8462#line 2362 "parser.yy"
    82228463    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    82238464    break;
    82248465
    8225   case 582:
    8226 
    8227 /* Line 1806 of yacc.c  */
    8228 #line 2220 "parser.yy"
     8466  case 628:
     8467
     8468/* Line 1806 of yacc.c  */
     8469#line 2364 "parser.yy"
    82298470    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    82308471    break;
    82318472
    8232   case 583:
    8233 
    8234 /* Line 1806 of yacc.c  */
    8235 #line 2222 "parser.yy"
     8473  case 629:
     8474
     8475/* Line 1806 of yacc.c  */
     8476#line 2366 "parser.yy"
    82368477    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82378478    break;
    82388479
    8239   case 584:
    8240 
    8241 /* Line 1806 of yacc.c  */
    8242 #line 2227 "parser.yy"
    8243     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8244     break;
    8245 
    8246   case 585:
    8247 
    8248 /* Line 1806 of yacc.c  */
    8249 #line 2229 "parser.yy"
    8250     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8251     break;
    8252 
    8253   case 586:
    8254 
    8255 /* Line 1806 of yacc.c  */
    8256 #line 2231 "parser.yy"
    8257     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8258     break;
    8259 
    8260   case 587:
    8261 
    8262 /* Line 1806 of yacc.c  */
    8263 #line 2236 "parser.yy"
    8264     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8265     break;
    8266 
    8267   case 588:
    8268 
    8269 /* Line 1806 of yacc.c  */
    8270 #line 2238 "parser.yy"
    8271     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8272     break;
    8273 
    8274   case 589:
    8275 
    8276 /* Line 1806 of yacc.c  */
    8277 #line 2240 "parser.yy"
    8278     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8279     break;
    8280 
    8281   case 593:
    8282 
    8283 /* Line 1806 of yacc.c  */
    8284 #line 2255 "parser.yy"
    8285     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    8286     break;
    8287 
    8288   case 594:
    8289 
    8290 /* Line 1806 of yacc.c  */
    8291 #line 2257 "parser.yy"
    8292     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    8293     break;
    8294 
    8295   case 595:
    8296 
    8297 /* Line 1806 of yacc.c  */
    8298 #line 2259 "parser.yy"
    8299     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8300     break;
    8301 
    8302   case 596:
    8303 
    8304 /* Line 1806 of yacc.c  */
    8305 #line 2264 "parser.yy"
    8306     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8307     break;
    8308 
    8309   case 597:
    8310 
    8311 /* Line 1806 of yacc.c  */
    8312 #line 2266 "parser.yy"
    8313     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8314     break;
    8315 
    8316   case 598:
    8317 
    8318 /* Line 1806 of yacc.c  */
    8319 #line 2268 "parser.yy"
    8320     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8321     break;
    8322 
    8323   case 599:
    8324 
    8325 /* Line 1806 of yacc.c  */
    8326 #line 2273 "parser.yy"
    8327     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8328     break;
    8329 
    8330   case 600:
    8331 
    8332 /* Line 1806 of yacc.c  */
    8333 #line 2275 "parser.yy"
    8334     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8335     break;
    8336 
    8337   case 601:
    8338 
    8339 /* Line 1806 of yacc.c  */
    8340 #line 2277 "parser.yy"
    8341     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8342     break;
    8343 
    8344   case 602:
    8345 
    8346 /* Line 1806 of yacc.c  */
    8347 #line 2292 "parser.yy"
     8480  case 630:
     8481
     8482/* Line 1806 of yacc.c  */
     8483#line 2397 "parser.yy"
    83488484    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83498485    break;
    83508486
    8351   case 604:
    8352 
    8353 /* Line 1806 of yacc.c  */
    8354 #line 2295 "parser.yy"
     8487  case 632:
     8488
     8489/* Line 1806 of yacc.c  */
     8490#line 2400 "parser.yy"
    83558491    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83568492    break;
    83578493
    8358   case 605:
    8359 
    8360 /* Line 1806 of yacc.c  */
    8361 #line 2297 "parser.yy"
     8494  case 633:
     8495
     8496/* Line 1806 of yacc.c  */
     8497#line 2402 "parser.yy"
    83628498    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83638499    break;
    83648500
    8365   case 607:
    8366 
    8367 /* Line 1806 of yacc.c  */
    8368 #line 2303 "parser.yy"
    8369     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8370     break;
    8371 
    8372   case 608:
    8373 
    8374 /* Line 1806 of yacc.c  */
    8375 #line 2308 "parser.yy"
    8376     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8377     break;
    8378 
    8379   case 609:
    8380 
    8381 /* Line 1806 of yacc.c  */
    8382 #line 2310 "parser.yy"
    8383     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8384     break;
    8385 
    8386   case 610:
    8387 
    8388 /* Line 1806 of yacc.c  */
    8389 #line 2312 "parser.yy"
    8390     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8391     break;
    8392 
    8393   case 611:
    8394 
    8395 /* Line 1806 of yacc.c  */
    8396 #line 2317 "parser.yy"
    8397     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8398     break;
    8399 
    8400   case 612:
    8401 
    8402 /* Line 1806 of yacc.c  */
    8403 #line 2319 "parser.yy"
    8404     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8405     break;
    8406 
    8407   case 613:
    8408 
    8409 /* Line 1806 of yacc.c  */
    8410 #line 2321 "parser.yy"
    8411     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8412     break;
    8413 
    8414   case 614:
    8415 
    8416 /* Line 1806 of yacc.c  */
    8417 #line 2323 "parser.yy"
    8418     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8419     break;
    8420 
    8421   case 615:
    8422 
    8423 /* Line 1806 of yacc.c  */
    8424 #line 2328 "parser.yy"
    8425     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8426     break;
    8427 
    8428   case 616:
    8429 
    8430 /* Line 1806 of yacc.c  */
    8431 #line 2330 "parser.yy"
    8432     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8433     break;
    8434 
    8435   case 617:
    8436 
    8437 /* Line 1806 of yacc.c  */
    8438 #line 2332 "parser.yy"
    8439     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8440     break;
    8441 
    8442   case 618:
    8443 
    8444 /* Line 1806 of yacc.c  */
    8445 #line 2342 "parser.yy"
    8446     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8447     break;
    8448 
    8449   case 620:
    8450 
    8451 /* Line 1806 of yacc.c  */
    8452 #line 2345 "parser.yy"
    8453     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8454     break;
    8455 
    8456   case 621:
    8457 
    8458 /* Line 1806 of yacc.c  */
    8459 #line 2347 "parser.yy"
    8460     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8461     break;
    8462 
    8463   case 622:
    8464 
    8465 /* Line 1806 of yacc.c  */
    8466 #line 2352 "parser.yy"
    8467     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8468     break;
    8469 
    8470   case 623:
    8471 
    8472 /* Line 1806 of yacc.c  */
    8473 #line 2354 "parser.yy"
    8474     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8475     break;
    8476 
    8477   case 624:
    8478 
    8479 /* Line 1806 of yacc.c  */
    8480 #line 2356 "parser.yy"
    8481     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8482     break;
    8483 
    8484   case 625:
    8485 
    8486 /* Line 1806 of yacc.c  */
    8487 #line 2361 "parser.yy"
    8488     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8489     break;
    8490 
    8491   case 626:
    8492 
    8493 /* Line 1806 of yacc.c  */
    8494 #line 2363 "parser.yy"
    8495     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8496     break;
    8497 
    8498   case 627:
    8499 
    8500 /* Line 1806 of yacc.c  */
    8501 #line 2365 "parser.yy"
    8502     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8503     break;
    8504 
    8505   case 628:
    8506 
    8507 /* Line 1806 of yacc.c  */
    8508 #line 2367 "parser.yy"
    8509     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8510     break;
    8511 
    8512   case 629:
    8513 
    8514 /* Line 1806 of yacc.c  */
    8515 #line 2372 "parser.yy"
    8516     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8517     break;
    8518 
    8519   case 630:
    8520 
    8521 /* Line 1806 of yacc.c  */
    8522 #line 2374 "parser.yy"
    8523     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8524     break;
    8525 
    8526   case 631:
    8527 
    8528 /* Line 1806 of yacc.c  */
    8529 #line 2376 "parser.yy"
    8530     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8531     break;
    8532 
    8533   case 632:
     8501  case 634:
    85348502
    85358503/* Line 1806 of yacc.c  */
    85368504#line 2407 "parser.yy"
    8537     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8538     break;
    8539 
    8540   case 634:
    8541 
    8542 /* Line 1806 of yacc.c  */
    8543 #line 2410 "parser.yy"
    8544     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8545     break;
    8546 
    8547   case 635:
    8548 
    8549 /* Line 1806 of yacc.c  */
    8550 #line 2412 "parser.yy"
    8551     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8552     break;
    8553 
    8554   case 636:
    8555 
    8556 /* Line 1806 of yacc.c  */
    8557 #line 2417 "parser.yy"
    85588505    {
    85598506                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85628509    break;
    85638510
    8564   case 637:
    8565 
    8566 /* Line 1806 of yacc.c  */
    8567 #line 2422 "parser.yy"
     8511  case 635:
     8512
     8513/* Line 1806 of yacc.c  */
     8514#line 2412 "parser.yy"
    85688515    {
    85698516                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85728519    break;
    85738520
     8521  case 636:
     8522
     8523/* Line 1806 of yacc.c  */
     8524#line 2420 "parser.yy"
     8525    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8526    break;
     8527
     8528  case 637:
     8529
     8530/* Line 1806 of yacc.c  */
     8531#line 2422 "parser.yy"
     8532    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8533    break;
     8534
    85748535  case 638:
    85758536
    85768537/* Line 1806 of yacc.c  */
    8577 #line 2430 "parser.yy"
     8538#line 2424 "parser.yy"
     8539    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8540    break;
     8541
     8542  case 639:
     8543
     8544/* Line 1806 of yacc.c  */
     8545#line 2429 "parser.yy"
     8546    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8547    break;
     8548
     8549  case 640:
     8550
     8551/* Line 1806 of yacc.c  */
     8552#line 2431 "parser.yy"
     8553    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8554    break;
     8555
     8556  case 641:
     8557
     8558/* Line 1806 of yacc.c  */
     8559#line 2436 "parser.yy"
     8560    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8561    break;
     8562
     8563  case 642:
     8564
     8565/* Line 1806 of yacc.c  */
     8566#line 2438 "parser.yy"
     8567    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8568    break;
     8569
     8570  case 644:
     8571
     8572/* Line 1806 of yacc.c  */
     8573#line 2453 "parser.yy"
     8574    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8575    break;
     8576
     8577  case 645:
     8578
     8579/* Line 1806 of yacc.c  */
     8580#line 2455 "parser.yy"
     8581    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8582    break;
     8583
     8584  case 646:
     8585
     8586/* Line 1806 of yacc.c  */
     8587#line 2460 "parser.yy"
     8588    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8589    break;
     8590
     8591  case 647:
     8592
     8593/* Line 1806 of yacc.c  */
     8594#line 2462 "parser.yy"
     8595    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8596    break;
     8597
     8598  case 648:
     8599
     8600/* Line 1806 of yacc.c  */
     8601#line 2464 "parser.yy"
    85788602    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85798603    break;
    85808604
    8581   case 639:
    8582 
    8583 /* Line 1806 of yacc.c  */
    8584 #line 2432 "parser.yy"
     8605  case 649:
     8606
     8607/* Line 1806 of yacc.c  */
     8608#line 2466 "parser.yy"
    85858609    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85868610    break;
    85878611
    8588   case 640:
    8589 
    8590 /* Line 1806 of yacc.c  */
    8591 #line 2434 "parser.yy"
     8612  case 650:
     8613
     8614/* Line 1806 of yacc.c  */
     8615#line 2468 "parser.yy"
    85928616    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85938617    break;
    85948618
    8595   case 641:
    8596 
    8597 /* Line 1806 of yacc.c  */
    8598 #line 2439 "parser.yy"
    8599     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8600     break;
    8601 
    8602   case 642:
    8603 
    8604 /* Line 1806 of yacc.c  */
    8605 #line 2441 "parser.yy"
     8619  case 652:
     8620
     8621/* Line 1806 of yacc.c  */
     8622#line 2474 "parser.yy"
    86068623    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86078624    break;
    86088625
    8609   case 643:
    8610 
    8611 /* Line 1806 of yacc.c  */
    8612 #line 2446 "parser.yy"
    8613     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8614     break;
    8615 
    8616   case 644:
    8617 
    8618 /* Line 1806 of yacc.c  */
    8619 #line 2448 "parser.yy"
    8620     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8621     break;
    8622 
    8623   case 646:
    8624 
    8625 /* Line 1806 of yacc.c  */
    8626 #line 2463 "parser.yy"
    8627     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8628     break;
    8629 
    8630   case 647:
    8631 
    8632 /* Line 1806 of yacc.c  */
    8633 #line 2465 "parser.yy"
    8634     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8635     break;
    8636 
    8637   case 648:
    8638 
    8639 /* Line 1806 of yacc.c  */
    8640 #line 2470 "parser.yy"
    8641     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8642     break;
    8643 
    8644   case 649:
    8645 
    8646 /* Line 1806 of yacc.c  */
    8647 #line 2472 "parser.yy"
    8648     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8649     break;
    8650 
    8651   case 650:
    8652 
    8653 /* Line 1806 of yacc.c  */
    8654 #line 2474 "parser.yy"
    8655     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8656     break;
    8657 
    8658   case 651:
     8626  case 653:
    86598627
    86608628/* Line 1806 of yacc.c  */
    86618629#line 2476 "parser.yy"
    8662     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8663     break;
    8664 
    8665   case 652:
     8630    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8631    break;
     8632
     8633  case 654:
    86668634
    86678635/* Line 1806 of yacc.c  */
     
    86708638    break;
    86718639
    8672   case 654:
    8673 
    8674 /* Line 1806 of yacc.c  */
    8675 #line 2484 "parser.yy"
     8640  case 655:
     8641
     8642/* Line 1806 of yacc.c  */
     8643#line 2483 "parser.yy"
     8644    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8645    break;
     8646
     8647  case 656:
     8648
     8649/* Line 1806 of yacc.c  */
     8650#line 2485 "parser.yy"
     8651    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8652    break;
     8653
     8654  case 657:
     8655
     8656/* Line 1806 of yacc.c  */
     8657#line 2487 "parser.yy"
     8658    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8659    break;
     8660
     8661  case 658:
     8662
     8663/* Line 1806 of yacc.c  */
     8664#line 2493 "parser.yy"
     8665    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8666    break;
     8667
     8668  case 659:
     8669
     8670/* Line 1806 of yacc.c  */
     8671#line 2495 "parser.yy"
     8672    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     8673    break;
     8674
     8675  case 661:
     8676
     8677/* Line 1806 of yacc.c  */
     8678#line 2501 "parser.yy"
     8679    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     8680    break;
     8681
     8682  case 662:
     8683
     8684/* Line 1806 of yacc.c  */
     8685#line 2503 "parser.yy"
     8686    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     8687    break;
     8688
     8689  case 663:
     8690
     8691/* Line 1806 of yacc.c  */
     8692#line 2505 "parser.yy"
     8693    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     8694    break;
     8695
     8696  case 664:
     8697
     8698/* Line 1806 of yacc.c  */
     8699#line 2507 "parser.yy"
     8700    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     8701    break;
     8702
     8703  case 666:
     8704
     8705/* Line 1806 of yacc.c  */
     8706#line 2522 "parser.yy"
     8707    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8708    break;
     8709
     8710  case 667:
     8711
     8712/* Line 1806 of yacc.c  */
     8713#line 2524 "parser.yy"
     8714    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8715    break;
     8716
     8717  case 668:
     8718
     8719/* Line 1806 of yacc.c  */
     8720#line 2529 "parser.yy"
     8721    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8722    break;
     8723
     8724  case 669:
     8725
     8726/* Line 1806 of yacc.c  */
     8727#line 2531 "parser.yy"
     8728    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8729    break;
     8730
     8731  case 670:
     8732
     8733/* Line 1806 of yacc.c  */
     8734#line 2533 "parser.yy"
     8735    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8736    break;
     8737
     8738  case 671:
     8739
     8740/* Line 1806 of yacc.c  */
     8741#line 2535 "parser.yy"
     8742    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8743    break;
     8744
     8745  case 672:
     8746
     8747/* Line 1806 of yacc.c  */
     8748#line 2537 "parser.yy"
     8749    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8750    break;
     8751
     8752  case 674:
     8753
     8754/* Line 1806 of yacc.c  */
     8755#line 2543 "parser.yy"
    86768756    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86778757    break;
    86788758
    8679   case 655:
    8680 
    8681 /* Line 1806 of yacc.c  */
    8682 #line 2486 "parser.yy"
     8759  case 675:
     8760
     8761/* Line 1806 of yacc.c  */
     8762#line 2545 "parser.yy"
    86838763    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86848764    break;
    86858765
    8686   case 656:
    8687 
    8688 /* Line 1806 of yacc.c  */
    8689 #line 2488 "parser.yy"
    8690     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8691     break;
    8692 
    8693   case 657:
    8694 
    8695 /* Line 1806 of yacc.c  */
    8696 #line 2493 "parser.yy"
    8697     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8698     break;
    8699 
    8700   case 658:
    8701 
    8702 /* Line 1806 of yacc.c  */
    8703 #line 2495 "parser.yy"
    8704     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8705     break;
    8706 
    8707   case 659:
    8708 
    8709 /* Line 1806 of yacc.c  */
    8710 #line 2497 "parser.yy"
    8711     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8712     break;
    8713 
    8714   case 660:
    8715 
    8716 /* Line 1806 of yacc.c  */
    8717 #line 2503 "parser.yy"
    8718     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    8719     break;
    8720 
    8721   case 661:
    8722 
    8723 /* Line 1806 of yacc.c  */
    8724 #line 2505 "parser.yy"
    8725     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    8726     break;
    8727 
    8728   case 663:
    8729 
    8730 /* Line 1806 of yacc.c  */
    8731 #line 2511 "parser.yy"
    8732     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    8733     break;
    8734 
    8735   case 664:
    8736 
    8737 /* Line 1806 of yacc.c  */
    8738 #line 2513 "parser.yy"
    8739     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    8740     break;
    8741 
    8742   case 665:
    8743 
    8744 /* Line 1806 of yacc.c  */
    8745 #line 2515 "parser.yy"
    8746     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    8747     break;
    8748 
    8749   case 666:
    8750 
    8751 /* Line 1806 of yacc.c  */
    8752 #line 2517 "parser.yy"
    8753     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    8754     break;
    8755 
    8756   case 668:
    8757 
    8758 /* Line 1806 of yacc.c  */
    8759 #line 2532 "parser.yy"
    8760     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8761     break;
    8762 
    8763   case 669:
    8764 
    8765 /* Line 1806 of yacc.c  */
    8766 #line 2534 "parser.yy"
    8767     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8768     break;
    8769 
    8770   case 670:
    8771 
    8772 /* Line 1806 of yacc.c  */
    8773 #line 2539 "parser.yy"
    8774     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8775     break;
    8776 
    8777   case 671:
    8778 
    8779 /* Line 1806 of yacc.c  */
    8780 #line 2541 "parser.yy"
    8781     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8782     break;
    8783 
    8784   case 672:
    8785 
    8786 /* Line 1806 of yacc.c  */
    8787 #line 2543 "parser.yy"
    8788     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8789     break;
    8790 
    8791   case 673:
    8792 
    8793 /* Line 1806 of yacc.c  */
    8794 #line 2545 "parser.yy"
    8795     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8796     break;
    8797 
    8798   case 674:
     8766  case 676:
    87998767
    88008768/* Line 1806 of yacc.c  */
     
    88038771    break;
    88048772
    8805   case 676:
    8806 
    8807 /* Line 1806 of yacc.c  */
    8808 #line 2553 "parser.yy"
     8773  case 677:
     8774
     8775/* Line 1806 of yacc.c  */
     8776#line 2552 "parser.yy"
     8777    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8778    break;
     8779
     8780  case 678:
     8781
     8782/* Line 1806 of yacc.c  */
     8783#line 2554 "parser.yy"
     8784    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8785    break;
     8786
     8787  case 679:
     8788
     8789/* Line 1806 of yacc.c  */
     8790#line 2556 "parser.yy"
     8791    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8792    break;
     8793
     8794  case 681:
     8795
     8796/* Line 1806 of yacc.c  */
     8797#line 2563 "parser.yy"
     8798    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8799    break;
     8800
     8801  case 683:
     8802
     8803/* Line 1806 of yacc.c  */
     8804#line 2574 "parser.yy"
     8805    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8806    break;
     8807
     8808  case 684:
     8809
     8810/* Line 1806 of yacc.c  */
     8811#line 2577 "parser.yy"
     8812    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     8813    break;
     8814
     8815  case 685:
     8816
     8817/* Line 1806 of yacc.c  */
     8818#line 2579 "parser.yy"
     8819    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     8820    break;
     8821
     8822  case 686:
     8823
     8824/* Line 1806 of yacc.c  */
     8825#line 2582 "parser.yy"
     8826    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     8827    break;
     8828
     8829  case 687:
     8830
     8831/* Line 1806 of yacc.c  */
     8832#line 2584 "parser.yy"
     8833    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     8834    break;
     8835
     8836  case 688:
     8837
     8838/* Line 1806 of yacc.c  */
     8839#line 2586 "parser.yy"
     8840    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     8841    break;
     8842
     8843  case 690:
     8844
     8845/* Line 1806 of yacc.c  */
     8846#line 2600 "parser.yy"
     8847    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8848    break;
     8849
     8850  case 691:
     8851
     8852/* Line 1806 of yacc.c  */
     8853#line 2602 "parser.yy"
     8854    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8855    break;
     8856
     8857  case 692:
     8858
     8859/* Line 1806 of yacc.c  */
     8860#line 2607 "parser.yy"
     8861    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8862    break;
     8863
     8864  case 693:
     8865
     8866/* Line 1806 of yacc.c  */
     8867#line 2609 "parser.yy"
     8868    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8869    break;
     8870
     8871  case 694:
     8872
     8873/* Line 1806 of yacc.c  */
     8874#line 2611 "parser.yy"
     8875    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8876    break;
     8877
     8878  case 695:
     8879
     8880/* Line 1806 of yacc.c  */
     8881#line 2613 "parser.yy"
     8882    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8883    break;
     8884
     8885  case 696:
     8886
     8887/* Line 1806 of yacc.c  */
     8888#line 2615 "parser.yy"
     8889    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8890    break;
     8891
     8892  case 698:
     8893
     8894/* Line 1806 of yacc.c  */
     8895#line 2621 "parser.yy"
    88098896    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88108897    break;
    88118898
    8812   case 677:
    8813 
    8814 /* Line 1806 of yacc.c  */
    8815 #line 2555 "parser.yy"
     8899  case 699:
     8900
     8901/* Line 1806 of yacc.c  */
     8902#line 2623 "parser.yy"
    88168903    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88178904    break;
    88188905
    8819   case 678:
    8820 
    8821 /* Line 1806 of yacc.c  */
    8822 #line 2557 "parser.yy"
    8823     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8824     break;
    8825 
    8826   case 679:
    8827 
    8828 /* Line 1806 of yacc.c  */
    8829 #line 2562 "parser.yy"
    8830     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8831     break;
    8832 
    8833   case 680:
    8834 
    8835 /* Line 1806 of yacc.c  */
    8836 #line 2564 "parser.yy"
    8837     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8838     break;
    8839 
    8840   case 681:
    8841 
    8842 /* Line 1806 of yacc.c  */
    8843 #line 2566 "parser.yy"
    8844     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8845     break;
    8846 
    8847   case 683:
    8848 
    8849 /* Line 1806 of yacc.c  */
    8850 #line 2573 "parser.yy"
    8851     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8852     break;
    8853 
    8854   case 685:
    8855 
    8856 /* Line 1806 of yacc.c  */
    8857 #line 2584 "parser.yy"
    8858     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    8859     break;
    8860 
    8861   case 686:
    8862 
    8863 /* Line 1806 of yacc.c  */
    8864 #line 2587 "parser.yy"
    8865     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    8866     break;
    8867 
    8868   case 687:
    8869 
    8870 /* Line 1806 of yacc.c  */
    8871 #line 2589 "parser.yy"
    8872     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    8873     break;
    8874 
    8875   case 688:
    8876 
    8877 /* Line 1806 of yacc.c  */
    8878 #line 2592 "parser.yy"
    8879     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    8880     break;
    8881 
    8882   case 689:
    8883 
    8884 /* Line 1806 of yacc.c  */
    8885 #line 2594 "parser.yy"
    8886     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    8887     break;
    8888 
    8889   case 690:
    8890 
    8891 /* Line 1806 of yacc.c  */
    8892 #line 2596 "parser.yy"
    8893     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    8894     break;
    8895 
    8896   case 692:
    8897 
    8898 /* Line 1806 of yacc.c  */
    8899 #line 2610 "parser.yy"
    8900     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8901     break;
    8902 
    8903   case 693:
    8904 
    8905 /* Line 1806 of yacc.c  */
    8906 #line 2612 "parser.yy"
    8907     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8908     break;
    8909 
    8910   case 694:
    8911 
    8912 /* Line 1806 of yacc.c  */
    8913 #line 2617 "parser.yy"
    8914     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8915     break;
    8916 
    8917   case 695:
    8918 
    8919 /* Line 1806 of yacc.c  */
    8920 #line 2619 "parser.yy"
    8921     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8922     break;
    8923 
    8924   case 696:
    8925 
    8926 /* Line 1806 of yacc.c  */
    8927 #line 2621 "parser.yy"
    8928     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8929     break;
    8930 
    8931   case 697:
    8932 
    8933 /* Line 1806 of yacc.c  */
    8934 #line 2623 "parser.yy"
    8935     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8936     break;
    8937 
    8938   case 698:
     8906  case 700:
    89398907
    89408908/* Line 1806 of yacc.c  */
     
    89438911    break;
    89448912
    8945   case 700:
    8946 
    8947 /* Line 1806 of yacc.c  */
    8948 #line 2631 "parser.yy"
    8949     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8950     break;
    8951 
    89528913  case 701:
    89538914
    89548915/* Line 1806 of yacc.c  */
    8955 #line 2633 "parser.yy"
    8956     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8916#line 2630 "parser.yy"
     8917    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    89578918    break;
    89588919
     
    89608921
    89618922/* Line 1806 of yacc.c  */
    8962 #line 2635 "parser.yy"
     8923#line 2632 "parser.yy"
    89638924    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89648925    break;
    89658926
    8966   case 703:
    8967 
    8968 /* Line 1806 of yacc.c  */
    8969 #line 2640 "parser.yy"
    8970     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8971     break;
    8972 
    8973   case 704:
     8927  case 705:
    89748928
    89758929/* Line 1806 of yacc.c  */
    89768930#line 2642 "parser.yy"
    8977     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8978     break;
    8979 
    8980   case 707:
     8931    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     8932    break;
     8933
     8934  case 708:
    89818935
    89828936/* Line 1806 of yacc.c  */
    89838937#line 2652 "parser.yy"
    8984     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     8938    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8939    break;
     8940
     8941  case 709:
     8942
     8943/* Line 1806 of yacc.c  */
     8944#line 2654 "parser.yy"
     8945    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89858946    break;
    89868947
     
    89888949
    89898950/* Line 1806 of yacc.c  */
     8951#line 2656 "parser.yy"
     8952    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8953    break;
     8954
     8955  case 711:
     8956
     8957/* Line 1806 of yacc.c  */
     8958#line 2658 "parser.yy"
     8959    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8960    break;
     8961
     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
     8969  case 713:
     8970
     8971/* Line 1806 of yacc.c  */
    89908972#line 2662 "parser.yy"
    8991     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    8992     break;
    8993 
    8994   case 711:
    8995 
    8996 /* Line 1806 of yacc.c  */
    8997 #line 2664 "parser.yy"
    89988973    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89998974    break;
    90008975
    9001   case 712:
    9002 
    9003 /* Line 1806 of yacc.c  */
    9004 #line 2666 "parser.yy"
    9005     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9006     break;
    9007 
    9008   case 713:
    9009 
    9010 /* Line 1806 of yacc.c  */
    9011 #line 2668 "parser.yy"
    9012     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9013     break;
    9014 
    90158976  case 714:
    90168977
    90178978/* Line 1806 of yacc.c  */
    9018 #line 2670 "parser.yy"
    9019     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8979#line 2669 "parser.yy"
     8980    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90208981    break;
    90218982
     
    90238984
    90248985/* Line 1806 of yacc.c  */
    9025 #line 2672 "parser.yy"
    9026     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8986#line 2671 "parser.yy"
     8987    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90278988    break;
    90288989
    90298990  case 716:
     8991
     8992/* Line 1806 of yacc.c  */
     8993#line 2673 "parser.yy"
     8994    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8995    break;
     8996
     8997  case 717:
     8998
     8999/* Line 1806 of yacc.c  */
     9000#line 2675 "parser.yy"
     9001    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     9002    break;
     9003
     9004  case 718:
     9005
     9006/* Line 1806 of yacc.c  */
     9007#line 2677 "parser.yy"
     9008    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9009    break;
     9010
     9011  case 719:
    90309012
    90319013/* Line 1806 of yacc.c  */
     
    90349016    break;
    90359017
    9036   case 717:
     9018  case 720:
    90379019
    90389020/* Line 1806 of yacc.c  */
     
    90419023    break;
    90429024
    9043   case 718:
     9025  case 721:
    90449026
    90459027/* Line 1806 of yacc.c  */
     
    90489030    break;
    90499031
    9050   case 719:
     9032  case 722:
    90519033
    90529034/* Line 1806 of yacc.c  */
     
    90559037    break;
    90569038
    9057   case 720:
     9039  case 723:
    90589040
    90599041/* Line 1806 of yacc.c  */
     
    90629044    break;
    90639045
    9064   case 721:
    9065 
    9066 /* Line 1806 of yacc.c  */
    9067 #line 2689 "parser.yy"
     9046  case 724:
     9047
     9048/* Line 1806 of yacc.c  */
     9049#line 2692 "parser.yy"
     9050    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     9051    break;
     9052
     9053  case 725:
     9054
     9055/* Line 1806 of yacc.c  */
     9056#line 2694 "parser.yy"
     9057    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     9058    break;
     9059
     9060  case 726:
     9061
     9062/* Line 1806 of yacc.c  */
     9063#line 2699 "parser.yy"
     9064    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     9065    break;
     9066
     9067  case 727:
     9068
     9069/* Line 1806 of yacc.c  */
     9070#line 2701 "parser.yy"
     9071    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     9072    break;
     9073
     9074  case 729:
     9075
     9076/* Line 1806 of yacc.c  */
     9077#line 2728 "parser.yy"
     9078    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     9079    break;
     9080
     9081  case 733:
     9082
     9083/* Line 1806 of yacc.c  */
     9084#line 2739 "parser.yy"
     9085    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     9086    break;
     9087
     9088  case 734:
     9089
     9090/* Line 1806 of yacc.c  */
     9091#line 2741 "parser.yy"
     9092    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     9093    break;
     9094
     9095  case 735:
     9096
     9097/* Line 1806 of yacc.c  */
     9098#line 2743 "parser.yy"
     9099    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     9100    break;
     9101
     9102  case 736:
     9103
     9104/* Line 1806 of yacc.c  */
     9105#line 2745 "parser.yy"
     9106    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     9107    break;
     9108
     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
     9116  case 738:
     9117
     9118/* Line 1806 of yacc.c  */
     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"
    90689127    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90699128    break;
    90709129
    9071   case 722:
    9072 
    9073 /* Line 1806 of yacc.c  */
    9074 #line 2691 "parser.yy"
     9130  case 740:
     9131
     9132/* Line 1806 of yacc.c  */
     9133#line 2758 "parser.yy"
     9134    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9135    break;
     9136
     9137  case 741:
     9138
     9139/* Line 1806 of yacc.c  */
     9140#line 2760 "parser.yy"
    90759141    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90769142    break;
    90779143
    9078   case 723:
    9079 
    9080 /* Line 1806 of yacc.c  */
    9081 #line 2693 "parser.yy"
     9144  case 742:
     9145
     9146/* Line 1806 of yacc.c  */
     9147#line 2762 "parser.yy"
     9148    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9149    break;
     9150
     9151  case 743:
     9152
     9153/* Line 1806 of yacc.c  */
     9154#line 2764 "parser.yy"
    90829155    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90839156    break;
    90849157
    9085   case 724:
    9086 
    9087 /* Line 1806 of yacc.c  */
    9088 #line 2695 "parser.yy"
    9089     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    9090     break;
    9091 
    9092   case 725:
    9093 
    9094 /* Line 1806 of yacc.c  */
    9095 #line 2697 "parser.yy"
     9158  case 744:
     9159
     9160/* Line 1806 of yacc.c  */
     9161#line 2766 "parser.yy"
    90969162    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90979163    break;
    90989164
    9099   case 726:
    9100 
    9101 /* Line 1806 of yacc.c  */
    9102 #line 2702 "parser.yy"
    9103     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    9104     break;
    9105 
    9106   case 727:
    9107 
    9108 /* Line 1806 of yacc.c  */
    9109 #line 2704 "parser.yy"
    9110     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    9111     break;
    9112 
    9113   case 728:
    9114 
    9115 /* Line 1806 of yacc.c  */
    9116 #line 2709 "parser.yy"
    9117     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    9118     break;
    9119 
    9120   case 729:
    9121 
    9122 /* Line 1806 of yacc.c  */
    9123 #line 2711 "parser.yy"
    9124     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    9125     break;
    9126 
    9127   case 731:
    9128 
    9129 /* Line 1806 of yacc.c  */
    9130 #line 2738 "parser.yy"
    9131     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    9132     break;
    9133 
    9134   case 735:
    9135 
    9136 /* Line 1806 of yacc.c  */
    9137 #line 2749 "parser.yy"
    9138     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9139     break;
    9140 
    9141   case 736:
    9142 
    9143 /* Line 1806 of yacc.c  */
    9144 #line 2751 "parser.yy"
    9145     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9146     break;
    9147 
    9148   case 737:
    9149 
    9150 /* Line 1806 of yacc.c  */
    9151 #line 2753 "parser.yy"
    9152     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9153     break;
    9154 
    9155   case 738:
    9156 
    9157 /* Line 1806 of yacc.c  */
    9158 #line 2755 "parser.yy"
    9159     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9160     break;
    9161 
    9162   case 739:
    9163 
    9164 /* Line 1806 of yacc.c  */
    9165 #line 2757 "parser.yy"
    9166     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9167     break;
    9168 
    9169   case 740:
    9170 
    9171 /* Line 1806 of yacc.c  */
    9172 #line 2759 "parser.yy"
    9173     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9174     break;
    9175 
    9176   case 741:
    9177 
    9178 /* Line 1806 of yacc.c  */
    9179 #line 2766 "parser.yy"
    9180     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9181     break;
    9182 
    9183   case 742:
    9184 
    9185 /* Line 1806 of yacc.c  */
    9186 #line 2768 "parser.yy"
    9187     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9188     break;
    9189 
    9190   case 743:
    9191 
    9192 /* Line 1806 of yacc.c  */
    9193 #line 2770 "parser.yy"
    9194     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9195     break;
    9196 
    9197   case 744:
    9198 
    9199 /* Line 1806 of yacc.c  */
    9200 #line 2772 "parser.yy"
    9201     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9202     break;
    9203 
    92049165  case 745:
    92059166
    92069167/* Line 1806 of yacc.c  */
    9207 #line 2774 "parser.yy"
    9208     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9168#line 2771 "parser.yy"
     9169    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    92099170    break;
    92109171
     
    92139174/* Line 1806 of yacc.c  */
    92149175#line 2776 "parser.yy"
    9215     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9176    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    92169177    break;
    92179178
     
    92199180
    92209181/* Line 1806 of yacc.c  */
    9221 #line 2781 "parser.yy"
    9222     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     9182#line 2778 "parser.yy"
     9183    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    92239184    break;
    92249185
     
    92269187
    92279188/* Line 1806 of yacc.c  */
    9228 #line 2786 "parser.yy"
    9229     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    9230     break;
    9231 
    9232   case 749:
    9233 
    9234 /* Line 1806 of yacc.c  */
    9235 #line 2788 "parser.yy"
     9189#line 2780 "parser.yy"
    92369190    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    92379191    break;
    92389192
    9239   case 750:
    9240 
    9241 /* Line 1806 of yacc.c  */
    9242 #line 2790 "parser.yy"
    9243     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    9244     break;
    9245 
    9246   case 753:
    9247 
    9248 /* Line 1806 of yacc.c  */
    9249 #line 2814 "parser.yy"
     9193  case 751:
     9194
     9195/* Line 1806 of yacc.c  */
     9196#line 2804 "parser.yy"
    92509197    { (yyval.en) = 0; }
    92519198    break;
    92529199
    9253   case 754:
    9254 
    9255 /* Line 1806 of yacc.c  */
    9256 #line 2816 "parser.yy"
     9200  case 752:
     9201
     9202/* Line 1806 of yacc.c  */
     9203#line 2806 "parser.yy"
    92579204    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    92589205    break;
     
    92619208
    92629209/* Line 1806 of yacc.c  */
    9263 #line 9264 "Parser/parser.cc"
     9210#line 9211 "Parser/parser.cc"
    92649211      default: break;
    92659212    }
     
    94929439
    94939440/* Line 2067 of yacc.c  */
    9494 #line 2819 "parser.yy"
     9441#line 2809 "parser.yy"
    94959442
    94969443// ----end of grammar----
     
    94999446        std::cout << "Error ";
    95009447        if ( yyfilename ) {
    9501                 std::cout << "in file " << yyfilename << " ";
     9448            std::cout << "in file " << yyfilename << " ";
    95029449        } // if
    95039450        std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl;
  • src/Parser/parser.yy

    r1048b31 r1f6e009  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:58:43 2016
    13 // Update Count     : 1519
     12// Last Modified On : Thu Mar 24 16:16:16 2016
     13// Update Count     : 1498
    1414//
    1515
     
    372372                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
    373373        | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
    374                 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
     374                { $$ = 0; }
    375375        | postfix_expression '{' argument_expression_list '}' // CFA
    376376                {
     
    14381438                { $$ = DeclarationNode::newAggregate( $1, 0, 0, $3 ); }
    14391439        | aggregate_key no_attr_identifier_or_type_name
    1440                 {
    1441                         typedefTable.makeTypedef( *$2 );
    1442                         $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 );
    1443                 }
    1444         | aggregate_key no_attr_identifier_or_type_name
    1445                 { typedefTable.makeTypedef( *$2 ); }
    1446                 '{' field_declaration_list '}'
    1447                 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5); }
     1440                { $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); }
     1441        | aggregate_key no_attr_identifier_or_type_name '{' field_declaration_list '}'
     1442                { $$ = DeclarationNode::newAggregate( $1, $2, 0, $4 ); }
    14481443        | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA
    1449                 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
     1444                { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
    14501445        | aggregate_key typegen_name                                            // CFA, S/R conflict
    14511446                { $$ = $2; }
     
    15251520        enum_key '{' enumerator_list comma_opt '}'
    15261521                { $$ = DeclarationNode::newEnum( 0, $3 ); }
     1522        | enum_key no_attr_identifier_or_type_name '{' enumerator_list comma_opt '}'
     1523                { $$ = DeclarationNode::newEnum( $2, $4 ); }
    15271524        | enum_key no_attr_identifier_or_type_name
    1528                 {
    1529                         typedefTable.makeTypedef( *$2 );
    1530                         $$ = DeclarationNode::newEnum( $2, 0 );
    1531                 }
    1532         | enum_key no_attr_identifier_or_type_name
    1533                 { typedefTable.makeTypedef( *$2 ); }
    1534                 '{' enumerator_list comma_opt '}'
    1535                 { $$ = DeclarationNode::newEnum( $2, $5 ); }
     1525                { $$ = DeclarationNode::newEnum( $2, 0 ); }
    15361526        ;
    15371527
     
    28232813        std::cout << "Error ";
    28242814        if ( yyfilename ) {
    2825                 std::cout << "in file " << yyfilename << " ";
     2815            std::cout << "in file " << yyfilename << " ";
    28262816        } // if
    28272817        std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl;
  • src/ResolvExpr/AlternativeFinder.cc

    r1048b31 r1f6e009  
    848848        }
    849849
    850         void AlternativeFinder::visit( OffsetPackExpr *offsetPackExpr ) {
    851                 alternatives.push_back( Alternative( offsetPackExpr->clone(), env, Cost::zero ) );
    852         }
    853 
    854850        void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) {
    855851                // assume no polymorphism
  • src/ResolvExpr/AlternativeFinder.h

    r1048b31 r1f6e009  
    5959                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6060                virtual void visit( OffsetofExpr *offsetofExpr );
    61                 virtual void visit( OffsetPackExpr *offsetPackExpr );
    6261                virtual void visit( AttrExpr *attrExpr );
    6362                virtual void visit( LogicalExpr *logicalExpr );
  • src/ResolvExpr/CastCost.cc

    r1048b31 r1f6e009  
    6969                PointerType *destAsPointer = dynamic_cast< PointerType* >( dest );
    7070                if ( destAsPointer && basicType->isInteger() ) {
    71                         // necessary for, e.g. unsigned long => void*
    72                         cost = Cost( 1, 0, 0 );
     71                        //cost = Cost( 1, 0, 0 );
     72                        cost = Cost::infinity;
    7373                } else {
    7474                        ConversionCost::visit( basicType );
     
    8989                                } else if ( castResult < 0 ) {
    9090                                        cost = Cost::infinity;
     91                                        //cost = Cost( 1, 0, 0 );
    9192                                } // if
    9293                        } // if
    9394                } else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) {
    9495                        if ( destAsBasic->isInteger() ) {
    95                                 // necessary for, e.g. void* => unsigned long
    96                                 cost = Cost( 1, 0, 0 );
     96                                //cost = Cost( 1, 0, 0 );
     97                                cost = Cost::infinity;
    9798                        } // if
    9899                }
  • src/SymTab/AddVisit.h

    r1048b31 r1f6e009  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 16:14:32 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr  7 14:42:21 2016
    13 // Update Count     : 5
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Jul 14 12:26:17 2015
     13// Update Count     : 4
    1414//
    1515
     
    2727
    2828        template< typename Visitor >
     29        inline void addVisitStatement( Statement *stmt, Visitor &visitor ) {
     30                maybeAccept( stmt, visitor );
     31///   if ( ! declsToAdd.empty() ) {
     32///     CompoundStmt *compound = new CompoundStmt( noLabels );
     33///     compound->get_kids().push_back( stmt );
     34///     addDecls( declsToAdd, compound->get_kids(), compound->get_kids().end() );
     35///   }
     36        }
     37
     38        template< typename Visitor >
    2939        inline void addVisit(CompoundStmt *compoundStmt, Visitor &visitor) {
    3040                addVisitStatementList( compoundStmt->get_kids(), visitor );
     41        }
     42
     43        template< typename Visitor >
     44        inline void addVisit(IfStmt *ifStmt, Visitor &visitor) {
     45                addVisitStatement( ifStmt->get_thenPart(), visitor );
     46                addVisitStatement( ifStmt->get_elsePart(), visitor );
     47                maybeAccept( ifStmt->get_condition(), visitor );
     48        }
     49
     50        template< typename Visitor >
     51        inline void addVisit(WhileStmt *whileStmt, Visitor &visitor) {
     52                addVisitStatement( whileStmt->get_body(), visitor );
     53                maybeAccept( whileStmt->get_condition(), visitor );
     54        }
     55
     56        template< typename Visitor >
     57        inline void addVisit(ForStmt *forStmt, Visitor &visitor) {
     58                addVisitStatement( forStmt->get_body(), visitor );
     59                acceptAll( forStmt->get_initialization(), visitor );
     60                maybeAccept( forStmt->get_condition(), visitor );
     61                maybeAccept( forStmt->get_increment(), visitor );
    3162        }
    3263
     
    4374        }
    4475
    45         // template< typename Visitor >
    46         // inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
    47         //      addVisitStatementList( caseStmt->get_statements(), visitor );
    48         //      maybeAccept( caseStmt->get_condition(), visitor );
    49         // }
     76        template< typename Visitor >
     77        inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
     78                addVisitStatementList( caseStmt->get_statements(), visitor );
     79                maybeAccept( caseStmt->get_condition(), visitor );
     80        }
     81
     82        template< typename Visitor >
     83        inline void addVisit(CatchStmt *cathStmt, Visitor &visitor) {
     84                addVisitStatement( cathStmt->get_body(), visitor );
     85                maybeAccept( cathStmt->get_decl(), visitor );
     86        }
    5087} // namespace SymTab
    5188
  • src/SymTab/Indexer.cc

    r1048b31 r1f6e009  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Indexer.cc --
     7// Indexer.cc -- 
    88//
    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 : Fri Apr 22 15:25:43 2016
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Mar  2 17:31:29 2016
    1313// Update Count     : 11
    1414//
     
    5959                }
    6060        }
    61 
     61       
    6262        template< typename Decl >
    6363        void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) {
     
    6666                } // for
    6767        }
    68 
     68       
    6969        struct Indexer::Impl {
    7070                Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(),
     
    7676                unsigned long size;       ///< Number of elements stored in this table
    7777                const Indexer base;       ///< Base indexer this extends
    78 
     78               
    7979                IdTable idTable;          ///< Identifier namespace
    8080                TypeTable typeTable;      ///< Type namespace
     
    213213        void Indexer::visit( StructDecl *aggregateDecl ) {
    214214                // make up a forward declaration and add it before processing the members
    215                 // needs to be on the heap because addStruct saves the pointer
    216                 StructDecl &fwdDecl = *new StructDecl( aggregateDecl->get_name() );
     215                StructDecl fwdDecl( aggregateDecl->get_name() );
    217216                cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() );
    218217                debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl );
    219218                addStruct( &fwdDecl );
    220 
     219 
    221220                enterScope();
    222221                acceptAll( aggregateDecl->get_parameters(), *this );
    223222                acceptAll( aggregateDecl->get_members(), *this );
    224223                leaveScope();
    225 
     224 
    226225                debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl );
    227226                // this addition replaces the forward declaration
     
    235234                debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl );
    236235                addUnion( &fwdDecl );
    237 
     236 
    238237                enterScope();
    239238                acceptAll( aggregateDecl->get_parameters(), *this );
    240239                acceptAll( aggregateDecl->get_members(), *this );
    241240                leaveScope();
    242 
     241 
    243242                debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl );
    244243                addUnion( aggregateDecl );
     
    257256                acceptAll( aggregateDecl->get_members(), *this );
    258257                leaveScope();
    259 
     258 
    260259                debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl );
    261260                addTrait( aggregateDecl );
     
    345344                maybeAccept( offsetofExpr->get_type(), *this );
    346345                maybeAccept( offsetofExpr->get_member(), *this );
    347         }
    348 
    349         void Indexer::visit( OffsetPackExpr *offsetPackExpr ) {
    350                 acceptAllNewScope( offsetPackExpr->get_results(), *this );
    351                 maybeAccept( offsetPackExpr->get_type(), *this );
    352346        }
    353347
     
    439433        }
    440434
    441 
     435       
    442436
    443437        void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const {
    444438                std::unordered_set< std::string > foundMangleNames;
    445 
     439               
    446440                Indexer::Impl *searchTables = tables;
    447441                while ( searchTables ) {
     
    453447                                        // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found
    454448                                        if ( foundMangleNames.insert( decl->first ).second == false ) continue;
    455 
     449                                       
    456450                                        out.push_back( decl->second );
    457451                                }
    458452                        }
    459 
     453                       
    460454                        // get declarations from base indexers
    461455                        searchTables = searchTables->base.tables;
     
    512506        }
    513507
    514         bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName, unsigned long scope ) const {
     508        bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const {
    515509                if ( ! tables ) return false;
    516                 if ( tables->scope < scope ) return false;
    517510
    518511                IdTable::const_iterator decls = tables->idTable.find( id );
     
    520513                        const MangleTable &mangleTable = decls->second;
    521514                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    522                                 // check for C decls with the same name, skipping
     515                                // check for C decls with the same name, skipping 
    523516                                // those with a compatible type (by mangleName)
    524517                                if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
     
    526519                }
    527520
    528                 return tables->base.hasIncompatibleCDecl( id, mangleName, scope );
    529         }
    530 
     521                return tables->base.hasIncompatibleCDecl( id, mangleName );
     522        }
     523       
    531524        NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const {
    532525                if ( ! tables ) return 0;
     
    536529                return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope );
    537530        }
    538 
     531       
    539532        StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const {
    540533                if ( ! tables ) return 0;
     
    544537                return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope );
    545538        }
    546 
     539       
    547540        EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const {
    548541                if ( ! tables ) return 0;
     
    552545                return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope );
    553546        }
    554 
     547       
    555548        UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const {
    556549                if ( ! tables ) return 0;
     
    560553                return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope );
    561554        }
    562 
     555       
    563556        TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const {
    564557                if ( ! tables ) return 0;
     
    603596                return true;
    604597        }
    605 
     598       
    606599        void Indexer::addId( DeclarationWithType *decl ) {
    607600                makeWritable();
     
    619612                DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope );
    620613                if ( ! existing || ! addedIdConflicts( existing, decl ) ) {
    621                         // this ensures that no two declarations with the same unmangled name at the same scope both have C linkage
    622                         if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName, scope ) ) {
     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 ) ) {
    623616                                throw SemanticError( "invalid overload of C function ", decl );
    624                         } // NOTE this is broken in Richard's original code in such a way that it never triggers (it
    625                           // doesn't check decls that have the same manglename, and all C-linkage decls are defined to
     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 
    626619                          // have their name as their manglename, hence the error can never trigger).
    627                           // The code here is closer to correct, but name mangling would have to be completely
     620                          // The code here is closer to correct, but name mangling would have to be completely 
    628621                          // isomorphic to C type-compatibility, which it may not be.
    629 
     622                       
    630623                        tables->idTable[ name ][ mangleName ] = decl;
    631624                        ++tables->size;
     
    642635                }
    643636        }
    644 
     637       
    645638        void Indexer::addType( NamedTypeDecl *decl ) {
    646639                makeWritable();
     
    673666                addStruct( new StructDecl( id ) );
    674667        }
    675 
     668       
    676669        void Indexer::addStruct( StructDecl *decl ) {
    677670                makeWritable();
     
    691684                }
    692685        }
    693 
     686       
    694687        void Indexer::addEnum( EnumDecl *decl ) {
    695688                makeWritable();
     
    713706                addUnion( new UnionDecl( id ) );
    714707        }
    715 
     708       
    716709        void Indexer::addUnion( UnionDecl *decl ) {
    717710                makeWritable();
     
    731724                }
    732725        }
    733 
     726       
    734727        void Indexer::addTrait( TraitDecl *decl ) {
    735728                makeWritable();
     
    752745        void Indexer::enterScope() {
    753746                ++scope;
    754 
     747               
    755748                if ( doDebug ) {
    756749                        std::cout << "--- Entering scope " << scope << std::endl;
     
    785778            using std::cerr;
    786779
    787                 if ( tables ) {
    788                         os << "--- scope " << tables->scope << " ---" << std::endl;
    789 
    790                         os << "===idTable===" << std::endl;
    791                         dump( tables->idTable, os );
    792                         os << "===typeTable===" << std::endl;
    793                         dump( tables->typeTable, os );
    794                         os << "===structTable===" << std::endl;
    795                         dump( tables->structTable, os );
    796                         os << "===enumTable===" << std::endl;
    797                         dump( tables->enumTable, os );
    798                         os << "===unionTable===" << std::endl;
    799                         dump( tables->unionTable, os );
    800                         os << "===contextTable===" << std::endl;
    801                         dump( tables->traitTable, os );
    802 
    803                         tables->base.print( os, indent );
    804                 } else {
    805                         os << "--- end ---" << std::endl;
    806                 }
    807 
     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 );
    808792        }
    809793} // namespace SymTab
  • src/SymTab/Indexer.h

    r1048b31 r1f6e009  
    5959                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6060                virtual void visit( OffsetofExpr *offsetofExpr );
    61                 virtual void visit( OffsetPackExpr *offsetPackExpr );
    6261                virtual void visit( AttrExpr *attrExpr );
    6362                virtual void visit( LogicalExpr *logicalExpr );
     
    9998                DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
    10099                /// returns true if there exists a declaration with C linkage and the given name with a different mangled name
    101                 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
     100                bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const;
    102101                // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope)
    103102                NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const;
  • src/SymTab/Validate.cc

    r1048b31 r1f6e009  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:39:30 2016
    13 // Update Count     : 251
     12// Last Modified On : Wed Mar  2 17:31:39 2016
     13// Update Count     : 226
    1414//
    1515
     
    4040#include <list>
    4141#include <iterator>
    42 #include "Common/utility.h"
    43 #include "Common/UniqueName.h"
    4442#include "Validate.h"
    4543#include "SynTree/Visitor.h"
    4644#include "SynTree/Mutator.h"
    4745#include "SynTree/Type.h"
    48 #include "SynTree/Expression.h"
    4946#include "SynTree/Statement.h"
    5047#include "SynTree/TypeSubstitution.h"
     
    5249#include "FixFunction.h"
    5350// #include "ImplementationType.h"
    54 #include "GenPoly/DeclMutator.h"
     51#include "Common/utility.h"
     52#include "Common/UniqueName.h"
    5553#include "AddVisit.h"
    5654#include "MakeLibCfa.h"
     
    7270
    7371                virtual void visit( CompoundStmt *compoundStmt );
     72                virtual void visit( IfStmt *ifStmt );
     73                virtual void visit( WhileStmt *whileStmt );
     74                virtual void visit( ForStmt *forStmt );
    7475                virtual void visit( SwitchStmt *switchStmt );
    7576                virtual void visit( ChooseStmt *chooseStmt );
    76                 // virtual void visit( CaseStmt *caseStmt );
     77                virtual void visit( CaseStmt *caseStmt );
     78                virtual void visit( CatchStmt *catchStmt );
    7779          private:
    7880                HoistStruct();
     
    142144
    143145                virtual void visit( CompoundStmt *compoundStmt );
     146                virtual void visit( IfStmt *ifStmt );
     147                virtual void visit( WhileStmt *whileStmt );
     148                virtual void visit( ForStmt *forStmt );
    144149                virtual void visit( SwitchStmt *switchStmt );
    145150                virtual void visit( ChooseStmt *chooseStmt );
    146                 // virtual void visit( CaseStmt *caseStmt );
     151                virtual void visit( CaseStmt *caseStmt );
     152                virtual void visit( CatchStmt *catchStmt );
    147153
    148154                AutogenerateRoutines() : functionNesting( 0 ) {}
     
    160166                /// and return something if the return type is non-void.
    161167                static void checkFunctionReturns( std::list< Declaration * > & translationUnit );
     168
    162169          private:
    163170                virtual void visit( FunctionDecl * functionDecl );
     
    190197                AggDecl *handleAggregate( AggDecl * aggDecl );
    191198
    192                 template<typename AggDecl>
    193                 void addImplicitTypedef( AggDecl * aggDecl );
    194                
    195199                typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap;
    196200                TypedefMap typedefNames;
     
    198202        };
    199203
    200         class CompoundLiteral : public GenPoly::DeclMutator {
    201                 DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass;
    202 
    203                 virtual DeclarationWithType * mutate( ObjectDecl *objectDecl );
    204                 virtual Expression *mutate( CompoundLiteralExpr *compLitExpr );
    205         };
    206 
    207204        void validate( std::list< Declaration * > &translationUnit, bool doDebug ) {
    208205                Pass1 pass1;
    209206                Pass2 pass2( doDebug, 0 );
    210207                Pass3 pass3( 0 );
    211                 CompoundLiteral compoundliteral;
    212 
    213208                EliminateTypedef::eliminateTypedef( translationUnit );
    214209                HoistStruct::hoistStruct( translationUnit );
     
    216211                acceptAll( translationUnit, pass2 );
    217212                ReturnChecker::checkFunctionReturns( translationUnit );
    218                 mutateAll( translationUnit, compoundliteral );
    219213                AutogenerateRoutines::autogenerateRoutines( translationUnit );
    220214                acceptAll( translationUnit, pass3 );
     
    298292        }
    299293
     294        void HoistStruct::visit( IfStmt *ifStmt ) {
     295                addVisit( ifStmt, *this );
     296        }
     297
     298        void HoistStruct::visit( WhileStmt *whileStmt ) {
     299                addVisit( whileStmt, *this );
     300        }
     301
     302        void HoistStruct::visit( ForStmt *forStmt ) {
     303                addVisit( forStmt, *this );
     304        }
     305
    300306        void HoistStruct::visit( SwitchStmt *switchStmt ) {
    301307                addVisit( switchStmt, *this );
     
    306312        }
    307313
    308         // void HoistStruct::visit( CaseStmt *caseStmt ) {
    309         //      addVisit( caseStmt, *this );
    310         // }
     314        void HoistStruct::visit( CaseStmt *caseStmt ) {
     315                addVisit( caseStmt, *this );
     316        }
     317
     318        void HoistStruct::visit( CatchStmt *cathStmt ) {
     319                addVisit( cathStmt, *this );
     320        }
    311321
    312322        void Pass1::visit( EnumDecl *enumDecl ) {
     
    864874        }
    865875
     876        void AutogenerateRoutines::visit( IfStmt *ifStmt ) {
     877                visitStatement( ifStmt );
     878        }
     879
     880        void AutogenerateRoutines::visit( WhileStmt *whileStmt ) {
     881                visitStatement( whileStmt );
     882        }
     883
     884        void AutogenerateRoutines::visit( ForStmt *forStmt ) {
     885                visitStatement( forStmt );
     886        }
     887
    866888        void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) {
    867889                visitStatement( switchStmt );
     
    872894        }
    873895
    874         // void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
    875         //      visitStatement( caseStmt );
    876         // }
     896        void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
     897                visitStatement( caseStmt );
     898        }
     899
     900        void AutogenerateRoutines::visit( CatchStmt *cathStmt ) {
     901                visitStatement( cathStmt );
     902        }
    877903
    878904        void ReturnChecker::checkFunctionReturns( std::list< Declaration * > & translationUnit ) {
     
    921947                                }
    922948                                rtt->get_parameters().clear();
    923                                 cloneAll( typeInst->get_parameters(), rtt->get_parameters() );
    924                                 mutateAll( rtt->get_parameters(), *this );  // recursively fix typedefs on parameters
     949                                cloneAll(typeInst->get_parameters(), rtt->get_parameters());
    925950                        } // if
    926951                        delete typeInst;
     
    10181043        }
    10191044
    1020         // there may be typedefs nested within aggregates in order for everything to work properly, these should be removed
    1021         // as well
     1045        // there may be typedefs nested within aggregates
     1046        // in order for everything to work properly, these
     1047        // should be removed as well
    10221048        template<typename AggDecl>
    10231049        AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) {
     
    10331059                return aggDecl;
    10341060        }
    1035        
    1036         template<typename AggDecl>
    1037         void EliminateTypedef::addImplicitTypedef( AggDecl * aggDecl ) {
    1038                 if ( typedefNames.count( aggDecl->get_name() ) == 0 ) {
    1039                         Type *type;
    1040                         if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( aggDecl ) ) {
    1041                                 type = new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() );
    1042                         } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( aggDecl ) ) {
    1043                                 type = new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() );
    1044                         } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( aggDecl )  ) {
    1045                                 type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() );
    1046                         } // if
    1047                         TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type );
    1048                         typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );
    1049                 } // if
    1050         }
     1061
    10511062        Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) {
    1052                 addImplicitTypedef( structDecl );
    10531063                Mutator::mutate( structDecl );
    10541064                return handleAggregate( structDecl );
     
    10561066
    10571067        Declaration *EliminateTypedef::mutate( UnionDecl * unionDecl ) {
    1058                 addImplicitTypedef( unionDecl );
    10591068                Mutator::mutate( unionDecl );
    10601069                return handleAggregate( unionDecl );
     
    10621071
    10631072        Declaration *EliminateTypedef::mutate( EnumDecl * enumDecl ) {
    1064                 addImplicitTypedef( enumDecl );
    10651073                Mutator::mutate( enumDecl );
    10661074                return handleAggregate( enumDecl );
    10671075        }
    10681076
    1069         Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
     1077                Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
    10701078                Mutator::mutate( contextDecl );
    10711079                return handleAggregate( contextDecl );
    10721080        }
    10731081
    1074         DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) {
    1075                 storageclass = objectDecl->get_storageClass();
    1076                 DeclarationWithType * temp = Mutator::mutate( objectDecl );
    1077                 storageclass = DeclarationNode::NoStorageClass;
    1078                 return temp;
    1079         }
    1080 
    1081         Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) {
    1082                 // transform [storage_class] ... (struct S){ 3, ... };
    1083                 // into [storage_class] struct S temp =  { 3, ... };
    1084                 static UniqueName indexName( "_compLit" );
    1085 
    1086                 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageclass, LinkageSpec::C, 0, compLitExpr->get_type(), compLitExpr->get_initializer() );
    1087                 compLitExpr->set_type( 0 );
    1088                 compLitExpr->set_initializer( 0 );
    1089                 delete compLitExpr;
    1090                 DeclarationWithType * newtempvar = mutate( tempvar );
    1091                 addDeclaration( newtempvar );                                   // add modified temporary to current block
    1092                 return new VariableExpr( newtempvar );
    1093         }
    10941082} // namespace SymTab
    10951083
  • src/SynTree/Expression.cc

    r1048b31 r1f6e009  
    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 : Fri Apr  8 17:16:23 2016
    13 // Update Count     : 40
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Dec 09 14:10:29 2015
     13// Update Count     : 34
    1414//
    1515
     
    2222
    2323#include "Type.h"
    24 #include "Initializer.h"
    2524#include "Expression.h"
    2625#include "Declaration.h"
     
    212211
    213212        os << " of ";
    214 
    215         if ( type ) {
    216                 type->print(os, indent + 2);
    217         } else {
    218                 os << "<NULL>";
    219         }
    220 
    221         os << std::endl;
    222         Expression::print( os, indent );
    223 }
    224 
    225 OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) {
    226         add_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) );
    227 }
    228 
    229 OffsetPackExpr::OffsetPackExpr( const OffsetPackExpr &other ) : Expression( other ), type( maybeClone( other.type ) ) {}
    230 
    231 OffsetPackExpr::~OffsetPackExpr() { delete type; }
    232 
    233 void OffsetPackExpr::print( std::ostream &os, int indent ) const {
    234         os << std::string( indent, ' ' ) << "Offset pack expression on ";
    235213
    236214        if ( type ) {
     
    465443
    466444
    467 CompoundLiteralExpr::CompoundLiteralExpr( Type * type, Initializer * initializer ) : type( type ), initializer( initializer ) {
    468         add_result( type->clone() );
    469 }
    470 
    471 CompoundLiteralExpr::CompoundLiteralExpr( const CompoundLiteralExpr &other ) : Expression( other ), type( maybeClone( other.type ) ), initializer( maybeClone( other.initializer ) ) {}
    472 
    473 CompoundLiteralExpr::~CompoundLiteralExpr() {
    474         delete initializer;
    475         delete type;
    476 }
    477 
    478 void CompoundLiteralExpr::print( std::ostream &os, int indent ) const {
    479         os << "Compound Literal Expression: " << std::endl;
    480         if ( type ) type->print( os, indent + 2 );
    481         if ( initializer ) initializer->print( os, indent + 2 );
    482 }
    483 
    484445
    485446std::ostream & operator<<( std::ostream & out, Expression * expr ) {
  • src/SynTree/Expression.h

    r1048b31 r1f6e009  
    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 : Fri Apr  8 17:18:06 2016
    13 // Update Count     : 21
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Dec 09 14:10:21 2015
     13// Update Count     : 19
    1414//
    1515
     
    362362};
    363363
    364 /// Expression representing a pack of field-offsets for a generic type
    365 class OffsetPackExpr : public Expression {
    366 public:
    367         OffsetPackExpr( StructInstType *type_, Expression *aname_ = 0 );
    368         OffsetPackExpr( const OffsetPackExpr &other );
    369         virtual ~OffsetPackExpr();
    370 
    371         StructInstType *get_type() const { return type; }
    372         void set_type( StructInstType *newValue ) { type = newValue; }
    373 
    374         virtual OffsetPackExpr *clone() const { return new OffsetPackExpr( *this ); }
    375         virtual void accept( Visitor &v ) { v.visit( this ); }
    376         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    377 
    378         virtual void print( std::ostream &os, int indent = 0 ) const;
    379 
    380 private:
    381         StructInstType *type;
    382 };
    383 
    384364/// AttrExpr represents an @attribute expression (like sizeof, but user-defined)
    385365class AttrExpr : public Expression {
     
    577557};
    578558
    579 /// CompoundLiteralExpr represents a C99 'compound literal'
    580 class CompoundLiteralExpr : public Expression {
    581   public:
    582         CompoundLiteralExpr( Type * type, Initializer * initializer );
    583         CompoundLiteralExpr( const CompoundLiteralExpr &other );
    584         ~CompoundLiteralExpr();
    585 
    586         Type * get_type() const { return type; }
    587         void set_type( Type * t ) { type = t; }
    588 
    589         Initializer * get_initializer() const { return initializer; }
    590         void set_initializer( Initializer * i ) { initializer = i; }
    591 
    592         virtual CompoundLiteralExpr *clone() const { return new CompoundLiteralExpr( *this ); }
    593         virtual void accept( Visitor &v ) { v.visit( this ); }
    594         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    595         virtual void print( std::ostream &os, int indent = 0 ) const;
    596   private:
    597         Type * type;
    598         Initializer * initializer;
    599 };
    600 
    601559std::ostream & operator<<( std::ostream & out, Expression * expr );
    602560
  • src/SynTree/Mutator.cc

    r1048b31 r1f6e009  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 18:05:16 2016
    13 // Update Count     : 16
     12// Last Modified On : Wed Mar  2 17:28:20 2016
     13// Update Count     : 12
    1414//
    1515
     
    274274}
    275275
    276 Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) {
    277         mutateAll( offsetPackExpr->get_results(), *this );
    278         offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) );
    279         return offsetPackExpr;
    280 }
    281 
    282276Expression *Mutator::mutate( AttrExpr *attrExpr ) {
    283277        mutateAll( attrExpr->get_results(), *this );
     
    340334        mutateAll( valofExpr->get_results(), *this );
    341335        return valofExpr;
    342 }
    343 
    344 Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) {
    345         mutateAll( compLitExpr->get_results(), *this );
    346         compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) );
    347         compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) );
    348         return compLitExpr;
    349336}
    350337
  • src/SynTree/Mutator.h

    r1048b31 r1f6e009  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 17:26:56 2016
    13 // Update Count     : 10
     12// Last Modified On : Wed Mar  2 17:33:11 2016
     13// Update Count     : 9
    1414//
    1515#include <cassert>
     
    6767        virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr );
    6868        virtual Expression* mutate( OffsetofExpr *offsetofExpr );
    69         virtual Expression* mutate( OffsetPackExpr *offsetPackExpr );
    7069        virtual Expression* mutate( AttrExpr *attrExpr );
    7170        virtual Expression* mutate( LogicalExpr *logicalExpr );
     
    7776        virtual Expression* mutate( AsmExpr *asmExpr );
    7877        virtual Expression* mutate( UntypedValofExpr *valofExpr );
    79         virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
    8078
    8179        virtual Type* mutate( VoidType *basicType );
  • src/SynTree/SynTree.h

    r1048b31 r1f6e009  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 16:47:44 2016
    13 // Update Count     : 5
     12// Last Modified On : Wed Mar  2 17:29:00 2016
     13// Update Count     : 4
    1414//
    1515
     
    7272class UntypedOffsetofExpr;
    7373class OffsetofExpr;
    74 class OffsetPackExpr;
    7574class AttrExpr;
    7675class LogicalExpr;
     
    8281class AsmExpr;
    8382class UntypedValofExpr;
    84 class CompoundLiteralExpr;
    8583
    8684class Type;
  • src/SynTree/Visitor.cc

    r1048b31 r1f6e009  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 18:05:13 2016
    13 // Update Count     : 18
     12// Last Modified On : Wed Mar  2 17:29:23 2016
     13// Update Count     : 16
    1414//
    1515
     
    230230}
    231231
    232 void Visitor::visit( OffsetPackExpr *offsetPackExpr ) {
    233         acceptAll( offsetPackExpr->get_results(), *this );
    234         maybeAccept( offsetPackExpr->get_type(), *this );
    235 }
    236 
    237232void Visitor::visit( AttrExpr *attrExpr ) {
    238233        acceptAll( attrExpr->get_results(), *this );
     
    287282        acceptAll( valofExpr->get_results(), *this );
    288283        maybeAccept( valofExpr->get_body(), *this );
    289 }
    290 
    291 void Visitor::visit( CompoundLiteralExpr *compLitExpr ) {
    292         acceptAll( compLitExpr->get_results(), *this );
    293         maybeAccept( compLitExpr->get_type(), *this );
    294         maybeAccept( compLitExpr->get_initializer(), *this );
    295284}
    296285
  • src/SynTree/Visitor.h

    r1048b31 r1f6e009  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 17:26:55 2016
    13 // Update Count     : 7
     12// Last Modified On : Wed Mar  2 17:33:35 2016
     13// Update Count     : 6
    1414//
    1515
     
    6767        virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6868        virtual void visit( OffsetofExpr *offsetofExpr );
    69         virtual void visit( OffsetPackExpr *offsetPackExpr );
    7069        virtual void visit( AttrExpr *attrExpr );
    7170        virtual void visit( LogicalExpr *logicalExpr );
     
    7776        virtual void visit( AsmExpr *asmExpr );
    7877        virtual void visit( UntypedValofExpr *valofExpr );
    79         virtual void visit( CompoundLiteralExpr *compLitExpr );
    8078
    8179        virtual void visit( VoidType *basicType );
  • src/Tuples/FlattenTuple.cc

    r1048b31 r1f6e009  
    4949        void FlattenTuple::CollectArgs::visit( UntypedOffsetofExpr *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5050        void FlattenTuple::CollectArgs::visit( OffsetofExpr        *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    51         void FlattenTuple::CollectArgs::visit( OffsetPackExpr      *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5251        void FlattenTuple::CollectArgs::visit( AttrExpr            *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5352        void FlattenTuple::CollectArgs::visit( LogicalExpr         *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
  • src/Tuples/FlattenTuple.h

    r1048b31 r1f6e009  
    4545                        virtual void visit( UntypedOffsetofExpr * );
    4646                        virtual void visit( OffsetofExpr * );
    47                         virtual void visit( OffsetPackExpr * );
    4847                        virtual void visit( AttrExpr * );
    4948                        virtual void visit( LogicalExpr * );
  • src/driver/cfa.cc

    r1048b31 r1f6e009  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 20 18:31:28 2016
    13 // Update Count     : 133
     12// Last Modified On : Thu Jan 28 18:24:06 2016
     13// Update Count     : 127
    1414//
    1515
     
    165165                                nargs += 1;
    166166                        } else if ( prefix( arg, "-std=" ) ) {
    167                                 std_flag = true;                                                // -std=XX provided
     167                                std_flag = true;                                                // std=XX provided
    168168                                args[nargs] = argv[i];                                  // pass the argument along
    169169                                nargs += 1;
     
    307307                nargs += 1;
    308308                if ( ! std_flag ) {                                                             // default c99, if none specified
    309                         args[nargs] = "-std=gnu99";
     309                        args[nargs] = "-std=c99";
    310310                        nargs += 1;
    311311                } // if
    312                 args[nargs] = "-fgnu89-inline";
    313                 nargs += 1;
    314312                args[nargs] = ( *new string( string("-B") + Bprefix + "/" ) ).c_str();
    315313                nargs += 1;
  • src/examples/swap.c

    r1048b31 r1f6e009  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr 21 08:10:41 2016
    13 // Update Count     : 69
     12// Last Modified On : Wed Mar  2 16:15:11 2016
     13// Update Count     : 65
    1414//
    1515
     
    2424
    2525        signed int i1 = -1, i2 = -2;
    26         sout | "signed int\t\t" | i1 | i2 | "\t\t\tswap ";
     26        sout | "signed int\t\t" | i1 | ' ' | i2 | "\t\t\tswap ";
    2727        swap( &i1, &i2 );
    28         sout | '\t' | i1 | i2 | endl;
     28        sout | '\t' | i1 | ' ' | i2 | endl;
    2929
    3030        unsigned int ui1 = 1, ui2 = 2;
    31         sout | "unsigned int\t\t" | ui1 | ui2 | "\t\t\tswap ";
     31        sout | "unsigned int\t\t" | ui1 | ' ' | ui2 | "\t\t\tswap ";
    3232        swap( &ui1, &ui2 );
    33         sout | '\t' | ui1 | ui2 | endl;
     33        sout | '\t' | ui1 | ' ' | ui2 | endl;
    3434
    3535        signed long int li1 = -1, li2 = -2;
    36         sout | "signed long int\t\t" | li1 | li2 | "\t\t\tswap ";
     36        sout | "signed long int\t\t" | li1 | ' ' | li2 | "\t\t\tswap ";
    3737        swap( &li1, &li2 );
    38         sout | '\t' | li1 | li2 | endl;
     38        sout | '\t' | li1 | ' ' | li2 | endl;
    3939
    4040        unsigned long int uli1 = 1, uli2 = 2;
    41         sout | "unsigned long int\t" | uli1 | uli2 | "\t\t\tswap ";
     41        sout | "unsigned long int\t" | uli1 | ' ' | uli2 | "\t\t\tswap ";
    4242        swap( &uli1, &uli2 );
    43         sout | '\t' | uli1 | uli2 | endl;
     43        sout | '\t' | uli1 | ' ' | uli2 | endl;
    4444
    4545        signed long long int lli1 = -1, lli2 = -2;
    46         sout | "signed long long int\t" | lli1 | lli2 | "\t\t\tswap ";
     46        sout | "signed long long int\t" | lli1 | ' ' | lli2 | "\t\t\tswap ";
    4747        swap( &lli1, &lli2 );
    48         sout | '\t' | lli1 | lli2 | endl;
     48        sout | '\t' | lli1 | ' ' | lli2 | endl;
    4949
    5050        unsigned long long int ulli1 = 1, ulli2 = 2;
    51         sout | "unsigned long long int\t" | ulli1 | ulli2 | "\t\t\tswap ";
     51        sout | "unsigned long long int\t" | ulli1 | ' ' | ulli2 | "\t\t\tswap ";
    5252        swap( &ulli1, &ulli2 );
    53         sout | '\t' | ulli1 | ulli2 | endl;
     53        sout | '\t' | ulli1 | ' ' | ulli2 | endl;
    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 );
    58         sout | '\t' | f1 | f2 | endl;
     58        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 );
    63         sout | '\t' | d1 | d2 | endl;
     63        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 );
    68         sout | '\t' | ld1 | ld2 | endl;
     68        sout | '\t' | ld1 | ' ' | ld2 | endl;
    6969
    7070        float _Complex fc1 = 1.5f+1.5if, fc2 = 2.5f+2.5if;
    71         sout | "float _Complex\t\t" | fc1 | fc2 | "\tswap ";
     71        sout | "float _Complex\t\t" | fc1 | ' ' | fc2 | "\tswap ";
    7272        swap( &fc1, &fc2 );
    73         sout | '\t' | fc1 | fc2 | endl;
     73        sout | '\t' | fc1 | ' ' | fc2 | endl;
    7474
    7575        double _Complex dc1 = 1.5d+1.5id, dc2 = 2.5d+2.5id;
    76         sout | "double _Complex\t\t" | dc1 | dc2 | "\tswap ";
     76        sout | "double _Complex\t\t" | dc1 | ' ' | dc2 | "\tswap ";
    7777        swap( &dc1, &dc2 );
    78         sout | '\t' | dc1 | dc2 | endl;
     78        sout | '\t' | dc1 | ' ' | dc2 | endl;
    7979
    8080        long double _Complex ldc1 = 1.5d+1.5il, ldc2 = 2.5d+2.5il;
    81         sout | "long double _Complex\t" | ldc1 | ldc2 | "\tswap ";
     81        sout | "long double _Complex\t" | ldc1 | ' ' | ldc2 | "\tswap ";
    8282        swap( &ldc1, &ldc2 );
    83         sout | '\t' | ldc1 | ldc2 | endl;
     83        sout | '\t' | ldc1 | ' ' | ldc2 | endl;
    8484
    8585        struct S { int i, j; } s1 = { 1, 2 }, s2 = { 2, 1 };
    86         ofstream * ?|?( ofstream * os, S s ) { return os | s.i | s.j; }
    87         sout | "struct S\t\t" | s1 | "," | s2 | "\t\tswap ";
     86        ofstream * ?|?( ofstream * os, S s ) { return os | s.i | ' ' | s.j; }
     87        sout | "struct S\t\t" | s1 | "  " | s2 | "\t\tswap ";
    8888        swap( &s1, &s2 );
    89         sout | '\t' | s1 | "," | s2 | endl;
     89        sout | '\t' | s1 | "  " | s2 | endl;
    9090} // main
    9191
  • src/libcfa/Makefile.am

    r1048b31 r1f6e009  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Tue Apr 19 22:30:17 2016
    14 ## Update Count     : 124
     13## Last Modified On : Wed Mar  2 22:59:23 2016
     14## Update Count     : 119
    1515###############################################################################
    1616
     
    6060        ${CC} ${CFLAGS} -c -o $@ $<
    6161
    62 libs = limits stdlib math iostream fstream iterator rational
     62libs = stdlib iostream fstream iterator
    6363libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    6464
    65 cheaders = # expat
    66 cfaheaders = # limits
     65cheaders = #  expat
     66cfaheaders = limits
    6767include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
    6868
  • src/libcfa/Makefile.in

    r1048b31 r1f6e009  
    8383libcfa_a_AR = $(AR) $(ARFLAGS)
    8484libcfa_a_LIBADD =
    85 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \
    86         iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \
    87         rational.$(OBJEXT)
     85am__objects_1 = stdlib.$(OBJEXT) iostream.$(OBJEXT) fstream.$(OBJEXT) \
     86        iterator.$(OBJEXT)
    8887am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
    8988libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
     
    214213MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} \
    215214        ${addprefix ${libdir}/,${lib_LIBRARIES}} ${includedir}/*
    216 libs = limits stdlib math iostream fstream iterator rational
     215libs = stdlib iostream fstream iterator
    217216libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    218 cheaders = # expat
    219 cfaheaders = # limits
     217cheaders = #  expat
     218cfaheaders = limits
    220219include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
    221220all: all-am
     
    298297@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@
    299298@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@
    300 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@
    301 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@
    302 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
    303299@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
    304300
  • src/libcfa/fstream

    r1048b31 r1f6e009  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr 28 08:08:04 2016
    13 // Update Count     : 88
     12// Last Modified On : Wed Mar  2 15:08:14 2016
     13// Update Count     : 78
    1414//
    1515
     
    2020
    2121enum { separateSize = 16 };
    22 struct ofstream {
    23         void *file;
    24         _Bool sepDefault;
    25         int sepOnOff;                                                                           // FIX ME: type should be _Bool
    26         char separator[separateSize];
    27 }; // ofstream
     22struct ofstream { void *file; int separate; char separator[separateSize]; };
    2823
    2924_Bool sepPrt( ofstream * );
    3025void sepOn( ofstream * );
    3126void sepOff( ofstream * );
    32 void sepReset( ofstream * );
    33 void sepReset( ofstream *, _Bool );
    3427void sepSet( ofstream *, const char * );
    3528const char * sepGet( ofstream * );
    36 _Bool sepDisable( ofstream * );
    37 _Bool sepEnable( ofstream * );
     29void sepDisable( ofstream * );
     30void sepEnable( ofstream * );
    3831int fail( ofstream * );
    3932int flush( ofstream * );
     
    4639
    4740// implement context istream
    48 struct ifstream {
    49         void *file;
    50 }; // ifstream
     41struct ifstream { void *file; };
    5142
    5243int fail( ifstream * is );
  • src/libcfa/fstream.c

    r1048b31 r1f6e009  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 27 18:20:30 2016
    13 // Update Count     : 187
     12// Last Modified On : Mon Feb 29 18:41:10 2016
     13// Update Count     : 162
    1414//
    1515
     
    2525}
    2626
    27 #define IO_MSG "I/O error: "
     27#define IO_MSG "I/O error "
    2828
    29 _Bool sepPrt( ofstream * os ) { return os->sepOnOff; }
    30 void sepOn( ofstream * os ) { os->sepOnOff = 1; }
    31 void sepOff( ofstream * os ) { os->sepOnOff = 0; }
    32 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
    33 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
     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; }
    3432void sepSet( ofstream * os, const char * s ) {
    3533        strncpy( &(os->separator[0]), s, separateSize - 1 );
     
    3735} // sepSet
    3836const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
    39 _Bool sepDisable( ofstream *os ) {
    40         _Bool temp = os->sepDefault;
    41         os->sepDefault = 0;
    42         sepReset( os );
    43         return temp;
    44 } // sepDisable
    45 _Bool sepEnable( ofstream *os ) {
    46         _Bool temp = os->sepDefault;
    47         os->sepDefault = 1;
    48         sepReset( os );
    49         return temp;
    50 } // sepEnable
     37void sepDisable( ofstream *os ) { os->separate = 2; }
     38void sepEnable( ofstream *os ) { os->separate = 0; }
    5139
    5240int fail( ofstream * os ) {
     
    6149        FILE *file = fopen( name, mode );
    6250        if ( file == 0 ) {                                                                      // do not change unless successful
    63                 fprintf( stderr, IO_MSG "open output file \"%s\", ", name );
    64                 perror( 0 );
     51                perror( IO_MSG "open output" );
    6552                exit( EXIT_FAILURE );
    6653        } // if
     
    9380int prtfmt( ofstream * os, const char fmt[], ... ) {
    9481    va_list args;
     82
    9583    va_start( args, fmt );
    9684    int len = vfprintf( (FILE *)(os->file), fmt, args );
     
    10290        } // if
    10391    va_end( args );
    104 
    105         sepReset( os );                                                                         // reset separator
    10692        return len;
    10793} // prtfmt
    10894
    10995
    110 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, { ' ', '\0' } };
     96static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } };
    11197ofstream *sout = &soutFile;
    112 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, { ' ', '\0' } };
     98static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } };
    11399ofstream *serr = &serrFile;
    114100
     
    128114        FILE *t = fopen( name, mode );
    129115        if ( t == 0 ) {                                                                         // do not change unless successful
    130                 fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
    131                 perror( 0 );
     116                perror( IO_MSG "open input" );
    132117                exit( EXIT_FAILURE );
    133118        } // if
     
    190175// Local Variables: //
    191176// tab-width: 4 //
     177// compile-command: "cfa fstream.c" //
    192178// End: //
  • src/libcfa/iostream

    r1048b31 r1f6e009  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Apr 10 23:00:12 2016
    13 // Update Count     : 92
     12// Last Modified On : Wed Mar  2 18:05:27 2016
     13// Update Count     : 85
    1414//
    1515
     
    2020
    2121trait ostream( dtype ostype ) {
    22         _Bool sepPrt( ostype * );                                                       // return separator state (on/off)
    23         void sepOn( ostype * );                                                         // turn separator state on
    24         void sepOff( ostype * );                                                        // turn separator state off
    25         void sepReset( ostype * );                                                      // set separator state to default state
    26         void sepReset( ostype *, _Bool );                                       // set separator and default state
    27         void sepSet( ostype *, const char * );                          // set separator to string (15 character maximum)
    28         const char * sepGet( ostype * );                                        // get separator string
    29         _Bool sepDisable( ostype * );                                           // set default state to off, and return previous state
    30         _Bool sepEnable( ostype * );                                            // set default state to on, and return previous state
    31 
     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 * );
    3229        int fail( ostype * );
    3330        int flush( ostype * );
     
    7067forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
    7168forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
    72 forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * );
    73 forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * );
    7469
    7570// writes the range [begin, end) to the given stream
     
    115110forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
    116111
    117 struct _Istream_cstrUC { char * s; };
    118 _Istream_cstrUC cstr( char * );
    119 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC );
     112struct _Istream_str1 { char * s; };
     113_Istream_str1 str( char * );
     114forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 );
    120115
    121 struct _Istream_cstrC { char * s; int size; };
    122 _Istream_cstrC cstr( char *, int size );
    123 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
     116struct _Istream_str2 { char * s; int size; };
     117_Istream_str2 str( char *, int size );
     118forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 );
    124119
    125120#endif // __IOSTREAM_H__
  • src/libcfa/iostream.c

    r1048b31 r1f6e009  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Apr 30 14:00:53 2016
    13 // Update Count     : 302
     12// Last Modified On : Mon Mar  7 13:51:23 2016
     13// Update Count     : 227
    1414//
    1515
     
    2727ostype * ?|?( ostype *os, char c ) {
    2828        prtfmt( os, "%c", c );
    29         sepOff( os );
    3029        return os;
    3130} // ?|?
     
    3332forall( dtype ostype | ostream( ostype ) )
    3433ostype * ?|?( ostype *os, short int si ) {
    35         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     34        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    3635        prtfmt( os, "%hd", si );
    3736        return os;
     
    4039forall( dtype ostype | ostream( ostype ) )
    4140ostype * ?|?( ostype *os, unsigned short int usi ) {
    42         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     41        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    4342        prtfmt( os, "%hu", usi );
    4443        return os;
     
    4746forall( dtype ostype | ostream( ostype ) )
    4847ostype * ?|?( ostype *os, int i ) {
    49         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     48        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    5049        prtfmt( os, "%d", i );
    5150        return os;
     
    5453forall( dtype ostype | ostream( ostype ) )
    5554ostype * ?|?( ostype *os, unsigned int ui ) {
    56         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     55        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    5756        prtfmt( os, "%u", ui );
    5857        return os;
     
    6160forall( dtype ostype | ostream( ostype ) )
    6261ostype * ?|?( ostype *os, long int li ) {
    63         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     62        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    6463        prtfmt( os, "%ld", li );
    6564        return os;
     
    6867forall( dtype ostype | ostream( ostype ) )
    6968ostype * ?|?( ostype *os, unsigned long int uli ) {
    70         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     69        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    7170        prtfmt( os, "%lu", uli );
    7271        return os;
     
    7574forall( dtype ostype | ostream( ostype ) )
    7675ostype * ?|?( ostype *os, long long int lli ) {
    77         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     76        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    7877        prtfmt( os, "%lld", lli );
    7978        return os;
     
    8281forall( dtype ostype | ostream( ostype ) )
    8382ostype * ?|?( ostype *os, unsigned long long int ulli ) {
    84         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     83        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    8584        prtfmt( os, "%llu", ulli );
    8685        return os;
     
    8988forall( dtype ostype | ostream( ostype ) )
    9089ostype * ?|?( ostype *os, float f ) {
    91         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     90        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    9291        prtfmt( os, "%g", f );
    9392        return os;
     
    9695forall( dtype ostype | ostream( ostype ) )
    9796ostype * ?|?( ostype *os, double d ) {
    98         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     97        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    9998        prtfmt( os, "%.*lg", DBL_DIG, d );
    10099        return os;
     
    103102forall( dtype ostype | ostream( ostype ) )
    104103ostype * ?|?( ostype *os, long double ld ) {
    105         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     104        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    106105        prtfmt( os, "%.*Lg", LDBL_DIG, ld );
    107106        return os;
     
    111110ostype * ?|?( ostype *os, float _Complex fc ) {
    112111        os | crealf( fc );
    113         _Bool temp = sepDisable( os );                                          // disable separators within complex value
    114         if ( cimagf( fc ) >= 0 ) os | '+';                                      // negative value prints '-'
    115         os | cimagf( fc ) | 'i';
    116         sepReset( os, temp );                                                           // reset separator
     112        if ( cimagf( fc ) >= 0 ) os | '+';
     113        os | "" | cimagf( fc ) | 'i';
    117114        return os;
    118115} // ?|?
     
    121118ostype * ?|?( ostype *os, double _Complex dc ) {
    122119        os | creal( dc );
    123         _Bool temp = sepDisable( os );                                          // disable separators within complex value
    124         if ( cimag( dc ) >= 0 ) os | '+';                                       // negative value prints '-'
    125         os | cimag( dc ) | 'i';
    126         sepReset( os, temp );                                                           // reset separator
     120        if ( cimag( dc ) >= 0 ) os | '+';
     121        os | "" | cimag( dc ) | 'i';
    127122        return os;
    128123} // ?|?
     
    131126ostype * ?|?( ostype *os, long double _Complex ldc ) {
    132127        os | creall( ldc );
    133         _Bool temp = sepDisable( os );                                          // disable separators within complex value
    134         if ( cimagl( ldc ) >= 0 ) os | '+';                                     // negative value prints '-'
    135         os | cimagl( ldc ) | 'i';
    136         sepReset( os, temp );                                                           // reset separator
     128        if ( cimagl( ldc ) >= 0 ) os | '+';
     129        os | "" | cimagl( ldc ) | 'i';
    137130        return os;
    138131} // ?|?
     
    141134ostype * ?|?( ostype *os, const char *cp ) {
    142135        enum { Open = 1, Close, OpenClose };
    143         static const unsigned char mask[256] = {
     136        static const char mask[256] = {
    144137                // opening delimiters
    145138                ['('] : Open, ['['] : Open, ['{'] : Open,
    146                 ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
    147                 [(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
     139                ['$'] : Open, [L'£'] : Open, [L'¥'] : Open, [L'¢'] : Open, [L'¿'] : Open, [L'«'] : Open,
    148140                // closing delimiters
    149141                [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
    150142                [')'] : Close, [']'] : Close, ['}'] : Close,
    151                 ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
     143                ['%'] : Close, [L'»'] : Close,
    152144                // opening-closing delimiters
    153145                ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
    154                 [' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
    155146        }; // mask
    156147
    157   if ( cp[0] == '\0' ) { sepOff( os ); return os; }             // null string => no separator
    158 
    159         // first character IS NOT spacing or closing punctuation => add left separator
    160         unsigned char ch = cp[0];                                                       // must make unsigned
    161         if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) {
     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 ) {
    162153                prtfmt( os, "%s", sepGet( os ) );
    163154        } // if
    164 
    165         // if string starts line, must reset to determine open state because separator is off
    166         sepReset( os );                                                                         // reset separator
    167 
    168155        // last character IS spacing or opening punctuation => turn off separator for next item
    169         unsigned int len = strlen( cp ), posn = len - 1;
    170         ch = cp[posn];                                                                          // must make unsigned
    171         if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) {
     156        unsigned int posn = len - 1;
     157        if ( isspace( cp[posn] ) || mask[ cp[posn] ] == Open || mask[ cp[posn] ] == OpenClose ) {
     158                sepOff( os );
     159        } else {
    172160                sepOn( os );
    173         } else {
    174                 sepOff( os );
    175161        } // if
    176162        return write( os, cp, len );
     
    179165forall( dtype ostype | ostream( ostype ) )
    180166ostype * ?|?( ostype *os, const void *p ) {
    181         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     167        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
    182168        prtfmt( os, "%p", p );
    183169        return os;
    184170} // ?|?
     171
    185172
    186173forall( dtype ostype | ostream( ostype ) )
     
    209196} // sepOff
    210197
    211 forall( dtype ostype | ostream( ostype ) )
    212 ostype * sepEnable( ostype * os ) {
    213         sepEnable( os );
    214         return os;
    215 } // sepEnable
    216 
    217 forall( dtype ostype | ostream( ostype ) )
    218 ostype * sepDisable( ostype * os ) {
    219         sepDisable( os );
    220         return os;
    221 } // sepDisable
    222 
    223198//---------------------------------------
    224199
     
    335310} // ?|?
    336311
    337 _Istream_cstrUC cstr( char * s ) { _Istream_cstrUC s = { s }; return s; }
    338 forall( dtype istype | istream( istype ) )
    339 istype * ?|?( istype * is, _Istream_cstrUC cstr ) {
    340         scanfmt( is, "%s", cstr.s );
    341         return is;
    342 } // cstr
    343 
    344 _Istream_cstrC cstr( char * s, int size ) { _Istream_cstrC s = { s, size }; return s; }
    345 forall( dtype istype | istream( istype ) )
    346 istype * ?|?( istype * is, _Istream_cstrC cstr ) {
     312_Istream_str1 str( char * s ) { _Istream_str1 s = { s }; 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 * s, int size ) { _Istream_str2 s = { s, size }; return s; }
     320forall( dtype istype | istream( istype ) )
     321istype * ?|?( istype * is, _Istream_str2 str ) {
    347322        char buf[16];
    348         sprintf( buf, "%%%ds", cstr.size );
    349         scanfmt( is, buf, cstr.s );
    350         return is;
    351 } // cstr
     323        sprintf( buf, "%%%ds", str.size );
     324        scanfmt( is, buf, str.s );
     325        return is;
     326} // str
    352327
    353328// Local Variables: //
  • src/libcfa/limits

    r1048b31 r1f6e009  
    1 //
    2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    3 //
    4 // The contents of this file are covered under the licence agreement in the
    5 // file "LICENCE" distributed with Cforall.
    6 //
    7 // limits --
    8 //
    9 // Author           : Peter A. Buhr
    10 // Created On       : Wed Apr  6 18:06:52 2016
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr  6 21:08:16 2016
    13 // Update Count     : 6
    14 //
    15 
    161// Integral Constants
    172
    18 extern const short int MIN;
    19 extern const int MIN;
    20 extern const long int MIN;
    21 extern const long long int MIN;
     3const short int MIN = -32768;
     4const int MIN = -2147483648;
     5const long int MIN = -9223372036854775807L - 1L;
     6const long long int MIN = -9223372036854775807LL - 1LL;
    227
    23 extern const short int MAX;
    24 extern const unsigned short int MAX;
    25 extern const int MAX;
    26 extern const unsigned int MAX;
    27 extern const long int MAX;
    28 extern const unsigned long int MAX;
    29 extern const long long int MAX;
    30 extern const unsigned long long int MAX;
     8const short int MAX = 32767;
     9const unsigned short int MAX = 65535;
     10const int MAX = 2147483647;
     11const unsigned int MAX = 4294967295_U;
     12const long int MAX = 9223372036854775807_L;
     13const unsigned long int MAX = 4294967295_U;
     14const long long int MAX = 9223372036854775807_LL;
     15const unsigned long long int MAX = 18446744073709551615_ULL;
    3116
    3217// Floating-Point Constants
    3318
    34 extern const float PI;                                                                  // pi
    35 extern const float PI_2;                                                                // pi / 2
    36 extern const float PI_4;                                                                // pi / 4
    37 extern const float _1_PI;                                                               // 1 / pi
    38 extern const float _2_PI;                                                               // 2 / pi
    39 extern const float _2_SQRT_PI;                                                  // 2 / sqrt(pi)
     19const float PI = 3.141592_F;                            // pi
     20const float PI_2 = 1.570796_F;                          // pi / 2
     21const float PI_4 = 0.7853981_F;                         // pi / 4
     22const float _1_PI = 0.3183098_F;                        // 1 / pi
     23const float _2_PI = 0.6366197_F;                        // 2 / pi
     24const float _2_SQRT_PI = 1.128379_F;                    // 2 / sqrt(pi)
    4025
    41 extern const double PI;                                                                 // pi
    42 extern const double PI_2;                                                               // pi / 2
    43 extern const double PI_4;                                                               // pi / 4
    44 extern const double _1_PI;                                                              // 1 / pi
    45 extern const double _2_PI;                                                              // 2 / pi
    46 extern const double _2_SQRT_PI;                                                 // 2 / sqrt(pi)
     26const double PI = 3.14159265358979323846_D;             // pi
     27const double PI_2 = 1.57079632679489661923_D;           // pi / 2
     28const double PI_4 = 0.78539816339744830962_D;           // pi / 4
     29const double _1_PI = 0.31830988618379067154_D;          // 1 / pi
     30const double _2_PI = 0.63661977236758134308_D;          // 2 / pi
     31const double _2_SQRT_PI = 1.12837916709551257390_D;     // 2 / sqrt(pi)
    4732
    48 extern const long double PI;                                                    // pi
    49 extern const long double PI_2;                                                  // pi / 2
    50 extern const long double PI_4;                                                  // pi / 4
    51 extern const long double _1_PI;                                                 // 1 / pi
    52 extern const long double _2_PI;                                                 // 2 / pi
    53 extern const long double _2_SQRT_PI;                                    // 2 / sqrt(pi)
     33const long double PI = 3.1415926535897932384626433832795029_DL; // pi
     34const long double PI_2 = 1.5707963267948966192313216916397514_DL; // pi / 2
     35const long double PI_4 = 0.7853981633974483096156608458198757_DL; // pi / 4
     36const long double _1_PI = 0.3183098861837906715377675267450287_DL; // 1 / pi
     37const long double _2_PI = 0.6366197723675813430755350534900574_DL; // 2 / pi
     38const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL; // 2 / sqrt(pi)
    5439
    55 extern const _Complex PI;                                                               // pi
    56 extern const _Complex PI_2;                                                             // pi / 2
    57 extern const _Complex PI_4;                                                             // pi / 4
    58 extern const _Complex _1_PI;                                                    // 1 / pi
    59 extern const _Complex _2_PI;                                                    // 2 / pi
    60 extern const _Complex _2_SQRT_PI;                                               // 2 / sqrt(pi)
     40const _Complex PI = 3.14159265358979323846_D+0.0_iD;    // pi
     41const _Complex PI_2 = 1.57079632679489661923_D+0.0_iD;  // pi / 2
     42const _Complex PI_4 = 0.78539816339744830962_D+0.0_iD;  // pi / 4
     43const _Complex _1_PI = 0.31830988618379067154_D+0.0_iD; // 1 / pi
     44const _Complex _2_PI = 0.63661977236758134308_D+0.0_iD; // 2 / pi
     45const _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD; // 2 / sqrt(pi)
    6146
    62 extern const long _Complex PI;                                                  // pi
    63 extern const long _Complex PI_2;                                                // pi / 2
    64 extern const long _Complex PI_4;                                                // pi / 4
    65 extern const long _Complex _1_PI;                                               // 1 / pi
    66 extern const long _Complex _2_PI;                                               // 2 / pi
    67 extern const long _Complex _2_SQRT_PI;                                  // 2 / sqrt(pi)
     47const long _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL; // pi
     48const long _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL; // pi / 2
     49const long _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL; // pi / 4
     50const long _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL; // 1 / pi
     51const long _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL; // 2 / pi
     52const long _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL; // 2 / sqrt(pi)
    6853
    69 extern const float E;                                                                   // e
    70 extern const float LOG2_E;                                                              // log_2(e)
    71 extern const float LOG10_E;                                                             // log_10(e)
    72 extern const float LN_2;                                                                // log_e(2)
    73 extern const float LN_10;                                                               // log_e(10)
    74 extern const float SQRT_2;                                                              // sqrt(2)
    75 extern const float _1_SQRT_2;                                                   // 1 / sqrt(2)
     54const float E = 2.718281;                               // e
     55const float LOG2_E = 1.442695;                          // log_2(e)
     56const float LOG10_E = 0.4342944;                        // log_10(e)
     57const float LN_2 = 0.6931471;                           // log_e(2)
     58const float LN_10 = 2.302585;                           // log_e(10)
     59const float SQRT_2 = 1.414213;                          // sqrt(2)
     60const float _1_SQRT_2 = 0.7071067;                      // 1 / sqrt(2)
    7661
    77 extern const double E;                                                                  // e
    78 extern const double LOG2_E;                                                             // log_2(e)
    79 extern const double LOG10_E;                                                    // log_10(e)
    80 extern const double LN_2;                                                               // log_e(2)
    81 extern const double LN_10;                                                              // log_e(10)
    82 extern const double SQRT_2;                                                             // sqrt(2)
    83 extern const double _1_SQRT_2;                                                  // 1 / sqrt(2)
     62const double E = 2.7182818284590452354_D;               // e
     63const double LOG2_E = 1.4426950408889634074_D;          // log_2(e)
     64const double LOG10_E = 0.43429448190325182765_D;        // log_10(e)
     65const double LN_2 = 0.69314718055994530942_D;           // log_e(2)
     66const double LN_10 = 2.30258509299404568402_D;          // log_e(10)
     67const double SQRT_2 = 1.41421356237309504880_D;         // sqrt(2)
     68const double _1_SQRT_2 = 0.70710678118654752440_D;      // 1 / sqrt(2)
    8469
    85 extern const long double E;                                                             // e
    86 extern const long double LOG2_E;                                                // log_2(e)
    87 extern const long double LOG10_E;                                               // log_10(e)
    88 extern const long double LN_2;                                                  // log_e(2)
    89 extern const long double LN_10;                                                 // log_e(10)
    90 extern const long double SQRT_2;                                                // sqrt(2)
    91 extern const long double _1_SQRT_2;                                             // 1/sqrt(2)
     70const long double E = 2.7182818284590452353602874713526625_DL; // e
     71const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e)
     72const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e)
     73const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2)
     74const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10)
     75const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2)
     76const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2)
    9277
    93 extern const _Complex E;                                                                // e
    94 extern const _Complex LOG2_E;                                                   // log_2(e)
    95 extern const _Complex LOG10_E;                                                  // log_10(e)
    96 extern const _Complex LN_2;                                                             // log_e(2)
    97 extern const _Complex LN_10;                                                    // log_e(10)
    98 extern const _Complex SQRT_2;                                                   // sqrt(2)
    99 extern const _Complex _1_SQRT_2;                                                // 1 / sqrt(2)
     78const _Complex E = 2.7182818284590452354_D+0.0_iD;      // e
     79const _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD; // log_2(e)
     80const _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD; // log_10(e)
     81const _Complex LN_2 = 0.69314718055994530942_D+0.0_iD;  // log_e(2)
     82const _Complex LN_10 = 2.30258509299404568402_D+0.0_iD; // log_e(10)
     83const _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD;        // sqrt(2)
     84const _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD; // 1 / sqrt(2)
    10085
    101 extern const long _Complex E;                                                   // e
    102 extern const long _Complex LOG2_E;                                              // log_2(e)
    103 extern const long _Complex LOG10_E;                                             // log_10(e)
    104 extern const long _Complex LN_2;                                                // log_e(2)
    105 extern const long _Complex LN_10;                                               // log_e(10)
    106 extern const long _Complex SQRT_2;                                              // sqrt(2)
    107 extern const long _Complex _1_SQRT_2;                                   // 1 / sqrt(2)
    108 
    109 // Local Variables: //
    110 // mode: c //
    111 // tab-width: 4 //
    112 // End: //
     86const long _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e
     87const long _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e)
     88const long _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e)
     89const long _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2)
     90const long _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10)
     91const long _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2)
     92const long _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2)
  • src/libcfa/stdlib

    r1048b31 r1f6e009  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 27 22:03:29 2016
    13 // Update Count     : 96
     12// Last Modified On : Tue Mar 22 22:34:24 2016
     13// Update Count     : 69
    1414//
    1515
     
    2020} // extern "C"
    2121
    22 //---------------------------------------
    23 
    24 extern "C" {
    25 #ifndef EXIT_FAILURE
    26 #define EXIT_FAILURE    1                                                               // failing exit status
    27 #define EXIT_SUCCESS    0                                                               // successful exit status
    28 #endif // ! EXIT_FAILURE
    29 void exit( int rc );
    30 void abort( void );
    31 } // extern "C"
    32 
    33 //---------------------------------------
    34 
    35 extern "C" { void * malloc( size_t ); }                                 // use default C routine for void *
    3622forall( otype T ) T * malloc( void );
    3723forall( otype T ) T * malloc( char fill );
    3824forall( otype T ) T * malloc( T * ptr, size_t size );
    3925forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    40 extern "C" { void * calloc( size_t nmemb, size_t size ); } // use default C routine for void *
    41 forall( otype T ) T * calloc( size_t nmemb );
    42 extern "C" { void * realloc( void * ptr, size_t size ); } // use default C routine for void *
     26forall( otype T ) T * calloc( size_t size );
    4327forall( otype T ) T * realloc( T * ptr, size_t size );
    4428forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
     
    4832forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    4933
    50 extern "C" {
    51 void * memset( void * ptr, int fill, size_t size );
    52 void free( void * ptr );
    53 } // extern "C"
     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
    5436
    5537//---------------------------------------
     
    9779
    9880char abs( char );
    99 extern "C" { int abs( int ); }                                                  // use default C routine for int
     81extern "C" {
     82int abs( int );         // use default C routine for int
     83} // extern
    10084long int abs( long int );
    10185long long int abs( long long int );
     
    10387double abs( double );
    10488long double abs( long double );
    105 float abs( float _Complex );
    106 double abs( double _Complex );
    107 long double abs( long double _Complex );
     89float _Complex abs( float _Complex );
     90double _Complex abs( double _Complex );
     91long double _Complex abs( long double _Complex );
    10892
    10993//---------------------------------------
  • src/libcfa/stdlib.c

    r1048b31 r1f6e009  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr 28 07:54:21 2016
    13 // Update Count     : 166
     12// Last Modified On : Wed Mar 23 13:26:42 2016
     13// Update Count     : 146
    1414//
    1515
     
    2424#include <malloc.h>                                                                             // malloc_usable_size
    2525#include <math.h>                                                                               // fabsf, fabs, fabsl
    26 #include <complex.h>                                                                    // _Complex_I
     26#include <complex.h>                                                                    // _Complex_I, cabsf, cabs, cabsl
    2727} // extern "C"
    2828
    2929forall( otype T ) T * malloc( void ) {
    30         //printf( "malloc1\n" );
     30        printf( "malloc1\n" );
    3131    return (T *)malloc( sizeof(T) );
    3232} // malloc
     33forall( otype T ) T * malloc( size_t size ) {
     34        printf( "malloc2\n" );
     35    return (T *)(void *)malloc( size );
     36} // malloc
    3337forall( otype T ) T * malloc( char fill ) {
    34         //printf( "malloc3\n" );
     38        printf( "malloc3\n" );
    3539        T * ptr = (T *)malloc( sizeof(T) );
    36     return memset( ptr, (int)fill, sizeof(T) );
    37 } // malloc
    38 
    39 forall( otype T ) T * calloc( size_t nmemb ) {
    40         //printf( "calloc\n" );
    41     return (T *)calloc( nmemb, sizeof(T) );
     40    return memset( ptr );
     41} // malloc
     42
     43forall( otype T ) T * calloc( size_t size ) {
     44        printf( "calloc\n" );
     45    return (T *)calloc( size, sizeof(T) );
    4246} // calloc
    4347
    4448forall( otype T ) T * realloc( T * ptr, size_t size ) {
    45         //printf( "realloc1\n" );
     49        printf( "realloc1\n" );
    4650    return (T *)(void *)realloc( (void *)ptr, size );
    4751} // realloc
    4852forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
    49         //printf( "realloc2\n" );
     53        printf( "realloc2\n" );
    5054    char * nptr = (T *)(void *)realloc( (void *)ptr, size );
    5155    size_t unused = malloc_usable_size( nptr );
     
    5559
    5660forall( otype T ) T * malloc( T * ptr, size_t size ) {
    57         //printf( "malloc4\n" );
     61        printf( "malloc4\n" );
    5862    return (T *)realloc( ptr, size );
    5963} // malloc
    6064forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
    61         //printf( "malloc5\n" );
     65        printf( "malloc5\n" );
    6266    return (T *)realloc( ptr, size, fill );
    6367} // malloc
    6468
    6569forall( otype T ) T * aligned_alloc( size_t alignment ) {
    66         //printf( "aligned_alloc\n" );
     70        printf( "aligned_alloc\n" );
    6771    return (T *)memalign( alignment, sizeof(T) );
    6872} // aligned_alloc
    6973
    7074forall( otype T ) T * memalign( size_t alignment ) {
    71         //printf( "memalign\n" );
     75        printf( "memalign\n" );
    7276    return (T *)memalign( alignment, sizeof(T) );
    7377} // memalign
    7478
    7579forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
    76         //printf( "posix_memalign\n" );
     80        printf( "posix_memalign\n" );
    7781    return posix_memalign( (void **)ptr, alignment, sizeof(T) );
    7882} // posix_memalign
    7983
     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
     92
    8093//---------------------------------------
    8194
    8295int ato( const char * ptr ) {
    8396        int i;
    84         if ( sscanf( ptr, "%d", &i ) == EOF ) {}
     97        if ( sscanf( ptr, "%d", &i ) == EOF ) {}                        // check return code
    8598        return i;
    8699}
    87100unsigned int ato( const char * ptr ) {
    88101        unsigned int ui;
    89         if ( sscanf( ptr, "%u", &ui ) == EOF ) {}
     102        if ( sscanf( ptr, "%u", &ui ) == EOF ) {}                       // check return code
    90103        return ui;
    91104}
    92105long int ato( const char * ptr ) {
    93106        long int li;
    94         if ( sscanf( ptr, "%ld", &li ) == EOF ) {}
     107        if ( sscanf( ptr, "%ld", &li ) == EOF ) {}                      // check return code
    95108        return li;
    96109}
    97110unsigned long int ato( const char * ptr ) {
    98111        unsigned long int uli;
    99         if ( sscanf( ptr, "%lu", &uli ) == EOF ) {}
     112        if ( sscanf( ptr, "%lu", &uli ) == EOF ) {}                     // check return code
    100113        return uli;
    101114}
    102115long long int ato( const char * ptr ) {
    103116        long long int lli;
    104         if ( sscanf( ptr, "%lld", &lli ) == EOF ) {}
     117        if ( sscanf( ptr, "%lld", &lli ) == EOF ) {}            // check return code
    105118        return lli;
    106119}
    107120unsigned long long int ato( const char * ptr ) {
    108121        unsigned long long int ulli;
    109         if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {}
     122        if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {}           // check return code
    110123        return ulli;
    111124}
     
    113126float ato( const char * ptr ) {
    114127        float f;
    115         if ( sscanf( ptr, "%f", &f ) == EOF ) {}
     128        if ( sscanf( ptr, "%f", &f ) == EOF ) {}                        // check return code
    116129        return f;
    117130}
    118131double ato( const char * ptr ) {
    119132        double d;
    120         if ( sscanf( ptr, "%lf", &d ) == EOF ) {}
     133        if ( sscanf( ptr, "%lf", &d ) == EOF ) {}                       // check return code
    121134        return d;
    122135}
    123136long double ato( const char * ptr ) {
    124137        long double ld;
    125         if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {}
     138        if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {}                      // check return code
    126139        return ld;
    127140}
     
    129142float _Complex ato( const char * ptr ) {
    130143        float re, im;
    131         if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {}
     144        if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {}       // check return code
    132145        return re + im * _Complex_I;
    133146}
    134147double _Complex ato( const char * ptr ) {
    135148        double re, im;
    136         if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {}
     149        if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {} // check return code
    137150        return re + im * _Complex_I;
    138151}
    139152long double _Complex ato( const char * ptr ) {
    140153        long double re, im;
    141         if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}
     154        if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}     // check return code
    142155        return re + im * _Complex_I;
    143156}       
     
    213226//---------------------------------------
    214227
    215 // forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
    216 // [ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ]; }
     228forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
     229[ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
    217230
    218231//---------------------------------------
     
    221234long int abs( long int v ) { return labs( v ); }
    222235long long int abs( long long int v ) { return llabs( v ); }
    223 float abs( float x ) { return fabsf( x ); }
    224 double abs( double x ) { return fabs( x ); }
    225 long double abs( long double x ) { return fabsl( x ); }
    226 float abs( float _Complex x ) { return cabsf( x ); }
    227 double abs( double _Complex x ) { return cabs( x ); }
    228 long double abs( long double _Complex x ) { return cabsl( x ); }
     236float abs( float v ) { return fabsf( v ); }
     237double abs( double v ) { return fabs( v ); }
     238long double abs( long double v ) { return fabsl( v ); }
     239float _Complex abs( float _Complex v ) { return cabsf( v ); }
     240double _Complex abs( double _Complex v ) { return cabs( v ); }
     241long double _Complex abs( long double _Complex v ) { return cabsl( v ); }
    229242
    230243//---------------------------------------
Note: See TracChangeset for help on using the changeset viewer.