Changeset 3078643


Ignore:
Timestamp:
Aug 10, 2016, 2:29:44 PM (6 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
be0a9d8, ef42e764
Parents:
f18a711 (diff), a563f01 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    rf18a711 r3078643  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 20:49:31 2016
    13 // Update Count     : 164
     12// Last Modified On : Tue Aug  9 08:39:20 2016
     13// Update Count     : 169
    1414//
    1515
     
    4949        newnode->name = name;
    5050        newnode->storageClasses = storageClasses;
    51         newnode->bitfieldWidth = maybeClone( bitfieldWidth );
     51//PAB   newnode->bitfieldWidth = maybeClone( bitfieldWidth );
     52        newnode->bitfieldWidth = bitfieldWidth;
    5253        newnode->hasEllipsis = hasEllipsis;
    5354        newnode->initializer = initializer;
     
    283284        newnode->type->array->dimension = size;
    284285        newnode->type->array->isStatic = isStatic;
    285         if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantNode *>( newnode->type->array->dimension ) ) {
     286        if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantExpr *>( newnode->type->array->dimension->build() ) ) {
    286287                newnode->type->array->isVarLen = false;
    287288        } else {
  • src/Parser/ExpressionNode.cc

    rf18a711 r3078643  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Aug  5 07:56:23 2016
    13 // Update Count     : 375
     12// Last Modified On : Wed Aug 10 11:07:38 2016
     13// Update Count     : 486
    1414//
    1515
    1616#include <cassert>
    1717#include <cctype>
     18#include <climits>
     19#include <cstdio>
    1820#include <algorithm>
    1921#include <sstream>
    20 #include <cstdio>
    2122
    2223#include "ParseNode.h"
     
    3132using namespace std;
    3233
    33 ExpressionNode::ExpressionNode() : ParseNode() {}
    34 
    35 ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
    36 
    37 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
    38         if ( other.argName ) {
    39                 argName = other.argName->clone();
    40         } else {
    41                 argName = 0;
    42         } // if
    43 }
    44 
    45 ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) {
    46         argName = new VarRefNode( aName );
    47         return this;
    48 }
    49 
    50 ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) {
    51         argName = aDesignator;
    52         return this;
    53 }
    54 
    55 void ExpressionNode::printDesignation( std::ostream &os, int indent ) const {
    56         if ( argName ) {
    57                 os << string( indent, ' ' ) << "(designated by:  ";
    58                 argName->printOneLine( os, indent );
    59                 os << ")" << std::endl;
    60         } // if
    61 }
    62 
    63 //##############################################################################
    64 
    65 NullExprNode::NullExprNode() {}
    66 
    67 NullExprNode *NullExprNode::clone() const {
    68         return new NullExprNode();
    69 }
    70 
    71 void NullExprNode::print( std::ostream & os, int indent ) const {
    72         printDesignation( os );
    73         os << "null expression";
    74 }
    75 
    76 void NullExprNode::printOneLine( std::ostream & os, int indent ) const {
    77         printDesignation( os );
    78         os << "null";
    79 }
    80 
    81 Expression *NullExprNode::build() const {
    82         return 0;
    83 }
    84 
    85 // CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) {
    86 //      return new CommaExprNode( this, exp );
    87 // }
    88 
    89 //##############################################################################
    90 
    91 ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
    92 } // ConstantNode::ConstantNode
    93 
    94 ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
    95         assert( newValue != 0 );
    96 
    97         string value = expr->get_constant()->get_value();
    98 
    99         // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
    100         value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
    101         expr->get_constant()->set_value( value );
    102 
    103         delete newValue;                                                                        // allocated by lexer
    104         return this;
    105 }
    106 
    107 void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
    108         // os << string( indent, ' ' );
    109         // printDesignation( os );
    110 
    111         // switch ( type ) {
    112         //   case Integer:
    113         //   case Float:
    114         //      os << value ;
    115         //      break;
    116         //   case Character:
    117         //      os << "'" << value << "'";
    118         //      break;
    119         //   case String:
    120         //      os << '"' << value << '"';
    121         //      break;
    122         // } // switch
    123 
    124         // os << ' ';
    125 }
    126 
    127 void ConstantNode::print( std::ostream &os, int indent ) const {
    128         printOneLine( os, indent );
    129         os << endl;
    130 }
    131 
    132 Expression *ConstantNode::build() const {
    133         return expr->clone();
    134 }
    135 
    136 //##############################################################################
    137 
    138 VarRefNode::VarRefNode() : isLabel( false ) {}
    139 
    140 VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {}
    141 
    142 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
    143 }
    144 
    145 Expression *VarRefNode::build() const {
    146         return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
    147 }
    148 
    149 void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
    150         printDesignation( os );
    151         os << get_name() << ' ';
    152 }
    153 
    154 void VarRefNode::print( std::ostream &os, int indent ) const {
    155         printDesignation( os );
    156         os << string( indent, ' ' ) << "Referencing: ";
    157         os << "Variable: " << get_name();
    158         os << endl;
    159 }
    160 
    161 //##############################################################################
    162 
    163 DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
    164         set_argName( expr );
    165         assert( get_argName() );
    166 
    167         if ( ! isArrayIndex ) {
    168                 if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
    169 
    170                         stringstream ss( var->get_name() );
    171                         double value;
    172                         if ( ss >> value ) {
    173                                 // this is a floating point constant. It MUST be
    174                                 // ".0" or ".1", otherwise the program is invalid
    175                                 if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
    176                                         throw SemanticError( "invalid designator name: " + var->get_name() );
    177                                 } // if
    178                                 var->set_name( var->get_name().substr(1) );
     34ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {}
     35
     36//##############################################################################
     37
     38// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
     39//
     40//              prefix action constant action suffix
     41//
     42// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
     43//
     44//              constant BEGIN CONT ...
     45//              <CONT>(...)? BEGIN 0 ... // possible empty suffix
     46//
     47// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
     48// type.
     49
     50static Type::Qualifiers emptyQualifiers;                                // no qualifiers on constants
     51
     52static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
     53static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
     54static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
     55static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
     56static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
     57static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
     58
     59Expression *build_constantInteger( std::string & str ) {
     60        static const BasicType::Kind kind[2][3] = {
     61                { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
     62                { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
     63        };
     64        bool dec = true, Unsigned = false;                                      // decimal, unsigned constant
     65        int size;                                                                                       // 0 => int, 1 => long, 2 => long long
     66        unsigned long long v;                                                           // converted integral value
     67        size_t last = str.length() - 1;                                         // last character of constant
     68
     69        if ( str[0] == '0' ) {                                                          // octal/hex constant ?
     70                dec = false;
     71                if ( last != 0 && checkX( str[1] ) ) {                  // hex constant ?
     72                        sscanf( (char *)str.c_str(), "%llx", &v );
     73                        //printf( "%llx %llu\n", v, v );
     74                } else {                                                                                // octal constant
     75                        sscanf( (char *)str.c_str(), "%llo", &v );
     76                        //printf( "%llo %llu\n", v, v );
     77                } // if
     78        } else {                                                                                        // decimal constant ?
     79                sscanf( (char *)str.c_str(), "%llu", &v );
     80                //printf( "%llu %llu\n", v, v );
     81        } // if
     82
     83        if ( v <= INT_MAX ) {                                                           // signed int
     84                size = 0;
     85        } else if ( v <= UINT_MAX && ! dec ) {                          // unsigned int
     86                size = 0;
     87                Unsigned = true;                                                                // unsigned
     88        } else if ( v <= LONG_MAX ) {                                           // signed long int
     89                size = 1;
     90        } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
     91                size = 1;
     92                Unsigned = true;                                                                // unsigned long int
     93        } else if ( v <= LLONG_MAX ) {                                          // signed long long int
     94                size = 2;
     95        } else {                                                                                        // unsigned long long int
     96                size = 2;
     97                Unsigned = true;                                                                // unsigned long long int
     98        } // if
     99
     100        if ( checkU( str[last] ) ) {                                            // suffix 'u' ?
     101                Unsigned = true;
     102                if ( last > 0 && checkL( str[last - 1] ) ) {    // suffix 'l' ?
     103                        size = 1;
     104                        if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
     105                                size = 2;
    179106                        } // if
    180107                } // if
    181         } // if
    182 }
    183 
    184 DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {
    185 }
    186 
    187 class DesignatorFixer : public Mutator {
    188 public:
    189         virtual Expression* mutate( NameExpr *nameExpr ) {
    190                 if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
    191                         Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
    192                         delete nameExpr;
    193                         return new ConstantExpr( val );
    194                 }
    195                 return nameExpr;
    196         }
    197 };
    198 
    199 Expression *DesignatorNode::build() const {
    200         Expression * ret = maybeBuild<Expression>(get_argName());
    201 
    202         if ( isArrayIndex ) {
    203                 // need to traverse entire structure and change any instances of 0 or 1 to
    204                 // ConstantExpr
    205                 DesignatorFixer fixer;
    206                 ret = ret->acceptMutator( fixer );
    207         } // if
    208 
    209         return ret;
    210 }
    211 
    212 void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
    213         if ( get_argName() ) {
    214                 if ( isArrayIndex ) {
    215                         os << "[";
    216                         get_argName()->printOneLine( os, indent );
    217                         os << "]";
     108        } else if ( checkL( str[ last ] ) ) {                           // suffix 'l' ?
     109                size = 1;
     110                if ( last > 0 && checkL( str[last - 1] ) ) {    // suffix 'll' ?
     111                        size = 2;
     112                        if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
     113                                Unsigned = true;
     114                        } // if
    218115                } else {
    219                         os << ".";
    220                         get_argName()->printOneLine( os, indent );
    221                 }
    222         } // if
    223 }
    224 
    225 void DesignatorNode::print( std::ostream &os, int indent ) const {
    226         if ( get_argName() ) {
    227                 if ( isArrayIndex ) {
    228                         os << "[";
    229                         get_argName()->print( os, indent );
    230                         os << "]";
    231                 } else {
    232                         os << ".";
    233                         get_argName()->print( os, indent );
    234                 }
    235         } // if
    236 }
    237 
    238 //##############################################################################
    239 
    240 static const char *opName[] = {
    241         "TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic
    242         // triadic
    243         "Cond", "NCond",
     116                        if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
     117                                Unsigned = true;
     118                        } // if
     119                } // if
     120        } // if
     121
     122        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
     123} // build_constantInteger
     124
     125Expression *build_constantFloat( std::string & str ) {
     126        static const BasicType::Kind kind[2][3] = {
     127                { BasicType::Float, BasicType::Double, BasicType::LongDouble },
     128                { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
     129        };
     130
     131        bool complx = false;                                                            // real, complex
     132        int size = 1;                                                                           // 0 => float, 1 => double (default), 2 => long double
     133        // floating-point constant has minimum of 2 characters: 1. or .1
     134        size_t last = str.length() - 1;
     135
     136        if ( checkI( str[last] ) ) {                                            // imaginary ?
     137                complx = true;
     138                last -= 1;                                                                              // backup one character
     139        } // if
     140
     141        if ( checkF( str[last] ) ) {                                            // float ?
     142                size = 0;
     143        } else if ( checkD( str[last] ) ) {                                     // double ?
     144                size = 1;
     145        } else if ( checkL( str[last] ) ) {                                     // long double ?
     146                size = 2;
     147        } // if
     148        if ( ! complx && checkI( str[last - 1] ) ) {            // imaginary ?
     149                complx = true;
     150        } // if
     151
     152        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
     153} // build_constantFloat
     154
     155Expression *build_constantChar( std::string & str ) {
     156        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
     157} // build_constantChar
     158
     159ConstantExpr *build_constantStr( std::string & str ) {
     160        // string should probably be a primitive type
     161        ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
     162                                new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
     163                                                                                        toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
     164                                                                   false, false );
     165        return new ConstantExpr( Constant( at, str ) );
     166} // build_constantStr
     167
     168//##############################################################################
     169
     170NameExpr * build_varref( const string *name, bool labelp ) {
     171        return new NameExpr( *name, nullptr );
     172}
     173
     174//##############################################################################
     175
     176static const char *OperName[] = {
    244177        // diadic
    245         "SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
     178        "SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
    246179        "?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
    247180        "?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
    248         "?[?]", "FieldSel", "PFieldSel", "...",
     181        "?[?]", "...",
    249182        // monadic
    250183        "+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&"
    251184};
    252185
    253 OperatorNode::OperatorNode( Type t ) : type( t ) {}
    254 
    255 OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) {
    256 }
    257 
    258 OperatorNode::~OperatorNode() {}
    259 
    260 OperatorNode::Type OperatorNode::get_type( void ) const {
    261         return type;
    262 }
    263 
    264 void OperatorNode::printOneLine( std::ostream &os, int indent ) const {
    265         printDesignation( os );
    266         os << opName[ type ] << ' ';
    267 }
    268 
    269 void OperatorNode::print( std::ostream &os, int indent ) const{
    270         printDesignation( os );
    271         os << string( indent, ' ' ) << "Operator: " << opName[type] << endl;
    272         return;
    273 }
    274 
    275 const char *OperatorNode::get_typename( void ) const{
    276         return opName[ type ];
    277 }
    278 
    279 //##############################################################################
    280 
    281 CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) {
    282 }
    283 
    284 CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) {
    285 }
    286 
    287 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ):
    288         function( f ), arguments( args ) {
    289 }
    290 
    291 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):
    292         function( f ), arguments( arg1 ) {
    293         arguments->set_link( arg2 );
    294 }
    295 
    296 CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
    297         ParseNode *cur = other.arguments;
    298         while ( cur ) {
    299                 if ( arguments ) {
    300                         arguments->set_link( cur->clone() );
    301                 } else {
    302                         arguments = ( ExpressionNode*)cur->clone();
    303                 } // if
    304                 cur = cur->get_link();
    305         }
    306 }
    307 
    308 CompositeExprNode::~CompositeExprNode() {
    309         delete function;
    310         delete arguments;
    311 }
    312 
    313 
    314 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
    315         DeclarationNode *decl_node = arg->get_decl();
    316 
     186//##############################################################################
     187
     188Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
    317189        Type *targetType = decl_node->buildType();
    318         if ( dynamic_cast< VoidType* >( targetType ) ) {
     190        if ( dynamic_cast< VoidType * >( targetType ) ) {
    319191                delete targetType;
    320192                return new CastExpr( maybeBuild<Expression>(expr_node) );
     
    324196}
    325197
    326 Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
    327         NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
    328         assert( memberExpr );
    329         UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), maybeBuild<Expression>(expr_node) );
     198Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
     199        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild<Expression>(expr_node) );
    330200        delete member;
    331201        return ret;
    332202}
    333203
    334 Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
    335         NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
    336         assert( memberExpr );
     204Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
    337205        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    338206        deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
    339         UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), deref );
     207        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    340208        delete member;
    341209        return ret;
     
    345213                return new AddressExpr( maybeBuild<Expression>(expr_node) );
    346214}
    347 Expression *build_sizeOf( ExpressionNode *expr_node ) {
    348         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
    349                 return new SizeofExpr( arg->get_decl()->buildType() );
    350         } else {
    351                 return new SizeofExpr( maybeBuild<Expression>(expr_node) );
    352         } // if
    353 }
    354 Expression *build_alignOf( ExpressionNode *expr_node ) {
    355         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
    356                 return new AlignofExpr( arg->get_decl()->buildType() );
    357         } else {
    358                 return new AlignofExpr( maybeBuild<Expression>(expr_node) );
    359         } // if
    360 }
    361 Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member ) {
    362         NameExpr *memberExpr = dynamic_cast<NameExpr *>( maybeBuild<Expression>( member ) );
    363         assert( memberExpr );
    364         return new UntypedOffsetofExpr( arg->get_decl()->buildType(), memberExpr->get_name() );
     215Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
     216        return new SizeofExpr( maybeBuild<Expression>(expr_node) );
     217}
     218Expression *build_sizeOftype( DeclarationNode *decl_node ) {
     219        return new SizeofExpr( decl_node->buildType() );
     220}
     221Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
     222        return new AlignofExpr( maybeBuild<Expression>(expr_node) );
     223}
     224Expression *build_alignOftype( DeclarationNode *decl_node ) {
     225        return new AlignofExpr( decl_node->buildType() );
     226}
     227Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
     228        return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
    365229}
    366230
     
    369233}
    370234
    371 Expression *build_opr1( OperatorNode::Type op, ExpressionNode *expr_node ) {
     235Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
     236        std::list<Expression *> args;
     237        args.push_back( maybeBuild<Expression>(expr_node) );
     238        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     239}
     240Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
    372241        std::list<Expression *> args;
    373242        args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node) ) );
    374         return new UntypedExpr( new NameExpr( opName[ op ] ), args );
    375 }
    376 Expression *build_opr2( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
     243        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     244}
     245Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
    377246        std::list<Expression *> args;
    378247        args.push_back( maybeBuild<Expression>(expr_node1) );
    379248        args.push_back( maybeBuild<Expression>(expr_node2) );
    380         return new UntypedExpr( new NameExpr( opName[ op ] ), args );
     249        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     250}
     251Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
     252        std::list<Expression *> args;
     253        args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node1) ) );
     254        args.push_back( maybeBuild<Expression>(expr_node2) );
     255        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
    381256}
    382257
     
    389264}
    390265
    391 CompositeExprNode2::CompositeExprNode2( Expression *expr ) : expr( expr ) {}
    392 CompositeExprNode2::CompositeExprNode2( const CompositeExprNode2 &other ) : expr( other.expr->clone() ) {}
    393 CompositeExprNode2::~CompositeExprNode2() { delete expr; }
    394 void CompositeExprNode2::print( std::ostream &, int indent ) const { assert( false ); }
    395 void CompositeExprNode2::printOneLine( std::ostream &, int indent ) const { assert( false ); }
    396 
    397 
    398 Expression *CompositeExprNode::build() const {
    399         OperatorNode *op;
    400         std::list<Expression *> args;
    401 
    402         buildList( get_args(), args );
    403 
    404         if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
    405                 return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
    406         } // if
    407 
    408         switch ( op->get_type() ) {
    409           case OperatorNode::Assign:
    410           case OperatorNode::MulAssn:
    411           case OperatorNode::DivAssn:
    412           case OperatorNode::ModAssn:
    413           case OperatorNode::PlusAssn:
    414           case OperatorNode::MinusAssn:
    415           case OperatorNode::LSAssn:
    416           case OperatorNode::RSAssn:
    417           case OperatorNode::AndAssn:
    418           case OperatorNode::ERAssn:
    419           case OperatorNode::OrAssn:
    420                 assert( ! args.empty() );
    421                 args.front() = new AddressExpr( args.front() );
    422           case OperatorNode::UnPlus:
    423           case OperatorNode::UnMinus:
    424           case OperatorNode::PointTo:
    425           case OperatorNode::Neg:
    426           case OperatorNode::BitNeg:
    427           case OperatorNode::LabelAddress:
    428                 return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
    429 
    430           case OperatorNode::Attr:
    431                 {
    432                         VarRefNode *var = dynamic_cast<VarRefNode *>( get_args() );
    433                         assert( var );
    434                         if ( ! get_args()->get_link() ) {
    435                                 return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0);
    436                         } else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link() ) ) {
    437                                 return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType() );
    438                         } else {
    439                                 return new AttrExpr( maybeBuild<Expression>(var), args.back() );
    440                         } // if
    441                 }
    442           case OperatorNode::Cond:
    443                 {
    444                         assert( args.size() == 3);
    445                         std::list< Expression * >::const_iterator i = args.begin();
    446                         Expression *arg1 = notZeroExpr( *i++ );
    447                         Expression *arg2 = *i++;
    448                         Expression *arg3 = *i++;
    449                         return new ConditionalExpr( arg1, arg2, arg3 );
    450                 }
    451           case OperatorNode::NCond:
    452                 throw UnimplementedError( "GNU 2-argument conditional expression" );
    453                 // Tuples
    454           case OperatorNode::TupleC:
    455                 {
    456                         TupleExpr *ret = new TupleExpr();
    457                         std::copy( args.begin(), args.end(), back_inserter( ret->get_exprs() ) );
    458                         return ret;
    459                 }
    460           default:
    461                 assert( ((void)"CompositeExprNode::build", false) );
    462                 return 0;
    463         } // switch
    464 }
    465 
    466 void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const {
    467         printDesignation( os );
    468         os << "( ";
    469         function->printOneLine( os, indent );
    470         for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {
    471                 cur->printOneLine( os, indent );
    472         } // for
    473         os << ") ";
    474 }
    475 
    476 void CompositeExprNode::print( std::ostream &os, int indent ) const {
    477         printDesignation( os );
    478         os << string( indent, ' ' ) << "Application of: " << endl;
    479         function->print( os, indent + ParseNode::indent_by );
    480 
    481         os << string( indent, ' ' ) ;
    482         if ( arguments ) {
    483                 os << "... on arguments: " << endl;
    484                 arguments->printList( os, indent + ParseNode::indent_by );
    485         } else
    486                 os << "... on no arguments: " << endl;
    487 }
    488 
    489 void CompositeExprNode::set_function( ExpressionNode *f ) {
    490         function = f;
    491 }
    492 
    493 void CompositeExprNode::set_args( ExpressionNode *args ) {
    494         arguments = args;
    495 }
    496 
    497 ExpressionNode *CompositeExprNode::get_function( void ) const {
    498         return function;
    499 }
    500 
    501 ExpressionNode *CompositeExprNode::get_args( void ) const {
    502         return arguments;
    503 }
    504 
    505 void CompositeExprNode::add_arg( ExpressionNode *arg ) {
    506         if ( arguments )
    507                 arguments->set_link( arg );
    508         else
    509                 set_args( arg );
    510 }
    511 
    512 //##############################################################################
    513 
    514 Expression *AsmExprNode::build() const {
    515         return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
    516 }
    517 
    518 void AsmExprNode::print( std::ostream &os, int indent ) const {
    519         os << string( indent, ' ' ) << "Assembler Expression:" << endl;
    520         if ( inout ) {
    521                 os << string( indent, ' ' ) << "inout: " << std::endl;
    522                 inout->print( os, indent + 2 );
    523         } // if
    524         if ( constraint ) {
    525                 os << string( indent, ' ' ) << "constraint: " << std::endl;
    526                 constraint->print( os, indent + 2 );
    527         } // if
    528         if ( operand ) {
    529                 os << string( indent, ' ' ) << "operand: " << std::endl;
    530                 operand->print( os, indent + 2 );
    531         } // if
    532 }
    533 
    534 void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
    535         printDesignation( os );
    536         os << "( ";
    537         if ( inout ) inout->printOneLine( os, indent + 2 );
    538         os << ", ";
    539         if ( constraint ) constraint->printOneLine( os, indent + 2 );
    540         os << ", ";
    541         if ( operand ) operand->printOneLine( os, indent + 2 );
    542         os << ") ";
     266Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
     267        return new AttrExpr( var, maybeBuild<Expression>(expr_node) );
     268}
     269Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
     270        return new AttrExpr( var, decl_node->buildType() );
     271}
     272
     273Expression *build_tuple( ExpressionNode * expr_node ) {
     274        TupleExpr *ret = new TupleExpr();
     275        buildList( expr_node, ret->get_exprs() );
     276        return ret;
     277}
     278
     279Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
     280        std::list<Expression *> args;
     281
     282        buildList( expr_node, args );
     283        return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
     284}
     285
     286Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
     287        Expression *low_cexpr = maybeBuild<Expression>( low );
     288        Expression *high_cexpr = maybeBuild<Expression>( high );
     289        return new RangeExpr( low_cexpr, high_cexpr );
     290}
     291
     292//##############################################################################
     293
     294Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
     295        return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
    543296}
    544297
     
    551304//##############################################################################
    552305
    553 ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
    554 
    555 ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
    556 }
    557 
    558 ValofExprNode::~ValofExprNode() {
    559         delete body;
    560 }
    561 
    562 void ValofExprNode::print( std::ostream &os, int indent ) const {
    563         printDesignation( os );
    564         os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
    565         get_body()->print( os, indent + 4);
    566 }
    567 
    568 void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
    569         assert( false );
    570 }
    571 
    572 Expression *ValofExprNode::build() const {
    573         return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
    574 }
    575 
    576 //##############################################################################
    577 
    578 ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
    579         if ( init_ == 0 )
    580                 init = 0;
    581         else {
    582                 DeclarationNode *decl;
    583                 ExpressionNode *exp;
    584 
    585                 if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
    586                         init = new StatementNode( decl );
    587                 else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
    588                         init = new StatementNode( StatementNode::Exp, exp );
    589                 else
    590                         throw SemanticError("Error in for control expression");
    591         }
    592 }
    593 
    594 ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
    595         : ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
    596 }
    597 
    598 ForCtlExprNode::~ForCtlExprNode() {
    599         delete init;
    600         delete condition;
    601         delete change;
    602 }
    603 
    604 Expression *ForCtlExprNode::build() const {
    605         // this shouldn't be used!
    606         assert( false );
    607         return 0;
    608 }
    609 
    610 void ForCtlExprNode::print( std::ostream &os, int indent ) const{
    611         os << string( indent,' ' ) << "For Control Expression -- :" << endl;
    612 
    613         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    614         if ( init != 0 )
    615                 init->printList( os, indent + 4 );
    616 
    617         os << string( indent + 2, ' ' ) << "condition: " << endl;
    618         if ( condition != 0 )
    619                 condition->print( os, indent + 4 );
    620         os << string( indent + 2, ' ' ) << "increment: " << endl;
    621         if ( change != 0 )
    622                 change->print( os, indent + 4 );
    623 }
    624 
    625 void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
    626         assert( false );
    627 }
    628 
    629 //##############################################################################
    630 
    631 TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
    632 }
    633 
    634 TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
    635 }
    636 
    637 Expression *TypeValueNode::build() const {
     306Expression *build_valexpr( StatementNode *s ) {
     307        return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
     308}
     309
     310//##############################################################################
     311 
     312// ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
     313//      if ( init_ == 0 )
     314//              init = 0;
     315//      else {
     316//              DeclarationNode *decl;
     317//              ExpressionNode *exp;
     318
     319//              if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
     320//                      init = new StatementNode( decl );
     321//              else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
     322//                      init = new StatementNode( StatementNode::Exp, exp );
     323//              else
     324//                      throw SemanticError("Error in for control expression");
     325//      }
     326// }
     327
     328// ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
     329//      : ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
     330// }
     331
     332// ForCtlExprNode::~ForCtlExprNode() {
     333//      delete init;
     334//      delete condition;
     335//      delete change;
     336// }
     337
     338// Expression *ForCtlExprNode::build() const {
     339//      // this shouldn't be used!
     340//      assert( false );
     341//      return 0;
     342// }
     343
     344// void ForCtlExprNode::print( std::ostream &os, int indent ) const{
     345//      os << string( indent,' ' ) << "For Control Expression -- :" << endl;
     346
     347//      os << string( indent + 2, ' ' ) << "initialization:" << endl;
     348//      if ( init != 0 )
     349//              init->printList( os, indent + 4 );
     350
     351//      os << string( indent + 2, ' ' ) << "condition: " << endl;
     352//      if ( condition != 0 )
     353//              condition->print( os, indent + 4 );
     354//      os << string( indent + 2, ' ' ) << "increment: " << endl;
     355//      if ( change != 0 )
     356//              change->print( os, indent + 4 );
     357// }
     358
     359// void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
     360//      assert( false );
     361// }
     362
     363//##############################################################################
     364
     365Expression *build_typevalue( DeclarationNode *decl ) {
    638366        return new TypeExpr( decl->buildType() );
    639367}
    640368
    641 void TypeValueNode::print( std::ostream &os, int indent ) const {
    642         os << std::string( indent, ' ' ) << "Type:";
    643         get_decl()->print( os, indent + 2);
    644 }
    645 
    646 void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
    647         os << "Type:";
    648         get_decl()->print( os, indent + 2);
    649 }
    650 
    651 
    652 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
    653 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
    654 
    655 CompoundLiteralNode::~CompoundLiteralNode() {
    656         delete kids;
    657         delete type;
    658 }
    659 
    660 CompoundLiteralNode *CompoundLiteralNode::clone() const {
    661         return new CompoundLiteralNode( *this );
    662 }
    663 
    664 void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
    665         os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
    666 
    667         os << string( indent + 2, ' ' ) << "type:" << endl;
    668         if ( type != 0 )
    669                 type->print( os, indent + 4 );
    670 
    671         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    672         if ( kids != 0 )
    673                 kids->printList( os, indent + 4 );
    674 }
    675 
    676 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
    677         os << "( ";
    678         if ( type ) type->print( os );
    679         os << ", ";
    680         if ( kids ) kids->printOneLine( os );
    681         os << ") ";
    682 }
    683 
    684 Expression *CompoundLiteralNode::build() const {
    685         Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
     369//##############################################################################
     370
     371Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
     372        Declaration * newDecl = maybeBuild<Declaration>(decl_node); // compound literal type
    686373        if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    687374                return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
     
    698385}
    699386
    700 ExpressionNode *flattenCommas( ExpressionNode *list ) {
    701         if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
    702                 OperatorNode *op;
    703                 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {
    704                         if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
    705                                 composite->add_arg( next );
    706                         return flattenCommas( composite->get_args() );
    707                 } // if
    708         } // if
    709 
    710         if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
    711                 list->set_next( flattenCommas( next ) );
    712 
    713         return list;
    714 }
    715 
    716 ExpressionNode *tupleContents( ExpressionNode *tuple ) {
    717         if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {
    718                 OperatorNode *op = 0;
    719                 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )
    720                         return composite->get_args();
    721         } // if
    722         return tuple;
    723 }
    724 
    725387// Local Variables: //
    726388// tab-width: 4 //
  • src/Parser/ParseNode.cc

    rf18a711 r3078643  
    1010// Created On       : Sat May 16 13:26:29 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Jul 24 02:17:01 2016
    13 // Update Count     : 90
     12// Last Modified On : Sun Aug  7 23:32:47 2016
     13// Update Count     : 94
    1414//
    1515
    16 #include <climits>
    1716#include "ParseNode.h"
    1817using namespace std;
    19 
    20 // Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
    21 //
    22 //              prefix action constant action suffix
    23 //
    24 // Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
    25 //
    26 //              constant BEGIN CONT ...
    27 //              <CONT>(...)? BEGIN 0 ... // possible empty suffix
    28 //
    29 // because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
    30 // type.
    31 
    32 static Type::Qualifiers emptyQualifiers;                                // no qualifiers on constants
    33 
    34 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
    35 static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
    36 static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
    37 static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
    38 static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
    39 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    40 
    41 ConstantNode *makeConstantInteger( std::string & str ) {
    42         static const BasicType::Kind kind[2][3] = {
    43                 { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
    44                 { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
    45         };
    46         bool dec = true, Unsigned = false;                                      // decimal, unsigned constant
    47         int size;                                                                                       // 0 => int, 1 => long, 2 => long long
    48         unsigned long long v;                                                           // converted integral value
    49         size_t last = str.length() - 1;                                         // last character of constant
    50 
    51         if ( str[0] == '0' ) {                                                          // octal/hex constant ?
    52                 dec = false;
    53                 if ( last != 0 && checkX( str[1] ) ) {                  // hex constant ?
    54                         sscanf( (char *)str.c_str(), "%llx", &v );
    55                         //printf( "%llx %llu\n", v, v );
    56                 } else {                                                                                // octal constant
    57                         sscanf( (char *)str.c_str(), "%llo", &v );
    58                         //printf( "%llo %llu\n", v, v );
    59                 } // if
    60         } else {                                                                                        // decimal constant ?
    61                 sscanf( (char *)str.c_str(), "%llu", &v );
    62                 //printf( "%llu %llu\n", v, v );
    63         } // if
    64 
    65         if ( v <= INT_MAX ) {                                                           // signed int
    66                 size = 0;
    67         } else if ( v <= UINT_MAX && ! dec ) {                          // unsigned int
    68                 size = 0;
    69                 Unsigned = true;                                                                // unsigned
    70         } else if ( v <= LONG_MAX ) {                                           // signed long int
    71                 size = 1;
    72         } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
    73                 size = 1;
    74                 Unsigned = true;                                                                // unsigned long int
    75         } else if ( v <= LLONG_MAX ) {                                          // signed long long int
    76                 size = 2;
    77         } else {                                                                                        // unsigned long long int
    78                 size = 2;
    79                 Unsigned = true;                                                                // unsigned long long int
    80         } // if
    81 
    82         if ( checkU( str[last] ) ) {                                            // suffix 'u' ?
    83                 Unsigned = true;
    84                 if ( last > 0 && checkL( str[last - 1] ) ) {    // suffix 'l' ?
    85                         size = 1;
    86                         if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
    87                                 size = 2;
    88                         } // if
    89                 } // if
    90         } else if ( checkL( str[ last ] ) ) {                           // suffix 'l' ?
    91                 size = 1;
    92                 if ( last > 0 && checkL( str[last - 1] ) ) { // suffix 'll' ?
    93                         size = 2;
    94                         if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
    95                                 Unsigned = true;
    96                         } // if
    97                 } else {
    98                         if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
    99                                 Unsigned = true;
    100                         } // if
    101                 } // if
    102         } // if
    103 
    104         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ), nullptr ) );
    105 } // makeConstantInteger
    106 
    107 ConstantNode *makeConstantFloat( std::string & str ) {
    108         static const BasicType::Kind kind[2][3] = {
    109                 { BasicType::Float, BasicType::Double, BasicType::LongDouble },
    110                 { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
    111         };
    112 
    113         bool complx = false;                                                            // real, complex
    114         int size = 1;                                                                           // 0 => float, 1 => double (default), 2 => long double
    115         // floating-point constant has minimum of 2 characters: 1. or .1
    116         size_t last = str.length() - 1;
    117 
    118         if ( checkI( str[last] ) ) {                                            // imaginary ?
    119                 complx = true;
    120                 last -= 1;                                                                              // backup one character
    121         } // if
    122 
    123         if ( checkF( str[last] ) ) {                                            // float ?
    124                 size = 0;
    125         } else if ( checkD( str[last] ) ) {                                     // double ?
    126                 size = 1;
    127         } else if ( checkL( str[last] ) ) {                                     // long double ?
    128                 size = 2;
    129         } // if
    130         if ( ! complx && checkI( str[last - 1] ) ) {            // imaginary ?
    131                 complx = true;
    132         } // if
    133 
    134         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ), nullptr ) );
    135 } // makeConstantFloat
    136 
    137 ConstantNode *makeConstantChar( std::string & str ) {
    138         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ), nullptr ) );
    139 } // makeConstantChar
    140 
    141 ConstantNode *makeConstantStr( std::string & str ) {
    142         // string should probably be a primitive type
    143         ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
    144                                                                    new ConstantExpr(
    145                                                                            Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
    146                                                                                                  toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
    147                                                                    false, false );
    148         return new ConstantNode( new ConstantExpr( Constant( at, str ), nullptr ) );
    149 } // makeConstantStr
    150 
    15118
    15219// Builder
  • src/Parser/ParseNode.h

    rf18a711 r3078643  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Aug  5 07:49:32 2016
    13 // Update Count     : 288
     12// Last Modified On : Wed Aug 10 13:08:46 2016
     13// Update Count     : 436
    1414//
    1515
     
    2626#include "SynTree/Type.h"
    2727#include "SynTree/Expression.h"
     28#include "SynTree/Statement.h"
    2829//#include "SynTree/Declaration.h"
    2930#include "Common/UniqueName.h"
    3031#include "SynTree/Label.h"
    3132
    32 class ExpressionNode;
    33 class CompositeExprNode;
    34 class CommaExprNode;
    3533class StatementNode;
    3634class CompoundStmtNode;
    3735class DeclarationNode;
     36class ExpressionNode;
    3837class InitializerNode;
    3938
     
    5655        void set_name( const std::string &newValue ) { name = newValue; }
    5756
    58         virtual void print( std::ostream &, int indent = 0 ) const;
    59         virtual void printList( std::ostream &, int indent = 0 ) const;
    60 
    61         ParseNode &operator,( ParseNode &);
     57        virtual void print( std::ostream &os, int indent = 0 ) const;
     58        virtual void printList( std::ostream &os, int indent = 0 ) const;
     59
     60        ParseNode &operator,( ParseNode & );
    6261  protected:
    6362        std::string name;
     
    6867ParseNode *mkList( ParseNode & );
    6968
     69//##############################################################################
     70
     71class InitializerNode : public ParseNode {
     72  public:
     73        InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
     74        InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
     75        ~InitializerNode();
     76
     77        ExpressionNode *get_expression() const { return expr; }
     78
     79        InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
     80        ExpressionNode *get_designators() const { return designator; }
     81
     82        InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
     83        bool get_maybeConstructed() const { return maybeConstructed; }
     84
     85        InitializerNode *next_init() const { return kids; }
     86
     87        void print( std::ostream &os, int indent = 0 ) const;
     88        void printOneLine( std::ostream & ) const;
     89
     90        virtual Initializer *build() const;
     91  private:
     92        ExpressionNode *expr;
     93        bool aggregate;
     94        ExpressionNode *designator; // may be list
     95        InitializerNode *kids;
     96        bool maybeConstructed;
     97};
     98
     99//##############################################################################
     100
    70101class ExpressionNode : public ParseNode {
    71102  public:
    72         ExpressionNode();
    73         ExpressionNode( const std::string * );
     103        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
     104        ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
    74105        ExpressionNode( const ExpressionNode &other );
    75         virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
    76 
    77         virtual ExpressionNode *clone() const = 0;
    78 
    79         // virtual CommaExprNode *add_to_list( ExpressionNode * );
    80 
    81         ExpressionNode *get_argName() const { return argName; }
    82         ExpressionNode *set_argName( const std::string *aName );
    83         ExpressionNode *set_argName( ExpressionNode *aDesignator );
     106        virtual ~ExpressionNode() {}
     107
     108        virtual ExpressionNode *clone() const { return 0; }
     109
    84110        bool get_extension() const { return extension; }
    85111        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    86112
    87         virtual void print( std::ostream &, int indent = 0) const = 0;
    88         virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
    89 
    90         virtual Expression *build() const = 0;
    91   protected:
    92         void printDesignation ( std::ostream &, int indent = 0) const;
    93   private:
    94         ExpressionNode *argName = 0;
     113        virtual void print( std::ostream &os, int indent = 0 ) const {}
     114        virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
     115
     116        virtual Expression *build() const { return expr; }
     117  private:
    95118        bool extension = false;
     119        Expression *expr;
    96120};
    97121
     
    109133};
    110134
    111 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
    112 class NullExprNode : public ExpressionNode {
    113   public:
    114         NullExprNode();
    115 
    116         virtual NullExprNode *clone() const;
    117 
    118         virtual void print( std::ostream &, int indent = 0) const;
    119         virtual void printOneLine( std::ostream &, int indent = 0) const;
    120 
    121         virtual Expression *build() const;
    122 };
    123 
    124 class ConstantNode : public ExpressionNode {
    125   public:
    126         enum Type { Integer, Float, Character, String };
    127 
    128         ConstantNode( ConstantExpr * );
    129         ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
    130         ~ConstantNode() { delete expr; }
    131 
    132         virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
    133         virtual void print( std::ostream &, int indent = 0) const;
    134         virtual void printOneLine( std::ostream &, int indent = 0) const;
    135 
    136         ConstantNode *appendstr( const std::string *newValue );
    137 
    138         Expression *build() const;
    139   private:
    140         ConstantExpr *expr;
    141 };
    142 
    143 ConstantNode *makeConstantInteger( std::string & );
    144 ConstantNode *makeConstantFloat( std::string & );
    145 ConstantNode *makeConstantChar( std::string & );
    146 ConstantNode *makeConstantStr( std::string & );
    147 
    148 class VarRefNode : public ExpressionNode {
    149   public:
    150         VarRefNode();
    151         VarRefNode( const std::string *, bool isLabel = false );
    152         VarRefNode( const VarRefNode &other );
    153 
    154         virtual Expression *build() const ;
    155 
    156         virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
    157 
    158         virtual void print( std::ostream &, int indent = 0 ) const;
    159         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    160   private:
    161         bool isLabel;
    162 };
    163 
    164 class DesignatorNode : public ExpressionNode {
    165   public:
    166         DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
    167         DesignatorNode( const DesignatorNode &other );
    168 
    169         virtual Expression *build() const ;
    170         virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
    171 
    172         virtual void print( std::ostream &, int indent = 0 ) const;
    173         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    174   private:
    175         bool isArrayIndex;
    176 };
    177 
    178 class TypeValueNode : public ExpressionNode {
    179   public:
    180         TypeValueNode( DeclarationNode * );
    181         TypeValueNode( const TypeValueNode &other );
    182 
    183         DeclarationNode *get_decl() const { return decl; }
    184 
    185         virtual Expression *build() const ;
    186 
    187         virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
    188 
    189         virtual void print( std::ostream &, int indent = 0) const;
    190         virtual void printOneLine( std::ostream &, int indent = 0) const;
    191   private:
    192         DeclarationNode *decl;
    193 };
    194 
    195 class OperatorNode : public ExpressionNode {
    196   public:
    197         enum Type { TupleC, Comma, TupleFieldSel, // n-adic
    198                                 // triadic
    199                                 Cond, NCond,
    200                                 // diadic
    201                                 SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
    202                                 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
    203                                 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    204                                 Index, FieldSel, PFieldSel, Range,
    205                                 // monadic
    206                                 UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
    207                                 Ctor, Dtor,
    208         };
    209 
    210         OperatorNode( Type t );
    211         OperatorNode( const OperatorNode &other );
    212         virtual ~OperatorNode();
    213 
    214         virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
    215 
    216         Type get_type() const;
    217         const char *get_typename() const;
    218 
    219         virtual void print( std::ostream &, int indent = 0) const;
    220         virtual void printOneLine( std::ostream &, int indent = 0) const;
    221 
    222         virtual Expression *build() const { return 0; }
    223   private:
    224         Type type;
    225 };
    226 
    227 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node );
    228 Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member );
    229 Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member );
     135//##############################################################################
     136
     137Expression *build_constantInteger( std::string &str );
     138Expression *build_constantFloat( std::string &str );
     139Expression *build_constantChar( std::string &str );
     140ConstantExpr *build_constantStr( std::string &str );
     141
     142//##############################################################################
     143
     144NameExpr *build_varref( const std::string *name, bool labelp = false );
     145
     146//##############################################################################
     147
     148Expression *build_typevalue( DeclarationNode *decl );
     149
     150//##############################################################################
     151
     152enum class OperKinds {
     153        // diadic
     154        SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
     155        BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
     156        Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
     157        Index, Range,
     158        // monadic
     159        UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
     160        Ctor, Dtor,
     161};
     162
     163Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
     164Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
     165Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
    230166Expression *build_addressOf( ExpressionNode *expr_node );
    231 Expression *build_sizeOf( ExpressionNode *expr_node );
    232 Expression *build_alignOf( ExpressionNode *expr_node );
    233 Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member );
     167Expression *build_sizeOfexpr( ExpressionNode *expr_node );
     168Expression *build_sizeOftype( DeclarationNode *decl_node );
     169Expression *build_alignOfexpr( ExpressionNode *expr_node );
     170Expression *build_alignOftype( DeclarationNode *decl_node );
     171Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
    234172Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
    235173Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
    236 Expression *build_opr1( OperatorNode::Type op, ExpressionNode *expr_node );
    237 Expression *build_opr2( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     174Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
     175Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
     176Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     177Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
    238178Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
    239179Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
    240 
    241 class CompositeExprNode2 : public ExpressionNode {
    242   public:
    243         CompositeExprNode2( Expression *expr );
    244         CompositeExprNode2( const CompositeExprNode2 &other );
    245         virtual ~CompositeExprNode2();
    246 
    247         virtual CompositeExprNode2 *clone() const { return new CompositeExprNode2( *this ); }
    248         virtual Expression *build() const { return expr->clone(); }
    249 
    250         virtual void print( std::ostream &, int indent = 0) const;
    251         virtual void printOneLine( std::ostream &, int indent = 0) const;
    252   private:
    253         Expression *expr;
    254 };
    255 
    256 class CompositeExprNode : public ExpressionNode {
    257   public:
    258         CompositeExprNode();
    259         CompositeExprNode( const std::string * );
    260         CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
    261         CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
    262         CompositeExprNode( const CompositeExprNode &other );
    263         virtual ~CompositeExprNode();
    264 
    265         virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
    266         virtual Expression *build() const;
    267 
    268         virtual void print( std::ostream &, int indent = 0) const;
    269         virtual void printOneLine( std::ostream &, int indent = 0) const;
    270 
    271         void set_function( ExpressionNode * );
    272         void set_args( ExpressionNode * );
    273 
    274         void add_arg( ExpressionNode * );
    275 
    276         ExpressionNode *get_function() const;
    277         ExpressionNode *get_args() const;
    278   private:
    279         ExpressionNode *function;
    280         ExpressionNode *arguments;
    281 };
    282 
    283 class AsmExprNode : public ExpressionNode {
    284   public:
    285         AsmExprNode();
    286         AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    287         virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
    288 
    289         virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
    290         virtual Expression *build() const;
    291 
    292         virtual void print( std::ostream &, int indent = 0) const;
    293         virtual void printOneLine( std::ostream &, int indent = 0) const;
    294 
    295         ExpressionNode *get_inout() const { return inout; };
    296         void set_inout( ExpressionNode *newValue ) { inout = newValue; }
    297 
    298         ConstantNode *get_constraint() const { return constraint; };
    299         void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
    300 
    301         ExpressionNode *get_operand() const { return operand; };
    302         void set_operand( ExpressionNode *newValue ) { operand = newValue; }
    303   private:
    304         ExpressionNode *inout;
    305         ConstantNode *constraint;
    306         ExpressionNode *operand;
    307 };
     180Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
     181Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
     182Expression *build_tuple( ExpressionNode * expr_node = 0 );
     183Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
     184Expression *build_range( ExpressionNode * low, ExpressionNode *high );
     185
     186//##############################################################################
     187
     188Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
     189
     190//##############################################################################
    308191
    309192class LabelNode : public ExpressionNode {
    310193  public:
    311194        virtual Expression *build() const { return NULL; }
    312         virtual LabelNode *clone() const { return new LabelNode( *this ); }
    313 
    314         virtual void print( std::ostream &, int indent = 0) const;
    315         virtual void printOneLine( std::ostream &, int indent = 0) const;
     195        virtual LabelNode *clone() const { assert( false ); return new LabelNode( *this ); }
     196
     197        virtual void print( std::ostream &os, int indent = 0) const;
     198        virtual void printOneLine( std::ostream &os, int indent = 0) const;
    316199
    317200        const std::list< Label > &get_labels() const { return labels; };
    318         void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
     201        void append_label( std::string * label ) { labels.push_back( *label ); delete label; }
    319202  private:
    320203        std::list< Label > labels;
    321204};
    322205
    323 class ForCtlExprNode : public ExpressionNode {
    324   public:
    325         ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError );
    326         ForCtlExprNode( const ForCtlExprNode &other );
    327         ~ForCtlExprNode();
    328 
    329         StatementNode *get_init() const { return init; }
    330         ExpressionNode *get_condition() const { return condition; }
    331         ExpressionNode *get_change() const { return change; }
    332 
    333         virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); }
    334         virtual Expression *build() const;
    335 
    336         virtual void print( std::ostream &, int indent = 0 ) const;
    337         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    338   private:
    339         StatementNode *init;
    340         ExpressionNode *condition;
    341         ExpressionNode *change;
    342 };
    343 
    344 class ValofExprNode : public ExpressionNode {
    345   public:
    346         ValofExprNode();
    347         ValofExprNode( StatementNode *s = 0 );
    348         ValofExprNode( const ValofExprNode &other );
    349         ~ValofExprNode();
    350 
    351         virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    352 
    353         StatementNode *get_body() const { return body; }
    354         void print( std::ostream &, int indent = 0 ) const;
    355         void printOneLine( std::ostream &, int indent = 0 ) const;
    356         Expression *build() const;
    357 
    358   private:
    359         StatementNode *body;
    360 };
     206//##############################################################################
     207
     208Expression *build_valexpr( StatementNode *s );
     209
     210//##############################################################################
     211
     212Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
     213
     214//##############################################################################
    361215
    362216class TypeData;
     
    433287
    434288        DeclarationNode *clone() const;
    435         void print( std::ostream &, int indent = 0 ) const;
    436         void printList( std::ostream &, int indent = 0 ) const;
     289        void print( std::ostream &os, int indent = 0 ) const;
     290        void printList( std::ostream &os, int indent = 0 ) const;
    437291
    438292        Declaration *build() const;
     
    468322}; // DeclarationNode
    469323
     324Type *buildType( TypeData *type );
     325
     326//##############################################################################
     327
    470328class StatementNode : public ParseNode {
    471329  public:
     
    487345        static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
    488346
    489         StatementNode *set_block( StatementNode *b ) {  block = b; return this; }
     347        StatementNode *set_block( StatementNode *b ) { block = b; return this; }
    490348        StatementNode *get_block() const { return block; }
    491349
     
    495353        StatementNode::Type get_type() const { return type; }
    496354
    497         StatementNode *add_label( const std::string * );
    498         const std::list<std::string> &get_labels() const { return labels; }
     355        virtual StatementNode *add_label( const std::string * );
     356        virtual std::list<std::string> get_labels() const { return labels; }
    499357
    500358        void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
     
    507365        StatementNode *append_last_case( StatementNode * );
    508366
    509         void print( std::ostream &, int indent = 0) const;
     367        void print( std::ostream &os, int indent = 0) const;
    510368        virtual StatementNode *clone() const;
    511369        virtual Statement *build() const;
     
    521379}; // StatementNode
    522380
     381class StatementNode2 : public StatementNode {
     382  public:
     383        StatementNode2() {}
     384        StatementNode2( Statement *stmt ) : stmt( stmt ) {}
     385        virtual ~StatementNode2() {}
     386
     387        virtual StatementNode2 *clone() const { assert( false ); return nullptr; }
     388        virtual Statement *build() const { return stmt; }
     389
     390        virtual StatementNode2 *add_label( const std::string * name ) {
     391                stmt->get_labels().emplace_back( *name );
     392                return this;
     393        }
     394        virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
     395
     396        virtual void print( std::ostream &os, int indent = 0 ) {}
     397        virtual void printList( std::ostream &os, int indent = 0 ) {}
     398  private:
     399        Statement *stmt;
     400}; // StatementNode
     401
     402struct ForCtl {
     403        ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
     404                init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
     405        ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
     406                init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
     407
     408        StatementNode *init;
     409        ExpressionNode *condition;
     410        ExpressionNode *change;
     411};
     412
     413Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
     414Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
     415Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
     416Statement *build_for( ForCtl *forctl, StatementNode *stmt );
     417
     418//##############################################################################
     419
    523420class CompoundStmtNode : public StatementNode {
    524421  public:
     
    530427        void add_statement( StatementNode * );
    531428
    532         void print( std::ostream &, int indent = 0 ) const;
     429        void print( std::ostream &os, int indent = 0 ) const;
    533430        virtual Statement *build() const;
    534431  private:
     
    536433};
    537434
     435//##############################################################################
     436
    538437class AsmStmtNode : public StatementNode {
    539438  public:
    540         AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
     439        AsmStmtNode( Type, bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
    541440        ~AsmStmtNode();
    542441
    543         void print( std::ostream &, int indent = 0 ) const;
     442        void print( std::ostream &os, int indent = 0 ) const;
    544443        Statement *build() const;
    545444  private:
    546445        bool voltile;
    547         ConstantNode *instruction;
     446        ConstantExpr *instruction;
    548447        ExpressionNode *output, *input;
    549         ConstantNode *clobber;
     448        ExpressionNode *clobber;
    550449        std::list< Label > gotolabels;
    551450};
    552451
    553 class InitializerNode : public ParseNode {
    554   public:
    555         InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
    556         InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
    557         ~InitializerNode();
    558 
    559         ExpressionNode *get_expression() const { return expr; }
    560 
    561         InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
    562         ExpressionNode *get_designators() const { return designator; }
    563 
    564         InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
    565         bool get_maybeConstructed() const { return maybeConstructed; }
    566 
    567         InitializerNode *next_init() const { return kids; }
    568 
    569         void print( std::ostream &, int indent = 0 ) const;
    570         void printOneLine( std::ostream & ) const;
    571 
    572         virtual Initializer *build() const;
    573   private:
    574         ExpressionNode *expr;
    575         bool aggregate;
    576         ExpressionNode *designator; // may be list
    577         InitializerNode *kids;
    578         bool maybeConstructed;
    579 };
    580 
    581 class CompoundLiteralNode : public ExpressionNode {
    582   public:
    583         CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
    584         CompoundLiteralNode( const CompoundLiteralNode &type );
    585         ~CompoundLiteralNode();
    586 
    587         virtual CompoundLiteralNode *clone() const;
    588 
    589         DeclarationNode *get_type() const { return type; }
    590         CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
    591 
    592         InitializerNode *get_initializer() const { return kids; }
    593         CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
    594 
    595         void print( std::ostream &, int indent = 0 ) const;
    596         void printOneLine( std::ostream &, int indent = 0 ) const;
    597 
    598         virtual Expression *build() const;
    599   private:
    600         DeclarationNode *type;
    601         InitializerNode *kids;
    602 };
     452//##############################################################################
    603453
    604454template< typename SynTreeType, typename NodeType >
    605 void buildList( const NodeType *firstNode, std::list< SynTreeType *> &outputList ) {
     455void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
    606456        SemanticError errors;
    607457        std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
     
    631481void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
    632482
    633 // in ExpressionNode.cc
    634 ExpressionNode *flattenCommas( ExpressionNode *list );
    635 ExpressionNode *tupleContents( ExpressionNode *tuple );
    636 
    637483#endif // PARSENODE_H
    638484
  • src/Parser/StatementNode.cc

    rf18a711 r3078643  
    1010// Created On       : Sat May 16 14:59:41 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:21:02 2016
    13 // Update Count     : 133
     12// Last Modified On : Wed Aug 10 13:54:21 2016
     13// Update Count     : 170
    1414//
    1515
     
    106106        return this;
    107107}
    108 
    109 // StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
    110 //      if ( control && e )
    111 //              control->add_to_list( e ); // xxx - check this
    112 //      return this;
    113 // }
    114108
    115109StatementNode *StatementNode::append_block( StatementNode *stmt ) {
     
    176170                } // if
    177171                if ( block ) {
    178                         os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
     172                        os << string( indent + ParseNode::indent_by, ' ' ) << "Cases: " << endl;
    179173                        block->printList( os, indent + 2 * ParseNode::indent_by );
    180174                } // if
     
    212206                }
    213207          case If:
    214                 {
    215                         Statement *thenb = 0, *elseb = 0;
    216                         assert( branches.size() >= 1 );
    217 
    218                         thenb = branches.front();
    219                         branches.pop_front();
    220                         if ( ! branches.empty() ) {
    221                                 elseb = branches.front();
    222                                 branches.pop_front();
    223                         } // if
    224                         return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
    225                 }
    226           case While:
    227                 assert( branches.size() == 1 );
    228                 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
    229           case Do:
    230                 assert( branches.size() == 1 );
    231                 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
    232           case For:
    233                 {
    234                         assert( branches.size() == 1 );
    235 
    236                         ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
    237                         assert( ctl != 0 );
    238 
    239                         std::list<Statement *> init;
    240                         if ( ctl->get_init() != 0 ) {
    241                                 buildList( ctl->get_init(), init );
    242                         } // if
    243 
    244                         Expression *cond = 0;
    245                         if ( ctl->get_condition() != 0 )
    246                                 cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
    247 
    248                         Expression *incr = 0;
    249                         if ( ctl->get_change() != 0 )
    250                                 incr = maybeBuild<Expression>(ctl->get_change());
    251 
    252                         return new ForStmt( labs, init, cond, incr, branches.front() );
    253                 }
     208                // {
     209                //      Statement *thenb = 0, *elseb = 0;
     210                //      assert( branches.size() >= 1 );
     211
     212                //      thenb = branches.front();
     213                //      branches.pop_front();
     214                //      if ( ! branches.empty() ) {
     215                //              elseb = branches.front();
     216                //              branches.pop_front();
     217                //      } // if
     218                //      return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
     219                // }
     220                assert( false );
    254221          case Switch:
    255                 return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
     222                //return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
     223                assert( false );
    256224          case Case:
    257                 return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
     225                return new CaseStmt( labs, maybeBuild<Expression>(get_control() ), branches );
    258226          case Default:
    259227                return new CaseStmt( labs, 0, branches, true );
     228          case While:
     229                // assert( branches.size() == 1 );
     230                // return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
     231                assert( false );
     232          case Do:
     233                // assert( branches.size() == 1 );
     234                // return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
     235                assert( false );
     236          case For:
     237                // {
     238                //      assert( branches.size() == 1 );
     239
     240                //      ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
     241                //      assert( ctl != 0 );
     242
     243                //      std::list<Statement *> init;
     244                //      if ( ctl->get_init() != 0 ) {
     245                //              buildList( ctl->get_init(), init );
     246                //      } // if
     247
     248                //      Expression *cond = 0;
     249                //      if ( ctl->get_condition() != 0 )
     250                //              cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
     251
     252                //      Expression *incr = 0;
     253                //      if ( ctl->get_change() != 0 )
     254                //              incr = maybeBuild<Expression>(ctl->get_change());
     255
     256                //      return new ForStmt( labs, init, cond, incr, branches.front() );
     257                // }
     258                assert( false );
    260259          case Goto:
    261260                {
     
    311310}
    312311
     312Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
     313        Statement *thenb, *elseb = 0;
     314        std::list<Statement *> branches;
     315        buildList<Statement, StatementNode>( then_stmt, branches );
     316        assert( branches.size() >= 1 );
     317        thenb = branches.front();
     318
     319        if ( else_stmt ) {
     320                std::list<Statement *> branches;
     321                buildList<Statement, StatementNode>( else_stmt, branches );
     322                assert( branches.size() >= 1 );
     323                elseb = branches.front();
     324        } // if
     325        return new IfStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), thenb, elseb );
     326}
     327
     328Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) {
     329        std::list<Statement *> branches;
     330        buildList<Statement, StatementNode>( stmt, branches );
     331        assert( branches.size() >= 1 );
     332        return new SwitchStmt( noLabels, maybeBuild<Expression>(ctl), branches );
     333}
     334
     335Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
     336        std::list<Statement *> branches;
     337        buildList<Statement, StatementNode>( stmt, branches );
     338        assert( branches.size() == 1 );
     339        return new WhileStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), branches.front(), kind );
     340}
     341
     342Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
     343        std::list<Statement *> branches;
     344        buildList<Statement, StatementNode>( stmt, branches );
     345        assert( branches.size() == 1 );
     346
     347        std::list<Statement *> init;
     348        if ( forctl->init != 0 ) {
     349                buildList( forctl->init, init );
     350        } // if
     351
     352        Expression *cond = 0;
     353        if ( forctl->condition != 0 )
     354                cond = notZeroExpr( maybeBuild<Expression>(forctl->condition) );
     355
     356        Expression *incr = 0;
     357        if ( forctl->change != 0 )
     358                incr = maybeBuild<Expression>(forctl->change);
     359
     360        delete forctl;
     361        return new ForStmt( noLabels, init, cond, incr, branches.front() );
     362}
     363
    313364
    314365CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
     
    356407
    357408
    358 AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :
     409AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) :
    359410        StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
    360411        if ( gotolabels ) {
     
    365416
    366417AsmStmtNode::~AsmStmtNode() {
    367         delete instruction; delete output; delete input; delete clobber;
     418        delete output; delete input; delete clobber;
    368419}
    369420
     
    373424        if ( instruction ) {
    374425                os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
    375                 instruction->printList( os, indent + 2 * ParseNode::indent_by );
     426//              instruction->printList( os, indent + 2 * ParseNode::indent_by );
    376427        } // if
    377428        if ( output ) {
     
    385436        if ( clobber ) {
    386437                os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
    387                 clobber->printList( os, indent + 2 * ParseNode::indent_by );
     438//              clobber->printList( os, indent + 2 * ParseNode::indent_by );
    388439        } // if
    389440        if ( ! gotolabels.empty() ) {
     
    414465        buildList( clobber, clob );
    415466        std::list< Label > gotolabs = gotolabels;
    416         return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );
     467        return new AsmStmt( labs, voltile, instruction, out, in, clob, gotolabs );
    417468}
    418469
  • src/Parser/TypeData.cc

    rf18a711 r3078643  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jul 13 18:03:29 2016
    13 // Update Count     : 56
     12// Last Modified On : Sun Aug  7 07:51:48 2016
     13// Update Count     : 58
    1414//
    1515
     
    182182                break;
    183183          case Array:
    184                 newtype->array->dimension = maybeClone( array->dimension );
     184//PAB           newtype->array->dimension = maybeClone( array->dimension );
     185                newtype->array->dimension = array->dimension;
    185186                newtype->array->isVarLen = array->isVarLen;
    186187                newtype->array->isStatic = array->isStatic;
  • src/Parser/parser.cc

    rf18a711 r3078643  
    8989TypedefTable typedefTable;
    9090
     91void appendStr( std::string &to, std::string *from ) {
     92        // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
     93        to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
     94} // appendStr
     95
    9196
    9297/* Line 268 of yacc.c  */
    93 #line 94 "Parser/parser.cc"
     98#line 99 "Parser/parser.cc"
    9499
    95100/* Enabling traces.  */
     
    342347
    343348/* Line 293 of yacc.c  */
    344 #line 110 "parser.yy"
     349#line 115 "parser.yy"
    345350
    346351        Token tok;
     
    351356        DeclarationNode::TypeClass tclass;
    352357        StatementNode *sn;
    353         ConstantNode *constant;
     358        ConstantExpr *constant;
     359        ForCtl *fctl;
    354360        LabelNode *label;
    355361        InitializerNode *in;
    356         OperatorNode::Type op;
     362        OperKinds op;
    357363        bool flag;
    358364
     
    360366
    361367/* Line 293 of yacc.c  */
    362 #line 363 "Parser/parser.cc"
     368#line 369 "Parser/parser.cc"
    363369} YYSTYPE;
    364370# define YYSTYPE_IS_TRIVIAL 1
     
    372378
    373379/* Line 343 of yacc.c  */
    374 #line 375 "Parser/parser.cc"
     380#line 381 "Parser/parser.cc"
    375381
    376382#ifdef short
     
    589595
    590596/* YYFINAL -- State number of the termination state.  */
    591 #define YYFINAL  252
     597#define YYFINAL  251
    592598/* YYLAST -- Last index in YYTABLE.  */
    593 #define YYLAST   12080
     599#define YYLAST   10816
    594600
    595601/* YYNTOKENS -- Number of terminals.  */
     
    598604#define YYNNTS  241
    599605/* YYNRULES -- Number of rules.  */
    600 #define YYNRULES  755
     606#define YYNRULES  750
    601607/* YYNRULES -- Number of states.  */
    602 #define YYNSTATES  1579
     608#define YYNSTATES  1554
    603609
    604610/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    615621       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    616622       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    617        2,     2,     2,   122,     2,     2,     2,   125,   119,     2,
    618      109,   110,   118,   120,   116,   121,   113,   124,     2,     2,
    619        2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
    620      126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
     623       2,     2,     2,   121,     2,     2,     2,   124,   118,     2,
     624     109,   110,   117,   119,   116,   120,   113,   123,     2,     2,
     625       2,     2,     2,     2,     2,     2,     2,     2,   130,   132,
     626     125,   131,   126,   129,     2,     2,     2,     2,     2,     2,
    621627       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    622628       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    623        2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
     629       2,   111,     2,   112,   127,     2,     2,     2,     2,     2,
    624630       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    625631       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    626        2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
     632       2,     2,     2,   114,   128,   115,   122,     2,     2,     2,
    627633       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    628634       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    659665      17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
    660666      38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
    661       87,    90,    98,   103,   105,   109,   110,   112,   116,   124,
    662      134,   136,   140,   142,   146,   154,   158,   166,   168,   170,
    663      172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
    664      209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
    665      236,   238,   243,   248,   250,   254,   258,   262,   264,   268,
    666      272,   274,   278,   282,   284,   288,   292,   296,   300,   302,
    667      306,   310,   312,   316,   318,   322,   324,   328,   330,   334,
    668      336,   340,   342,   348,   353,   359,   361,   363,   367,   371,
    669      374,   375,   377,   380,   386,   393,   401,   403,   407,   409,
    670      411,   413,   415,   417,   419,   421,   423,   425,   427,   429,
    671      433,   434,   436,   438,   440,   442,   444,   446,   448,   450,
    672      452,   459,   464,   467,   475,   477,   481,   483,   486,   488,
    673      491,   493,   496,   499,   505,   513,   519,   529,   535,   545,
    674      547,   551,   553,   555,   559,   563,   566,   568,   571,   574,
    675      575,   577,   580,   584,   585,   587,   590,   594,   598,   603,
    676      604,   606,   608,   611,   617,   625,   632,   639,   644,   648,
    677      653,   656,   660,   663,   667,   671,   675,   679,   685,   689,
    678      693,   698,   700,   706,   713,   719,   726,   736,   747,   757,
    679      768,   771,   773,   776,   779,   782,   784,   791,   800,   811,
    680      824,   839,   840,   842,   843,   845,   847,   851,   856,   864,
    681      865,   867,   871,   873,   877,   879,   881,   883,   887,   889,
    682      891,   893,   897,   898,   900,   904,   909,   911,   915,   917,
    683      919,   923,   927,   931,   935,   939,   942,   946,   953,   957,
    684      961,   966,   968,   971,   974,   978,   984,   993,  1001,  1009,
    685     1015,  1025,  1028,  1031,  1037,  1041,  1047,  1052,  1056,  1061,
    686     1066,  1074,  1078,  1082,  1086,  1090,  1095,  1102,  1104,  1106,
    687     1108,  1110,  1112,  1114,  1116,  1118,  1119,  1121,  1123,  1126,
    688     1128,  1130,  1132,  1134,  1136,  1138,  1140,  1141,  1147,  1149,
    689     1152,  1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,
    690     1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,
    691     1195,  1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,
    692     1221,  1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,
    693     1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,
    694     1286,  1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,
    695     1318,  1326,  1329,  1332,  1335,  1336,  1339,  1342,  1346,  1349,
    696     1353,  1355,  1358,  1362,  1365,  1368,  1373,  1374,  1376,  1379,
    697     1382,  1384,  1385,  1387,  1390,  1393,  1399,  1402,  1403,  1411,
    698     1414,  1419,  1420,  1423,  1424,  1426,  1428,  1430,  1436,  1442,
    699     1448,  1450,  1456,  1462,  1472,  1474,  1480,  1481,  1483,  1485,
    700     1491,  1493,  1495,  1501,  1507,  1509,  1513,  1517,  1522,  1524,
    701     1526,  1528,  1530,  1533,  1535,  1539,  1543,  1545,  1548,  1550,
    702     1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,  1572,
    703     1574,  1576,  1579,  1581,  1583,  1585,  1588,  1589,  1592,  1595,
    704     1597,  1602,  1603,  1605,  1608,  1612,  1617,  1620,  1623,  1625,
    705     1628,  1630,  1633,  1639,  1645,  1653,  1660,  1662,  1665,  1668,
    706     1672,  1674,  1677,  1680,  1685,  1688,  1693,  1694,  1699,  1702,
    707     1704,  1706,  1708,  1709,  1712,  1718,  1724,  1738,  1740,  1742,
    708     1746,  1750,  1753,  1757,  1761,  1764,  1769,  1771,  1778,  1788,
    709     1789,  1801,  1803,  1807,  1811,  1815,  1817,  1819,  1825,  1828,
    710     1834,  1835,  1837,  1839,  1843,  1844,  1846,  1848,  1850,  1852,
    711     1853,  1860,  1863,  1865,  1868,  1873,  1876,  1880,  1884,  1888,
    712     1893,  1899,  1905,  1911,  1918,  1920,  1922,  1924,  1928,  1929,
    713     1935,  1936,  1938,  1940,  1943,  1950,  1952,  1956,  1957,  1959,
    714     1964,  1966,  1968,  1970,  1972,  1975,  1977,  1980,  1983,  1985,
    715     1989,  1992,  1996,  2000,  2003,  2008,  2013,  2017,  2026,  2030,
    716     2033,  2035,  2038,  2045,  2054,  2058,  2061,  2065,  2069,  2074,
    717     2079,  2083,  2085,  2087,  2089,  2094,  2101,  2105,  2108,  2112,
    718     2116,  2121,  2126,  2130,  2133,  2135,  2138,  2141,  2143,  2147,
    719     2150,  2154,  2158,  2161,  2166,  2171,  2175,  2182,  2191,  2195,
    720     2198,  2200,  2203,  2206,  2209,  2213,  2217,  2220,  2225,  2230,
    721     2234,  2241,  2250,  2254,  2257,  2259,  2262,  2265,  2267,  2269,
    722     2272,  2276,  2280,  2283,  2288,  2295,  2304,  2306,  2309,  2312,
    723     2314,  2317,  2320,  2324,  2328,  2330,  2335,  2340,  2344,  2350,
    724     2359,  2363,  2366,  2370,  2372,  2378,  2384,  2391,  2398,  2400,
    725     2403,  2406,  2408,  2411,  2414,  2418,  2422,  2424,  2429,  2434,
    726     2438,  2444,  2453,  2457,  2459,  2462,  2464,  2467,  2474,  2480,
    727     2487,  2495,  2503,  2505,  2508,  2511,  2513,  2516,  2519,  2523,
    728     2527,  2529,  2534,  2539,  2543,  2552,  2556,  2558,  2560,  2563,
    729     2565,  2567,  2570,  2574,  2577,  2581,  2584,  2588,  2592,  2595,
    730     2600,  2604,  2607,  2611,  2614,  2619,  2623,  2626,  2633,  2640,
    731     2647,  2655,  2657,  2660,  2662,  2664,  2666,  2669,  2673,  2676,
    732     2680,  2683,  2687,  2691,  2696,  2699,  2703,  2708,  2711,  2717,
    733     2723,  2730,  2737,  2738,  2740,  2741
     667      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
     668     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
     669     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
     670     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
     671     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
     672     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
     673     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
     674     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
     675     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
     676     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
     677     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
     678     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
     679     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
     680     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
     681     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
     682     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
     683     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
     684     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
     685     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
     686     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
     687     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
     688     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
     689     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
     690     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
     691    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
     692    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
     693    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
     694    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
     695    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
     696    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
     697    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
     698    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
     699    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
     700    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
     701    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
     702    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
     703    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
     704    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
     705    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
     706    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
     707    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
     708    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
     709    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
     710    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
     711    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
     712    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
     713    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
     714    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
     715    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
     716    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
     717    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
     718    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
     719    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
     720    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
     721    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
     722    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
     723    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
     724    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
     725    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
     726    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
     727    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
     728    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
     729    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
     730    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
     731    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
     732    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
     733    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
     734    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
     735    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
     736    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
     737    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
     738    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
     739    2713
    734740};
    735741
     
    748754     109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
    749755     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    750      164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
    751      112,   117,   164,    -1,   111,   134,   164,   116,   167,   135,
    752      112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
    753      139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
    754      146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
    755      111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
    756      141,    -1,    40,   151,    -1,   149,   151,    -1,   150,   151,
    757       -1,    86,   148,    -1,    87,   148,    -1,    37,   148,    -1,
    758       37,   109,   275,   110,    -1,    38,   109,   275,   116,   139,
    759      110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
    760      109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
    761      110,    -1,   118,    -1,   119,    -1,    94,    -1,   120,    -1,
    762      121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   275,
    763      110,   151,    -1,   109,   275,   110,   166,    -1,   151,    -1,
    764      152,   118,   151,    -1,   152,   124,   151,    -1,   152,   125,
    765      151,    -1,   152,    -1,   153,   120,   152,    -1,   153,   121,
    766      152,    -1,   153,    -1,   154,    88,   153,    -1,   154,    89,
    767      153,    -1,   154,    -1,   155,   126,   154,    -1,   155,   127,
    768      154,    -1,   155,    90,   154,    -1,   155,    91,   154,    -1,
    769      155,    -1,   156,    92,   155,    -1,   156,    93,   155,    -1,
    770      156,    -1,   157,   119,   156,    -1,   157,    -1,   158,   128,
    771      157,    -1,   158,    -1,   159,   129,   158,    -1,   159,    -1,
    772      160,    94,   159,    -1,   160,    -1,   161,    95,   160,    -1,
    773      161,    -1,   161,   130,   169,   117,   162,    -1,   161,   130,
    774      117,   162,    -1,   161,   130,   169,   117,   166,    -1,   162,
    775       -1,   162,    -1,   148,   131,   164,    -1,   148,   168,   164,
    776       -1,   166,   373,    -1,    -1,   164,    -1,   111,   112,    -1,
    777      111,   134,   164,   135,   112,    -1,   111,   134,   116,   167,
    778      135,   112,    -1,   111,   134,   164,   116,   167,   135,   112,
    779       -1,   165,    -1,   167,   116,   165,    -1,    97,    -1,    98,
    780       -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
    781       -1,   104,    -1,   105,    -1,   106,    -1,   164,    -1,   169,
    782      116,   164,    -1,    -1,   169,    -1,   172,    -1,   173,    -1,
    783      177,    -1,   178,    -1,   190,    -1,   192,    -1,   193,    -1,
    784      198,    -1,   128,   143,   114,   144,   115,   132,    -1,    72,
    785      117,   312,   171,    -1,   114,   115,    -1,   114,   134,   134,
    786      209,   174,   135,   115,    -1,   175,    -1,   174,   134,   175,
    787       -1,   212,    -1,    40,   212,    -1,   308,    -1,   171,   135,
    788       -1,   171,    -1,   176,   171,    -1,   170,   132,    -1,    41,
    789      109,   169,   110,   171,    -1,    41,   109,   169,   110,   171,
    790       42,   171,    -1,    43,   109,   169,   110,   183,    -1,    43,
    791      109,   169,   110,   114,   134,   205,   184,   115,    -1,    53,
    792      109,   169,   110,   183,    -1,    53,   109,   169,   110,   114,
    793      134,   205,   186,   115,    -1,   163,    -1,   163,    96,   163,
    794       -1,   310,    -1,   179,    -1,   180,   116,   179,    -1,    44,
    795      180,   117,    -1,    45,   117,    -1,   181,    -1,   182,   181,
    796       -1,   182,   171,    -1,    -1,   185,    -1,   182,   176,    -1,
    797      185,   182,   176,    -1,    -1,   187,    -1,   182,   189,    -1,
    798      182,   176,   188,    -1,   187,   182,   189,    -1,   187,   182,
    799      176,   188,    -1,    -1,   189,    -1,    56,    -1,    56,   132,
    800       -1,    47,   109,   169,   110,   171,    -1,    46,   171,    47,
    801      109,   169,   110,   132,    -1,    48,   109,   134,   191,   110,
    802      171,    -1,   170,   135,   132,   170,   132,   170,    -1,   212,
    803      170,   132,   170,    -1,    51,    72,   132,    -1,    51,   118,
    804      169,   132,    -1,    50,   132,    -1,    50,    72,   132,    -1,
    805       49,   132,    -1,    49,    72,   132,    -1,    52,   170,   132,
    806       -1,    61,   165,   132,    -1,    62,   165,   132,    -1,    62,
    807      165,    63,   164,   132,    -1,    57,   173,   194,    -1,    57,
    808      173,   196,    -1,    57,   173,   194,   196,    -1,   195,    -1,
    809       58,   109,    96,   110,   173,    -1,   195,    58,   109,    96,
    810      110,   173,    -1,    59,   109,    96,   110,   173,    -1,   195,
    811       59,   109,    96,   110,   173,    -1,    58,   109,   134,   134,
    812      197,   135,   110,   173,   135,    -1,   195,    58,   109,   134,
    813      134,   197,   135,   110,   173,   135,    -1,    59,   109,   134,
    814      134,   197,   135,   110,   173,   135,    -1,   195,    59,   109,
    815      134,   134,   197,   135,   110,   173,   135,    -1,    60,   173,
    816       -1,   225,    -1,   225,   309,    -1,   225,   357,    -1,   366,
    817      139,    -1,   366,    -1,    64,   199,   109,   141,   110,   132,
    818       -1,    64,   199,   109,   141,   117,   200,   110,   132,    -1,
    819       64,   199,   109,   141,   117,   200,   117,   200,   110,   132,
    820       -1,    64,   199,   109,   141,   117,   200,   117,   200,   117,
    821      203,   110,   132,    -1,    64,   199,    51,   109,   141,   117,
    822      117,   200,   117,   203,   117,   204,   110,   132,    -1,    -1,
    823       11,    -1,    -1,   201,    -1,   202,    -1,   201,   116,   202,
    824       -1,   141,   109,   163,   110,    -1,   111,   163,   112,   141,
    825      109,   163,   110,    -1,    -1,   141,    -1,   203,   116,   141,
    826       -1,   139,    -1,   204,   116,   139,    -1,   135,    -1,   206,
    827       -1,   212,    -1,   206,   134,   212,    -1,   135,    -1,   208,
    828       -1,   222,    -1,   208,   134,   222,    -1,    -1,   210,    -1,
    829       29,   211,   132,    -1,   210,    29,   211,   132,    -1,   274,
    830       -1,   211,   116,   274,    -1,   213,    -1,   222,    -1,   214,
    831      135,   132,    -1,   219,   135,   132,    -1,   216,   135,   132,
    832       -1,   293,   135,   132,    -1,   296,   135,   132,    -1,   215,
    833      277,    -1,   231,   215,   277,    -1,   214,   135,   116,   134,
    834      272,   277,    -1,   367,   272,   311,    -1,   370,   272,   311,
    835       -1,   227,   370,   272,   311,    -1,   217,    -1,   227,   217,
    836       -1,   231,   217,    -1,   231,   227,   217,    -1,   216,   135,
    837      116,   134,   272,    -1,   111,   112,   272,   109,   134,   260,
    838      135,   110,    -1,   370,   272,   109,   134,   260,   135,   110,
    839       -1,   218,   272,   109,   134,   260,   135,   110,    -1,   111,
    840      134,   262,   135,   112,    -1,   111,   134,   262,   135,   116,
    841      134,   263,   135,   112,    -1,     3,   215,    -1,     3,   217,
    842       -1,   219,   135,   116,   134,   139,    -1,     3,   225,   309,
    843       -1,   220,   135,   116,   134,   309,    -1,   227,     3,   225,
    844      309,    -1,   225,     3,   309,    -1,   225,     3,   227,   309,
    845       -1,     3,   139,   131,   164,    -1,   221,   135,   116,   134,
    846      139,   131,   164,    -1,   223,   135,   132,    -1,   220,   135,
    847      132,    -1,   221,   135,   132,    -1,   240,   135,   132,    -1,
    848      224,   309,   311,   277,    -1,   223,   116,   312,   309,   311,
    849      277,    -1,   236,    -1,   240,    -1,   242,    -1,   283,    -1,
    850      237,    -1,   241,    -1,   243,    -1,   284,    -1,    -1,   227,
    851       -1,   228,    -1,   227,   228,    -1,   229,    -1,   314,    -1,
    852       10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
    853       -1,    13,   109,   230,   286,   110,    -1,   232,    -1,   227,
    854      232,    -1,   231,   227,   232,    -1,   233,    -1,   232,   233,
    855       -1,   234,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
    856       -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
    857       -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
    858       -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
    859       -1,    27,    -1,    24,    -1,   237,    -1,   231,   237,    -1,
    860      236,   233,    -1,   236,   233,   227,    -1,   236,   233,   237,
    861       -1,   238,    -1,   226,   239,   226,    -1,   235,    -1,   227,
    862      235,    -1,   238,   228,    -1,   238,   235,    -1,    28,   109,
    863      276,   110,    -1,    28,   109,   169,   110,    -1,    78,   109,
    864      276,   110,    -1,    78,   109,   169,   110,    -1,   241,    -1,
    865      231,   241,    -1,   240,   233,    -1,   240,   233,   227,    -1,
    866      244,    -1,   227,   244,    -1,   241,   228,    -1,   243,    -1,
    867      231,   243,    -1,   242,   233,    -1,   242,   233,   227,    -1,
    868       74,    -1,   227,    74,    -1,   243,   228,    -1,   245,    -1,
    869      256,    -1,   247,   114,   248,   115,    -1,   247,   274,    -1,
    870       -1,   247,   274,   246,   114,   248,   115,    -1,   247,   109,
    871      292,   110,   114,   248,   115,    -1,   247,   285,    -1,    31,
    872      312,    -1,    32,   312,    -1,    -1,   248,   249,    -1,   250,
    873      132,    -1,    40,   250,   132,    -1,   251,   132,    -1,    40,
    874      251,   132,    -1,   366,    -1,   366,   274,    -1,   250,   116,
    875      274,    -1,   250,   116,    -1,   225,   252,    -1,   251,   116,
    876      312,   252,    -1,    -1,   254,    -1,   318,   253,    -1,   331,
    877      253,    -1,   357,    -1,    -1,   254,    -1,   117,   163,    -1,
    878       30,   312,    -1,   255,   114,   258,   372,   115,    -1,   255,
    879      274,    -1,    -1,   255,   274,   257,   114,   258,   372,   115,
    880       -1,   274,   259,    -1,   258,   116,   274,   259,    -1,    -1,
    881      131,   163,    -1,    -1,   261,    -1,   263,    -1,   262,    -1,
    882      262,   135,   116,   134,   263,    -1,   263,   135,   116,   134,
    883       96,    -1,   262,   135,   116,   134,    96,    -1,   267,    -1,
    884      263,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
    885      267,    -1,   262,   135,   116,   134,   263,   135,   116,   134,
    886      267,    -1,   268,    -1,   263,   135,   116,   134,   268,    -1,
    887       -1,   265,    -1,   266,    -1,   266,   135,   116,   134,    96,
    888       -1,   270,    -1,   269,    -1,   266,   135,   116,   134,   270,
    889       -1,   266,   135,   116,   134,   269,    -1,   269,    -1,   362,
    890      272,   373,    -1,   370,   272,   373,    -1,   227,   370,   272,
    891      373,    -1,   217,    -1,   270,    -1,   362,    -1,   370,    -1,
    892      227,   370,    -1,   371,    -1,   224,   336,   373,    -1,   224,
    893      340,   373,    -1,   224,    -1,   224,   351,    -1,   139,    -1,
    894      271,   116,   139,    -1,   137,    -1,    74,    -1,    75,    -1,
    895      138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,    -1,
    896       75,    -1,   366,    -1,   225,    -1,   225,   357,    -1,   366,
    897       -1,   371,    -1,   225,    -1,   225,   345,    -1,    -1,   131,
    898      278,    -1,   107,   278,    -1,   164,    -1,   114,   279,   372,
    899      115,    -1,    -1,   278,    -1,   280,   278,    -1,   279,   116,
    900      278,    -1,   279,   116,   280,   278,    -1,   281,   117,    -1,
    901      274,   117,    -1,   282,    -1,   281,   282,    -1,    80,    -1,
    902      113,   274,    -1,   111,   134,   164,   135,   112,    -1,   111,
    903      134,   310,   135,   112,    -1,   111,   134,   163,    96,   163,
    904      135,   112,    -1,   113,   111,   134,   146,   135,   112,    -1,
    905      284,    -1,   231,   284,    -1,   283,   233,    -1,   283,   233,
    906      227,    -1,   285,    -1,   227,   285,    -1,   284,   228,    -1,
    907       75,   109,   292,   110,    -1,   287,   373,    -1,   286,   116,
    908      287,   373,    -1,    -1,   289,   274,   288,   290,    -1,   225,
    909      336,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,   290,
    910      291,    -1,   129,   274,   109,   292,   110,    -1,   129,   114,
    911      134,   298,   115,    -1,   129,   109,   134,   286,   135,   110,
    912      114,   134,   298,   115,   109,   292,   110,    -1,   276,    -1,
    913      164,    -1,   292,   116,   276,    -1,   292,   116,   164,    -1,
    914       33,   294,    -1,   232,    33,   294,    -1,   293,   116,   294,
    915       -1,   295,   290,    -1,   295,   290,   131,   276,    -1,   274,
    916       -1,   273,   109,   134,   286,   135,   110,    -1,    36,   274,
    917      109,   134,   286,   135,   110,   114,   115,    -1,    -1,    36,
    918      274,   109,   134,   286,   135,   110,   114,   297,   298,   115,
    919       -1,   299,    -1,   298,   134,   299,    -1,   300,   135,   132,
    920       -1,   301,   135,   132,    -1,   215,    -1,   217,    -1,   300,
    921      135,   116,   134,   272,    -1,   225,   309,    -1,   301,   135,
    922      116,   134,   309,    -1,    -1,   303,    -1,   305,    -1,   303,
    923      134,   305,    -1,    -1,   303,    -1,   212,    -1,   307,    -1,
    924      198,    -1,    -1,     5,    82,   306,   114,   304,   115,    -1,
    925       40,   305,    -1,   308,    -1,   323,   173,    -1,   327,   134,
    926      207,   173,    -1,   216,   173,    -1,   224,   323,   173,    -1,
    927      227,   323,   173,    -1,   231,   323,   173,    -1,   231,   227,
    928      323,   173,    -1,   224,   327,   134,   207,   173,    -1,   227,
    929      327,   134,   207,   173,    -1,   231,   327,   134,   207,   173,
    930       -1,   231,   227,   327,   134,   207,   173,    -1,   318,    -1,
    931      331,    -1,   323,    -1,   163,   123,   163,    -1,    -1,    64,
    932      109,   141,   110,   312,    -1,    -1,   313,    -1,   314,    -1,
    933      313,   314,    -1,    39,   109,   109,   315,   110,   110,    -1,
    934      316,    -1,   315,   116,   316,    -1,    -1,   317,    -1,   317,
    935      109,   170,   110,    -1,   272,    -1,   234,    -1,   235,    -1,
    936      228,    -1,   319,   312,    -1,   320,    -1,   321,   312,    -1,
    937      322,   312,    -1,   137,    -1,   109,   319,   110,    -1,   149,
    938      318,    -1,   149,   227,   318,    -1,   109,   320,   110,    -1,
    939      319,   349,    -1,   109,   320,   110,   349,    -1,   109,   321,
    940      110,   350,    -1,   109,   321,   110,    -1,   109,   320,   110,
    941      109,   134,   264,   135,   110,    -1,   109,   322,   110,    -1,
    942      324,   312,    -1,   325,    -1,   326,   312,    -1,   319,   109,
    943      134,   264,   135,   110,    -1,   109,   325,   110,   109,   134,
    944      264,   135,   110,    -1,   109,   324,   110,    -1,   149,   323,
    945       -1,   149,   227,   323,    -1,   109,   325,   110,    -1,   109,
    946      325,   110,   349,    -1,   109,   326,   110,   350,    -1,   109,
    947      326,   110,    -1,   328,    -1,   329,    -1,   330,    -1,   319,
    948      109,   271,   110,    -1,   109,   329,   110,   109,   271,   110,
    949       -1,   109,   328,   110,    -1,   149,   327,    -1,   149,   227,
    950      327,    -1,   109,   329,   110,    -1,   109,   329,   110,   349,
    951       -1,   109,   330,   110,   350,    -1,   109,   330,   110,    -1,
    952      332,   312,    -1,   333,    -1,   334,   312,    -1,   335,   312,
    953       -1,   341,    -1,   109,   332,   110,    -1,   149,   331,    -1,
    954      149,   227,   331,    -1,   109,   333,   110,    -1,   332,   349,
    955       -1,   109,   333,   110,   349,    -1,   109,   334,   110,   350,
    956       -1,   109,   334,   110,    -1,   332,   109,   134,   264,   135,
    957      110,    -1,   109,   333,   110,   109,   134,   264,   135,   110,
    958       -1,   109,   335,   110,    -1,   319,   312,    -1,   337,    -1,
    959      338,   312,    -1,   339,   312,    -1,   149,   336,    -1,   149,
    960      227,   336,    -1,   109,   337,   110,    -1,   319,   355,    -1,
    961      109,   337,   110,   349,    -1,   109,   338,   110,   350,    -1,
    962      109,   338,   110,    -1,   319,   109,   134,   264,   135,   110,
    963       -1,   109,   337,   110,   109,   134,   264,   135,   110,    -1,
    964      109,   339,   110,    -1,   341,   312,    -1,   342,    -1,   343,
    965      312,    -1,   344,   312,    -1,    74,    -1,    75,    -1,   149,
    966      340,    -1,   149,   227,   340,    -1,   109,   342,   110,    -1,
    967      341,   355,    -1,   109,   342,   110,   355,    -1,   341,   109,
    968      134,   264,   135,   110,    -1,   109,   342,   110,   109,   134,
    969      264,   135,   110,    -1,   346,    -1,   347,   312,    -1,   348,
    970      312,    -1,   149,    -1,   149,   227,    -1,   149,   345,    -1,
    971      149,   227,   345,    -1,   109,   346,   110,    -1,   349,    -1,
    972      109,   346,   110,   349,    -1,   109,   347,   110,   350,    -1,
    973      109,   347,   110,    -1,   109,   134,   264,   135,   110,    -1,
    974      109,   346,   110,   109,   134,   264,   135,   110,    -1,   109,
    975      348,   110,    -1,   111,   112,    -1,   111,   112,   350,    -1,
    976      350,    -1,   111,   134,   164,   135,   112,    -1,   111,   134,
    977      118,   135,   112,    -1,   350,   111,   134,   164,   135,   112,
    978       -1,   350,   111,   134,   118,   135,   112,    -1,   352,    -1,
    979      353,   312,    -1,   354,   312,    -1,   149,    -1,   149,   227,
    980       -1,   149,   351,    -1,   149,   227,   351,    -1,   109,   352,
    981      110,    -1,   355,    -1,   109,   352,   110,   355,    -1,   109,
    982      353,   110,   350,    -1,   109,   353,   110,    -1,   109,   134,
    983      264,   135,   110,    -1,   109,   352,   110,   109,   134,   264,
    984      135,   110,    -1,   109,   354,   110,    -1,   356,    -1,   356,
    985      350,    -1,   350,    -1,   111,   112,    -1,   111,   134,   227,
    986      118,   135,   112,    -1,   111,   134,   227,   135,   112,    -1,
    987      111,   134,   227,   164,   135,   112,    -1,   111,   134,     7,
    988      226,   164,   135,   112,    -1,   111,   134,   227,     7,   164,
    989      135,   112,    -1,   358,    -1,   359,   312,    -1,   360,   312,
    990       -1,   149,    -1,   149,   227,    -1,   149,   357,    -1,   149,
    991      227,   357,    -1,   109,   358,   110,    -1,   349,    -1,   109,
    992      358,   110,   349,    -1,   109,   359,   110,   350,    -1,   109,
    993      359,   110,    -1,   109,   358,   110,   109,   134,   264,   135,
    994      110,    -1,   109,   360,   110,    -1,   362,    -1,   370,    -1,
    995      227,   370,    -1,   363,    -1,   364,    -1,   149,   225,    -1,
    996      227,   149,   225,    -1,   149,   371,    -1,   227,   149,   371,
    997       -1,   149,   361,    -1,   227,   149,   361,    -1,   111,   112,
    998      225,    -1,   365,   225,    -1,   111,   112,   350,   225,    -1,
    999      365,   350,   225,    -1,   350,   225,    -1,   111,   112,   363,
    1000       -1,   365,   363,    -1,   111,   112,   350,   363,    -1,   365,
    1001      350,   363,    -1,   350,   363,    -1,   111,   134,   227,   118,
    1002      135,   112,    -1,   111,   134,   227,   164,   135,   112,    -1,
    1003      111,   134,   231,   164,   135,   112,    -1,   111,   134,   231,
    1004      227,   164,   135,   112,    -1,   370,    -1,   227,   370,    -1,
    1005      367,    -1,   368,    -1,   369,    -1,   149,   225,    -1,   227,
    1006      149,   225,    -1,   149,   371,    -1,   227,   149,   371,    -1,
    1007      149,   366,    -1,   227,   149,   366,    -1,   111,   112,   225,
    1008       -1,   111,   112,   350,   225,    -1,   350,   225,    -1,   111,
    1009      112,   368,    -1,   111,   112,   350,   368,    -1,   350,   368,
    1010       -1,   111,   134,   263,   135,   112,    -1,   111,   112,   109,
    1011      260,   110,    -1,   370,   109,   134,   260,   135,   110,    -1,
    1012      218,   109,   134,   260,   135,   110,    -1,    -1,   116,    -1,
    1013       -1,   131,   164,    -1
     756     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
     757     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
     758     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
     759     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
     760      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
     761     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
     762     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
     763      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
     764      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
     765     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
     766     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
     767     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
     768     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
     769     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
     770     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
     771     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
     772     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
     773     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
     774     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
     775     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
     776     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
     777     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
     778     129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
     779     166,   164,    -1,   167,   373,    -1,    -1,   164,    -1,   131,
     780      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
     781      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
     782      -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
     783     111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
     784     116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
     785      -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
     786     172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
     787     192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
     788     115,   132,    -1,    72,   130,   312,   171,    -1,   114,   115,
     789      -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
     790      -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
     791     308,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
     792     170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
     793     109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
     794     110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
     795     184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
     796     109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
     797      -1,   163,    96,   163,    -1,   310,    -1,   179,    -1,   180,
     798     116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
     799     181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
     800      -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
     801      -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
     802     189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
     803      56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
     804      -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
     805     109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
     806     132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
     807     132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
     808      50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
     809      -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
     810     165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
     811     173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
     812     196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
     813     195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
     814     110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
     815      58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
     816     195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
     817      -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
     818      -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
     819     135,    -1,    60,   173,    -1,   225,    -1,   225,   309,    -1,
     820     225,   357,    -1,   366,   139,    -1,   366,    -1,    64,   199,
     821     109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
     822     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
     823     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
     824     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
     825      51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
     826     110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
     827      -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
     828     111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
     829      -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
     830      -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
     831      -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
     832      -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
     833     211,   132,    -1,   274,    -1,   211,   116,   274,    -1,   213,
     834      -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
     835      -1,   216,   135,   132,    -1,   293,   135,   132,    -1,   296,
     836     135,   132,    -1,   215,   277,    -1,   231,   215,   277,    -1,
     837     214,   135,   116,   134,   272,   277,    -1,   367,   272,   311,
     838      -1,   370,   272,   311,    -1,   227,   370,   272,   311,    -1,
     839     217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
     840     217,    -1,   216,   135,   116,   134,   272,    -1,   111,   112,
     841     272,   109,   134,   260,   135,   110,    -1,   370,   272,   109,
     842     134,   260,   135,   110,    -1,   218,   272,   109,   134,   260,
     843     135,   110,    -1,   111,   134,   262,   135,   112,    -1,   111,
     844     134,   262,   135,   116,   134,   263,   135,   112,    -1,     3,
     845     215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
     846      -1,     3,   225,   309,    -1,   220,   135,   116,   134,   309,
     847      -1,   227,     3,   225,   309,    -1,   225,     3,   309,    -1,
     848     225,     3,   227,   309,    -1,     3,   139,   131,   164,    -1,
     849     221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
     850     132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
     851     240,   135,   132,    -1,   224,   309,   311,   277,    -1,   223,
     852     116,   312,   309,   311,   277,    -1,   236,    -1,   240,    -1,
     853     242,    -1,   283,    -1,   237,    -1,   241,    -1,   243,    -1,
     854     284,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
     855     229,    -1,   314,    -1,    10,    -1,    12,    -1,    11,    -1,
     856      14,    -1,    67,    -1,    -1,    13,   109,   230,   286,   110,
     857      -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
     858     233,    -1,   232,   233,    -1,   234,    -1,     5,    -1,     7,
     859      -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
     860      -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
     861      -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
     862      -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
     863      -1,   231,   237,    -1,   236,   233,    -1,   236,   233,   227,
     864      -1,   236,   233,   237,    -1,   238,    -1,   226,   239,   226,
     865      -1,   235,    -1,   227,   235,    -1,   238,   228,    -1,   238,
     866     235,    -1,    28,   109,   276,   110,    -1,    28,   109,   169,
     867     110,    -1,    78,   109,   276,   110,    -1,    78,   109,   169,
     868     110,    -1,   241,    -1,   231,   241,    -1,   240,   233,    -1,
     869     240,   233,   227,    -1,   244,    -1,   227,   244,    -1,   241,
     870     228,    -1,   243,    -1,   231,   243,    -1,   242,   233,    -1,
     871     242,   233,   227,    -1,    74,    -1,   227,    74,    -1,   243,
     872     228,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
     873      -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
     874     115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
     875     247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
     876     248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
     877     251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
     878     274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   225,
     879     252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
     880     318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
     881      -1,   130,   163,    -1,    30,   312,    -1,   255,   114,   258,
     882     372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
     883     114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
     884     274,   259,    -1,    -1,   131,   163,    -1,    -1,   261,    -1,
     885     263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
     886     263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
     887      96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
     888     262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
     889     263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
     890     116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
     891     135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
     892     135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
     893      -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
     894      -1,   227,   370,   272,   373,    -1,   217,    -1,   270,    -1,
     895     362,    -1,   370,    -1,   227,   370,    -1,   371,    -1,   224,
     896     336,   373,    -1,   224,   340,   373,    -1,   224,    -1,   224,
     897     351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
     898      74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
     899     139,    -1,    74,    -1,    75,    -1,   366,    -1,   225,    -1,
     900     225,   357,    -1,   366,    -1,   371,    -1,   225,    -1,   225,
     901     345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   164,
     902      -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
     903     278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
     904      -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
     905     282,    -1,   113,   274,    -1,   111,   134,   164,   135,   112,
     906      -1,   111,   134,   310,   135,   112,    -1,   111,   134,   163,
     907      96,   163,   135,   112,    -1,   113,   111,   134,   146,   135,
     908     112,    -1,   284,    -1,   231,   284,    -1,   283,   233,    -1,
     909     283,   233,   227,    -1,   285,    -1,   227,   285,    -1,   284,
     910     228,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
     911     286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
     912      -1,   225,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
     913      -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
     914     128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
     915     135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
     916     276,    -1,   164,    -1,   292,   116,   276,    -1,   292,   116,
     917     164,    -1,    33,   294,    -1,   232,    33,   294,    -1,   293,
     918     116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
     919      -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
     920      36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
     921      -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
     922     298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
     923     135,   132,    -1,   301,   135,   132,    -1,   215,    -1,   217,
     924      -1,   300,   135,   116,   134,   272,    -1,   225,   309,    -1,
     925     301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
     926      -1,   303,   134,   305,    -1,    -1,   303,    -1,   212,    -1,
     927     307,    -1,   198,    -1,    -1,     5,    82,   306,   114,   304,
     928     115,    -1,    40,   305,    -1,   308,    -1,   323,   173,    -1,
     929     327,   134,   207,   173,    -1,   216,   173,    -1,   224,   323,
     930     173,    -1,   227,   323,   173,    -1,   231,   323,   173,    -1,
     931     231,   227,   323,   173,    -1,   224,   327,   134,   207,   173,
     932      -1,   227,   327,   134,   207,   173,    -1,   231,   327,   134,
     933     207,   173,    -1,   231,   227,   327,   134,   207,   173,    -1,
     934     318,    -1,   331,    -1,   323,    -1,   163,   122,   163,    -1,
     935      -1,    64,   109,   141,   110,   312,    -1,    -1,   313,    -1,
     936     314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
     937     110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
     938      -1,   317,   109,   170,   110,    -1,   272,    -1,   234,    -1,
     939     235,    -1,   228,    -1,   319,   312,    -1,   320,    -1,   321,
     940     312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
     941      -1,   149,   318,    -1,   149,   227,   318,    -1,   109,   320,
     942     110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
     943     109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
     944     320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
     945     110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
     946     319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
     947     109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
     948     149,   323,    -1,   149,   227,   323,    -1,   109,   325,   110,
     949      -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
     950      -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
     951      -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
     952     271,   110,    -1,   109,   328,   110,    -1,   149,   327,    -1,
     953     149,   227,   327,    -1,   109,   329,   110,    -1,   109,   329,
     954     110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
     955     110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
     956     335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   149,
     957     331,    -1,   149,   227,   331,    -1,   109,   333,   110,    -1,
     958     332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
     959     110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
     960     264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
     961     135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
     962     337,    -1,   338,   312,    -1,   339,   312,    -1,   149,   336,
     963      -1,   149,   227,   336,    -1,   109,   337,   110,    -1,   319,
     964     355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
     965     350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
     966     135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
     967     110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
     968      -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
     969      -1,   149,   340,    -1,   149,   227,   340,    -1,   109,   342,
     970     110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
     971     341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
     972     109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
     973      -1,   348,   312,    -1,   149,    -1,   149,   227,    -1,   149,
     974     345,    -1,   149,   227,   345,    -1,   109,   346,   110,    -1,
     975     349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
     976     350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
     977     110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
     978      -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
     979     350,    -1,   350,    -1,   111,   134,   164,   135,   112,    -1,
     980     111,   134,   117,   135,   112,    -1,   350,   111,   134,   164,
     981     135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
     982     352,    -1,   353,   312,    -1,   354,   312,    -1,   149,    -1,
     983     149,   227,    -1,   149,   351,    -1,   149,   227,   351,    -1,
     984     109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
     985      -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
     986     109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
     987     134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
     988      -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
     989     134,   227,   117,   135,   112,    -1,   111,   134,   227,   135,
     990     112,    -1,   111,   134,   227,   164,   135,   112,    -1,   111,
     991     134,     7,   226,   164,   135,   112,    -1,   111,   134,   227,
     992       7,   164,   135,   112,    -1,   358,    -1,   359,   312,    -1,
     993     360,   312,    -1,   149,    -1,   149,   227,    -1,   149,   357,
     994      -1,   149,   227,   357,    -1,   109,   358,   110,    -1,   349,
     995      -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
     996      -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
     997     264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
     998     370,    -1,   227,   370,    -1,   363,    -1,   364,    -1,   149,
     999     225,    -1,   227,   149,   225,    -1,   149,   371,    -1,   227,
     1000     149,   371,    -1,   149,   361,    -1,   227,   149,   361,    -1,
     1001     111,   112,   225,    -1,   365,   225,    -1,   111,   112,   350,
     1002     225,    -1,   365,   350,   225,    -1,   350,   225,    -1,   111,
     1003     112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
     1004      -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
     1005     227,   117,   135,   112,    -1,   111,   134,   227,   164,   135,
     1006     112,    -1,   111,   134,   231,   164,   135,   112,    -1,   111,
     1007     134,   231,   227,   164,   135,   112,    -1,   370,    -1,   227,
     1008     370,    -1,   367,    -1,   368,    -1,   369,    -1,   149,   225,
     1009      -1,   227,   149,   225,    -1,   149,   371,    -1,   227,   149,
     1010     371,    -1,   149,   366,    -1,   227,   149,   366,    -1,   111,
     1011     112,   225,    -1,   111,   112,   350,   225,    -1,   350,   225,
     1012      -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
     1013     350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
     1014     112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
     1015     110,    -1,   218,   109,   134,   260,   135,   110,    -1,    -1,
     1016     116,    -1,    -1,   131,   164,    -1
    10141017};
    10151018
     
    10171020static const yytype_uint16 yyrline[] =
    10181021{
    1019        0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
    1020      319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
    1021      345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
    1022      371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
    1023      404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
    1024      431,   436,   439,   441,   443,   445,   447,   449,   451,   453,
    1025      455,   457,   459,   466,   467,   469,   473,   474,   475,   476,
    1026      480,   481,   483,   488,   489,   491,   493,   498,   499,   501,
    1027      506,   507,   509,   514,   515,   517,   519,   521,   526,   527,
    1028      529,   534,   535,   540,   541,   546,   547,   552,   553,   558,
    1029      559,   564,   565,   568,   570,   575,   580,   581,   583,   585,
    1030      591,   592,   598,   600,   602,   604,   609,   610,   615,   616,
    1031      617,   618,   619,   620,   621,   622,   623,   624,   628,   629,
    1032      636,   637,   643,   644,   645,   646,   647,   648,   649,   650,
    1033      651,   661,   668,   670,   680,   681,   686,   688,   694,   696,
    1034      700,   701,   706,   711,   714,   716,   718,   728,   730,   741,
    1035      742,   744,   748,   750,   754,   755,   760,   761,   765,   770,
    1036      771,   775,   777,   783,   784,   788,   790,   792,   794,   800,
    1037      801,   805,   807,   812,   814,   816,   821,   823,   828,   830,
    1038      834,   837,   841,   844,   848,   850,   854,   856,   863,   865,
    1039      867,   876,   878,   880,   882,   884,   889,   891,   893,   895,
    1040      900,   913,   914,   919,   921,   926,   930,   932,   934,   936,
    1041      938,   944,   945,   951,   952,   956,   957,   962,   964,   970,
    1042      971,   973,   978,   980,   987,   989,   993,   994,   999,  1001,
    1043     1005,  1006,  1010,  1012,  1016,  1017,  1021,  1022,  1026,  1027,
    1044     1042,  1043,  1044,  1045,  1046,  1050,  1055,  1062,  1072,  1077,
    1045     1082,  1090,  1095,  1100,  1105,  1110,  1118,  1140,  1145,  1152,
    1046     1154,  1161,  1166,  1171,  1182,  1187,  1192,  1197,  1202,  1211,
    1047     1216,  1224,  1225,  1226,  1227,  1233,  1238,  1246,  1247,  1248,
    1048     1249,  1253,  1254,  1255,  1256,  1261,  1262,  1271,  1272,  1277,
    1049     1278,  1283,  1285,  1287,  1289,  1291,  1294,  1293,  1305,  1306,
    1050     1308,  1318,  1319,  1324,  1328,  1330,  1332,  1334,  1336,  1338,
    1051     1340,  1342,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1361,
    1052     1363,  1365,  1367,  1369,  1371,  1377,  1378,  1380,  1382,  1384,
    1053     1389,  1390,  1396,  1397,  1399,  1401,  1406,  1408,  1410,  1412,
    1054     1417,  1418,  1420,  1422,  1427,  1428,  1430,  1435,  1436,  1438,
    1055     1440,  1445,  1447,  1449,  1454,  1455,  1459,  1461,  1467,  1466,
    1056     1470,  1472,  1477,  1479,  1485,  1486,  1491,  1492,  1494,  1495,
    1057     1504,  1505,  1507,  1509,  1514,  1516,  1522,  1523,  1525,  1528,
    1058     1531,  1536,  1537,  1542,  1547,  1551,  1553,  1559,  1558,  1565,
    1059     1567,  1573,  1574,  1582,  1583,  1587,  1588,  1589,  1591,  1593,
    1060     1600,  1601,  1603,  1605,  1610,  1611,  1617,  1618,  1622,  1623,
    1061     1628,  1629,  1630,  1632,  1640,  1641,  1643,  1646,  1648,  1652,
    1062     1653,  1654,  1656,  1658,  1662,  1667,  1675,  1676,  1685,  1687,
    1063     1692,  1693,  1694,  1698,  1699,  1700,  1704,  1705,  1706,  1710,
    1064     1711,  1712,  1717,  1718,  1719,  1720,  1726,  1727,  1729,  1734,
    1065     1735,  1740,  1741,  1742,  1743,  1744,  1759,  1760,  1765,  1766,
    1066     1774,  1776,  1778,  1781,  1783,  1785,  1808,  1809,  1811,  1813,
    1067     1818,  1819,  1821,  1826,  1831,  1832,  1838,  1837,  1841,  1845,
    1068     1847,  1849,  1855,  1856,  1861,  1866,  1868,  1873,  1875,  1876,
    1069     1878,  1883,  1885,  1887,  1892,  1894,  1899,  1904,  1912,  1918,
    1070     1917,  1931,  1932,  1937,  1938,  1942,  1947,  1952,  1960,  1965,
    1071     1976,  1977,  1988,  1989,  1995,  1996,  2000,  2001,  2002,  2005,
    1072     2004,  2015,  2024,  2030,  2036,  2045,  2051,  2057,  2063,  2069,
    1073     2077,  2083,  2091,  2097,  2106,  2107,  2108,  2112,  2116,  2118,
    1074     2123,  2124,  2128,  2129,  2134,  2140,  2141,  2144,  2146,  2147,
    1075     2151,  2152,  2153,  2154,  2188,  2190,  2191,  2193,  2198,  2203,
    1076     2208,  2210,  2212,  2217,  2219,  2221,  2223,  2228,  2230,  2239,
    1077     2241,  2242,  2247,  2249,  2251,  2256,  2258,  2260,  2265,  2267,
    1078     2269,  2278,  2279,  2280,  2284,  2286,  2288,  2293,  2295,  2297,
    1079     2302,  2304,  2306,  2321,  2323,  2324,  2326,  2331,  2332,  2337,
    1080     2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2371,
    1081     2373,  2374,  2376,  2381,  2383,  2385,  2390,  2392,  2394,  2396,
    1082     2401,  2403,  2405,  2436,  2438,  2439,  2441,  2446,  2451,  2459,
    1083     2461,  2463,  2468,  2470,  2475,  2477,  2491,  2492,  2494,  2499,
    1084     2501,  2503,  2505,  2507,  2512,  2513,  2515,  2517,  2522,  2524,
    1085     2526,  2532,  2534,  2536,  2540,  2542,  2544,  2546,  2560,  2561,
    1086     2563,  2568,  2570,  2572,  2574,  2576,  2581,  2582,  2584,  2586,
    1087     2591,  2593,  2595,  2601,  2602,  2604,  2613,  2616,  2618,  2621,
    1088     2623,  2625,  2638,  2639,  2641,  2646,  2648,  2650,  2652,  2654,
    1089     2659,  2660,  2662,  2664,  2669,  2671,  2679,  2680,  2681,  2686,
    1090     2687,  2691,  2693,  2695,  2697,  2699,  2701,  2708,  2710,  2712,
    1091     2714,  2716,  2718,  2720,  2722,  2724,  2726,  2731,  2733,  2735,
    1092     2740,  2766,  2767,  2769,  2773,  2774,  2778,  2780,  2782,  2784,
    1093     2786,  2788,  2795,  2797,  2799,  2801,  2803,  2805,  2810,  2815,
    1094     2817,  2819,  2837,  2839,  2844,  2845
     1022       0,   299,   299,   305,   314,   315,   316,   320,   321,   322,
     1023     326,   327,   331,   332,   336,   337,   341,   342,   353,   355,
     1024     357,   359,   364,   365,   371,   375,   377,   378,   380,   381,
     1025     383,   385,   387,   396,   397,   403,   404,   408,   409,   413,
     1026     417,   419,   421,   423,   428,   431,   433,   435,   440,   453,
     1027     455,   457,   459,   461,   463,   465,   467,   469,   471,   473,
     1028     480,   481,   487,   488,   489,   490,   494,   495,   497,   502,
     1029     503,   505,   507,   512,   513,   515,   520,   521,   523,   528,
     1030     529,   531,   533,   535,   540,   541,   543,   548,   549,   554,
     1031     555,   560,   561,   566,   567,   572,   573,   578,   579,   582,
     1032     584,   589,   594,   595,   597,   603,   604,   608,   609,   610,
     1033     611,   612,   613,   614,   615,   616,   617,   618,   624,   626,
     1034     628,   630,   635,   636,   641,   642,   648,   649,   655,   656,
     1035     657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
     1036     692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
     1037     727,   730,   733,   743,   746,   758,   759,   761,   765,   767,
     1038     771,   772,   777,   778,   782,   787,   788,   792,   794,   800,
     1039     801,   805,   807,   809,   811,   817,   818,   822,   824,   829,
     1040     831,   833,   838,   840,   845,   847,   851,   854,   858,   861,
     1041     865,   867,   871,   873,   880,   882,   884,   893,   895,   897,
     1042     899,   901,   906,   908,   910,   912,   917,   930,   931,   936,
     1043     938,   943,   947,   949,   951,   953,   955,   961,   962,   968,
     1044     969,   973,   974,   979,   981,   987,   988,   990,   995,   997,
     1045    1004,  1006,  1010,  1011,  1016,  1018,  1022,  1023,  1027,  1029,
     1046    1033,  1034,  1038,  1039,  1043,  1044,  1059,  1060,  1061,  1062,
     1047    1063,  1067,  1072,  1079,  1089,  1094,  1099,  1107,  1112,  1117,
     1048    1122,  1127,  1135,  1157,  1162,  1169,  1171,  1178,  1183,  1188,
     1049    1199,  1204,  1209,  1214,  1219,  1228,  1233,  1241,  1242,  1243,
     1050    1244,  1250,  1255,  1263,  1264,  1265,  1266,  1270,  1271,  1272,
     1051    1273,  1278,  1279,  1288,  1289,  1294,  1295,  1300,  1302,  1304,
     1052    1306,  1308,  1311,  1310,  1322,  1323,  1325,  1335,  1336,  1341,
     1053    1345,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1364,  1366,
     1054    1368,  1370,  1372,  1374,  1376,  1378,  1380,  1382,  1384,  1386,
     1055    1388,  1394,  1395,  1397,  1399,  1401,  1406,  1407,  1413,  1414,
     1056    1416,  1418,  1423,  1425,  1427,  1429,  1434,  1435,  1437,  1439,
     1057    1444,  1445,  1447,  1452,  1453,  1455,  1457,  1462,  1464,  1466,
     1058    1471,  1472,  1476,  1478,  1484,  1483,  1487,  1489,  1494,  1496,
     1059    1502,  1503,  1508,  1509,  1511,  1512,  1521,  1522,  1524,  1526,
     1060    1531,  1533,  1539,  1540,  1542,  1545,  1548,  1553,  1554,  1559,
     1061    1564,  1568,  1570,  1576,  1575,  1582,  1584,  1590,  1591,  1599,
     1062    1600,  1604,  1605,  1606,  1608,  1610,  1617,  1618,  1620,  1622,
     1063    1627,  1628,  1634,  1635,  1639,  1640,  1645,  1646,  1647,  1649,
     1064    1657,  1658,  1660,  1663,  1665,  1669,  1670,  1671,  1673,  1675,
     1065    1679,  1684,  1692,  1693,  1702,  1704,  1709,  1710,  1711,  1715,
     1066    1716,  1717,  1721,  1722,  1723,  1727,  1728,  1729,  1734,  1735,
     1067    1736,  1737,  1743,  1744,  1746,  1751,  1752,  1757,  1758,  1759,
     1068    1760,  1761,  1776,  1777,  1782,  1783,  1789,  1791,  1794,  1796,
     1069    1798,  1821,  1822,  1824,  1826,  1831,  1832,  1834,  1839,  1844,
     1070    1845,  1851,  1850,  1854,  1858,  1860,  1862,  1868,  1869,  1874,
     1071    1879,  1881,  1886,  1888,  1889,  1891,  1896,  1898,  1900,  1905,
     1072    1907,  1912,  1917,  1925,  1931,  1930,  1944,  1945,  1950,  1951,
     1073    1955,  1960,  1965,  1973,  1978,  1989,  1990,  2001,  2002,  2008,
     1074    2009,  2013,  2014,  2015,  2018,  2017,  2028,  2037,  2043,  2049,
     1075    2058,  2064,  2070,  2076,  2082,  2090,  2096,  2104,  2110,  2119,
     1076    2120,  2121,  2125,  2129,  2131,  2136,  2137,  2141,  2142,  2147,
     1077    2153,  2154,  2157,  2159,  2160,  2164,  2165,  2166,  2167,  2201,
     1078    2203,  2204,  2206,  2211,  2216,  2221,  2223,  2225,  2230,  2232,
     1079    2234,  2236,  2241,  2243,  2252,  2254,  2255,  2260,  2262,  2264,
     1080    2269,  2271,  2273,  2278,  2280,  2282,  2291,  2292,  2293,  2297,
     1081    2299,  2301,  2306,  2308,  2310,  2315,  2317,  2319,  2334,  2336,
     1082    2337,  2339,  2344,  2345,  2350,  2352,  2354,  2359,  2361,  2363,
     1083    2365,  2370,  2372,  2374,  2384,  2386,  2387,  2389,  2394,  2396,
     1084    2398,  2403,  2405,  2407,  2409,  2414,  2416,  2418,  2449,  2451,
     1085    2452,  2454,  2459,  2464,  2472,  2474,  2476,  2481,  2483,  2488,
     1086    2490,  2504,  2505,  2507,  2512,  2514,  2516,  2518,  2520,  2525,
     1087    2526,  2528,  2530,  2535,  2537,  2539,  2545,  2547,  2549,  2553,
     1088    2555,  2557,  2559,  2573,  2574,  2576,  2581,  2583,  2585,  2587,
     1089    2589,  2594,  2595,  2597,  2599,  2604,  2606,  2608,  2614,  2615,
     1090    2617,  2626,  2629,  2631,  2634,  2636,  2638,  2651,  2652,  2654,
     1091    2659,  2661,  2663,  2665,  2667,  2672,  2673,  2675,  2677,  2682,
     1092    2684,  2692,  2693,  2694,  2699,  2700,  2704,  2706,  2708,  2710,
     1093    2712,  2714,  2721,  2723,  2725,  2727,  2729,  2731,  2733,  2735,
     1094    2737,  2739,  2744,  2746,  2748,  2753,  2779,  2780,  2782,  2786,
     1095    2787,  2791,  2793,  2795,  2797,  2799,  2801,  2808,  2810,  2812,
     1096    2814,  2816,  2818,  2823,  2828,  2830,  2832,  2850,  2852,  2857,
     1097    2858
    10951098};
    10961099#endif
     
    11181121  "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
    11191122  "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
    1120   "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'*'",
    1121   "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
    1122   "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
     1123  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'",
     1124  "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'",
     1125  "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
    11231126  "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
    11241127  "string_literal_list", "primary_expression", "postfix_expression",
     
    11301133  "logical_AND_expression", "logical_OR_expression",
    11311134  "conditional_expression", "constant_expression", "assignment_expression",
    1132   "assignment_expression_opt", "tuple", "tuple_expression_list",
    1133   "assignment_operator", "comma_expression", "comma_expression_opt",
     1135  "assignment_expression_opt", "assignment_operator", "tuple",
     1136  "tuple_expression_list", "comma_expression", "comma_expression_opt",
    11341137  "statement", "labeled_statement", "compound_statement",
    11351138  "block_item_list", "block_item", "statement_list",
     
    12251228     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    12261229     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
    1227       41,    91,    93,    46,   123,   125,    44,    58,    42,    38,
    1228       43,    45,    33,   126,    47,    37,    60,    62,    94,   124,
    1229       63,    61,    59
     1230      41,    91,    93,    46,   123,   125,    44,    42,    38,    43,
     1231      45,    33,   126,    47,    37,    60,    62,    94,   124,    63,
     1232      58,    61,    59
    12301233};
    12311234# endif
     
    12371240     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
    12381241     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
    1239      143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
    1240      146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
     1242     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
     1243     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
    12411244     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
    1242      148,   148,   148,   149,   149,   149,   150,   150,   150,   150,
    1243      151,   151,   151,   152,   152,   152,   152,   153,   153,   153,
    1244      154,   154,   154,   155,   155,   155,   155,   155,   156,   156,
    1245      156,   157,   157,   158,   158,   159,   159,   160,   160,   161,
    1246      161,   162,   162,   162,   162,   163,   164,   164,   164,   164,
    1247      165,   165,   166,   166,   166,   166,   167,   167,   168,   168,
    1248      168,   168,   168,   168,   168,   168,   168,   168,   169,   169,
    1249      170,   170,   171,   171,   171,   171,   171,   171,   171,   171,
    1250      171,   172,   173,   173,   174,   174,   175,   175,   175,   175,
    1251      176,   176,   177,   178,   178,   178,   178,   178,   178,   179,
    1252      179,   179,   180,   180,   181,   181,   182,   182,   183,   184,
    1253      184,   185,   185,   186,   186,   187,   187,   187,   187,   188,
    1254      188,   189,   189,   190,   190,   190,   191,   191,   192,   192,
    1255      192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
    1256      193,   194,   194,   194,   194,   194,   195,   195,   195,   195,
    1257      196,   197,   197,   197,   197,   197,   198,   198,   198,   198,
    1258      198,   199,   199,   200,   200,   201,   201,   202,   202,   203,
    1259      203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
    1260      208,   208,   209,   209,   210,   210,   211,   211,   212,   212,
    1261      213,   213,   213,   213,   213,   214,   214,   214,   215,   215,
    1262      215,   216,   216,   216,   216,   216,   217,   217,   217,   218,
    1263      218,   219,   219,   219,   220,   220,   220,   220,   220,   221,
    1264      221,   222,   222,   222,   222,   223,   223,   224,   224,   224,
    1265      224,   225,   225,   225,   225,   226,   226,   227,   227,   228,
    1266      228,   229,   229,   229,   229,   229,   230,   229,   231,   231,
    1267      231,   232,   232,   233,   234,   234,   234,   234,   234,   234,
    1268      234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
    1269      235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
    1270      237,   237,   238,   238,   238,   238,   239,   239,   239,   239,
    1271      240,   240,   240,   240,   241,   241,   241,   242,   242,   242,
    1272      242,   243,   243,   243,   244,   244,   245,   245,   246,   245,
    1273      245,   245,   247,   247,   248,   248,   249,   249,   249,   249,
    1274      250,   250,   250,   250,   251,   251,   252,   252,   252,   252,
    1275      252,   253,   253,   254,   255,   256,   256,   257,   256,   258,
    1276      258,   259,   259,   260,   260,   261,   261,   261,   261,   261,
    1277      262,   262,   262,   262,   263,   263,   264,   264,   265,   265,
    1278      266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
    1279      268,   268,   268,   268,   269,   269,   270,   270,   271,   271,
    1280      272,   272,   272,   273,   273,   273,   274,   274,   274,   275,
    1281      275,   275,   276,   276,   276,   276,   277,   277,   277,   278,
    1282      278,   279,   279,   279,   279,   279,   280,   280,   281,   281,
    1283      282,   282,   282,   282,   282,   282,   283,   283,   283,   283,
    1284      284,   284,   284,   285,   286,   286,   288,   287,   287,   289,
    1285      289,   289,   290,   290,   291,   291,   291,   292,   292,   292,
    1286      292,   293,   293,   293,   294,   294,   295,   295,   296,   297,
    1287      296,   298,   298,   299,   299,   300,   300,   300,   301,   301,
    1288      302,   302,   303,   303,   304,   304,   305,   305,   305,   306,
    1289      305,   305,   307,   307,   307,   308,   308,   308,   308,   308,
    1290      308,   308,   308,   308,   309,   309,   309,   310,   311,   311,
    1291      312,   312,   313,   313,   314,   315,   315,   316,   316,   316,
    1292      317,   317,   317,   317,   318,   318,   318,   318,   319,   319,
    1293      320,   320,   320,   321,   321,   321,   321,   322,   322,   323,
    1294      323,   323,   324,   324,   324,   325,   325,   325,   326,   326,
    1295      326,   327,   327,   327,   328,   328,   328,   329,   329,   329,
    1296      330,   330,   330,   331,   331,   331,   331,   332,   332,   333,
    1297      333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
    1298      336,   336,   336,   337,   337,   337,   338,   338,   338,   338,
    1299      339,   339,   339,   340,   340,   340,   340,   341,   341,   342,
    1300      342,   342,   343,   343,   344,   344,   345,   345,   345,   346,
    1301      346,   346,   346,   346,   347,   347,   347,   347,   348,   348,
    1302      348,   349,   349,   349,   350,   350,   350,   350,   351,   351,
    1303      351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
    1304      354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
    1305      356,   356,   357,   357,   357,   358,   358,   358,   358,   358,
    1306      359,   359,   359,   359,   360,   360,   361,   361,   361,   362,
    1307      362,   363,   363,   363,   363,   363,   363,   364,   364,   364,
    1308      364,   364,   364,   364,   364,   364,   364,   365,   365,   365,
    1309      365,   366,   366,   366,   367,   367,   368,   368,   368,   368,
    1310      368,   368,   369,   369,   369,   369,   369,   369,   370,   371,
    1311      371,   371,   372,   372,   373,   373
     1245     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
     1246     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
     1247     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
     1248     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
     1249     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
     1250     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
     1251     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
     1252     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
     1253     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
     1254     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
     1255     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
     1256     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
     1257     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
     1258     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
     1259     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
     1260     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
     1261     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
     1262     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
     1263     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
     1264     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
     1265     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
     1266     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
     1267     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
     1268     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
     1269     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
     1270     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
     1271     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
     1272     235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
     1273     238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
     1274     241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
     1275     244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
     1276     248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
     1277     251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
     1278     255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
     1279     260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
     1280     263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
     1281     267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
     1282     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
     1283     273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
     1284     276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
     1285     279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
     1286     282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
     1287     286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
     1288     291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
     1289     294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
     1290     300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
     1291     304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
     1292     308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
     1293     309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
     1294     315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
     1295     318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
     1296     321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
     1297     325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
     1298     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
     1299     331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
     1300     334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
     1301     337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
     1302     340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
     1303     344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
     1304     347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
     1305     350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
     1306     352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
     1307     355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
     1308     358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
     1309     360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
     1310     363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
     1311     364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
     1312     367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
     1313     369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
     1314     373
    13121315};
    13131316
     
    13181321       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    13191322       3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
    1320        2,     7,     4,     1,     3,     0,     1,     3,     7,     9,
    1321        1,     3,     1,     3,     7,     3,     7,     1,     1,     1,
    1322        2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
    1323        4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
    1324        1,     4,     4,     1,     3,     3,     3,     1,     3,     3,
    1325        1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
    1326        3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
    1327        3,     1,     5,     4,     5,     1,     1,     3,     3,     2,
    1328        0,     1,     2,     5,     6,     7,     1,     3,     1,     1,
    1329        1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
    1330        0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1331        6,     4,     2,     7,     1,     3,     1,     2,     1,     2,
    1332        1,     2,     2,     5,     7,     5,     9,     5,     9,     1,
    1333        3,     1,     1,     3,     3,     2,     1,     2,     2,     0,
    1334        1,     2,     3,     0,     1,     2,     3,     3,     4,     0,
    1335        1,     1,     2,     5,     7,     6,     6,     4,     3,     4,
    1336        2,     3,     2,     3,     3,     3,     3,     5,     3,     3,
    1337        4,     1,     5,     6,     5,     6,     9,    10,     9,    10,
    1338        2,     1,     2,     2,     2,     1,     6,     8,    10,    12,
    1339       14,     0,     1,     0,     1,     1,     3,     4,     7,     0,
    1340        1,     3,     1,     3,     1,     1,     1,     3,     1,     1,
    1341        1,     3,     0,     1,     3,     4,     1,     3,     1,     1,
    1342        3,     3,     3,     3,     3,     2,     3,     6,     3,     3,
    1343        4,     1,     2,     2,     3,     5,     8,     7,     7,     5,
    1344        9,     2,     2,     5,     3,     5,     4,     3,     4,     4,
    1345        7,     3,     3,     3,     3,     4,     6,     1,     1,     1,
    1346        1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
    1347        1,     1,     1,     1,     1,     1,     0,     5,     1,     2,
    1348        3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
     1323       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
     1324       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
     1325       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
     1326       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
     1327       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
     1328       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
     1329       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
     1330       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
     1331       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
     1332       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
     1333       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
     1334       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
     1335       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
     1336       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
     1337       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
     1338       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
     1339       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
     1340       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
     1341       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
     1342       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
     1343       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
     1344       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
     1345       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
     1346       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
     1347       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
     1348       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
     1349       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
     1350       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
    13491351       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1350        1,     1,     1,     1,     1,     1,     2,     2,     3,     3,
    1351        1,     3,     1,     2,     2,     2,     4,     4,     4,     4,
    1352        1,     2,     2,     3,     1,     2,     2,     1,     2,     2,
    1353        3,     1,     2,     2,     1,     1,     4,     2,     0,     6,
    1354        7,     2,     2,     2,     0,     2,     2,     3,     2,     3,
    1355        1,     2,     3,     2,     2,     4,     0,     1,     2,     2,
    1356        1,     0,     1,     2,     2,     5,     2,     0,     7,     2,
    1357        4,     0,     2,     0,     1,     1,     1,     5,     5,     5,
    1358        1,     5,     5,     9,     1,     5,     0,     1,     1,     5,
    1359        1,     1,     5,     5,     1,     3,     3,     4,     1,     1,
    1360        1,     1,     2,     1,     3,     3,     1,     2,     1,     3,
    13611352       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1362        1,     2,     1,     1,     1,     2,     0,     2,     2,     1,
    1363        4,     0,     1,     2,     3,     4,     2,     2,     1,     2,
    1364        1,     2,     5,     5,     7,     6,     1,     2,     2,     3,
    1365        1,     2,     2,     4,     2,     4,     0,     4,     2,     1,
    1366        1,     1,     0,     2,     5,     5,    13,     1,     1,     3,
    1367        3,     2,     3,     3,     2,     4,     1,     6,     9,     0,
    1368       11,     1,     3,     3,     3,     1,     1,     5,     2,     5,
    1369        0,     1,     1,     3,     0,     1,     1,     1,     1,     0,
    1370        6,     2,     1,     2,     4,     2,     3,     3,     3,     4,
    1371        5,     5,     5,     6,     1,     1,     1,     3,     0,     5,
    1372        0,     1,     1,     2,     6,     1,     3,     0,     1,     4,
    1373        1,     1,     1,     1,     2,     1,     2,     2,     1,     3,
    1374        2,     3,     3,     2,     4,     4,     3,     8,     3,     2,
    1375        1,     2,     6,     8,     3,     2,     3,     3,     4,     4,
    1376        3,     1,     1,     1,     4,     6,     3,     2,     3,     3,
    1377        4,     4,     3,     2,     1,     2,     2,     1,     3,     2,
    1378        3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
    1379        1,     2,     2,     2,     3,     3,     2,     4,     4,     3,
    1380        6,     8,     3,     2,     1,     2,     2,     1,     1,     2,
    1381        3,     3,     2,     4,     6,     8,     1,     2,     2,     1,
    1382        2,     2,     3,     3,     1,     4,     4,     3,     5,     8,
    1383        3,     2,     3,     1,     5,     5,     6,     6,     1,     2,
    1384        2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
    1385        5,     8,     3,     1,     2,     1,     2,     6,     5,     6,
    1386        7,     7,     1,     2,     2,     1,     2,     2,     3,     3,
    1387        1,     4,     4,     3,     8,     3,     1,     1,     2,     1,
    1388        1,     2,     3,     2,     3,     2,     3,     3,     2,     4,
    1389        3,     2,     3,     2,     4,     3,     2,     6,     6,     6,
    1390        7,     1,     2,     1,     1,     1,     2,     3,     2,     3,
    1391        2,     3,     3,     4,     2,     3,     4,     2,     5,     5,
    1392        6,     6,     0,     1,     0,     2
     1353       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
     1354       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
     1355       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
     1356       1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
     1357       0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
     1358       2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
     1359       2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
     1360       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
     1361       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
     1362       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
     1363       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
     1364       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
     1365       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
     1366       3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
     1367       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
     1368       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
     1369       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
     1370       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
     1371       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
     1372       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
     1373       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
     1374       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
     1375       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
     1376       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
     1377       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
     1378       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
     1379       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
     1380       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
     1381       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
     1382       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
     1383       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
     1384       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
     1385       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
     1386       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
     1387       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
     1388       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
     1389       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
     1390       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
     1391       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
     1392       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
     1393       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
     1394       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
     1395       2
    13931396};
    13941397
     
    13981401static const yytype_uint16 yydefact[] =
    13991402{
    1400      295,   295,   316,   314,   317,   315,   318,   319,   301,   303,
    1401      302,     0,   304,   330,   322,   327,   325,   326,   324,   323,
    1402      328,   329,   334,   331,   332,   333,   550,   550,   550,     0,
    1403        0,     0,   295,   221,   305,   320,   321,     7,   361,     0,
    1404        8,    14,    15,    65,     0,     2,    63,    64,   568,     9,
    1405      295,   528,   526,   248,     3,   456,     3,   261,     0,     3,
    1406        3,     3,   249,     3,     0,     0,     0,   296,   297,   299,
    1407      295,   308,   311,   313,   342,   287,   335,   340,   288,   350,
    1408      289,   357,   354,   364,     0,     0,   365,   290,   476,   480,
    1409        3,     3,     0,     2,   522,   527,   532,   300,     0,     0,
    1410      550,   580,   550,     2,   591,   592,   593,   295,     0,   734,
    1411      735,     0,    12,     0,    13,   295,   271,   272,     0,   296,
    1412      291,   292,   293,   294,   529,   306,   394,   551,   552,   372,
    1413      373,    12,   447,   448,    11,   443,   446,     0,   506,   501,
    1414      492,   447,   448,     0,     0,   531,   222,     0,   295,     0,
    1415        0,     0,     0,     0,     0,     0,     0,   295,   295,     2,
    1416        0,   736,   296,   585,   597,   740,   733,   731,   738,     0,
    1417        0,     0,   255,     2,     0,   535,   441,   442,   440,     0,
    1418        0,     0,     0,   550,     0,   637,   638,     0,     0,   548,
    1419      544,   550,   565,   550,   550,   546,     2,   545,   550,   604,
    1420      550,   550,   607,     0,     0,     0,   295,   295,   314,   362,
    1421        2,   295,   262,   298,   309,   343,   355,   481,     0,     2,
    1422        0,   456,   263,   296,   336,   351,   358,   477,     0,     2,
    1423        0,   312,   337,   344,   345,     0,   352,   356,   359,   363,
    1424      448,   295,   374,   367,   371,     0,   396,   478,   482,     0,
    1425        0,     0,     1,   295,     2,   533,   579,   581,   295,     2,
    1426      744,   296,   747,   548,   548,     0,   296,     0,     0,   274,
    1427      550,   546,     2,   295,     0,     0,   295,   553,     2,   504,
    1428        2,   557,     0,     0,     0,     0,     0,     0,    18,    58,
    1429        4,     5,     6,    16,     0,     0,   295,     2,    66,    67,
    1430       68,    69,    48,    19,    49,    22,    47,    70,   295,     0,
    1431       73,    77,    80,    83,    88,    91,    93,    95,    97,    99,
    1432      101,   106,   498,   754,   454,   497,     0,   452,   453,     0,
    1433      569,   584,   587,   590,   596,   599,   602,   361,     0,     2,
    1434      742,     0,   295,   745,     2,    63,   295,     3,   428,     0,
    1435      436,   296,   295,   308,   335,   288,   350,   357,     3,     3,
    1436      410,   414,   424,   429,   476,   295,   430,   709,   710,   295,
    1437      431,   433,   295,     2,   586,   598,   732,     2,     2,   250,
    1438        2,   461,     0,   459,   458,   457,   142,     2,     2,   252,
    1439        2,     2,   251,     2,   282,     2,   283,     0,   281,     0,
    1440        0,     0,     0,     0,     0,     0,     0,     0,   570,   609,
    1441        0,   456,     2,   564,   573,   663,   566,   567,   536,   295,
    1442        2,   603,   612,   605,   606,     0,   277,   295,   295,   341,
    1443      296,     0,   296,     0,   295,   737,   741,   739,   537,   295,
    1444      548,   256,   264,   310,     0,     2,   538,   295,   502,   338,
    1445      339,   284,   353,   360,     0,   295,     0,   752,   401,     0,
    1446      479,   503,   253,   254,   523,   295,   438,     0,   295,   238,
    1447        0,     2,   240,     0,   296,     0,   258,     2,   259,   279,
    1448        0,     0,     2,   295,   548,   295,   489,   491,   490,     0,
    1449        0,   754,     0,   295,     0,   295,   493,   295,   563,   561,
    1450      562,   560,     0,   555,   558,     0,     0,   295,    55,   295,
    1451       70,    50,   295,    61,   295,   295,    53,    54,     2,   128,
    1452        0,     0,   450,     0,   449,   731,   112,   295,    17,     0,
    1453       29,    30,    35,     2,     0,    35,   118,   119,   120,   121,
    1454      122,   123,   124,   125,   126,   127,     0,     0,    51,    52,
     1403     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
     1404     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
     1405     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
     1406       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
     1407       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
     1408     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
     1409       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
     1410     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
     1411     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
     1412       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
     1413     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
     1414       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
     1415     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
     1416      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
     1417     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
     1418       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
     1419     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
     1420       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
     1421       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
     1422     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
     1423     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
     1424     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
     1425     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
     1426     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
     1427     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
     1428       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
     1429     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
     1430     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
     1431     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
     1432       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
     1433      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
     1434      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
     1435     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
     1436     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
     1437       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
     1438     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
     1439     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
     1440     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
     1441     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
     1442       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
     1443       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
     1444     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
     1445     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
     1446       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
     1447     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
     1448     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
     1449     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
     1450       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
     1451       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
     1452     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
     1453     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
     1454      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
     1455       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
     1456      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
     1457     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
    14551458       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1456        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1457      109,     2,   649,   455,   646,   550,   550,   654,   483,   295,
    1458        2,   588,   589,     0,   600,   601,     0,     2,   743,   746,
    1459      112,   295,     0,     2,   711,   296,   715,   706,   707,   713,
    1460        0,     2,     2,   671,   550,   754,   620,   550,   550,   754,
    1461      550,   634,   550,   550,   685,   437,   668,   550,   550,   676,
    1462      683,   295,   432,   296,     0,     0,   295,   721,   296,   726,
    1463      754,   718,   295,   723,   754,   295,   295,   295,     0,   112,
    1464        0,    18,     5,     2,     0,    19,     0,   462,   752,     0,
    1465        0,   468,   242,     0,   295,     0,     0,     0,   548,   572,
    1466      576,   578,   608,   611,   615,   618,   571,   610,     0,   285,
    1467      661,     0,   295,   278,     0,     0,     0,     0,   276,     2,
    1468        0,   260,   539,   295,     0,     0,   295,     2,   366,   386,
    1469      375,     0,     0,   380,   374,   753,     0,     0,   399,     0,
    1470      296,     3,   417,     3,   421,   420,   594,     0,   534,   295,
    1471       63,     3,   295,   436,   296,     3,   430,   431,     2,     0,
    1472        0,     0,   488,   307,   295,   484,   486,     3,     2,     2,
    1473        0,   505,     3,     0,   557,   130,     0,     0,   223,     0,
    1474        0,     0,     2,     0,     0,    36,     0,     0,   112,   295,
    1475       20,     0,    21,     0,   695,   700,   451,   692,   550,   550,
    1476        0,   110,     3,     2,    27,     2,     0,    33,     0,     2,
    1477       25,     0,   107,   108,    74,    75,    76,    78,    79,    81,
    1478       82,    86,    87,    84,    85,    89,    90,    92,    94,    96,
    1479       98,   100,     0,     0,   755,   295,     0,     0,     0,   650,
    1480      651,   647,   648,   500,   499,   295,     0,   295,   717,   295,
    1481      722,   296,   295,   665,   295,   295,   708,   664,     2,   295,
    1482        0,     0,     0,     0,     0,     0,     0,     0,   686,     0,
    1483      672,   623,   639,   673,     2,   619,   626,   434,   621,   622,
    1484      435,     2,   633,   642,   635,   636,   669,   670,   684,   712,
    1485      716,   714,   754,   269,     2,   748,     2,   425,   720,   725,
    1486      426,     0,   404,     3,     3,     3,     3,   456,     3,     0,
    1487        2,   471,   467,   753,     0,   463,   470,     2,   466,   469,
    1488        0,   295,   243,   265,     3,   273,   275,     0,   456,     2,
    1489      574,   575,     2,   613,   614,     0,   662,   540,     3,   347,
    1490      346,   349,   348,   295,   541,     0,   542,   374,     0,     0,
    1491      295,   295,     0,     0,   695,   384,   387,   391,   550,   391,
    1492      390,   383,   376,   550,   378,   381,   295,   401,   395,   105,
    1493      402,   752,     0,     0,   439,   241,     0,     0,     3,     2,
    1494      671,   432,     0,   530,     0,   754,   492,     0,   295,   295,
    1495      295,     0,   554,   556,   131,     0,     0,   216,     0,     0,
    1496        0,   224,   225,    56,     0,    62,   295,     0,    60,    59,
    1497        0,     2,   129,     0,     0,     0,   696,   697,   693,   694,
    1498      461,    71,    72,   111,   116,     3,   110,     0,     0,     0,
    1499       24,    35,     3,     0,    32,   103,     0,     3,   653,   657,
    1500      660,   652,     3,   595,     3,   719,   724,     2,    63,   295,
    1501        3,     3,   296,     0,     3,   625,   629,   632,   641,   675,
    1502      679,   682,   295,     3,   624,   640,   674,   295,   295,   427,
    1503      295,   295,   749,     0,     0,     0,     0,   257,     0,   105,
    1504        0,     3,     3,     0,   464,     0,   460,     0,     0,   246,
    1505      295,     0,     0,   130,     0,     0,     0,     0,     0,   130,
    1506        0,     0,   110,   110,    18,     2,     0,     0,     3,   132,
    1507      133,     2,   144,   134,   135,   136,   137,   138,   139,   146,
    1508      148,     0,     0,     0,   286,   295,   295,   550,     0,   543,
    1509      295,   377,   379,     0,   393,   696,   388,   392,   389,   382,
    1510      386,   369,   400,     0,   582,     2,   667,   666,     0,   672,
    1511        2,   485,   487,   507,     3,   515,   516,     0,     2,   511,
    1512        3,     3,     0,     0,   559,   223,     0,     0,     0,   223,
    1513        0,     0,     3,    37,   112,   699,   703,   705,   698,   752,
    1514      110,     0,     3,   664,    42,     3,    40,     3,    34,     0,
    1515        3,   102,   104,     0,     2,   655,   656,     0,     0,   295,
    1516        0,     0,     0,     3,   641,     0,     2,   627,   628,     2,
    1517      643,     2,   677,   678,     0,     0,    63,     0,     3,     3,
    1518        3,     3,   412,   411,   415,     2,     2,   751,   750,   113,
    1519        0,     0,     0,     0,     3,   465,     3,     0,   244,   147,
    1520        3,   296,   295,     0,     0,     0,     0,     2,     0,   192,
    1521        0,   190,     0,     0,     0,     0,     0,     0,     0,   550,
    1522      112,     0,   152,   149,   295,     0,     0,   268,   280,     3,
    1523        3,   549,   616,   370,   385,   398,   295,   267,   295,     0,
    1524      518,   495,   295,     0,     0,   494,   509,     0,     0,     0,
    1525      217,     0,   226,    57,   110,     0,     2,   701,   702,     0,
    1526      117,   114,     0,     0,     0,     0,     0,     0,    23,     0,
    1527      658,   295,   583,   266,   727,   728,   729,     0,   680,   295,
    1528      295,   295,     3,     3,     0,   688,     0,     0,     0,     0,
    1529      295,   295,     3,   547,   472,   473,     0,     0,   247,   296,
    1530        0,     0,     0,     0,   295,   193,   191,   188,     0,   194,
    1531        0,     0,     0,     0,   198,   201,   199,   195,     0,   196,
    1532      130,    35,   145,   143,   245,     0,     0,   419,   423,   422,
    1533        0,   512,     2,   513,     2,   514,   508,   295,   229,     0,
    1534      227,     0,   229,     3,   664,   295,    31,   115,     2,    45,
    1535        2,    43,    41,    28,   113,    26,     3,   730,     3,     3,
    1536        3,     0,     0,   687,   689,   630,   644,   270,     2,   409,
    1537        3,   408,     0,   475,   472,   130,     0,     0,   130,     3,
    1538        0,   130,   189,     0,     2,     2,   210,   200,     0,     0,
    1539        0,   141,     0,   577,   617,     2,     0,     0,     2,   230,
    1540        0,     0,   218,     0,     0,     0,     3,     0,     0,     0,
    1541        0,     0,     0,   690,   691,   295,     0,   474,   153,     0,
    1542        0,     2,   166,   130,   155,     0,   183,     0,   130,     0,
    1543        2,   157,     0,     2,     0,     2,     2,     2,   197,    32,
    1544      295,   517,   519,   510,     0,     0,     0,     0,   115,    38,
    1545        0,     3,     3,   659,   631,   645,   681,   413,   130,   159,
    1546      162,     0,   161,   165,     3,   168,   167,     0,   130,   185,
    1547      130,     3,     0,   295,     0,   295,     0,     2,     0,     2,
    1548      140,     2,   231,   232,     0,   228,   219,     0,   704,     0,
    1549        0,   154,     0,     0,   164,   234,   169,     2,   236,   184,
    1550        0,   187,   173,   202,     3,   211,   215,   204,     3,     0,
    1551      295,     0,   295,     0,     0,     0,    39,    46,    44,   160,
    1552      163,   130,     0,   170,   295,   130,   130,     0,   174,     0,
    1553        0,   695,   212,   213,   214,     0,   203,     3,   205,     3,
    1554      295,   220,   233,   150,   171,   156,   130,   237,   186,   181,
    1555      179,   175,   158,   130,     0,   696,     0,     0,     0,     0,
    1556      151,   172,   182,   176,   180,   179,   177,     3,     3,     0,
    1557        0,   496,   178,   206,   208,     3,     3,   207,   209
     1459       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
     1460       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
     1461     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
     1462     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
     1463       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
     1464     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
     1465     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
     1466     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
     1467      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
     1468     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
     1469     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
     1470     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
     1471     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
     1472       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
     1473     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
     1474     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
     1475     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
     1476       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
     1477       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
     1478     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
     1479      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
     1480      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
     1481      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
     1482       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
     1483       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
     1484     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
     1485       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
     1486     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
     1487     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
     1488       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
     1489       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
     1490       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
     1491       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
     1492     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
     1493     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
     1494     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
     1495     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
     1496       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
     1497       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
     1498     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
     1499      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
     1500     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
     1501      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
     1502     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
     1503       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
     1504     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
     1505     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
     1506       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
     1507     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
     1508       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
     1509     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
     1510     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
     1511     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
     1512     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
     1513       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
     1514       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
     1515       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
     1516       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
     1517       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
     1518       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
     1519     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
     1520     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
     1521       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
     1522       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
     1523       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
     1524     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
     1525     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
     1526       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
     1527      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
     1528       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
     1529     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
     1530       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
     1531       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
     1532     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
     1533     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
     1534       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
     1535     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
     1536       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
     1537       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
     1538     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
     1539       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
     1540       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
     1541     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
     1542       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
     1543       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
     1544     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
     1545     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
     1546     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
     1547     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
     1548     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
     1549     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
     1550     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
     1551       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
     1552       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
     1553     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
     1554       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
     1555     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
     1556     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
     1557     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
     1558       3,     3,   203,   205
    15581559};
    15591560
     
    15611562static const yytype_int16 yydefgoto[] =
    15621563{
    1563       -1,   819,   469,   302,    48,   135,   136,   303,   304,   305,
    1564      306,   766,   767,  1145,  1146,   307,   382,   309,   310,   311,
    1565      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
    1566     1040,   519,   984,   323,   985,   547,   954,  1067,  1543,  1069,
    1567     1070,  1071,  1072,  1544,  1073,  1074,  1460,  1461,  1422,  1423,
    1568     1424,  1522,  1523,  1527,  1528,  1563,  1564,  1075,  1380,  1076,
    1569     1077,  1314,  1315,  1316,  1504,  1078,   147,   960,   961,   962,
    1570     1400,  1484,  1496,  1497,   470,   471,   881,   882,  1048,    52,
    1571       53,    54,    55,    56,   348,   160,    59,    60,    61,    62,
    1572       63,   350,    65,    66,   266,    68,    69,   276,   352,   353,
    1573       72,    73,    74,    75,   120,    77,   206,   355,   121,    80,
    1574      122,    82,    83,   456,    84,   455,   690,   691,   692,   915,
    1575     1096,   916,    85,    86,   459,   457,   698,   861,   862,   358,
    1576      359,   701,   702,   703,   360,   361,   362,   363,   467,   341,
    1577      137,   138,   523,   325,   172,   647,   648,   649,   650,   651,
    1578       87,   123,    89,   490,   491,   946,   492,   279,   496,   326,
    1579       90,   139,   140,    91,  1337,  1118,  1119,  1120,  1121,    92,
    1580       93,   719,    94,   275,    95,    96,   189,  1042,   681,   413,
    1581      127,    97,   502,   503,   504,   190,   270,   192,   193,   194,
    1582      271,   100,   101,   102,   103,   104,   105,   106,   197,   198,
    1583      199,   200,   201,   831,   606,   607,   608,   609,   202,   611,
    1584      612,   613,   573,   574,   575,   576,   755,   107,   615,   616,
    1585      617,   618,   619,   620,   977,   757,   758,   759,   596,   366,
    1586      367,   368,   369,   327,   166,   109,   110,   111,   371,   696,
    1587      570
     1564      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
     1565     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
     1566     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
     1567    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
     1568    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
     1569    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
     1570    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
     1571    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    51,
     1572      52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
     1573      62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
     1574      71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
     1575     121,    81,    82,   455,    83,   454,   688,   689,   690,   908,
     1576    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
     1577     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
     1578     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
     1579      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
     1580      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
     1581      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
     1582     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
     1583     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
     1584     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
     1585     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
     1586     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
     1587     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
     1588     569
    15881589};
    15891590
    15901591/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15911592   STATE-NUM.  */
    1592 #define YYPACT_NINF -1414
     1593#define YYPACT_NINF -1310
    15931594static const yytype_int16 yypact[] =
    15941595{
    1595     4857,  9883, -1414,    35, -1414, -1414, -1414, -1414, -1414, -1414,
    1596    -1414,   142, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1597    -1414, -1414, -1414, -1414, -1414, -1414,    98,    98,    98,  1334,
    1598      684,   153,  7496,   290, -1414, -1414, -1414, -1414, -1414,   204,
    1599    -1414, -1414, -1414, -1414,   901,   229, -1414, -1414, -1414, -1414,
    1600     9565, -1414, -1414, -1414, -1414,   -15,   301, -1414,  1624, -1414,
    1601    -1414, -1414, -1414,   302,  1806,   471,   143,  7613, -1414, -1414,
    1602     9603,  1367, -1414, -1414, -1414,  1721,   510,  3394,  1032,  1137,
    1603     1721,  1303, -1414, -1414,  1174,  1520, -1414,  1721,  1532, -1414,
    1604      385, -1414,   421,   523, -1414, -1414, -1414, -1414,   460,   301,
    1605       98, -1414,    98, -1414, -1414, -1414, -1414, 10414,  1624, -1414,
    1606    -1414,  1624, -1414,   447, -1414, 10444, -1414, -1414,  2082, 10554,
    1607    -1414,   399,   399,   399, -1414, -1414, -1414,    98, -1414, -1414,
    1608    -1414,   544,   555,   575, -1414, -1414, -1414,   617, -1414, -1414,
    1609    -1414, -1414, -1414,   621,   629, -1414, -1414,    11,  9069,  3253,
    1610      578,   492,   499,   631,   635,   642,   647,  9853,  7015,   649,
    1611      656, -1414,  9713, -1414, -1414, -1414, -1414,   661, -1414,   193,
    1612     3453,  3453, -1414,   667,   251, -1414, -1414, -1414, -1414,   692,
    1613      327,   346,   368,    98,   673, -1414, -1414,  1806,  3136,   748,
    1614    -1414,    12, -1414,    98,    98,   301, -1414, -1414,    75, -1414,
    1615       98,    98, -1414,  3167,   711,   722,   399,  6806, -1414, -1414,
    1616      726,  9565, -1414, -1414,  1721, -1414, -1414, -1414,   301, -1414,
    1617     1624,   -15, -1414,  7963, -1414,   399,   399,   399,   301, -1414,
    1618     1334, -1414,  5769, -1414, -1414,   709,   399, -1414,   399, -1414,
    1619      204,  9069, -1414,   763, -1414,   684,   765,   399, -1414,  1334,
    1620      750,   766, -1414,  7496,   705, -1414, -1414, -1414,  9532, -1414,
    1621    -1414, 10864, -1414,   748,    63,  6244, 10554,  2082,  3167, -1414,
    1622       85, -1414, -1414, 10444,  1624,   804,  7644, -1414, -1414,   319,
    1623    -1414, 11778,   782,   851,  4657,   828,  4994, 11639, -1414,   839,
    1624    -1414, -1414, -1414, -1414, 11658, 11658,  8841,   844, -1414, -1414,
    1625    -1414, -1414, -1414, -1414,   869, -1414,   759,  2440,  9183,  4994,
    1626    -1414,   593,   571,   645,   313,   861,   842,   858,   843,   911,
    1627      -20, -1414, -1414,   876,   326, -1414,    83, -1414, -1414,  3253,
    1628    -1414, -1414,   139,   900, -1414,   422,   900,   905,   204, -1414,
    1629    -1414,   909, 10414, -1414,   912,   917,  9297, -1414, -1414,  1382,
    1630     2358,  8427,  6806,  1721, -1414,  1721,   399,   399, -1414, -1414,
    1631    -1414, -1414, -1414, -1414,   399, 10414,  1624, -1414, -1414, 10584,
    1632     1776, -1414, 10304, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1633      936, 11446,  4994, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1634    -1414, -1414, -1414, -1414, -1414, -1414, -1414,  2082, -1414,   836,
    1635      947,   962,   963,   923,   965,   970,   972,  3136, -1414, -1414,
    1636      959,   -15,   975, -1414, -1414,   978, -1414, -1414, -1414,  9532,
    1637    -1414, -1414, -1414, -1414, -1414,  3167, -1414,  9069,  9069, -1414,
    1638      399,  2082,  6926,  1624,  8543, -1414, -1414, -1414, -1414,  9532,
    1639       63, -1414, -1414,  1721,   301, -1414, -1414,  9532, -1414,  6689,
    1640    -1414, -1414,   399,   399,   271, 10023,   907,   977,   960,   988,
    1641      399, -1414, -1414, -1414, -1414, 10980, -1414,   500,  6556, -1414,
    1642      301,   990, -1414,  2082, 11860, 11504, -1414, -1414, -1414, -1414,
    1643      935,  3167, -1414,  8659,   748,  6228, -1414, -1414, -1414,  1482,
    1644      550,   876,   684,  7644,  1180, 10444, -1414,  7644, -1414, -1414,
    1645    -1414, -1414,   561, -1414,   997,   851,   -13,  8841, -1414, 10694,
    1646    -1414, -1414,  8841, -1414,  8955,  8841, -1414, -1414,   996, -1414,
    1647      585,  1003,   455,  1017, -1414, -1414,  9993,  6037, -1414,   419,
    1648    -1414, -1414, 11562, -1414,   469, 11562, -1414, -1414, -1414, -1414,
    1649    -1414, -1414, -1414, -1414, -1414, -1414,  6244,  6244, -1414, -1414,
    1650     4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,
    1651     4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  3735,  6244,
    1652    -1414,   326,  1049, -1414, -1414,    98,    98, -1414, -1414,  9069,
    1653    -1414, -1414,   978,   705, -1414,   978, 11581, -1414, -1414, -1414,
    1654     3645,  6037,  1016,  1018, -1414, 10554, -1414, -1414,   661, -1414,
    1655     1020,  1157,  1025,  2611,    95,   876, -1414,    98,    98,   876,
    1656      134, -1414,    98,    98,   978, -1414, -1414,    98,    98, -1414,
    1657      900, 10724,  1624, 12005,    69,   227, 10724, -1414, 10864, -1414,
    1658      876, -1414, 10414, -1414,   218,  8079,  8079,  8079,  1624, -1414,
    1659     5555,  1012,   260,   936,   778,  1021,  1024, -1414,  1026,  3453,
    1660      343, -1414,  1115,  1624,  8079,   705,  2082,   705,   748,   534,
    1661      900, -1414, -1414,   596,   900, -1414, -1414, -1414,   851, -1414,
    1662      900,   301, 10980, -1414,   687,  1042,   700,  1043, -1414,  1044,
    1663      301, -1414, -1414,  9532,   301,  1041, 10694,  1045, -1414,  2066,
    1664    -1414,   408,   416,   684, -1414,   684,  1047,  4994, -1414,   684,
    1665    12005, -1414, -1414,  1053, -1414, -1414, -1414,   705, -1414, 11933,
    1666      917, -1414,  8079,   489,  8427, -1414, -1414,   661,  1055,  1056,
    1667     1482,  3284, -1414, -1414,  7644, -1414, -1414,  1038, -1414, -1414,
    1668     1064, -1414,  1038,  1070, 11778,  6244,    93,  1051,   138,  1074,
    1669     1058,  1075,   844,  1069,  1077, -1414,  1079,  1081, 10133,  6775,
    1670    -1414,  6244, -1414,   455,  1974, -1414, -1414, -1414,    98,    98,
    1671     6104,  6244,  1076, -1414, -1414,   936,   707, -1414,  6244, -1414,
    1672    -1414,   677, -1414, -1414, -1414, -1414, -1414,   593,   593,   571,
    1673      571,   645,   645,   645,   645,   313,   313,   861,   842,   858,
    1674      843,   911,  4994,   847, -1414, 10980,  1083,  1084,  1088,  1049,
    1675    -1414, -1414, -1414, -1414, -1414, 10980,   717,  8079, -1414, 10414,
    1676    -1414,  7135,  9411, -1414, 10304,  7015, -1414, -1414,  1157, 10980,
    1677      945,  1089,  1090,  1095,  1096,  1099,  1100,  1105, -1414,  4392,
    1678     2611, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1679    -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,   978, -1414,
    1680    -1414, -1414,   876, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1681    -1414,  1112, -1414,  1113,  1118, -1414, -1414,   -15,  1076,  5555,
    1682    -1414, -1414, -1414, 11446,  1116, -1414, -1414, -1414, -1414, -1414,
    1683      684,  6369,  1201, -1414, -1414, -1414, -1414,  1103,   -15, -1414,
    1684    -1414,   978, -1414, -1414,   978,   126,   978, -1414, -1414, -1414,
    1685    -1414, -1414, -1414,  9743, -1414,   301, -1414, -1414,   438,   452,
    1686    10584,  7255,  2372,  4994,  2870, -1414, -1414,  1127,    39,  1127,
    1687    -1414,   684, -1414,    98, -1414, -1414, 10163,   960, -1414, -1414,
    1688    -1414,   977,  1143,  1131, -1414, -1414,  1150,  1153, -1414,   489,
    1689     1995, -1414,   363, -1414,  3284,   876, -1414,  1160,  7644, 10834,
    1690     9069,  1161, -1414, -1414,  1151,  1162,  1156, -1414,  4994,   120,
    1691      279,  1163, -1414,  1166,   705,  1166,  6037,  6244, -1414, -1414,
    1692     1166,  1165, -1414,  1176,  1182,  1185,  1974, -1414, -1414, -1414,
    1693    11446, -1414, -1414, -1414, -1414,  1168,  6244,  1188,   705,  5555,
    1694    -1414, 11562, -1414,   705, -1414, -1414,  6244, -1414,   614,   900,
    1695    -1414, -1414, -1414, -1414, -1414, -1414, -1414,   936,   917,  9297,
    1696    -1414, -1414,  7375,  1187, -1414,   758,   900, -1414,   785,   797,
    1697      900, -1414,   399,  5912, -1414, -1414, -1414, 10980, 10980, -1414,
    1698     8543,  8543, -1414,  1186,  1189,  1191,  1199, -1414,  1206,   439,
    1699      119,  1076, -1414,   705, -1414,  3453, -1414,  6244,   480, -1414,
    1700     6655,  1211,  1212, 11388,  1213,  1217,    -6,    58,   117,  6244,
    1701     1221,   301,  6244,  6244,  1215,  1222,   610,  1203, -1414, -1414,
    1702    -1414,  1218, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1703    -1414,   684,  1226,  6244, -1414, 10980, 10980,    98,  1228, -1414,
    1704    10273, -1414, -1414,   864, -1414,  2870, -1414, -1414, -1414, -1414,
    1705     2066, -1414, -1414,  1230, -1414, -1414, -1414, -1414,  1231,  1995,
    1706    -1414, -1414,  1223, -1414,  1038, -1414, -1414,  2082,  1235, -1414,
    1707    -1414, -1414,   744,  1237, -1414,   138,  1245,  4994,  1232,   138,
    1708      138,  1250,  1246, -1414,  9993,   825,   900, -1414, -1414,  1026,
    1709     6244,  1251,  1168,   536,   161,  1261, -1414,  1246, -1414,  1254,
    1710     1261, -1414, -1414,  1257, -1414, -1414,   978,  1270,  1271,  6895,
    1711     1272,  1275,  1280, -1414, -1414,  1283, -1414, -1414,   978, -1414,
    1712    -1414, -1414, -1414,   978,  6244,  6244,   917,  1282, -1414, -1414,
    1713    -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1714     4994,  4994,  1284,  1286,  1261, -1414, -1414,   684, -1414, -1414,
    1715    -1414,  5291, 10834,  6244,  6244,  1335,  6244, -1414,  1263, -1414,
    1716     1267, -1414,  1281,  6244,  1288,  6244,  1039,  1290,    28,    98,
    1717     5165,   856, -1414, -1414,  6369,  1287,   488, -1414, -1414, -1414,
    1718    -1414, -1414, -1414, -1414, -1414, -1414, 11206, -1414,  8659,  1304,
    1719    -1414, -1414, 10834,   490,   498, -1414,  1301,  1306,   851,  1317,
    1720    -1414,   418, -1414, -1414,  6244,  1316, -1414, -1414,   978,  1314,
    1721    -1414, -1414,  1318,   589,   691,   705,  1320,  1322, -1414,  1329,
    1722    -1414, 10980, -1414, -1414, -1414, -1414, -1414,  1330, -1414, 10980,
    1723    10980, 10980, -1414, -1414,  1332, -1414,  1333,  1336,  1339,   517,
    1724     8195,  8311, -1414, -1414,   123, -1414,  1343,  1348, -1414,  8775,
    1725      755,   768,  1342,   770,  6525, -1414, -1414, -1414,   508, -1414,
    1726      777,  1352,  1353,   301,  1403,   933, -1414, -1414,  6244, -1414,
    1727    11388, 11562, -1414, -1414, -1414,  1359,  1364, -1414, -1414, -1414,
    1728     1363, -1414, -1414, -1414, -1414, -1414, -1414, 10834,   851,   273,
    1729    -1414,  1347,   851,  1168,   268, 10980, -1414, -1414, -1414, -1414,
    1730    -1414, -1414, -1414, -1414,  1365, -1414, -1414, -1414, -1414, -1414,
    1731    -1414,  1368,  1371, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1732     1375, -1414,  1374, -1414, -1414, 11388,    91,  6244, 11388, -1414,
    1733     1385,  6244, -1414,   288,  1402,  1405, -1414, -1414,  1390,  1393,
    1734     1376, -1414,   882, -1414, -1414, -1414,  1624,  2082,  1388,   869,
    1735      884,  4994, -1414,   803,  1394,  6244, -1414,   705,   705,  1399,
    1736     1406,  1407,  1409, -1414, -1414,  8543,  1397, -1414,  1473,  4994,
    1737     1404, -1414, -1414, 11299, -1414,   811, -1414,  1395, 11388,  1401,
    1738    -1414, -1414,  1410, -1414,  1412, -1414,  1433,  1441, -1414,  1415,
    1739    10834, -1414, -1414, -1414,   851,   705,  1429,  1417,  1436, -1414,
    1740     1446,  1261,  1261, -1414, -1414, -1414, -1414, -1414, 11388,   278,
    1741    -1414,   910, -1414, -1414,  7730, -1414, -1414,  1435,  6244, -1414,
    1742     6244,  7730,   301, 10694,   301, 10694,  1462, -1414,  1463, -1414,
    1743    -1414,  1460,   869, -1414,   812, -1414, -1414,  6244, -1414,  1465,
    1744     1466, -1414,  4994,  4994, -1414, -1414,  1007,    37, -1414, -1414,
    1745     1447, -1414,  1007, -1414, -1414,  2485,   705, -1414, -1414,   301,
    1746    10694,   301, 10694,  1472,  1450,   705, -1414, -1414, -1414, -1414,
    1747    -1414, 11299,  1468,  1007,  7847,  6244, 11210,  1475,  1007,  1477,
    1748     2485,  2994, -1414, -1414, -1414,  1495, -1414, -1414, -1414, -1414,
    1749     9069, -1414, -1414, -1414, 11077, -1414, 11299, -1414, -1414,  1476,
    1750    10984, -1414, -1414, 11210,   301,  2994,   301,  1502,  1506,   813,
    1751    -1414, 11077, -1414, -1414, -1414, 10984, -1414, -1414, -1414,   301,
    1752      301, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414
     1596    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
     1597   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1598   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
     1599     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
     1600   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
     1601   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
     1602   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
     1603     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
     1604    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
     1605   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
     1606   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
     1607    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
     1608    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
     1609     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
     1610   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
     1611     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
     1612   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
     1613    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
     1614     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
     1615      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
     1616     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
     1617    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
     1618     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
     1619   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
     1620    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
     1621     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
     1622    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
     1623   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
     1624   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
     1625   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
     1626   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
     1627     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
     1628   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
     1629   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
     1630     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
     1631    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
     1632   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
     1633   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
     1634   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1635   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
     1636     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
     1637     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
     1638   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
     1639    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
     1640   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
     1641   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
     1642   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
     1643    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
     1644    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
     1645     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
     1646   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
     1647   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
     1648    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
     1649   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
     1650   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
     1651   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
     1652   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
     1653     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
     1654   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
     1655    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
     1656     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
     1657   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
     1658    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
     1659   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
     1660    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
     1661    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
     1662   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
     1663    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
     1664   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
     1665     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
     1666   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
     1667    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
     1668   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
     1669    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
     1670    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
     1671     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
     1672   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
     1673   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
     1674     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
     1675    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
     1676     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
     1677   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
     1678    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
     1679   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1680   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
     1681   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
     1682   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
     1683   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
     1684    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
     1685   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
     1686   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
     1687    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
     1688     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
     1689    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
     1690    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
     1691   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
     1692   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
     1693   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
     1694   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
     1695   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
     1696   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
     1697     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
     1698    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
     1699      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
     1700    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
     1701    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
     1702   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1703   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
     1704    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
     1705    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
     1706   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
     1707   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
     1708     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
     1709    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
     1710    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
     1711   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
     1712     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
     1713   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
     1714    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
     1715    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
     1716    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
     1717   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
     1718   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
     1719     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
     1720   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
     1721     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
     1722   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
     1723    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
     1724    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
     1725   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
     1726   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
     1727    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
     1728   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
     1729   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1730   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
     1731   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
     1732   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
     1733    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
     1734     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
     1735    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
     1736   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
     1737   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
     1738   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
     1739   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
     1740   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
     1741    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
     1742   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
     1743   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
     1744   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
     1745    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
     1746    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
     1747    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
     1748   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
     1749    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
     1750    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
     1751   -1310, -1310, -1310, -1310
    17531752};
    17541753
     
    17561755static const yytype_int16 yypgoto[] =
    17571756{
    1758    -1414,  4377,  3077, -1414,  1645, -1414,   305,   958,   -11, -1414,
    1759      552,  -530,  -487,  -944,  -142,  3604,     0, -1414,  1277,   511,
    1760      529,   298,   549,  1057,  1060,  1054,  1062,  1065, -1414,  -211,
    1761     -327,  5116,  -961,  -725,  -952, -1414,  -200,  -594,   572, -1414,
    1762     1379, -1414,   397, -1413, -1414, -1414,   129, -1414, -1160,  -935,
    1763      246, -1414, -1414, -1414, -1414,    68, -1131, -1414, -1414, -1414,
    1764    -1414, -1414, -1414,   321, -1152,    33, -1414,  -696, -1414,   506,
    1765      296, -1414,   169, -1414,  -339, -1414, -1414, -1414,   558,  -728,
    1766    -1414, -1414,    19,  -974,   177,  2303, -1414, -1414, -1414,   -91,
    1767    -1414,   166,   269,  -194,  1705,  3615, -1414, -1414,    36,   224,
    1768      628,  -235,  1694, -1414,  1557, -1414, -1414,   200,  2163, -1414,
    1769     2278,   185, -1414, -1414, -1414,  -607, -1414,   956,   957,   545,
    1770      725,  -320, -1414, -1414, -1414,   950,   719,  -493, -1414,  -472,
    1771     -355,  1296, -1414, -1414,  -899,  -946,   440,   524,  1067,   168,
    1772    -1414,  1040,   317,  -281,  -198,  -141,   672,   781, -1414,  1005,
    1773    -1414,  2834,    55,  -450,   932, -1414, -1414,   712, -1414,  -228,
    1774    -1414,   104, -1414, -1414, -1414, -1285,   420, -1414, -1414, -1414,
    1775     1178, -1414,    31, -1414, -1414,  -862,   -94, -1364,  -152,  1641,
    1776    -1414,  3733, -1414,   927, -1414,  -170,   493,  -184,  -183,  -181,
    1777        7,   -42,   -36,   -33,  1610,     4,    10,    14,  -143,  -177,
    1778     -172,  -162,  -161,  -319,  -513,  -508,  -498,  -547,  -310,  -528,
    1779    -1414, -1414,  -511,  1101,  1102,  1110,  1575,  4802,  -565,  -560,
    1780     -559,  -541,  -551, -1414,  -506,  -744,  -736,  -732,  -593,  -267,
    1781     -227, -1414, -1414,   624,   294,   -85, -1414,  3753,    44,  -634,
    1782     -173
     1757   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
     1758     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
     1759     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
     1760    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
     1761     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
     1762     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
     1763   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
     1764     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
     1765   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
     1766   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
     1767     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
     1768    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
     1769     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
     1770    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
     1771   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
     1772   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
     1773   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
     1774    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
     1775   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
     1776       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
     1777    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
     1778   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
     1779    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
     1780    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
     1781    -222
    17831782};
    17841783
     
    17861785   positive, shift that token.  If negative, reduce the rule which
    17871786   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1788 #define YYTABLE_NINF -526
     1787#define YYTABLE_NINF -521
    17891788static const yytype_int16 yytable[] =
    17901789{
    1791       50,   115,   151,   400,   401,   771,   402,    99,   152,   973,
    1792      403,   153,   429,   454,   874,   404,   756,   974,   408,  1080,
    1793      116,   975,   262,   441,   269,   405,   406,   744,   850,   384,
    1794      385,   605,    50,    51,  1142,   982,    70,   411,   833,    99,
    1795      610,   825,   826,   727,   149,   409,   499,   732,   154,  1150,
    1796       50,    31,  1398,   836,   155,  1462,   832,   163,   156,   843,
    1797      827,   800,   282,   145,   188,    51,  1208,   211,    70,   528,
    1798       50,   195,   343,   824,   218,   567,  1200,   228,    31,   597,
    1799      671,  -235,  -235,   400,   401,  1184,   402,   926,   821,   221,
    1800      403,  1318,   170,   822,   168,   404,   520,   737,   408,  1194,
    1801      680,  1217,  1218,   823,   738,   405,   406,   115,   684,   426,
    1802      568,   476,   478,  1550,    31,   115,   171,   124,   268,   273,
    1803      283,   254,   217,   412,    31,   409,  1209,   410,   715,  1462,
    1804     1210,  1182,  1183,  1561,    31,  1419,  1420,    31,   629,   244,
    1805     1565,   955,   633,   865,   866,   151,   675,   677,   308,   149,
    1806      412,   152,  -235,  1079,   153,  1481,   163,   115,   346,   168,
    1807     1319,   884,   211,   863,   863,   863,    64,   472,   973,   374,
    1808      722,   204,   477,    31,   217,   528,   974,    57,   117,  1260,
    1809      975,   853,   863,   920,   420,   854,   412,   188,   188,  1212,
    1810     1211,   154,   328,   578,   482,   163,   412,   155,    64,   579,
    1811       78,   156,   528,   268,   834,  1421,   602,   821,   528,    57,
    1812      956,    50,   822,   669,   731,  1190,   716,   217,   163,   938,
    1813      293,   205,   823,   211,    71,   151,   179,   674,   676,  1127,
    1814      444,   152,    78,   746,   153,  1213,  1087,   666,  -113,  -113,
    1815      863,   308,  1191,   841,   212,   602,  1263,   222,   580,   958,
    1816      412,   125,   216,    50,  -113,   437,    71,   589,   825,   826,
    1817       99,   273,   144,  1466,   667,  1026,   273,   268,   268,   836,
    1818      118,  1152,   506,   115,  1264,   163,   263,   827,   217,   264,
    1819      864,   864,   864,  1025,   464,   328,    51,   343,  1001,    70,
    1820     1013,   214,  1184,   610,   108,   108,   308,  1103,   804,   864,
    1821     1090,   146,  1343,   658,   216,   821,   113,   520,   308,   378,
    1822      822,   666,   520,   148,  1004,   520,   217,   437,   725,   161,
    1823      823,   217,  1199,  1508,   572,   379,   108,   477,   472,   149,
    1824     1200,   673,  1419,  1420,   448,   863,   374,   678,   667,   855,
    1825     -470,   157,   115,   856,   905,  1184,   346,   216,   472,   569,
    1826      603,   621,   168,   461,   597,   528,   472,   864,  1537,   597,
    1827     1539,  1466,  1080,   810,   108,   626,  1466,   388,   793,   626,
    1828      930,  -470,   115,  -470,  1492,   833,   260,  -470,  -113,   825,
    1829      826,   685,  1401,   389,   161,  1405,  1466,   579,   440,  1128,
    1830      599,  1182,  1183,  1466,   715,  1551,  1129,   268,   827,  -113,
    1831      442,  1191,  1430,   557,   558,   859,   217,   188,   216,     8,
    1832        9,    10,    11,    12,   374,   173,   850,   324,   183,    64,
    1833       43,   252,  1566,   876,   473,   268,   340,   308,   308,  1247,
    1834       57,   268,   837,  1251,   626,   571,   840,   412,    31,   559,
    1835      560,   343,   484,   391,    46,    47,   216,   443,   494,   501,
    1836      495,   216,   864,    78,   877,   115,   644,   857,    78,   392,
    1837      878,   860,   393,  1451,  1452,  1214,    34,  1170,  1172,  1184,
    1838     1138,   328,   328,   268,   203,   855,   431,    71,   394,  1110,
    1839      435,   268,   716,   626,   395,    50,   929,   217,   374,   721,
    1840     1200,   112,    99,    98,   736,   115,  1079,  1200,  1114,   499,
    1841      396,   249,    41,    42,  1148,  1259,   888,   308,   875,   115,
    1842      324,  1024,   308,  -291,   308,   308,  1457,   179,    51,   917,
    1843      610,    70,   754,  -521,   921,    98,   115,   346,  1341,   217,
    1844      763,   583,   923,   412,   630,  1342,   216,   150,   634,   328,
    1845      922,   112,   435,    98,  1026,   489,   919,   108,   924,    43,
    1846     1200,  -106,    41,    42,   921,  -106,   715,   191,   328,   466,
    1847       98,  1521,   886,    98,   753,   522,   412,  1526,   923,   254,
    1848     1091,   572,   572,    46,    47,   214,  1381,   161,   265,   308,
    1849      769,   995,  1006,    43,  1092,   473,  1094,   810,  1546,  1138,
    1850      626,   346,   472,  1553,   920,   621,  1197,  1097,   939,  1097,
    1851      602,   603,   331,   603,  1197,   473,  1332,    46,    47,   332,
    1852      706,   588,  1198,   473,  1334,   594,   707,   216,   935,    78,
    1853     1324,   626,  1333,   328,   751,  1024,   626,   812,   621,  1367,
    1854     1335,  1126,   626,  1368,   627,   626,   626,   626,   631,    78,
    1855     1382,   340,    98,   889,   716,   412,  -113,    78,  -113,   713,
    1856      217,    64,  -113,   -10,   626,    98,   268,   895,  1039,   216,
    1857      723,   112,    57,   343,  -444,   851,   724,  -113,  -113,  1037,
    1858      599,   733,    41,    42,   165,  1181,   810,   734,   217,  1029,
    1859      399,   191,   288,   217,  -445,    78,   115,   254,   330,   914,
    1860     1084,   553,   554,    41,    42,   750,   324,   324,   214,   231,
    1861     1348,   751,   929,   232,    98,   892,   236,   412,   238,    71,
    1862     1379,   550,   626,   940,   621,   247,    98,   551,   552,   515,
    1863      721,   721,  1122,  1154,   689,   412,   278,   959,   400,   401,
    1864      280,   402,  1044,   555,   556,   403,  1498,   118,   281,   165,
    1865      404,   333,   597,  1498,   408,   334,    98,   929,   115,   346,
    1866      405,   406,   335,   754,   754,   217,   112,   336,   141,   142,
    1867      480,   372,   489,   112,   324,   373,   489,    41,    42,   217,
    1868      377,   409,  1111,   113,    41,    42,   522,   112,   522,   108,
    1869      216,   522,   386,   324,   522,  1151,   973,  1429,    41,    42,
    1870      852,  1392,   994,   991,   974,   340,  1547,   899,   975,   572,
    1871     1249,   390,  1350,   751,   715,   398,   867,   626,   216,   626,
    1872      901,  1009,   410,   216,   626,   346,   751,   990,   603,   743,
    1873      427,   883,    98,   991,   739,   343,   740,  1003,  1174,   741,
    1874      603,   428,   747,   707,   764,   436,  1039,   743,   433,   770,
    1875      743,   451,   231,   604,   529,   530,   531,   443,   324,   473,
    1876      112,   812,   141,   142,  1245,   781,   782,   783,   784,   808,
    1877      579,    41,    42,  1292,  1293,  1375,   217,  1166,   532,   412,
    1878      533,   751,   534,   535,  1500,   473,  1501,  -368,  1376,  -397,
    1879     1378,   308,   462,    78,   751,   216,   751,  1383,   466,   870,
    1880      849,   505,   716,   751,  1169,   594,   602,   436,   463,   216,
    1881      191,   858,   501,   626,  1195,   704,  1171,   810,   602,    78,
    1882      115,   346,   914,  1447,   914,   713,   929,    70,   485,  1444,
    1883      524,  1467,  1514,  1571,   214,   666,   115,   751,  1515,   579,
    1884      917,  1548,   165,   293,  1256,  1370,   412,   509,   214,   940,
    1885      940,   529,   530,   531,   721,   254,   330,   412,   514,   115,
    1886      308,   528,   667,   561,   562,   689,   526,   919,    49,   114,
    1887      885,   563,   887,   751,   996,   532,   346,   533,  1115,   534,
    1888     1321,   716,   565,    37,   330,   412,   754,    40,    98,   929,
    1889      929,   231,   604,   236,    41,    42,   564,   114,   114,   705,
    1890       49,  1388,  1389,   489,   328,    43,   216,  1439,   991,  1533,
    1891     1444,  1445,    49,  1300,  1301,   566,  1303,   569,    49,   346,
    1892       44,   339,   934,  1308,  -441,  1310,    49,   340,   587,    46,
    1893       47,   694,    49,  1240,   590,    49,  1493,  1494,    49,    -3,
    1894      626,   626,   420,   662,   412,   214,     2,   208,     4,     5,
    1895        6,     7,   114,   114,   482,   330,   412,    64,   639,  1138,
    1896      308,  1419,  1420,   851,   834,   330,   602,   659,    57,     8,
    1897        9,    10,    11,    12,   777,   778,    49,   217,   668,    49,
    1898      143,   231,   660,   661,  1446,   663,    49,   713,  1005,   693,
    1899      664,    78,   665,   808,   779,   780,  1202,   670,    31,   259,
    1900      115,   697,  1459,   695,   820,   914,   604,  1311,  1312,  1313,
    1901      914,    35,   699,    36,  -239,    71,   735,    49,   748,   940,
    1902      785,   786,   704,   752,   959,    49,    34,   268,   959,   959,
    1903       49,  1349,  1351,  1352,   243,   246,  1116,   760,   813,   -12,
    1904      814,   524,   817,   524,   626,   343,   524,   828,   -13,   524,
    1905     -292,   872,   873,    43,   880,    49,    49,     8,     9,    10,
    1906       11,    12,   900,   902,   724,   907,   903,   910,   571,   346,
    1907      412,    49,   928,  -418,    -3,  1519,  1459,    46,    47,    49,
    1908     -525,   943,   808,   950,   964,   108,    31,  1425,    49,   340,
    1909      952,    49,   918,   957,   963,   965,   967,   968,   114,   969,
    1910      929,   970,   986,   998,   999,   689,   705,   216,  1000,  1015,
    1911     1016,   273,   115,   114,    34,  1017,  1018,   114,   929,  1019,
    1912     1020,    49,   114,   820,   604,  1021,   473,   489,  1117,   324,
    1913      115,   221,  1032,  -406,   308,    49,    49,    57,  -405,    37,
    1914     1081,  1046,    49,    40,  1083,   704,   443,  1339,   626,    49,
    1915       41,    42,   115,   108,   913,   704,   112,  1105,   141,   240,
    1916       78,    43,   112,  1104,   141,   142,   217,    41,    42,   704,
    1917       70,  1115,  1106,    41,    42,  1107,   818,   751,   602,  1131,
    1918     1113,  1123,  1124,  1125,    71,    46,    47,  1134,   849,  1130,
    1919      980,   929,   929,   241,  1140,   458,  1135,    49,   242,   728,
    1920      626,   626,  1136,  1144,   729,  1137,   743,  1164,  1144,   273,
    1921     1143,  1187,  1185,  1442,   308,  1186,  -293,    49,    49,  1188,
    1922      693,   820,  1559,     8,     9,    10,    11,    12,  1189,   705,
    1923     1203,  1204,  1206,   604,    49,   713,  1207,  1399,    49,   705,
    1924     1215,  1399,  1219,    -3,  1220,  1222,  1227,   115,  1232,   645,
    1925     1202,  1237,    31,   705,   108,  1235,   400,   401,  1144,   402,
    1926     1241,  1246,   494,   403,   217,    49,  1115,  1248,   404,   689,
    1927     1253,   408,  1254,  1261,  1250,    49,  1268,  1270,   405,   406,
    1928       34,     2,   208,     4,     5,     6,     7,  1265,   212,   222,
    1929     1272,  1273,  1302,    49,  1274,   666,   216,  1275,   409,    49,
    1930       64,    49,  1276,  1278,  1285,  1305,  1294,   268,  1295,  1306,
    1931      230,    57,  1323,   808,   713,  1093,   131,   918,   132,   133,
    1932      134,  1532,   667,  1307,  1330,   626,  1336,    41,    42,  1116,
    1933     1309,   646,  1317,  1338,    78,   214,   114,  1340,  1344,  1346,
    1934     1347,    49,  1353,  1482,  1354,   175,    35,   604,    36,    49,
    1935      115,  1355,  1357,    49,  1363,  1364,  1365,    49,    71,  1366,
    1936      114,  1377,   114,  1068,    37,  1373,   176,   177,    40,  1115,
    1937     1374,  1384,  1385,  1313,   115,    41,    42,   704,   704,  1393,
    1938      473,   115,   645,   115,  1394,   115,   442,  1395,   255,  1402,
    1939     1413,    57,  1405,  1414,   216,  -407,  1417,   114,   151,   340,
    1940      645,   373,   114,   645,   152,  1428,   108,   153,  1432,  1436,
    1941     1202,  1434,  1437,  1443,    78,  1531,  1448,  1202,  1438,  1453,
    1942      115,  1117,   115,  1368,  1116,  1458,  1454,  1455,   108,  1456,
    1943     1472,  1463,  1474,   443,   115,   704,   704,  1468,    71,  1476,
    1944     1531,  1531,   726,  1470,   730,  -294,   108,  1478,   163,  1485,
    1945      308,   114,     8,     9,    10,    11,    12,  1480,    49,  1486,
    1946      693,   705,   705,  1487,    37,  1531,  1488,    76,    40,    49,
    1947     1202,    49,   374,   511,  1441,    41,    42,  1499,  1144,  1144,
    1948     1144,    31,  1509,  1511,   418,  1513,    43,  1517,  1518,  1525,
    1949       49,  1540,  1541,  1545,   328,   548,   549,  1554,   918,    76,
    1950     1552,   720,   112,   918,   141,   142,    49,   438,   108,    34,
    1951       46,    47,   114,    41,    42,  1556,  1117,   446,  1562,   705,
    1952      705,    49,  1569,   114,    49,   114,  1570,  1116,  1221,   789,
    1953      787,  1322,  1520,   548,   788,  1205,   743,   224,   790,  1431,
    1954      473,   108,   791,  1572,   245,  1387,  1252,   473,  1403,  1226,
    1955     1502,    57,   908,   909,  1098,  1234,  1102,    49,    57,   931,
    1956      806,   114,  1139,   114,  1045,   879,   945,   114,  1112,   548,
    1957      164,   953,  1331,   718,    78,   114,     0,   126,   129,   130,
    1958        0,    78,   796,   797,   196,   521,  1328,   219,    49,    49,
    1959      229,   798,     0,     0,   871,     0,     0,     0,    71,     0,
    1960      473,     0,    49,     0,     0,    71,    37,     0,   176,   177,
    1961       40,    57,     0,   178,     0,    67,   119,    41,    42,  1117,
    1962        0,   704,  1144,  1144,   693,   354,     0,     0,     0,   704,
    1963      704,   704,     0,     0,    78,     2,   208,     4,     5,     6,
    1964        7,     0,     0,   925,   108,   927,     0,    67,     0,   458,
    1965        0,   256,  1505,   257,  1505,     0,     0,     0,    71,     0,
    1966     1483,     0,     0,   178,     0,   162,   178,     0,   108,   164,
    1967     1329,   215,     0,     0,     0,   108,   414,     0,     0,     0,
    1968        0,   234,   375,   422,     0,   223,    49,     0,     0,  1505,
    1969        0,  1505,     0,     0,     0,   704,     0,     0,    49,   450,
    1970       35,     0,    36,     0,     0,   705,  1068,     0,   164,     0,
    1971        0,     0,   178,   705,   705,   705,     0,     0,     0,   324,
    1972       76,  1534,   261,   215,     0,    76,     0,     0,   108,     0,
    1973     1542,   164,     0,   682,   397,     0,     0,   774,   775,   776,
    1974        0,   645,     0,   445,   416,   417,     0,     0,   114,   421,
    1975        0,   423,   424,     0,     0,   414,     0,     0,    37,   708,
    1976      176,   177,    40,     0,   329,     0,   215,     0,     0,    41,
    1977       42,    49,   261,   351,     0,   178,     0,     0,     0,   705,
    1978       49,     0,    49,     0,     0,     0,     0,     0,    37,   114,
    1979      185,   186,    40,     0,     0,   377,   521,     0,     0,    41,
    1980       42,   521,  1391,   407,   521,     0,     0,     0,     0,   577,
    1981       43,     0,    49,     0,     0,     0,     0,   581,   425,   224,
    1982      584,   430,   432,   646,     0,   187,   162,   215,     0,   178,
    1983     1049,     0,   114,     0,    46,    47,   178,     0,     0,     0,
    1984        0,     0,     0,     0,     0,     0,     0,   449,   645,   375,
    1985        0,   452,     0,   453,     0,     0,   114,  1418,     0,   645,
    1986     1426,   114,   460,     0,     0,   215,     0,     0,    67,     0,
    1987      215,  1099,     0,   474,     0,     0,     0,     0,   898,     0,
    1988        0,     0,     0,   481,   414,   500,    76,     0,   422,     0,
    1989        0,   432,     0,     0,     8,     9,    10,    11,    12,     0,
    1990        0,   354,     0,     0,   178,  1465,    76,     0,     0,     0,
    1991     1469,   114,     0,     0,    76,     8,     9,    10,    11,    12,
    1992        0,   178,     0,    31,     0,   178,     0,   375,     0,     0,
    1993      646,     0,   354,   480,     0,     0,     0,     0,     0,     0,
    1994     1491,     0,     0,     0,    31,     0,     0,   981,     0,   114,
    1995      354,    34,    76,     0,     0,   215,     0,   261,     0,     0,
    1996      897,   595,     0,    49,     0,   414,     0,   623,    49,   904,
    1997        0,     0,    34,   906,     0,     0,     0,     0,    43,     0,
    1998      628,     0,     0,     0,   628,    49,     0,   261,   178,     0,
    1999        0,     0,     0,   753,   354,   412,     0,     0,     0,    43,
    2000        0,   997,    46,    47,     0,     0,     0,  1506,     0,  1506,
    2001        0,  1002,     0,     0,   939,     0,   602,     0,     0,     0,
    2002        0,     0,     0,    46,    47,  1014,  1560,     0,     0,     0,
    2003        0,  1049,  1560,     0,   474,     0,   215,     0,     0,     0,
    2004        0,     0,     0,  1560,  1506,     0,  1506,  1560,    37,   351,
    2005      185,   186,    40,   215,   474,     0,   577,   577,   354,    41,
    2006       42,     0,   474,     0,    37,   114,   185,   186,    40,     0,
    2007       43,     0,     0,    79,     0,    41,    42,     0,   215,     0,
    2008      700,     0,     0,   432,     0,   912,    43,   412,    49,     0,
    2009        0,     0,     0,   913,    46,    47,     0,     0,   714,     0,
    2010       67,   267,   354,   354,   354,    79,     0,     0,   432,     0,
    2011       46,    47,   432,     0,     0,     0,     0,     0,     0,     0,
    2012        0,   354,     0,     0,     0,     0,   801,   802,     0,     0,
    2013        0,   114,   114,   114,     0,     0,     0,     0,     0,   354,
    2014        0,   261,   351,   225,   890,   178,     0,  1298,   893,     0,
    2015       76,     0,     0,     0,     0,   835,     0,     0,   838,   839,
    2016        0,   842,     0,   844,   845,     0,     0,     0,   846,   847,
    2017        0,     0,     0,     0,     0,     0,    76,   178,     0,   354,
    2018        0,     0,     0,     0,     0,     0,     0,   799,    81,   645,
    2019        0,     0,     0,   178,  1089,     0,   548,     0,     0,   215,
    2020        0,     0,     0,     0,     0,   628,   811,     0,   178,     0,
    2021        0,     0,     0,    58,    58,     0,   354,     0,   830,     0,
    2022       81,     0,     0,     0,     0,     0,     0,   215,     0,     0,
    2023        0,   356,   215,  1179,  1180,     0,   595,   511,     0,     0,
    2024        0,   595,     0,     0,     0,    58,     0,   628,     0,     0,
    2025      351,   351,   351,     0,     0,     0,     0,     0,   226,     0,
    2026        0,     0,   354,     0,    49,    49,     0,     0,     0,   351,
    2027        0,     0,   354,     0,   354,   114,   114,     0,     0,   224,
    2028       58,     0,   354,    58,   577,     0,   354,   700,     0,   178,
    2029        0,  1229,  1230,     0,     0,     0,     0,     0,   474,     0,
    2030        0,     0,     0,     0,   215,     0,     0,     0,     0,   978,
    2031      979,     0,     0,   114,     0,     0,     0,     0,   215,     0,
    2032        0,     0,     0,     0,   474,     0,    79,   351,     0,     0,
    2033        0,    79,     0,     0,     0,     0,   944,     0,   500,   432,
    2034       37,     0,   185,   186,    40,     0,   357,     0,    76,     0,
    2035     1216,    41,    42,     0,    37,     0,   185,   186,    40,     0,
    2036        0,     0,    43,   261,   714,    41,    42,     0,     0,   976,
    2037        0,   349,     0,    49,   114,     0,    43,   601,   354,   602,
    2038        0,     0,     0,   114,     0,     0,    46,    47,     0,     0,
    2039        0,   912,     0,   412,     0,     0,     0,     0,    49,    49,
    2040       46,    47,     0,   414,     0,     0,     0,     0,     0,     0,
    2041      700,     0,     0,     0,     0,   215,     0,     0,     0,     0,
    2042      700,     0,   351,    49,   628,   225,     0,  1012,     0,   628,
    2043      811,     0,     0,   354,   700,     0,    58,     0,     0,     0,
    2044        0,    81,     0,     0,  1023,     0,    81,   536,   537,   538,
    2045      539,   540,   541,   542,   543,   544,   545,     0,   178,     0,
    2046        0,     0,     0,     0,     0,     0,    58,    37,     0,   185,
    2047      186,    40,     0,     0,  1100,     0,     0,  1356,    41,    42,
    2048        0,   546,     0,  1155,     0,  1358,  1359,  1360,     0,    43,
    2049        0,     0,    79,     0,   354,   354,    67,   354,   354,     0,
    2050     1167,     0,     0,     0,  1530,     0,   412,   356,     0,     0,
    2051        0,     0,    79,    46,    47,     0,     0,    76,   628,     0,
    2052       79,     0,     0,     0,     0,   261,   714,     0,     0,  1095,
    2053        0,     8,     9,    10,    11,    12,     0,     0,   356,     0,
    2054      226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2055        0,  1406,   354,   354,     0,  1109,   356,     0,    79,     0,
    2056       31,     0,     0,   432,   119,     0,     0,     0,     0,     0,
    2057        0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
    2058        0,   351,     0,     0,     0,     0,     0,     0,    34,     0,
    2059        0,     0,     0,    37,     0,   185,   186,    40,     0,     0,
    2060      356,     0,  1386,     0,    41,    42,     0,    81,     0,     0,
    2061        0,     0,     0,     0,     0,    43,   215,     0,     0,     0,
    2062     1257,     0,   357,     0,   595,     0,   354,    81,     0,     0,
    2063      601,     0,   602,     0,     0,    81,     0,   430,  1231,    46,
    2064       47,     0,   700,   700,     0,   351,   351,   349,     0,     0,
    2065        0,     0,     0,   357,     0,     0,     0,     0,     0,     0,
    2066        0,     0,     0,     0,   356,  1201,     0,     0,     0,   224,
    2067        0,   357,     0,    81,     0,     0,     0,     0,     0,     0,
     1790      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
     1791     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
     1792     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
     1793     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
     1794     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
     1795     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
     1796      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
     1797     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
     1798     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
     1799     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
     1800     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
     1801     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
     1802     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
     1803     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
     1804      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
     1805     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
     1806    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
     1807     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
     1808     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
     1809      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
     1810     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
     1811      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
     1812     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
     1813     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
     1814     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
     1815     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
     1816     272,  1398,  1399,