Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/DeclarationNode.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:49:31 2016
-// Update Count     : 164
+// Last Modified On : Tue Aug  9 08:39:20 2016
+// Update Count     : 169
 //
 
@@ -49,5 +49,6 @@
 	newnode->name = name;
 	newnode->storageClasses = storageClasses;
-	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+//PAB	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+	newnode->bitfieldWidth = bitfieldWidth;
 	newnode->hasEllipsis = hasEllipsis;
 	newnode->initializer = initializer;
@@ -283,5 +284,5 @@
 	newnode->type->array->dimension = size;
 	newnode->type->array->isStatic = isStatic;
-	if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantNode *>( newnode->type->array->dimension ) ) {
+	if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantExpr *>( newnode->type->array->dimension->build() ) ) {
 		newnode->type->array->isVarLen = false;
 	} else {
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/ExpressionNode.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,13 +10,14 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 07:56:23 2016
-// Update Count     : 375
+// Last Modified On : Wed Aug 10 11:07:38 2016
+// Update Count     : 486
 //
 
 #include <cassert>
 #include <cctype>
+#include <climits>
+#include <cstdio>
 #include <algorithm>
 #include <sstream>
-#include <cstdio>
 
 #include "ParseNode.h"
@@ -31,290 +32,161 @@
 using namespace std;
 
-ExpressionNode::ExpressionNode() : ParseNode() {}
-
-ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
-
-ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
-	if ( other.argName ) {
-		argName = other.argName->clone();
-	} else {
-		argName = 0;
-	} // if
-}
-
-ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) {
-	argName = new VarRefNode( aName );
-	return this;
-}
-
-ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) {
-	argName = aDesignator;
-	return this;
-}
-
-void ExpressionNode::printDesignation( std::ostream &os, int indent ) const {
-	if ( argName ) {
-		os << string( indent, ' ' ) << "(designated by:  ";
-		argName->printOneLine( os, indent );
-		os << ")" << std::endl;
-	} // if
-}
-
-//##############################################################################
-
-NullExprNode::NullExprNode() {}
-
-NullExprNode *NullExprNode::clone() const {
-	return new NullExprNode();
-}
-
-void NullExprNode::print( std::ostream & os, int indent ) const {
-	printDesignation( os );
-	os << "null expression";
-}
-
-void NullExprNode::printOneLine( std::ostream & os, int indent ) const {
-	printDesignation( os );
-	os << "null";
-}
-
-Expression *NullExprNode::build() const {
-	return 0;
-}
-
-// CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) {
-// 	return new CommaExprNode( this, exp );
-// }
-
-//##############################################################################
-
-ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
-} // ConstantNode::ConstantNode
-
-ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
-	assert( newValue != 0 );
-
-	string value = expr->get_constant()->get_value();
-
-	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
-	value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
-	expr->get_constant()->set_value( value );
-
-	delete newValue;									// allocated by lexer
-	return this;
-}
-
-void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
-	// os << string( indent, ' ' );
-	// printDesignation( os );
-
-	// switch ( type ) {
-	//   case Integer:
-	//   case Float:
-	// 	os << value ;
-	// 	break;
-	//   case Character:
-	// 	os << "'" << value << "'";
-	// 	break;
-	//   case String:
-	// 	os << '"' << value << '"';
-	// 	break;
-	// } // switch
-
-	// os << ' ';
-}
-
-void ConstantNode::print( std::ostream &os, int indent ) const {
-	printOneLine( os, indent );
-	os << endl;
-}
-
-Expression *ConstantNode::build() const {
-	return expr->clone();
-}
-
-//##############################################################################
-
-VarRefNode::VarRefNode() : isLabel( false ) {}
-
-VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {}
-
-VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
-}
-
-Expression *VarRefNode::build() const {
-	return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-}
-
-void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << get_name() << ' ';
-}
-
-void VarRefNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Referencing: ";
-	os << "Variable: " << get_name();
-	os << endl;
-}
-
-//##############################################################################
-
-DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
-	set_argName( expr );
-	assert( get_argName() );
-
-	if ( ! isArrayIndex ) {
-		if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
-
-			stringstream ss( var->get_name() );
-			double value;
-			if ( ss >> value ) {
-				// this is a floating point constant. It MUST be
-				// ".0" or ".1", otherwise the program is invalid
-				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
-					throw SemanticError( "invalid designator name: " + var->get_name() );
-				} // if
-				var->set_name( var->get_name().substr(1) );
+ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {}
+
+//##############################################################################
+
+// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
+//
+//		prefix action constant action suffix
+//
+// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
+//
+//		constant BEGIN CONT ...
+//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
+//
+// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
+// type.
+
+static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
+
+static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
+static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
+static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
+static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
+static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
+static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
+
+Expression *build_constantInteger( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
+		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
+	};
+	bool dec = true, Unsigned = false;					// decimal, unsigned constant
+	int size;											// 0 => int, 1 => long, 2 => long long
+	unsigned long long v;								// converted integral value
+	size_t last = str.length() - 1;						// last character of constant
+
+	if ( str[0] == '0' ) {								// octal/hex constant ?
+		dec = false;
+		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
+			sscanf( (char *)str.c_str(), "%llx", &v );
+			//printf( "%llx %llu\n", v, v );
+		} else {										// octal constant
+			sscanf( (char *)str.c_str(), "%llo", &v );
+			//printf( "%llo %llu\n", v, v );
+		} // if
+	} else {											// decimal constant ?
+		sscanf( (char *)str.c_str(), "%llu", &v );
+		//printf( "%llu %llu\n", v, v );
+	} // if
+
+	if ( v <= INT_MAX ) {								// signed int
+		size = 0;
+	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
+		size = 0;
+		Unsigned = true;								// unsigned
+	} else if ( v <= LONG_MAX ) {						// signed long int
+		size = 1;
+	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
+		size = 1;
+		Unsigned = true;								// unsigned long int
+	} else if ( v <= LLONG_MAX ) {						// signed long long int
+		size = 2;
+	} else {											// unsigned long long int
+		size = 2;
+		Unsigned = true;								// unsigned long long int
+	} // if
+
+	if ( checkU( str[last] ) ) {						// suffix 'u' ?
+		Unsigned = true;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
+			size = 1;
+			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
+				size = 2;
 			} // if
 		} // if
-	} // if
-}
-
-DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {
-}
-
-class DesignatorFixer : public Mutator {
-public:
-	virtual Expression* mutate( NameExpr *nameExpr ) {
-		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
-			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
-			delete nameExpr;
-			return new ConstantExpr( val );
-		}
-		return nameExpr;
-	}
-};
-
-Expression *DesignatorNode::build() const {
-	Expression * ret = maybeBuild<Expression>(get_argName());
-
-	if ( isArrayIndex ) {
-		// need to traverse entire structure and change any instances of 0 or 1 to
-		// ConstantExpr
-		DesignatorFixer fixer;
-		ret = ret->acceptMutator( fixer );
-	} // if
-
-	return ret;
-}
-
-void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
-	if ( get_argName() ) {
-		if ( isArrayIndex ) {
-			os << "[";
-			get_argName()->printOneLine( os, indent );
-			os << "]";
+	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
+		size = 1;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'll' ?
+			size = 2;
+			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
 		} else {
-			os << ".";
-			get_argName()->printOneLine( os, indent );
-		}
-	} // if
-}
-
-void DesignatorNode::print( std::ostream &os, int indent ) const {
-	if ( get_argName() ) {
-		if ( isArrayIndex ) {
-			os << "[";
-			get_argName()->print( os, indent );
-			os << "]";
-		} else {
-			os << ".";
-			get_argName()->print( os, indent );
-		}
-	} // if
-}
-
-//##############################################################################
-
-static const char *opName[] = {
-	"TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic
-	// triadic
-	"Cond", "NCond",
+			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
+		} // if
+	} // if
+
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
+} // build_constantInteger
+
+Expression *build_constantFloat( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
+		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
+	};
+
+	bool complx = false;								// real, complex
+	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
+	// floating-point constant has minimum of 2 characters: 1. or .1
+	size_t last = str.length() - 1;
+
+	if ( checkI( str[last] ) ) {						// imaginary ?
+		complx = true;
+		last -= 1;										// backup one character
+	} // if
+
+	if ( checkF( str[last] ) ) {						// float ?
+		size = 0;
+	} else if ( checkD( str[last] ) ) {					// double ?
+		size = 1;
+	} else if ( checkL( str[last] ) ) {					// long double ?
+		size = 2;
+	} // if
+	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
+		complx = true;
+	} // if
+
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
+} // build_constantFloat
+
+Expression *build_constantChar( std::string & str ) {
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
+} // build_constantChar
+
+ConstantExpr *build_constantStr( std::string & str ) {
+	// string should probably be a primitive type
+	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
+				new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
+											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
+								   false, false );
+	return new ConstantExpr( Constant( at, str ) );
+} // build_constantStr
+
+//##############################################################################
+
+NameExpr * build_varref( const string *name, bool labelp ) {
+	return new NameExpr( *name, nullptr );
+}
+
+//##############################################################################
+
+static const char *OperName[] = {
 	// diadic
-	"SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
+	"SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
-	"?[?]", "FieldSel", "PFieldSel", "...",
+	"?[?]", "...",
 	// monadic
 	"+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&"
 };
 
-OperatorNode::OperatorNode( Type t ) : type( t ) {}
-
-OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) {
-}
-
-OperatorNode::~OperatorNode() {}
-
-OperatorNode::Type OperatorNode::get_type( void ) const {
-	return type;
-}
-
-void OperatorNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << opName[ type ] << ' ';
-}
-
-void OperatorNode::print( std::ostream &os, int indent ) const{
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Operator: " << opName[type] << endl;
-	return;
-}
-
-const char *OperatorNode::get_typename( void ) const{
-	return opName[ type ];
-}
-
-//##############################################################################
-
-CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ):
-	function( f ), arguments( args ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):
-	function( f ), arguments( arg1 ) {
-	arguments->set_link( arg2 );
-}
-
-CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
-	ParseNode *cur = other.arguments;
-	while ( cur ) {
-		if ( arguments ) {
-			arguments->set_link( cur->clone() );
-		} else {
-			arguments = ( ExpressionNode*)cur->clone();
-		} // if
-		cur = cur->get_link();
-	}
-}
-
-CompositeExprNode::~CompositeExprNode() {
-	delete function;
-	delete arguments;
-}
-
-
-Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
-	DeclarationNode *decl_node = arg->get_decl();
-
+//##############################################################################
+
+Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
 	Type *targetType = decl_node->buildType();
-	if ( dynamic_cast< VoidType* >( targetType ) ) {
+	if ( dynamic_cast< VoidType * >( targetType ) ) {
 		delete targetType;
 		return new CastExpr( maybeBuild<Expression>(expr_node) );
@@ -324,18 +196,14 @@
 }
 
-Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
-	NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
-	assert( memberExpr );
-	UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), maybeBuild<Expression>(expr_node) );
+Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild<Expression>(expr_node) );
 	delete member;
 	return ret;
 }
 
-Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
-	NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
-	assert( memberExpr );
+Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
 	UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
 	deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
-	UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), deref );
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
 	delete member;
 	return ret;
@@ -345,22 +213,18 @@
 		return new AddressExpr( maybeBuild<Expression>(expr_node) );
 }
-Expression *build_sizeOf( ExpressionNode *expr_node ) {
-	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
-		return new SizeofExpr( arg->get_decl()->buildType() );
-	} else {
-		return new SizeofExpr( maybeBuild<Expression>(expr_node) );
-	} // if
-}
-Expression *build_alignOf( ExpressionNode *expr_node ) {
-	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
-		return new AlignofExpr( arg->get_decl()->buildType() );
-	} else {
-		return new AlignofExpr( maybeBuild<Expression>(expr_node) );
-	} // if
-}
-Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member ) {
-	NameExpr *memberExpr = dynamic_cast<NameExpr *>( maybeBuild<Expression>( member ) );
-	assert( memberExpr );
-	return new UntypedOffsetofExpr( arg->get_decl()->buildType(), memberExpr->get_name() );
+Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
+	return new SizeofExpr( maybeBuild<Expression>(expr_node) );
+}
+Expression *build_sizeOftype( DeclarationNode *decl_node ) {
+	return new SizeofExpr( decl_node->buildType() );
+}
+Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
+	return new AlignofExpr( maybeBuild<Expression>(expr_node) );
+}
+Expression *build_alignOftype( DeclarationNode *decl_node ) {
+	return new AlignofExpr( decl_node->buildType() );
+}
+Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
+	return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
 }
 
@@ -369,14 +233,25 @@
 }
 
-Expression *build_opr1( OperatorNode::Type op, ExpressionNode *expr_node ) {
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
+	std::list<Expression *> args;
+	args.push_back( maybeBuild<Expression>(expr_node) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
 	std::list<Expression *> args;
 	args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node) ) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
-}
-Expression *build_opr2( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
 	std::list<Expression *> args;
 	args.push_back( maybeBuild<Expression>(expr_node1) );
 	args.push_back( maybeBuild<Expression>(expr_node2) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	std::list<Expression *> args;
+	args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node1) ) );
+	args.push_back( maybeBuild<Expression>(expr_node2) );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
 }
 
@@ -389,156 +264,34 @@
 }
 
-CompositeExprNode2::CompositeExprNode2( Expression *expr ) : expr( expr ) {}
-CompositeExprNode2::CompositeExprNode2( const CompositeExprNode2 &other ) : expr( other.expr->clone() ) {}
-CompositeExprNode2::~CompositeExprNode2() { delete expr; }
-void CompositeExprNode2::print( std::ostream &, int indent ) const { assert( false ); }
-void CompositeExprNode2::printOneLine( std::ostream &, int indent ) const { assert( false ); }
-
-
-Expression *CompositeExprNode::build() const {
-	OperatorNode *op;
-	std::list<Expression *> args;
-
-	buildList( get_args(), args );
-
-	if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
-		return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
-	} // if
-
-	switch ( op->get_type() ) {
-	  case OperatorNode::Assign:
-	  case OperatorNode::MulAssn:
-	  case OperatorNode::DivAssn:
-	  case OperatorNode::ModAssn:
-	  case OperatorNode::PlusAssn:
-	  case OperatorNode::MinusAssn:
-	  case OperatorNode::LSAssn:
-	  case OperatorNode::RSAssn:
-	  case OperatorNode::AndAssn:
-	  case OperatorNode::ERAssn:
-	  case OperatorNode::OrAssn:
-		assert( ! args.empty() );
-		args.front() = new AddressExpr( args.front() );
-	  case OperatorNode::UnPlus:
-	  case OperatorNode::UnMinus:
-	  case OperatorNode::PointTo:
-	  case OperatorNode::Neg:
-	  case OperatorNode::BitNeg:
-	  case OperatorNode::LabelAddress:
-		return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
-
-	  case OperatorNode::Attr:
-		{
-			VarRefNode *var = dynamic_cast<VarRefNode *>( get_args() );
-			assert( var );
-			if ( ! get_args()->get_link() ) {
-				return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0);
-			} else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link() ) ) {
-				return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType() );
-			} else {
-				return new AttrExpr( maybeBuild<Expression>(var), args.back() );
-			} // if
-		}
-	  case OperatorNode::Cond:
-		{
-			assert( args.size() == 3);
-			std::list< Expression * >::const_iterator i = args.begin();
-			Expression *arg1 = notZeroExpr( *i++ );
-			Expression *arg2 = *i++;
-			Expression *arg3 = *i++;
-			return new ConditionalExpr( arg1, arg2, arg3 );
-		}
-	  case OperatorNode::NCond:
-		throw UnimplementedError( "GNU 2-argument conditional expression" );
-		// Tuples
-	  case OperatorNode::TupleC:
-		{
-			TupleExpr *ret = new TupleExpr();
-			std::copy( args.begin(), args.end(), back_inserter( ret->get_exprs() ) );
-			return ret;
-		}
-	  default:
-		assert( ((void)"CompositeExprNode::build", false) );
-		return 0;
-	} // switch
-}
-
-void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	function->printOneLine( os, indent );
-	for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {
-		cur->printOneLine( os, indent );
-	} // for
-	os << ") ";
-}
-
-void CompositeExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Application of: " << endl;
-	function->print( os, indent + ParseNode::indent_by );
-
-	os << string( indent, ' ' ) ;
-	if ( arguments ) {
-		os << "... on arguments: " << endl;
-		arguments->printList( os, indent + ParseNode::indent_by );
-	} else
-		os << "... on no arguments: " << endl;
-}
-
-void CompositeExprNode::set_function( ExpressionNode *f ) {
-	function = f;
-}
-
-void CompositeExprNode::set_args( ExpressionNode *args ) {
-	arguments = args;
-}
-
-ExpressionNode *CompositeExprNode::get_function( void ) const {
-	return function;
-}
-
-ExpressionNode *CompositeExprNode::get_args( void ) const {
-	return arguments;
-}
-
-void CompositeExprNode::add_arg( ExpressionNode *arg ) {
-	if ( arguments )
-		arguments->set_link( arg );
-	else
-		set_args( arg );
-}
-
-//##############################################################################
-
-Expression *AsmExprNode::build() const {
-	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
-}
-
-void AsmExprNode::print( std::ostream &os, int indent ) const {
-	os << string( indent, ' ' ) << "Assembler Expression:" << endl;
-	if ( inout ) {
-		os << string( indent, ' ' ) << "inout: " << std::endl;
-		inout->print( os, indent + 2 );
-	} // if
-	if ( constraint ) {
-		os << string( indent, ' ' ) << "constraint: " << std::endl;
-		constraint->print( os, indent + 2 );
-	} // if
-	if ( operand ) {
-		os << string( indent, ' ' ) << "operand: " << std::endl;
-		operand->print( os, indent + 2 );
-	} // if
-}
-
-void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	if ( inout ) inout->printOneLine( os, indent + 2 );
-	os << ", ";
-	if ( constraint ) constraint->printOneLine( os, indent + 2 );
-	os << ", ";
-	if ( operand ) operand->printOneLine( os, indent + 2 );
-	os << ") ";
+Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
+	return new AttrExpr( var, maybeBuild<Expression>(expr_node) );
+}
+Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
+	return new AttrExpr( var, decl_node->buildType() );
+}
+
+Expression *build_tuple( ExpressionNode * expr_node ) {
+	TupleExpr *ret = new TupleExpr();
+	buildList( expr_node, ret->get_exprs() );
+	return ret;
+}
+
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
+	std::list<Expression *> args;
+
+	buildList( expr_node, args );
+	return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
+}
+
+Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
+	Expression *low_cexpr = maybeBuild<Expression>( low );
+	Expression *high_cexpr = maybeBuild<Expression>( high );
+	return new RangeExpr( low_cexpr, high_cexpr );
+}
+
+//##############################################################################
+
+Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
+	return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
 }
 
@@ -551,137 +304,71 @@
 //##############################################################################
 
-ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
-
-ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
-}
-
-ValofExprNode::~ValofExprNode() {
-	delete body;
-}
-
-void ValofExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
-	get_body()->print( os, indent + 4);
-}
-
-void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
-	assert( false );
-}
-
-Expression *ValofExprNode::build() const {
-	return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
-}
-
-//##############################################################################
-
-ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
-	if ( init_ == 0 )
-		init = 0;
-	else {
-		DeclarationNode *decl;
-		ExpressionNode *exp;
-
-		if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
-			init = new StatementNode( decl );
-		else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
-			init = new StatementNode( StatementNode::Exp, exp );
-		else
-			throw SemanticError("Error in for control expression");
-	}
-}
-
-ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
-	: ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
-}
-
-ForCtlExprNode::~ForCtlExprNode() {
-	delete init;
-	delete condition;
-	delete change;
-}
-
-Expression *ForCtlExprNode::build() const {
-	// this shouldn't be used!
-	assert( false );
-	return 0;
-}
-
-void ForCtlExprNode::print( std::ostream &os, int indent ) const{
-	os << string( indent,' ' ) << "For Control Expression -- :" << endl;
-
-	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-	if ( init != 0 )
-		init->printList( os, indent + 4 );
-
-	os << string( indent + 2, ' ' ) << "condition: " << endl;
-	if ( condition != 0 )
-		condition->print( os, indent + 4 );
-	os << string( indent + 2, ' ' ) << "increment: " << endl;
-	if ( change != 0 )
-		change->print( os, indent + 4 );
-}
-
-void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
-	assert( false );
-}
-
-//##############################################################################
-
-TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
-}
-
-TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
-}
-
-Expression *TypeValueNode::build() const {
+Expression *build_valexpr( StatementNode *s ) {
+	return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
+}
+
+//##############################################################################
+ 
+// ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
+// 	if ( init_ == 0 )
+// 		init = 0;
+// 	else {
+// 		DeclarationNode *decl;
+// 		ExpressionNode *exp;
+
+// 		if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
+// 			init = new StatementNode( decl );
+// 		else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
+// 			init = new StatementNode( StatementNode::Exp, exp );
+// 		else
+// 			throw SemanticError("Error in for control expression");
+// 	}
+// }
+
+// ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
+// 	: ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
+// }
+
+// ForCtlExprNode::~ForCtlExprNode() {
+// 	delete init;
+// 	delete condition;
+// 	delete change;
+// }
+
+// Expression *ForCtlExprNode::build() const {
+// 	// this shouldn't be used!
+// 	assert( false );
+// 	return 0;
+// }
+
+// void ForCtlExprNode::print( std::ostream &os, int indent ) const{
+// 	os << string( indent,' ' ) << "For Control Expression -- :" << endl;
+
+// 	os << string( indent + 2, ' ' ) << "initialization:" << endl;
+// 	if ( init != 0 )
+// 		init->printList( os, indent + 4 );
+
+// 	os << string( indent + 2, ' ' ) << "condition: " << endl;
+// 	if ( condition != 0 )
+// 		condition->print( os, indent + 4 );
+// 	os << string( indent + 2, ' ' ) << "increment: " << endl;
+// 	if ( change != 0 )
+// 		change->print( os, indent + 4 );
+// }
+
+// void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
+// 	assert( false );
+// }
+
+//##############################################################################
+
+Expression *build_typevalue( DeclarationNode *decl ) {
 	return new TypeExpr( decl->buildType() );
 }
 
-void TypeValueNode::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Type:";
-	get_decl()->print( os, indent + 2);
-}
-
-void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
-	os << "Type:";
-	get_decl()->print( os, indent + 2);
-}
-
-
-CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
-CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
-
-CompoundLiteralNode::~CompoundLiteralNode() {
-	delete kids;
-	delete type;
-}
-
-CompoundLiteralNode *CompoundLiteralNode::clone() const {
-	return new CompoundLiteralNode( *this );
-}
-
-void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
-	os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
-
-	os << string( indent + 2, ' ' ) << "type:" << endl;
-	if ( type != 0 )
-		type->print( os, indent + 4 );
-
-	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-	if ( kids != 0 )
-		kids->printList( os, indent + 4 );
-}
-
-void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
-	os << "( ";
-	if ( type ) type->print( os );
-	os << ", ";
-	if ( kids ) kids->printOneLine( os );
-	os << ") ";
-}
-
-Expression *CompoundLiteralNode::build() const {
-	Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
+//##############################################################################
+
+Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
+	Declaration * newDecl = maybeBuild<Declaration>(decl_node); // compound literal type
 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
 		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
@@ -698,29 +385,4 @@
 }
 
-ExpressionNode *flattenCommas( ExpressionNode *list ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
-		OperatorNode *op;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {
-			if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-				composite->add_arg( next );
-			return flattenCommas( composite->get_args() );
-		} // if
-	} // if
-
-	if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-		list->set_next( flattenCommas( next ) );
-
-	return list;
-}
-
-ExpressionNode *tupleContents( ExpressionNode *tuple ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {
-		OperatorNode *op = 0;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )
-			return composite->get_args();
-	} // if
-	return tuple;
-}
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/ParseNode.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,143 +10,10 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul 24 02:17:01 2016
-// Update Count     : 90
+// Last Modified On : Sun Aug  7 23:32:47 2016
+// Update Count     : 94
 // 
 
-#include <climits>
 #include "ParseNode.h"
 using namespace std;
-
-// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
-//
-//		prefix action constant action suffix
-//
-// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
-//
-//		constant BEGIN CONT ...
-//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
-//
-// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
-// type.
-
-static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
-
-static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
-static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
-static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
-static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
-static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
-static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
-
-ConstantNode *makeConstantInteger( std::string & str ) {
-	static const BasicType::Kind kind[2][3] = {
-		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
-		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
-	};
-	bool dec = true, Unsigned = false;					// decimal, unsigned constant
-	int size;											// 0 => int, 1 => long, 2 => long long
-	unsigned long long v;								// converted integral value
-	size_t last = str.length() - 1;						// last character of constant
-
-	if ( str[0] == '0' ) {								// octal/hex constant ?
-		dec = false;
-		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
-			sscanf( (char *)str.c_str(), "%llx", &v );
-			//printf( "%llx %llu\n", v, v );
-		} else {										// octal constant
-			sscanf( (char *)str.c_str(), "%llo", &v );
-			//printf( "%llo %llu\n", v, v );
-		} // if
-	} else {											// decimal constant ?
-		sscanf( (char *)str.c_str(), "%llu", &v );
-		//printf( "%llu %llu\n", v, v );
-	} // if
-
-	if ( v <= INT_MAX ) {								// signed int
-		size = 0;
-	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
-		size = 0;
-		Unsigned = true;								// unsigned
-	} else if ( v <= LONG_MAX ) {						// signed long int
-		size = 1;
-	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
-		size = 1;
-		Unsigned = true;								// unsigned long int
-	} else if ( v <= LLONG_MAX ) {						// signed long long int
-		size = 2;
-	} else {											// unsigned long long int
-		size = 2;
-		Unsigned = true;								// unsigned long long int
-	} // if
-
-	if ( checkU( str[last] ) ) {						// suffix 'u' ?
-		Unsigned = true;
-		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
-			size = 1;
-			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
-				size = 2;
-			} // if
-		} // if
-	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
-		size = 1;
-		if ( last > 0 && checkL( str[last - 1] ) ) { // suffix 'll' ?
-			size = 2;
-			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
-				Unsigned = true;
-			} // if
-		} else {
-			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
-				Unsigned = true;
-			} // if
-		} // if
-	} // if
-
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ), nullptr ) );
-} // makeConstantInteger
-
-ConstantNode *makeConstantFloat( std::string & str ) {
-	static const BasicType::Kind kind[2][3] = {
-		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
-		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
-	};
-
-	bool complx = false;								// real, complex
-	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
-	// floating-point constant has minimum of 2 characters: 1. or .1
-	size_t last = str.length() - 1;
-
-	if ( checkI( str[last] ) ) {						// imaginary ?
-		complx = true;
-		last -= 1;										// backup one character
-	} // if
-
-	if ( checkF( str[last] ) ) {						// float ?
-		size = 0;
-	} else if ( checkD( str[last] ) ) {					// double ?
-		size = 1;
-	} else if ( checkL( str[last] ) ) {					// long double ?
-		size = 2;
-	} // if
-	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
-		complx = true;
-	} // if
-
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ), nullptr ) );
-} // makeConstantFloat
-
-ConstantNode *makeConstantChar( std::string & str ) {
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ), nullptr ) );
-} // makeConstantChar
-
-ConstantNode *makeConstantStr( std::string & str ) {
-	// string should probably be a primitive type
-	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
-								   new ConstantExpr(
-									   Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
-												 toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
-								   false, false );
-	return new ConstantNode( new ConstantExpr( Constant( at, str ), nullptr ) );
-} // makeConstantStr
-
 
 // Builder
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/ParseNode.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 07:49:32 2016
-// Update Count     : 288
+// Last Modified On : Wed Aug 10 13:08:46 2016
+// Update Count     : 436
 //
 
@@ -26,14 +26,13 @@
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
+#include "SynTree/Statement.h"
 //#include "SynTree/Declaration.h"
 #include "Common/UniqueName.h"
 #include "SynTree/Label.h"
 
-class ExpressionNode;
-class CompositeExprNode;
-class CommaExprNode;
 class StatementNode;
 class CompoundStmtNode;
 class DeclarationNode;
+class ExpressionNode;
 class InitializerNode;
 
@@ -56,8 +55,8 @@
 	void set_name( const std::string &newValue ) { name = newValue; }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printList( std::ostream &, int indent = 0 ) const;
-
-	ParseNode &operator,( ParseNode &);
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printList( std::ostream &os, int indent = 0 ) const;
+
+	ParseNode &operator,( ParseNode & );
   protected:
 	std::string name;
@@ -68,30 +67,55 @@
 ParseNode *mkList( ParseNode & );
 
+//##############################################################################
+
+class InitializerNode : public ParseNode {
+  public:
+	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
+	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
+	~InitializerNode();
+
+	ExpressionNode *get_expression() const { return expr; }
+
+	InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
+	ExpressionNode *get_designators() const { return designator; }
+
+	InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
+	bool get_maybeConstructed() const { return maybeConstructed; }
+
+	InitializerNode *next_init() const { return kids; }
+
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream & ) const;
+
+	virtual Initializer *build() const;
+  private:
+	ExpressionNode *expr;
+	bool aggregate;
+	ExpressionNode *designator; // may be list
+	InitializerNode *kids;
+	bool maybeConstructed;
+};
+
+//##############################################################################
+
 class ExpressionNode : public ParseNode {
   public:
-	ExpressionNode();
-	ExpressionNode( const std::string * );
+	ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
+	ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
 	ExpressionNode( const ExpressionNode &other );
-	virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
-
-	virtual ExpressionNode *clone() const = 0;
-
-	// virtual CommaExprNode *add_to_list( ExpressionNode * );
-
-	ExpressionNode *get_argName() const { return argName; }
-	ExpressionNode *set_argName( const std::string *aName );
-	ExpressionNode *set_argName( ExpressionNode *aDesignator );
+	virtual ~ExpressionNode() {}
+
+	virtual ExpressionNode *clone() const { return 0; }
+
 	bool get_extension() const { return extension; }
 	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
-	virtual void print( std::ostream &, int indent = 0) const = 0;
-	virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
-
-	virtual Expression *build() const = 0;
-  protected:
-	void printDesignation ( std::ostream &, int indent = 0) const;
-  private:
-	ExpressionNode *argName = 0;
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+	virtual Expression *build() const { return expr; }
+  private:
 	bool extension = false;
+	Expression *expr;
 };
 
@@ -109,254 +133,84 @@
 };
 
-// NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
-class NullExprNode : public ExpressionNode {
-  public:
-	NullExprNode();
-
-	virtual NullExprNode *clone() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	virtual Expression *build() const;
-};
-
-class ConstantNode : public ExpressionNode {
-  public:
-	enum Type { Integer, Float, Character, String };
-
-	ConstantNode( ConstantExpr * );
-	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
-	~ConstantNode() { delete expr; }
-
-	virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	ConstantNode *appendstr( const std::string *newValue );
-
-	Expression *build() const;
-  private:
-	ConstantExpr *expr;
-};
-
-ConstantNode *makeConstantInteger( std::string & );
-ConstantNode *makeConstantFloat( std::string & );
-ConstantNode *makeConstantChar( std::string & );
-ConstantNode *makeConstantStr( std::string & );
-
-class VarRefNode : public ExpressionNode {
-  public:
-	VarRefNode();
-	VarRefNode( const std::string *, bool isLabel = false );
-	VarRefNode( const VarRefNode &other );
-
-	virtual Expression *build() const ;
-
-	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
-  private:
-	bool isLabel;
-};
-
-class DesignatorNode : public ExpressionNode {
-  public:
-	DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
-	DesignatorNode( const DesignatorNode &other );
-
-	virtual Expression *build() const ;
-	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
-  private:
-	bool isArrayIndex;
-};
-
-class TypeValueNode : public ExpressionNode {
-  public:
-	TypeValueNode( DeclarationNode * );
-	TypeValueNode( const TypeValueNode &other );
-
-	DeclarationNode *get_decl() const { return decl; }
-
-	virtual Expression *build() const ;
-
-	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-  private:
-	DeclarationNode *decl;
-};
-
-class OperatorNode : public ExpressionNode {
-  public:
-	enum Type { TupleC, Comma, TupleFieldSel, // n-adic
-				// triadic
-				Cond, NCond,
-				// diadic
-				SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
-				BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
-				Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
-				Index, FieldSel, PFieldSel, Range,
-				// monadic
-				UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
-				Ctor, Dtor,
-	};
-
-	OperatorNode( Type t );
-	OperatorNode( const OperatorNode &other );
-	virtual ~OperatorNode();
-
-	virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
-
-	Type get_type() const;
-	const char *get_typename() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	virtual Expression *build() const { return 0; }
-  private:
-	Type type;
-};
-
-Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node );
-Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member );
-Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member );
+//##############################################################################
+
+Expression *build_constantInteger( std::string &str );
+Expression *build_constantFloat( std::string &str );
+Expression *build_constantChar( std::string &str );
+ConstantExpr *build_constantStr( std::string &str );
+
+//##############################################################################
+
+NameExpr *build_varref( const std::string *name, bool labelp = false );
+
+//##############################################################################
+
+Expression *build_typevalue( DeclarationNode *decl );
+
+//##############################################################################
+
+enum class OperKinds {
+	// diadic
+	SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
+	BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
+	Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
+	Index, Range,
+	// monadic
+	UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
+	Ctor, Dtor,
+};
+
+Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
+Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
+Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
 Expression *build_addressOf( ExpressionNode *expr_node );
-Expression *build_sizeOf( ExpressionNode *expr_node );
-Expression *build_alignOf( ExpressionNode *expr_node );
-Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member );
+Expression *build_sizeOfexpr( ExpressionNode *expr_node );
+Expression *build_sizeOftype( DeclarationNode *decl_node );
+Expression *build_alignOfexpr( ExpressionNode *expr_node );
+Expression *build_alignOftype( DeclarationNode *decl_node );
+Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
 Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
-Expression *build_opr1( OperatorNode::Type op, ExpressionNode *expr_node );
-Expression *build_opr2( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
-
-class CompositeExprNode2 : public ExpressionNode {
-  public:
-	CompositeExprNode2( Expression *expr );
-	CompositeExprNode2( const CompositeExprNode2 &other );
-	virtual ~CompositeExprNode2();
-
-	virtual CompositeExprNode2 *clone() const { return new CompositeExprNode2( *this ); }
-	virtual Expression *build() const { return expr->clone(); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-  private:
-	Expression *expr;
-};
-
-class CompositeExprNode : public ExpressionNode {
-  public:
-	CompositeExprNode();
-	CompositeExprNode( const std::string * );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
-	CompositeExprNode( const CompositeExprNode &other );
-	virtual ~CompositeExprNode();
-
-	virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	void set_function( ExpressionNode * );
-	void set_args( ExpressionNode * );
-
-	void add_arg( ExpressionNode * );
-
-	ExpressionNode *get_function() const;
-	ExpressionNode *get_args() const;
-  private:
-	ExpressionNode *function;
-	ExpressionNode *arguments;
-};
-
-class AsmExprNode : public ExpressionNode {
-  public:
-	AsmExprNode();
-	AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
-	virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
-
-	virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	ExpressionNode *get_inout() const { return inout; };
-	void set_inout( ExpressionNode *newValue ) { inout = newValue; }
-
-	ConstantNode *get_constraint() const { return constraint; };
-	void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
-
-	ExpressionNode *get_operand() const { return operand; };
-	void set_operand( ExpressionNode *newValue ) { operand = newValue; }
-  private:
-	ExpressionNode *inout;
-	ConstantNode *constraint;
-	ExpressionNode *operand;
-};
+Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
+Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
+Expression *build_tuple( ExpressionNode * expr_node = 0 );
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
+Expression *build_range( ExpressionNode * low, ExpressionNode *high );
+
+//##############################################################################
+
+Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
+
+//##############################################################################
 
 class LabelNode : public ExpressionNode {
   public:
 	virtual Expression *build() const { return NULL; }
-	virtual LabelNode *clone() const { return new LabelNode( *this ); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual LabelNode *clone() const { assert( false ); return new LabelNode( *this ); }
+
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	const std::list< Label > &get_labels() const { return labels; };
-	void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
+	void append_label( std::string * label ) { labels.push_back( *label ); delete label; }
   private:
 	std::list< Label > labels;
 };
 
-class ForCtlExprNode : public ExpressionNode {
-  public:
-	ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError );
-	ForCtlExprNode( const ForCtlExprNode &other );
-	~ForCtlExprNode();
-
-	StatementNode *get_init() const { return init; }
-	ExpressionNode *get_condition() const { return condition; }
-	ExpressionNode *get_change() const { return change; }
-
-	virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
-  private:
-	StatementNode *init;
-	ExpressionNode *condition;
-	ExpressionNode *change;
-};
-
-class ValofExprNode : public ExpressionNode {
-  public:
-	ValofExprNode();
-	ValofExprNode( StatementNode *s = 0 );
-	ValofExprNode( const ValofExprNode &other );
-	~ValofExprNode();
-
-	virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
-
-	StatementNode *get_body() const { return body; }
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
-	Expression *build() const;
-
-  private:
-	StatementNode *body;
-};
+//##############################################################################
+
+Expression *build_valexpr( StatementNode *s );
+
+//##############################################################################
+
+Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
+
+//##############################################################################
 
 class TypeData;
@@ -433,6 +287,6 @@
 
 	DeclarationNode *clone() const;
-	void print( std::ostream &, int indent = 0 ) const;
-	void printList( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printList( std::ostream &os, int indent = 0 ) const;
 
 	Declaration *build() const;
@@ -468,4 +322,8 @@
 }; // DeclarationNode
 
+Type *buildType( TypeData *type );
+
+//##############################################################################
+
 class StatementNode : public ParseNode {
   public:
@@ -487,5 +345,5 @@
 	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
 
-	StatementNode *set_block( StatementNode *b ) {	block = b; return this; }
+	StatementNode *set_block( StatementNode *b ) { block = b; return this; }
 	StatementNode *get_block() const { return block; }
 
@@ -495,6 +353,6 @@
 	StatementNode::Type get_type() const { return type; }
 
-	StatementNode *add_label( const std::string * );
-	const std::list<std::string> &get_labels() const { return labels; }
+	virtual StatementNode *add_label( const std::string * );
+	virtual std::list<std::string> get_labels() const { return labels; }
 
 	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
@@ -507,5 +365,5 @@
 	StatementNode *append_last_case( StatementNode * );
 
-	void print( std::ostream &, int indent = 0) const;
+	void print( std::ostream &os, int indent = 0) const;
 	virtual StatementNode *clone() const;
 	virtual Statement *build() const;
@@ -521,4 +379,43 @@
 }; // StatementNode
 
+class StatementNode2 : public StatementNode {
+  public:
+	StatementNode2() {}
+	StatementNode2( Statement *stmt ) : stmt( stmt ) {}
+	virtual ~StatementNode2() {}
+
+	virtual StatementNode2 *clone() const { assert( false ); return nullptr; }
+	virtual Statement *build() const { return stmt; }
+
+	virtual StatementNode2 *add_label( const std::string * name ) {
+		stmt->get_labels().emplace_back( *name );
+		return this;
+	}
+	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
+
+	virtual void print( std::ostream &os, int indent = 0 ) {}
+	virtual void printList( std::ostream &os, int indent = 0 ) {}
+  private:
+	Statement *stmt;
+}; // StatementNode
+
+struct ForCtl {
+	ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
+		init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
+	ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
+		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
+
+	StatementNode *init;
+	ExpressionNode *condition;
+	ExpressionNode *change;
+};
+
+Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
+Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
+Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
+Statement *build_for( ForCtl *forctl, StatementNode *stmt );
+
+//##############################################################################
+
 class CompoundStmtNode : public StatementNode {
   public:
@@ -530,5 +427,5 @@
 	void add_statement( StatementNode * );
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	virtual Statement *build() const;
   private:
@@ -536,72 +433,25 @@
 };
 
+//##############################################################################
+
 class AsmStmtNode : public StatementNode {
   public:
-	AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
+	AsmStmtNode( Type, bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
 	~AsmStmtNode();
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	Statement *build() const;
   private:
 	bool voltile;
-	ConstantNode *instruction;
+	ConstantExpr *instruction;
 	ExpressionNode *output, *input;
-	ConstantNode *clobber;
+	ExpressionNode *clobber;
 	std::list< Label > gotolabels;
 };
 
-class InitializerNode : public ParseNode {
-  public:
-	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
-	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
-	~InitializerNode();
-
-	ExpressionNode *get_expression() const { return expr; }
-
-	InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
-	ExpressionNode *get_designators() const { return designator; }
-
-	InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
-	bool get_maybeConstructed() const { return maybeConstructed; }
-
-	InitializerNode *next_init() const { return kids; }
-
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream & ) const;
-
-	virtual Initializer *build() const;
-  private:
-	ExpressionNode *expr;
-	bool aggregate;
-	ExpressionNode *designator; // may be list
-	InitializerNode *kids;
-	bool maybeConstructed;
-};
-
-class CompoundLiteralNode : public ExpressionNode {
-  public:
-	CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
-	CompoundLiteralNode( const CompoundLiteralNode &type );
-	~CompoundLiteralNode();
-
-	virtual CompoundLiteralNode *clone() const;
-
-	DeclarationNode *get_type() const { return type; }
-	CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
-
-	InitializerNode *get_initializer() const { return kids; }
-	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
-
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
-
-	virtual Expression *build() const;
-  private:
-	DeclarationNode *type;
-	InitializerNode *kids;
-};
+//##############################################################################
 
 template< typename SynTreeType, typename NodeType >
-void buildList( const NodeType *firstNode, std::list< SynTreeType *> &outputList ) {
+void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
 	SemanticError errors;
 	std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
@@ -631,8 +481,4 @@
 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
 
-// in ExpressionNode.cc
-ExpressionNode *flattenCommas( ExpressionNode *list );
-ExpressionNode *tupleContents( ExpressionNode *tuple );
-
 #endif // PARSENODE_H
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/StatementNode.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:21:02 2016
-// Update Count     : 133
+// Last Modified On : Wed Aug 10 13:54:21 2016
+// Update Count     : 170
 //
 
@@ -106,10 +106,4 @@
 	return this;
 }
-
-// StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
-// 	if ( control && e )
-// 		control->add_to_list( e ); // xxx - check this
-// 	return this;
-// }
 
 StatementNode *StatementNode::append_block( StatementNode *stmt ) {
@@ -176,5 +170,5 @@
 		} // if
 		if ( block ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
+			os << string( indent + ParseNode::indent_by, ' ' ) << "Cases: " << endl;
 			block->printList( os, indent + 2 * ParseNode::indent_by );
 		} // if
@@ -212,50 +206,55 @@
 		}
 	  case If:
-		{
-			Statement *thenb = 0, *elseb = 0;
-			assert( branches.size() >= 1 );
-
-			thenb = branches.front();
-			branches.pop_front();
-			if ( ! branches.empty() ) {
-				elseb = branches.front();
-				branches.pop_front();
-			} // if
-			return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
-		}
-	  case While:
-		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
-	  case Do:
-		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
-	  case For:
-		{
-			assert( branches.size() == 1 );
-
-			ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
-			assert( ctl != 0 );
-
-			std::list<Statement *> init;
-			if ( ctl->get_init() != 0 ) {
-				buildList( ctl->get_init(), init );
-			} // if
-
-			Expression *cond = 0;
-			if ( ctl->get_condition() != 0 )
-				cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
-
-			Expression *incr = 0;
-			if ( ctl->get_change() != 0 )
-				incr = maybeBuild<Expression>(ctl->get_change());
-
-			return new ForStmt( labs, init, cond, incr, branches.front() );
-		}
+		// {
+		// 	Statement *thenb = 0, *elseb = 0;
+		// 	assert( branches.size() >= 1 );
+
+		// 	thenb = branches.front();
+		// 	branches.pop_front();
+		// 	if ( ! branches.empty() ) {
+		// 		elseb = branches.front();
+		// 		branches.pop_front();
+		// 	} // if
+		// 	return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
+		// }
+		assert( false );
 	  case Switch:
-		return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		//return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		assert( false );
 	  case Case:
-		return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		return new CaseStmt( labs, maybeBuild<Expression>(get_control() ), branches );
 	  case Default:
 		return new CaseStmt( labs, 0, branches, true );
+	  case While:
+		// assert( branches.size() == 1 );
+		// return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
+		assert( false );
+	  case Do:
+		// assert( branches.size() == 1 );
+		// return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
+		assert( false );
+	  case For:
+	  	// {
+	  	// 	assert( branches.size() == 1 );
+
+	  	// 	ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
+	  	// 	assert( ctl != 0 );
+
+	  	// 	std::list<Statement *> init;
+	  	// 	if ( ctl->get_init() != 0 ) {
+	  	// 		buildList( ctl->get_init(), init );
+	  	// 	} // if
+
+	  	// 	Expression *cond = 0;
+	  	// 	if ( ctl->get_condition() != 0 )
+	  	// 		cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
+
+	  	// 	Expression *incr = 0;
+	  	// 	if ( ctl->get_change() != 0 )
+	  	// 		incr = maybeBuild<Expression>(ctl->get_change());
+
+	  	// 	return new ForStmt( labs, init, cond, incr, branches.front() );
+	  	// }
+		assert( false );
 	  case Goto:
 		{
@@ -311,4 +310,56 @@
 }
 
+Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
+	Statement *thenb, *elseb = 0;
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( then_stmt, branches );
+	assert( branches.size() >= 1 );
+	thenb = branches.front();
+
+	if ( else_stmt ) {
+		std::list<Statement *> branches;
+		buildList<Statement, StatementNode>( else_stmt, branches );
+		assert( branches.size() >= 1 );
+		elseb = branches.front();
+	} // if
+	return new IfStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), thenb, elseb );
+}
+
+Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() >= 1 );
+	return new SwitchStmt( noLabels, maybeBuild<Expression>(ctl), branches );
+}
+
+Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() == 1 );
+	return new WhileStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), branches.front(), kind );
+}
+
+Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list<Statement *> init;
+	if ( forctl->init != 0 ) {
+		buildList( forctl->init, init );
+	} // if
+
+	Expression *cond = 0;
+	if ( forctl->condition != 0 )
+		cond = notZeroExpr( maybeBuild<Expression>(forctl->condition) );
+
+	Expression *incr = 0;
+	if ( forctl->change != 0 )
+		incr = maybeBuild<Expression>(forctl->change);
+
+	delete forctl;
+	return new ForStmt( noLabels, init, cond, incr, branches.front() );
+}
+
 
 CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
@@ -356,5 +407,5 @@
 
 
-AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :
+AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) :
 	StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
 	if ( gotolabels ) {
@@ -365,5 +416,5 @@
 
 AsmStmtNode::~AsmStmtNode() {
-	delete instruction; delete output; delete input; delete clobber;
+	delete output; delete input; delete clobber;
 }
 
@@ -373,5 +424,5 @@
 	if ( instruction ) {
 		os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
-		instruction->printList( os, indent + 2 * ParseNode::indent_by );
+//		instruction->printList( os, indent + 2 * ParseNode::indent_by );
 	} // if
 	if ( output ) {
@@ -385,5 +436,5 @@
 	if ( clobber ) {
 		os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
-		clobber->printList( os, indent + 2 * ParseNode::indent_by );
+//		clobber->printList( os, indent + 2 * ParseNode::indent_by );
 	} // if
 	if ( ! gotolabels.empty() ) {
@@ -414,5 +465,5 @@
 	buildList( clobber, clob );
 	std::list< Label > gotolabs = gotolabels;
-	return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );
+	return new AsmStmt( labs, voltile, instruction, out, in, clob, gotolabs );
 }
 
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/TypeData.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 13 18:03:29 2016
-// Update Count     : 56
+// Last Modified On : Sun Aug  7 07:51:48 2016
+// Update Count     : 58
 //
 
@@ -182,5 +182,6 @@
 		break;
 	  case Array:
-		newtype->array->dimension = maybeClone( array->dimension );
+//PAB		newtype->array->dimension = maybeClone( array->dimension );
+		newtype->array->dimension = array->dimension;
 		newtype->array->isVarLen = array->isVarLen;
 		newtype->array->isStatic = array->isStatic;
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/parser.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -89,7 +89,12 @@
 TypedefTable typedefTable;
 
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
+
 
 /* Line 268 of yacc.c  */
-#line 94 "Parser/parser.cc"
+#line 99 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -342,5 +347,5 @@
 
 /* Line 293 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -351,8 +356,9 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 
@@ -360,5 +366,5 @@
 
 /* Line 293 of yacc.c  */
-#line 363 "Parser/parser.cc"
+#line 369 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -372,5 +378,5 @@
 
 /* Line 343 of yacc.c  */
-#line 375 "Parser/parser.cc"
+#line 381 "Parser/parser.cc"
 
 #ifdef short
@@ -589,7 +595,7 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  252
+#define YYFINAL  251
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12080
+#define YYLAST   10816
 
 /* YYNTOKENS -- Number of terminals.  */
@@ -598,7 +604,7 @@
 #define YYNNTS  241
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  755
+#define YYNRULES  750
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1579
+#define YYNSTATES  1554
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -615,14 +621,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   122,     2,     2,     2,   125,   119,     2,
-     109,   110,   118,   120,   116,   121,   113,   124,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
-     126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   121,     2,     2,     2,   124,   118,     2,
+     109,   110,   117,   119,   116,   120,   113,   123,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   130,   132,
+     125,   131,   126,   129,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
+       2,   111,     2,   112,   127,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
+       2,     2,     2,   114,   128,   115,   122,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -659,77 +665,77 @@
       17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
       38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
-      87,    90,    98,   103,   105,   109,   110,   112,   116,   124,
-     134,   136,   140,   142,   146,   154,   158,   166,   168,   170,
-     172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
-     209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
-     236,   238,   243,   248,   250,   254,   258,   262,   264,   268,
-     272,   274,   278,   282,   284,   288,   292,   296,   300,   302,
-     306,   310,   312,   316,   318,   322,   324,   328,   330,   334,
-     336,   340,   342,   348,   353,   359,   361,   363,   367,   371,
-     374,   375,   377,   380,   386,   393,   401,   403,   407,   409,
-     411,   413,   415,   417,   419,   421,   423,   425,   427,   429,
-     433,   434,   436,   438,   440,   442,   444,   446,   448,   450,
-     452,   459,   464,   467,   475,   477,   481,   483,   486,   488,
-     491,   493,   496,   499,   505,   513,   519,   529,   535,   545,
-     547,   551,   553,   555,   559,   563,   566,   568,   571,   574,
-     575,   577,   580,   584,   585,   587,   590,   594,   598,   603,
-     604,   606,   608,   611,   617,   625,   632,   639,   644,   648,
-     653,   656,   660,   663,   667,   671,   675,   679,   685,   689,
-     693,   698,   700,   706,   713,   719,   726,   736,   747,   757,
-     768,   771,   773,   776,   779,   782,   784,   791,   800,   811,
-     824,   839,   840,   842,   843,   845,   847,   851,   856,   864,
-     865,   867,   871,   873,   877,   879,   881,   883,   887,   889,
-     891,   893,   897,   898,   900,   904,   909,   911,   915,   917,
-     919,   923,   927,   931,   935,   939,   942,   946,   953,   957,
-     961,   966,   968,   971,   974,   978,   984,   993,  1001,  1009,
-    1015,  1025,  1028,  1031,  1037,  1041,  1047,  1052,  1056,  1061,
-    1066,  1074,  1078,  1082,  1086,  1090,  1095,  1102,  1104,  1106,
-    1108,  1110,  1112,  1114,  1116,  1118,  1119,  1121,  1123,  1126,
-    1128,  1130,  1132,  1134,  1136,  1138,  1140,  1141,  1147,  1149,
-    1152,  1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,
-    1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,
-    1195,  1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,
-    1221,  1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,
-    1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,
-    1286,  1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,
-    1318,  1326,  1329,  1332,  1335,  1336,  1339,  1342,  1346,  1349,
-    1353,  1355,  1358,  1362,  1365,  1368,  1373,  1374,  1376,  1379,
-    1382,  1384,  1385,  1387,  1390,  1393,  1399,  1402,  1403,  1411,
-    1414,  1419,  1420,  1423,  1424,  1426,  1428,  1430,  1436,  1442,
-    1448,  1450,  1456,  1462,  1472,  1474,  1480,  1481,  1483,  1485,
-    1491,  1493,  1495,  1501,  1507,  1509,  1513,  1517,  1522,  1524,
-    1526,  1528,  1530,  1533,  1535,  1539,  1543,  1545,  1548,  1550,
-    1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,  1572,
-    1574,  1576,  1579,  1581,  1583,  1585,  1588,  1589,  1592,  1595,
-    1597,  1602,  1603,  1605,  1608,  1612,  1617,  1620,  1623,  1625,
-    1628,  1630,  1633,  1639,  1645,  1653,  1660,  1662,  1665,  1668,
-    1672,  1674,  1677,  1680,  1685,  1688,  1693,  1694,  1699,  1702,
-    1704,  1706,  1708,  1709,  1712,  1718,  1724,  1738,  1740,  1742,
-    1746,  1750,  1753,  1757,  1761,  1764,  1769,  1771,  1778,  1788,
-    1789,  1801,  1803,  1807,  1811,  1815,  1817,  1819,  1825,  1828,
-    1834,  1835,  1837,  1839,  1843,  1844,  1846,  1848,  1850,  1852,
-    1853,  1860,  1863,  1865,  1868,  1873,  1876,  1880,  1884,  1888,
-    1893,  1899,  1905,  1911,  1918,  1920,  1922,  1924,  1928,  1929,
-    1935,  1936,  1938,  1940,  1943,  1950,  1952,  1956,  1957,  1959,
-    1964,  1966,  1968,  1970,  1972,  1975,  1977,  1980,  1983,  1985,
-    1989,  1992,  1996,  2000,  2003,  2008,  2013,  2017,  2026,  2030,
-    2033,  2035,  2038,  2045,  2054,  2058,  2061,  2065,  2069,  2074,
-    2079,  2083,  2085,  2087,  2089,  2094,  2101,  2105,  2108,  2112,
-    2116,  2121,  2126,  2130,  2133,  2135,  2138,  2141,  2143,  2147,
-    2150,  2154,  2158,  2161,  2166,  2171,  2175,  2182,  2191,  2195,
-    2198,  2200,  2203,  2206,  2209,  2213,  2217,  2220,  2225,  2230,
-    2234,  2241,  2250,  2254,  2257,  2259,  2262,  2265,  2267,  2269,
-    2272,  2276,  2280,  2283,  2288,  2295,  2304,  2306,  2309,  2312,
-    2314,  2317,  2320,  2324,  2328,  2330,  2335,  2340,  2344,  2350,
-    2359,  2363,  2366,  2370,  2372,  2378,  2384,  2391,  2398,  2400,
-    2403,  2406,  2408,  2411,  2414,  2418,  2422,  2424,  2429,  2434,
-    2438,  2444,  2453,  2457,  2459,  2462,  2464,  2467,  2474,  2480,
-    2487,  2495,  2503,  2505,  2508,  2511,  2513,  2516,  2519,  2523,
-    2527,  2529,  2534,  2539,  2543,  2552,  2556,  2558,  2560,  2563,
-    2565,  2567,  2570,  2574,  2577,  2581,  2584,  2588,  2592,  2595,
-    2600,  2604,  2607,  2611,  2614,  2619,  2623,  2626,  2633,  2640,
-    2647,  2655,  2657,  2660,  2662,  2664,  2666,  2669,  2673,  2676,
-    2680,  2683,  2687,  2691,  2696,  2699,  2703,  2708,  2711,  2717,
-    2723,  2730,  2737,  2738,  2740,  2741
+      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
+     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
+     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
+     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
+     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
+     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
+     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
+     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
+     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
+     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
+     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
+     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
+     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
+     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
+     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
+     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
+     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
+     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
+     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
+     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
+     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
+     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
+     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
+     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
+    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
+    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
+    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
+    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
+    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
+    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
+    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
+    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
+    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
+    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
+    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
+    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
+    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
+    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
+    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
+    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
+    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
+    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
+    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
+    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
+    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
+    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
+    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
+    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
+    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
+    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
+    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
+    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
+    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
+    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
+    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
+    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
+    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
+    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
+    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
+    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
+    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
+    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
+    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
+    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
+    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
+    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
+    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
+    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
+    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
+    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
+    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
+    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
+    2713
 };
 
@@ -748,268 +754,265 @@
      109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
      144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
-     164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
-     112,   117,   164,    -1,   111,   134,   164,   116,   167,   135,
-     112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
-     139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
-     146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
-     111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
-     141,    -1,    40,   151,    -1,   149,   151,    -1,   150,   151,
-      -1,    86,   148,    -1,    87,   148,    -1,    37,   148,    -1,
-      37,   109,   275,   110,    -1,    38,   109,   275,   116,   139,
-     110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
-     109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
-     110,    -1,   118,    -1,   119,    -1,    94,    -1,   120,    -1,
-     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   275,
-     110,   151,    -1,   109,   275,   110,   166,    -1,   151,    -1,
-     152,   118,   151,    -1,   152,   124,   151,    -1,   152,   125,
-     151,    -1,   152,    -1,   153,   120,   152,    -1,   153,   121,
-     152,    -1,   153,    -1,   154,    88,   153,    -1,   154,    89,
-     153,    -1,   154,    -1,   155,   126,   154,    -1,   155,   127,
-     154,    -1,   155,    90,   154,    -1,   155,    91,   154,    -1,
-     155,    -1,   156,    92,   155,    -1,   156,    93,   155,    -1,
-     156,    -1,   157,   119,   156,    -1,   157,    -1,   158,   128,
-     157,    -1,   158,    -1,   159,   129,   158,    -1,   159,    -1,
-     160,    94,   159,    -1,   160,    -1,   161,    95,   160,    -1,
-     161,    -1,   161,   130,   169,   117,   162,    -1,   161,   130,
-     117,   162,    -1,   161,   130,   169,   117,   166,    -1,   162,
-      -1,   162,    -1,   148,   131,   164,    -1,   148,   168,   164,
-      -1,   166,   373,    -1,    -1,   164,    -1,   111,   112,    -1,
-     111,   134,   164,   135,   112,    -1,   111,   134,   116,   167,
-     135,   112,    -1,   111,   134,   164,   116,   167,   135,   112,
-      -1,   165,    -1,   167,   116,   165,    -1,    97,    -1,    98,
-      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
-      -1,   104,    -1,   105,    -1,   106,    -1,   164,    -1,   169,
-     116,   164,    -1,    -1,   169,    -1,   172,    -1,   173,    -1,
-     177,    -1,   178,    -1,   190,    -1,   192,    -1,   193,    -1,
-     198,    -1,   128,   143,   114,   144,   115,   132,    -1,    72,
-     117,   312,   171,    -1,   114,   115,    -1,   114,   134,   134,
-     209,   174,   135,   115,    -1,   175,    -1,   174,   134,   175,
-      -1,   212,    -1,    40,   212,    -1,   308,    -1,   171,   135,
-      -1,   171,    -1,   176,   171,    -1,   170,   132,    -1,    41,
-     109,   169,   110,   171,    -1,    41,   109,   169,   110,   171,
-      42,   171,    -1,    43,   109,   169,   110,   183,    -1,    43,
-     109,   169,   110,   114,   134,   205,   184,   115,    -1,    53,
-     109,   169,   110,   183,    -1,    53,   109,   169,   110,   114,
-     134,   205,   186,   115,    -1,   163,    -1,   163,    96,   163,
-      -1,   310,    -1,   179,    -1,   180,   116,   179,    -1,    44,
-     180,   117,    -1,    45,   117,    -1,   181,    -1,   182,   181,
-      -1,   182,   171,    -1,    -1,   185,    -1,   182,   176,    -1,
-     185,   182,   176,    -1,    -1,   187,    -1,   182,   189,    -1,
-     182,   176,   188,    -1,   187,   182,   189,    -1,   187,   182,
-     176,   188,    -1,    -1,   189,    -1,    56,    -1,    56,   132,
-      -1,    47,   109,   169,   110,   171,    -1,    46,   171,    47,
-     109,   169,   110,   132,    -1,    48,   109,   134,   191,   110,
-     171,    -1,   170,   135,   132,   170,   132,   170,    -1,   212,
-     170,   132,   170,    -1,    51,    72,   132,    -1,    51,   118,
-     169,   132,    -1,    50,   132,    -1,    50,    72,   132,    -1,
-      49,   132,    -1,    49,    72,   132,    -1,    52,   170,   132,
-      -1,    61,   165,   132,    -1,    62,   165,   132,    -1,    62,
-     165,    63,   164,   132,    -1,    57,   173,   194,    -1,    57,
-     173,   196,    -1,    57,   173,   194,   196,    -1,   195,    -1,
-      58,   109,    96,   110,   173,    -1,   195,    58,   109,    96,
-     110,   173,    -1,    59,   109,    96,   110,   173,    -1,   195,
-      59,   109,    96,   110,   173,    -1,    58,   109,   134,   134,
-     197,   135,   110,   173,   135,    -1,   195,    58,   109,   134,
-     134,   197,   135,   110,   173,   135,    -1,    59,   109,   134,
-     134,   197,   135,   110,   173,   135,    -1,   195,    59,   109,
-     134,   134,   197,   135,   110,   173,   135,    -1,    60,   173,
-      -1,   225,    -1,   225,   309,    -1,   225,   357,    -1,   366,
-     139,    -1,   366,    -1,    64,   199,   109,   141,   110,   132,
-      -1,    64,   199,   109,   141,   117,   200,   110,   132,    -1,
-      64,   199,   109,   141,   117,   200,   117,   200,   110,   132,
-      -1,    64,   199,   109,   141,   117,   200,   117,   200,   117,
-     203,   110,   132,    -1,    64,   199,    51,   109,   141,   117,
-     117,   200,   117,   203,   117,   204,   110,   132,    -1,    -1,
-      11,    -1,    -1,   201,    -1,   202,    -1,   201,   116,   202,
-      -1,   141,   109,   163,   110,    -1,   111,   163,   112,   141,
-     109,   163,   110,    -1,    -1,   141,    -1,   203,   116,   141,
-      -1,   139,    -1,   204,   116,   139,    -1,   135,    -1,   206,
-      -1,   212,    -1,   206,   134,   212,    -1,   135,    -1,   208,
-      -1,   222,    -1,   208,   134,   222,    -1,    -1,   210,    -1,
-      29,   211,   132,    -1,   210,    29,   211,   132,    -1,   274,
-      -1,   211,   116,   274,    -1,   213,    -1,   222,    -1,   214,
-     135,   132,    -1,   219,   135,   132,    -1,   216,   135,   132,
-      -1,   293,   135,   132,    -1,   296,   135,   132,    -1,   215,
-     277,    -1,   231,   215,   277,    -1,   214,   135,   116,   134,
-     272,   277,    -1,   367,   272,   311,    -1,   370,   272,   311,
-      -1,   227,   370,   272,   311,    -1,   217,    -1,   227,   217,
-      -1,   231,   217,    -1,   231,   227,   217,    -1,   216,   135,
-     116,   134,   272,    -1,   111,   112,   272,   109,   134,   260,
-     135,   110,    -1,   370,   272,   109,   134,   260,   135,   110,
-      -1,   218,   272,   109,   134,   260,   135,   110,    -1,   111,
-     134,   262,   135,   112,    -1,   111,   134,   262,   135,   116,
-     134,   263,   135,   112,    -1,     3,   215,    -1,     3,   217,
-      -1,   219,   135,   116,   134,   139,    -1,     3,   225,   309,
-      -1,   220,   135,   116,   134,   309,    -1,   227,     3,   225,
-     309,    -1,   225,     3,   309,    -1,   225,     3,   227,   309,
-      -1,     3,   139,   131,   164,    -1,   221,   135,   116,   134,
-     139,   131,   164,    -1,   223,   135,   132,    -1,   220,   135,
-     132,    -1,   221,   135,   132,    -1,   240,   135,   132,    -1,
-     224,   309,   311,   277,    -1,   223,   116,   312,   309,   311,
-     277,    -1,   236,    -1,   240,    -1,   242,    -1,   283,    -1,
-     237,    -1,   241,    -1,   243,    -1,   284,    -1,    -1,   227,
-      -1,   228,    -1,   227,   228,    -1,   229,    -1,   314,    -1,
-      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
-      -1,    13,   109,   230,   286,   110,    -1,   232,    -1,   227,
-     232,    -1,   231,   227,   232,    -1,   233,    -1,   232,   233,
-      -1,   234,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
-      -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
-      -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
-      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
-      -1,    27,    -1,    24,    -1,   237,    -1,   231,   237,    -1,
-     236,   233,    -1,   236,   233,   227,    -1,   236,   233,   237,
-      -1,   238,    -1,   226,   239,   226,    -1,   235,    -1,   227,
-     235,    -1,   238,   228,    -1,   238,   235,    -1,    28,   109,
-     276,   110,    -1,    28,   109,   169,   110,    -1,    78,   109,
-     276,   110,    -1,    78,   109,   169,   110,    -1,   241,    -1,
-     231,   241,    -1,   240,   233,    -1,   240,   233,   227,    -1,
-     244,    -1,   227,   244,    -1,   241,   228,    -1,   243,    -1,
-     231,   243,    -1,   242,   233,    -1,   242,   233,   227,    -1,
-      74,    -1,   227,    74,    -1,   243,   228,    -1,   245,    -1,
-     256,    -1,   247,   114,   248,   115,    -1,   247,   274,    -1,
-      -1,   247,   274,   246,   114,   248,   115,    -1,   247,   109,
-     292,   110,   114,   248,   115,    -1,   247,   285,    -1,    31,
-     312,    -1,    32,   312,    -1,    -1,   248,   249,    -1,   250,
-     132,    -1,    40,   250,   132,    -1,   251,   132,    -1,    40,
-     251,   132,    -1,   366,    -1,   366,   274,    -1,   250,   116,
-     274,    -1,   250,   116,    -1,   225,   252,    -1,   251,   116,
-     312,   252,    -1,    -1,   254,    -1,   318,   253,    -1,   331,
-     253,    -1,   357,    -1,    -1,   254,    -1,   117,   163,    -1,
-      30,   312,    -1,   255,   114,   258,   372,   115,    -1,   255,
-     274,    -1,    -1,   255,   274,   257,   114,   258,   372,   115,
-      -1,   274,   259,    -1,   258,   116,   274,   259,    -1,    -1,
-     131,   163,    -1,    -1,   261,    -1,   263,    -1,   262,    -1,
-     262,   135,   116,   134,   263,    -1,   263,   135,   116,   134,
-      96,    -1,   262,   135,   116,   134,    96,    -1,   267,    -1,
-     263,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
-     267,    -1,   262,   135,   116,   134,   263,   135,   116,   134,
-     267,    -1,   268,    -1,   263,   135,   116,   134,   268,    -1,
-      -1,   265,    -1,   266,    -1,   266,   135,   116,   134,    96,
-      -1,   270,    -1,   269,    -1,   266,   135,   116,   134,   270,
-      -1,   266,   135,   116,   134,   269,    -1,   269,    -1,   362,
-     272,   373,    -1,   370,   272,   373,    -1,   227,   370,   272,
-     373,    -1,   217,    -1,   270,    -1,   362,    -1,   370,    -1,
-     227,   370,    -1,   371,    -1,   224,   336,   373,    -1,   224,
-     340,   373,    -1,   224,    -1,   224,   351,    -1,   139,    -1,
-     271,   116,   139,    -1,   137,    -1,    74,    -1,    75,    -1,
-     138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,    -1,
-      75,    -1,   366,    -1,   225,    -1,   225,   357,    -1,   366,
-      -1,   371,    -1,   225,    -1,   225,   345,    -1,    -1,   131,
-     278,    -1,   107,   278,    -1,   164,    -1,   114,   279,   372,
-     115,    -1,    -1,   278,    -1,   280,   278,    -1,   279,   116,
-     278,    -1,   279,   116,   280,   278,    -1,   281,   117,    -1,
-     274,   117,    -1,   282,    -1,   281,   282,    -1,    80,    -1,
-     113,   274,    -1,   111,   134,   164,   135,   112,    -1,   111,
-     134,   310,   135,   112,    -1,   111,   134,   163,    96,   163,
-     135,   112,    -1,   113,   111,   134,   146,   135,   112,    -1,
-     284,    -1,   231,   284,    -1,   283,   233,    -1,   283,   233,
-     227,    -1,   285,    -1,   227,   285,    -1,   284,   228,    -1,
-      75,   109,   292,   110,    -1,   287,   373,    -1,   286,   116,
-     287,   373,    -1,    -1,   289,   274,   288,   290,    -1,   225,
-     336,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,   290,
-     291,    -1,   129,   274,   109,   292,   110,    -1,   129,   114,
-     134,   298,   115,    -1,   129,   109,   134,   286,   135,   110,
-     114,   134,   298,   115,   109,   292,   110,    -1,   276,    -1,
-     164,    -1,   292,   116,   276,    -1,   292,   116,   164,    -1,
-      33,   294,    -1,   232,    33,   294,    -1,   293,   116,   294,
-      -1,   295,   290,    -1,   295,   290,   131,   276,    -1,   274,
-      -1,   273,   109,   134,   286,   135,   110,    -1,    36,   274,
-     109,   134,   286,   135,   110,   114,   115,    -1,    -1,    36,
-     274,   109,   134,   286,   135,   110,   114,   297,   298,   115,
-      -1,   299,    -1,   298,   134,   299,    -1,   300,   135,   132,
-      -1,   301,   135,   132,    -1,   215,    -1,   217,    -1,   300,
-     135,   116,   134,   272,    -1,   225,   309,    -1,   301,   135,
-     116,   134,   309,    -1,    -1,   303,    -1,   305,    -1,   303,
-     134,   305,    -1,    -1,   303,    -1,   212,    -1,   307,    -1,
-     198,    -1,    -1,     5,    82,   306,   114,   304,   115,    -1,
-      40,   305,    -1,   308,    -1,   323,   173,    -1,   327,   134,
-     207,   173,    -1,   216,   173,    -1,   224,   323,   173,    -1,
-     227,   323,   173,    -1,   231,   323,   173,    -1,   231,   227,
-     323,   173,    -1,   224,   327,   134,   207,   173,    -1,   227,
-     327,   134,   207,   173,    -1,   231,   327,   134,   207,   173,
-      -1,   231,   227,   327,   134,   207,   173,    -1,   318,    -1,
-     331,    -1,   323,    -1,   163,   123,   163,    -1,    -1,    64,
-     109,   141,   110,   312,    -1,    -1,   313,    -1,   314,    -1,
-     313,   314,    -1,    39,   109,   109,   315,   110,   110,    -1,
-     316,    -1,   315,   116,   316,    -1,    -1,   317,    -1,   317,
-     109,   170,   110,    -1,   272,    -1,   234,    -1,   235,    -1,
-     228,    -1,   319,   312,    -1,   320,    -1,   321,   312,    -1,
-     322,   312,    -1,   137,    -1,   109,   319,   110,    -1,   149,
-     318,    -1,   149,   227,   318,    -1,   109,   320,   110,    -1,
-     319,   349,    -1,   109,   320,   110,   349,    -1,   109,   321,
-     110,   350,    -1,   109,   321,   110,    -1,   109,   320,   110,
-     109,   134,   264,   135,   110,    -1,   109,   322,   110,    -1,
-     324,   312,    -1,   325,    -1,   326,   312,    -1,   319,   109,
-     134,   264,   135,   110,    -1,   109,   325,   110,   109,   134,
-     264,   135,   110,    -1,   109,   324,   110,    -1,   149,   323,
-      -1,   149,   227,   323,    -1,   109,   325,   110,    -1,   109,
-     325,   110,   349,    -1,   109,   326,   110,   350,    -1,   109,
-     326,   110,    -1,   328,    -1,   329,    -1,   330,    -1,   319,
-     109,   271,   110,    -1,   109,   329,   110,   109,   271,   110,
-      -1,   109,   328,   110,    -1,   149,   327,    -1,   149,   227,
-     327,    -1,   109,   329,   110,    -1,   109,   329,   110,   349,
-      -1,   109,   330,   110,   350,    -1,   109,   330,   110,    -1,
-     332,   312,    -1,   333,    -1,   334,   312,    -1,   335,   312,
-      -1,   341,    -1,   109,   332,   110,    -1,   149,   331,    -1,
-     149,   227,   331,    -1,   109,   333,   110,    -1,   332,   349,
-      -1,   109,   333,   110,   349,    -1,   109,   334,   110,   350,
-      -1,   109,   334,   110,    -1,   332,   109,   134,   264,   135,
-     110,    -1,   109,   333,   110,   109,   134,   264,   135,   110,
-      -1,   109,   335,   110,    -1,   319,   312,    -1,   337,    -1,
-     338,   312,    -1,   339,   312,    -1,   149,   336,    -1,   149,
-     227,   336,    -1,   109,   337,   110,    -1,   319,   355,    -1,
-     109,   337,   110,   349,    -1,   109,   338,   110,   350,    -1,
-     109,   338,   110,    -1,   319,   109,   134,   264,   135,   110,
-      -1,   109,   337,   110,   109,   134,   264,   135,   110,    -1,
-     109,   339,   110,    -1,   341,   312,    -1,   342,    -1,   343,
-     312,    -1,   344,   312,    -1,    74,    -1,    75,    -1,   149,
-     340,    -1,   149,   227,   340,    -1,   109,   342,   110,    -1,
-     341,   355,    -1,   109,   342,   110,   355,    -1,   341,   109,
-     134,   264,   135,   110,    -1,   109,   342,   110,   109,   134,
-     264,   135,   110,    -1,   346,    -1,   347,   312,    -1,   348,
-     312,    -1,   149,    -1,   149,   227,    -1,   149,   345,    -1,
-     149,   227,   345,    -1,   109,   346,   110,    -1,   349,    -1,
-     109,   346,   110,   349,    -1,   109,   347,   110,   350,    -1,
-     109,   347,   110,    -1,   109,   134,   264,   135,   110,    -1,
-     109,   346,   110,   109,   134,   264,   135,   110,    -1,   109,
-     348,   110,    -1,   111,   112,    -1,   111,   112,   350,    -1,
-     350,    -1,   111,   134,   164,   135,   112,    -1,   111,   134,
-     118,   135,   112,    -1,   350,   111,   134,   164,   135,   112,
-      -1,   350,   111,   134,   118,   135,   112,    -1,   352,    -1,
-     353,   312,    -1,   354,   312,    -1,   149,    -1,   149,   227,
-      -1,   149,   351,    -1,   149,   227,   351,    -1,   109,   352,
-     110,    -1,   355,    -1,   109,   352,   110,   355,    -1,   109,
-     353,   110,   350,    -1,   109,   353,   110,    -1,   109,   134,
-     264,   135,   110,    -1,   109,   352,   110,   109,   134,   264,
-     135,   110,    -1,   109,   354,   110,    -1,   356,    -1,   356,
-     350,    -1,   350,    -1,   111,   112,    -1,   111,   134,   227,
-     118,   135,   112,    -1,   111,   134,   227,   135,   112,    -1,
-     111,   134,   227,   164,   135,   112,    -1,   111,   134,     7,
-     226,   164,   135,   112,    -1,   111,   134,   227,     7,   164,
-     135,   112,    -1,   358,    -1,   359,   312,    -1,   360,   312,
-      -1,   149,    -1,   149,   227,    -1,   149,   357,    -1,   149,
-     227,   357,    -1,   109,   358,   110,    -1,   349,    -1,   109,
-     358,   110,   349,    -1,   109,   359,   110,   350,    -1,   109,
-     359,   110,    -1,   109,   358,   110,   109,   134,   264,   135,
-     110,    -1,   109,   360,   110,    -1,   362,    -1,   370,    -1,
-     227,   370,    -1,   363,    -1,   364,    -1,   149,   225,    -1,
-     227,   149,   225,    -1,   149,   371,    -1,   227,   149,   371,
-      -1,   149,   361,    -1,   227,   149,   361,    -1,   111,   112,
-     225,    -1,   365,   225,    -1,   111,   112,   350,   225,    -1,
-     365,   350,   225,    -1,   350,   225,    -1,   111,   112,   363,
-      -1,   365,   363,    -1,   111,   112,   350,   363,    -1,   365,
-     350,   363,    -1,   350,   363,    -1,   111,   134,   227,   118,
-     135,   112,    -1,   111,   134,   227,   164,   135,   112,    -1,
-     111,   134,   231,   164,   135,   112,    -1,   111,   134,   231,
-     227,   164,   135,   112,    -1,   370,    -1,   227,   370,    -1,
-     367,    -1,   368,    -1,   369,    -1,   149,   225,    -1,   227,
-     149,   225,    -1,   149,   371,    -1,   227,   149,   371,    -1,
-     149,   366,    -1,   227,   149,   366,    -1,   111,   112,   225,
-      -1,   111,   112,   350,   225,    -1,   350,   225,    -1,   111,
-     112,   368,    -1,   111,   112,   350,   368,    -1,   350,   368,
-      -1,   111,   134,   263,   135,   112,    -1,   111,   112,   109,
-     260,   110,    -1,   370,   109,   134,   260,   135,   110,    -1,
-     218,   109,   134,   260,   135,   110,    -1,    -1,   116,    -1,
-      -1,   131,   164,    -1
+     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
+     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
+     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
+     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
+      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
+     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
+     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
+      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
+      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
+     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
+     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
+     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
+     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
+     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
+     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
+     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
+     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
+     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
+     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
+     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
+     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
+     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
+     129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
+     166,   164,    -1,   167,   373,    -1,    -1,   164,    -1,   131,
+      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
+      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
+      -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
+     111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
+     116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
+      -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
+     172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
+     192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
+     115,   132,    -1,    72,   130,   312,   171,    -1,   114,   115,
+      -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
+      -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
+     308,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
+     170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
+     109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
+     110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
+     184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
+     109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
+      -1,   163,    96,   163,    -1,   310,    -1,   179,    -1,   180,
+     116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
+     181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
+      -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
+      -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
+     189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
+      56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
+      -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
+     109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
+     132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
+     132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
+      50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
+      -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
+     165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
+     173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
+     196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
+     195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
+     110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
+      58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
+     195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
+      -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
+      -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
+     135,    -1,    60,   173,    -1,   225,    -1,   225,   309,    -1,
+     225,   357,    -1,   366,   139,    -1,   366,    -1,    64,   199,
+     109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
+     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
+     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
+     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
+      51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
+     110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
+      -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
+     111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
+      -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
+      -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
+      -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
+      -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
+     211,   132,    -1,   274,    -1,   211,   116,   274,    -1,   213,
+      -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
+      -1,   216,   135,   132,    -1,   293,   135,   132,    -1,   296,
+     135,   132,    -1,   215,   277,    -1,   231,   215,   277,    -1,
+     214,   135,   116,   134,   272,   277,    -1,   367,   272,   311,
+      -1,   370,   272,   311,    -1,   227,   370,   272,   311,    -1,
+     217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
+     217,    -1,   216,   135,   116,   134,   272,    -1,   111,   112,
+     272,   109,   134,   260,   135,   110,    -1,   370,   272,   109,
+     134,   260,   135,   110,    -1,   218,   272,   109,   134,   260,
+     135,   110,    -1,   111,   134,   262,   135,   112,    -1,   111,
+     134,   262,   135,   116,   134,   263,   135,   112,    -1,     3,
+     215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
+      -1,     3,   225,   309,    -1,   220,   135,   116,   134,   309,
+      -1,   227,     3,   225,   309,    -1,   225,     3,   309,    -1,
+     225,     3,   227,   309,    -1,     3,   139,   131,   164,    -1,
+     221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
+     132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
+     240,   135,   132,    -1,   224,   309,   311,   277,    -1,   223,
+     116,   312,   309,   311,   277,    -1,   236,    -1,   240,    -1,
+     242,    -1,   283,    -1,   237,    -1,   241,    -1,   243,    -1,
+     284,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
+     229,    -1,   314,    -1,    10,    -1,    12,    -1,    11,    -1,
+      14,    -1,    67,    -1,    -1,    13,   109,   230,   286,   110,
+      -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
+     233,    -1,   232,   233,    -1,   234,    -1,     5,    -1,     7,
+      -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
+      -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
+      -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
+      -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
+      -1,   231,   237,    -1,   236,   233,    -1,   236,   233,   227,
+      -1,   236,   233,   237,    -1,   238,    -1,   226,   239,   226,
+      -1,   235,    -1,   227,   235,    -1,   238,   228,    -1,   238,
+     235,    -1,    28,   109,   276,   110,    -1,    28,   109,   169,
+     110,    -1,    78,   109,   276,   110,    -1,    78,   109,   169,
+     110,    -1,   241,    -1,   231,   241,    -1,   240,   233,    -1,
+     240,   233,   227,    -1,   244,    -1,   227,   244,    -1,   241,
+     228,    -1,   243,    -1,   231,   243,    -1,   242,   233,    -1,
+     242,   233,   227,    -1,    74,    -1,   227,    74,    -1,   243,
+     228,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
+      -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
+     115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
+     247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
+     248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
+     251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
+     274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   225,
+     252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
+     318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
+      -1,   130,   163,    -1,    30,   312,    -1,   255,   114,   258,
+     372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
+     114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
+     274,   259,    -1,    -1,   131,   163,    -1,    -1,   261,    -1,
+     263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
+     263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
+      96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
+     262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
+     263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
+     116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
+     135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
+     135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
+      -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
+      -1,   227,   370,   272,   373,    -1,   217,    -1,   270,    -1,
+     362,    -1,   370,    -1,   227,   370,    -1,   371,    -1,   224,
+     336,   373,    -1,   224,   340,   373,    -1,   224,    -1,   224,
+     351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
+      74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
+     139,    -1,    74,    -1,    75,    -1,   366,    -1,   225,    -1,
+     225,   357,    -1,   366,    -1,   371,    -1,   225,    -1,   225,
+     345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   164,
+      -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
+     278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
+      -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
+     282,    -1,   113,   274,    -1,   111,   134,   164,   135,   112,
+      -1,   111,   134,   310,   135,   112,    -1,   111,   134,   163,
+      96,   163,   135,   112,    -1,   113,   111,   134,   146,   135,
+     112,    -1,   284,    -1,   231,   284,    -1,   283,   233,    -1,
+     283,   233,   227,    -1,   285,    -1,   227,   285,    -1,   284,
+     228,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
+     286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
+      -1,   225,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
+      -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
+     128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
+     135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
+     276,    -1,   164,    -1,   292,   116,   276,    -1,   292,   116,
+     164,    -1,    33,   294,    -1,   232,    33,   294,    -1,   293,
+     116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
+      -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
+      36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
+      -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
+     298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
+     135,   132,    -1,   301,   135,   132,    -1,   215,    -1,   217,
+      -1,   300,   135,   116,   134,   272,    -1,   225,   309,    -1,
+     301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
+      -1,   303,   134,   305,    -1,    -1,   303,    -1,   212,    -1,
+     307,    -1,   198,    -1,    -1,     5,    82,   306,   114,   304,
+     115,    -1,    40,   305,    -1,   308,    -1,   323,   173,    -1,
+     327,   134,   207,   173,    -1,   216,   173,    -1,   224,   323,
+     173,    -1,   227,   323,   173,    -1,   231,   323,   173,    -1,
+     231,   227,   323,   173,    -1,   224,   327,   134,   207,   173,
+      -1,   227,   327,   134,   207,   173,    -1,   231,   327,   134,
+     207,   173,    -1,   231,   227,   327,   134,   207,   173,    -1,
+     318,    -1,   331,    -1,   323,    -1,   163,   122,   163,    -1,
+      -1,    64,   109,   141,   110,   312,    -1,    -1,   313,    -1,
+     314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
+     110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
+      -1,   317,   109,   170,   110,    -1,   272,    -1,   234,    -1,
+     235,    -1,   228,    -1,   319,   312,    -1,   320,    -1,   321,
+     312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
+      -1,   149,   318,    -1,   149,   227,   318,    -1,   109,   320,
+     110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
+     109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
+     320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
+     110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
+     319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
+     109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
+     149,   323,    -1,   149,   227,   323,    -1,   109,   325,   110,
+      -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
+      -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
+      -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
+     271,   110,    -1,   109,   328,   110,    -1,   149,   327,    -1,
+     149,   227,   327,    -1,   109,   329,   110,    -1,   109,   329,
+     110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
+     110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
+     335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   149,
+     331,    -1,   149,   227,   331,    -1,   109,   333,   110,    -1,
+     332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
+     110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
+     264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
+     135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
+     337,    -1,   338,   312,    -1,   339,   312,    -1,   149,   336,
+      -1,   149,   227,   336,    -1,   109,   337,   110,    -1,   319,
+     355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
+     350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
+     135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
+     110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
+      -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
+      -1,   149,   340,    -1,   149,   227,   340,    -1,   109,   342,
+     110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
+     341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
+     109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
+      -1,   348,   312,    -1,   149,    -1,   149,   227,    -1,   149,
+     345,    -1,   149,   227,   345,    -1,   109,   346,   110,    -1,
+     349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
+     350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
+     110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
+      -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
+     350,    -1,   350,    -1,   111,   134,   164,   135,   112,    -1,
+     111,   134,   117,   135,   112,    -1,   350,   111,   134,   164,
+     135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
+     352,    -1,   353,   312,    -1,   354,   312,    -1,   149,    -1,
+     149,   227,    -1,   149,   351,    -1,   149,   227,   351,    -1,
+     109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
+      -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
+     109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
+     134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
+      -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
+     134,   227,   117,   135,   112,    -1,   111,   134,   227,   135,
+     112,    -1,   111,   134,   227,   164,   135,   112,    -1,   111,
+     134,     7,   226,   164,   135,   112,    -1,   111,   134,   227,
+       7,   164,   135,   112,    -1,   358,    -1,   359,   312,    -1,
+     360,   312,    -1,   149,    -1,   149,   227,    -1,   149,   357,
+      -1,   149,   227,   357,    -1,   109,   358,   110,    -1,   349,
+      -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
+      -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
+     264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
+     370,    -1,   227,   370,    -1,   363,    -1,   364,    -1,   149,
+     225,    -1,   227,   149,   225,    -1,   149,   371,    -1,   227,
+     149,   371,    -1,   149,   361,    -1,   227,   149,   361,    -1,
+     111,   112,   225,    -1,   365,   225,    -1,   111,   112,   350,
+     225,    -1,   365,   350,   225,    -1,   350,   225,    -1,   111,
+     112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
+      -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
+     227,   117,   135,   112,    -1,   111,   134,   227,   164,   135,
+     112,    -1,   111,   134,   231,   164,   135,   112,    -1,   111,
+     134,   231,   227,   164,   135,   112,    -1,   370,    -1,   227,
+     370,    -1,   367,    -1,   368,    -1,   369,    -1,   149,   225,
+      -1,   227,   149,   225,    -1,   149,   371,    -1,   227,   149,
+     371,    -1,   149,   366,    -1,   227,   149,   366,    -1,   111,
+     112,   225,    -1,   111,   112,   350,   225,    -1,   350,   225,
+      -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
+     350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
+     112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
+     110,    -1,   218,   109,   134,   260,   135,   110,    -1,    -1,
+     116,    -1,    -1,   131,   164,    -1
 };
 
@@ -1017,80 +1020,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
-     319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
-     345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
-     371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
-     404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
-     431,   436,   439,   441,   443,   445,   447,   449,   451,   453,
-     455,   457,   459,   466,   467,   469,   473,   474,   475,   476,
-     480,   481,   483,   488,   489,   491,   493,   498,   499,   501,
-     506,   507,   509,   514,   515,   517,   519,   521,   526,   527,
-     529,   534,   535,   540,   541,   546,   547,   552,   553,   558,
-     559,   564,   565,   568,   570,   575,   580,   581,   583,   585,
-     591,   592,   598,   600,   602,   604,   609,   610,   615,   616,
-     617,   618,   619,   620,   621,   622,   623,   624,   628,   629,
-     636,   637,   643,   644,   645,   646,   647,   648,   649,   650,
-     651,   661,   668,   670,   680,   681,   686,   688,   694,   696,
-     700,   701,   706,   711,   714,   716,   718,   728,   730,   741,
-     742,   744,   748,   750,   754,   755,   760,   761,   765,   770,
-     771,   775,   777,   783,   784,   788,   790,   792,   794,   800,
-     801,   805,   807,   812,   814,   816,   821,   823,   828,   830,
-     834,   837,   841,   844,   848,   850,   854,   856,   863,   865,
-     867,   876,   878,   880,   882,   884,   889,   891,   893,   895,
-     900,   913,   914,   919,   921,   926,   930,   932,   934,   936,
-     938,   944,   945,   951,   952,   956,   957,   962,   964,   970,
-     971,   973,   978,   980,   987,   989,   993,   994,   999,  1001,
-    1005,  1006,  1010,  1012,  1016,  1017,  1021,  1022,  1026,  1027,
-    1042,  1043,  1044,  1045,  1046,  1050,  1055,  1062,  1072,  1077,
-    1082,  1090,  1095,  1100,  1105,  1110,  1118,  1140,  1145,  1152,
-    1154,  1161,  1166,  1171,  1182,  1187,  1192,  1197,  1202,  1211,
-    1216,  1224,  1225,  1226,  1227,  1233,  1238,  1246,  1247,  1248,
-    1249,  1253,  1254,  1255,  1256,  1261,  1262,  1271,  1272,  1277,
-    1278,  1283,  1285,  1287,  1289,  1291,  1294,  1293,  1305,  1306,
-    1308,  1318,  1319,  1324,  1328,  1330,  1332,  1334,  1336,  1338,
-    1340,  1342,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1361,
-    1363,  1365,  1367,  1369,  1371,  1377,  1378,  1380,  1382,  1384,
-    1389,  1390,  1396,  1397,  1399,  1401,  1406,  1408,  1410,  1412,
-    1417,  1418,  1420,  1422,  1427,  1428,  1430,  1435,  1436,  1438,
-    1440,  1445,  1447,  1449,  1454,  1455,  1459,  1461,  1467,  1466,
-    1470,  1472,  1477,  1479,  1485,  1486,  1491,  1492,  1494,  1495,
-    1504,  1505,  1507,  1509,  1514,  1516,  1522,  1523,  1525,  1528,
-    1531,  1536,  1537,  1542,  1547,  1551,  1553,  1559,  1558,  1565,
-    1567,  1573,  1574,  1582,  1583,  1587,  1588,  1589,  1591,  1593,
-    1600,  1601,  1603,  1605,  1610,  1611,  1617,  1618,  1622,  1623,
-    1628,  1629,  1630,  1632,  1640,  1641,  1643,  1646,  1648,  1652,
-    1653,  1654,  1656,  1658,  1662,  1667,  1675,  1676,  1685,  1687,
-    1692,  1693,  1694,  1698,  1699,  1700,  1704,  1705,  1706,  1710,
-    1711,  1712,  1717,  1718,  1719,  1720,  1726,  1727,  1729,  1734,
-    1735,  1740,  1741,  1742,  1743,  1744,  1759,  1760,  1765,  1766,
-    1774,  1776,  1778,  1781,  1783,  1785,  1808,  1809,  1811,  1813,
-    1818,  1819,  1821,  1826,  1831,  1832,  1838,  1837,  1841,  1845,
-    1847,  1849,  1855,  1856,  1861,  1866,  1868,  1873,  1875,  1876,
-    1878,  1883,  1885,  1887,  1892,  1894,  1899,  1904,  1912,  1918,
-    1917,  1931,  1932,  1937,  1938,  1942,  1947,  1952,  1960,  1965,
-    1976,  1977,  1988,  1989,  1995,  1996,  2000,  2001,  2002,  2005,
-    2004,  2015,  2024,  2030,  2036,  2045,  2051,  2057,  2063,  2069,
-    2077,  2083,  2091,  2097,  2106,  2107,  2108,  2112,  2116,  2118,
-    2123,  2124,  2128,  2129,  2134,  2140,  2141,  2144,  2146,  2147,
-    2151,  2152,  2153,  2154,  2188,  2190,  2191,  2193,  2198,  2203,
-    2208,  2210,  2212,  2217,  2219,  2221,  2223,  2228,  2230,  2239,
-    2241,  2242,  2247,  2249,  2251,  2256,  2258,  2260,  2265,  2267,
-    2269,  2278,  2279,  2280,  2284,  2286,  2288,  2293,  2295,  2297,
-    2302,  2304,  2306,  2321,  2323,  2324,  2326,  2331,  2332,  2337,
-    2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2371,
-    2373,  2374,  2376,  2381,  2383,  2385,  2390,  2392,  2394,  2396,
-    2401,  2403,  2405,  2436,  2438,  2439,  2441,  2446,  2451,  2459,
-    2461,  2463,  2468,  2470,  2475,  2477,  2491,  2492,  2494,  2499,
-    2501,  2503,  2505,  2507,  2512,  2513,  2515,  2517,  2522,  2524,
-    2526,  2532,  2534,  2536,  2540,  2542,  2544,  2546,  2560,  2561,
-    2563,  2568,  2570,  2572,  2574,  2576,  2581,  2582,  2584,  2586,
-    2591,  2593,  2595,  2601,  2602,  2604,  2613,  2616,  2618,  2621,
-    2623,  2625,  2638,  2639,  2641,  2646,  2648,  2650,  2652,  2654,
-    2659,  2660,  2662,  2664,  2669,  2671,  2679,  2680,  2681,  2686,
-    2687,  2691,  2693,  2695,  2697,  2699,  2701,  2708,  2710,  2712,
-    2714,  2716,  2718,  2720,  2722,  2724,  2726,  2731,  2733,  2735,
-    2740,  2766,  2767,  2769,  2773,  2774,  2778,  2780,  2782,  2784,
-    2786,  2788,  2795,  2797,  2799,  2801,  2803,  2805,  2810,  2815,
-    2817,  2819,  2837,  2839,  2844,  2845
+       0,   299,   299,   305,   314,   315,   316,   320,   321,   322,
+     326,   327,   331,   332,   336,   337,   341,   342,   353,   355,
+     357,   359,   364,   365,   371,   375,   377,   378,   380,   381,
+     383,   385,   387,   396,   397,   403,   404,   408,   409,   413,
+     417,   419,   421,   423,   428,   431,   433,   435,   440,   453,
+     455,   457,   459,   461,   463,   465,   467,   469,   471,   473,
+     480,   481,   487,   488,   489,   490,   494,   495,   497,   502,
+     503,   505,   507,   512,   513,   515,   520,   521,   523,   528,
+     529,   531,   533,   535,   540,   541,   543,   548,   549,   554,
+     555,   560,   561,   566,   567,   572,   573,   578,   579,   582,
+     584,   589,   594,   595,   597,   603,   604,   608,   609,   610,
+     611,   612,   613,   614,   615,   616,   617,   618,   624,   626,
+     628,   630,   635,   636,   641,   642,   648,   649,   655,   656,
+     657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
+     692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
+     727,   730,   733,   743,   746,   758,   759,   761,   765,   767,
+     771,   772,   777,   778,   782,   787,   788,   792,   794,   800,
+     801,   805,   807,   809,   811,   817,   818,   822,   824,   829,
+     831,   833,   838,   840,   845,   847,   851,   854,   858,   861,
+     865,   867,   871,   873,   880,   882,   884,   893,   895,   897,
+     899,   901,   906,   908,   910,   912,   917,   930,   931,   936,
+     938,   943,   947,   949,   951,   953,   955,   961,   962,   968,
+     969,   973,   974,   979,   981,   987,   988,   990,   995,   997,
+    1004,  1006,  1010,  1011,  1016,  1018,  1022,  1023,  1027,  1029,
+    1033,  1034,  1038,  1039,  1043,  1044,  1059,  1060,  1061,  1062,
+    1063,  1067,  1072,  1079,  1089,  1094,  1099,  1107,  1112,  1117,
+    1122,  1127,  1135,  1157,  1162,  1169,  1171,  1178,  1183,  1188,
+    1199,  1204,  1209,  1214,  1219,  1228,  1233,  1241,  1242,  1243,
+    1244,  1250,  1255,  1263,  1264,  1265,  1266,  1270,  1271,  1272,
+    1273,  1278,  1279,  1288,  1289,  1294,  1295,  1300,  1302,  1304,
+    1306,  1308,  1311,  1310,  1322,  1323,  1325,  1335,  1336,  1341,
+    1345,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1364,  1366,
+    1368,  1370,  1372,  1374,  1376,  1378,  1380,  1382,  1384,  1386,
+    1388,  1394,  1395,  1397,  1399,  1401,  1406,  1407,  1413,  1414,
+    1416,  1418,  1423,  1425,  1427,  1429,  1434,  1435,  1437,  1439,
+    1444,  1445,  1447,  1452,  1453,  1455,  1457,  1462,  1464,  1466,
+    1471,  1472,  1476,  1478,  1484,  1483,  1487,  1489,  1494,  1496,
+    1502,  1503,  1508,  1509,  1511,  1512,  1521,  1522,  1524,  1526,
+    1531,  1533,  1539,  1540,  1542,  1545,  1548,  1553,  1554,  1559,
+    1564,  1568,  1570,  1576,  1575,  1582,  1584,  1590,  1591,  1599,
+    1600,  1604,  1605,  1606,  1608,  1610,  1617,  1618,  1620,  1622,
+    1627,  1628,  1634,  1635,  1639,  1640,  1645,  1646,  1647,  1649,
+    1657,  1658,  1660,  1663,  1665,  1669,  1670,  1671,  1673,  1675,
+    1679,  1684,  1692,  1693,  1702,  1704,  1709,  1710,  1711,  1715,
+    1716,  1717,  1721,  1722,  1723,  1727,  1728,  1729,  1734,  1735,
+    1736,  1737,  1743,  1744,  1746,  1751,  1752,  1757,  1758,  1759,
+    1760,  1761,  1776,  1777,  1782,  1783,  1789,  1791,  1794,  1796,
+    1798,  1821,  1822,  1824,  1826,  1831,  1832,  1834,  1839,  1844,
+    1845,  1851,  1850,  1854,  1858,  1860,  1862,  1868,  1869,  1874,
+    1879,  1881,  1886,  1888,  1889,  1891,  1896,  1898,  1900,  1905,
+    1907,  1912,  1917,  1925,  1931,  1930,  1944,  1945,  1950,  1951,
+    1955,  1960,  1965,  1973,  1978,  1989,  1990,  2001,  2002,  2008,
+    2009,  2013,  2014,  2015,  2018,  2017,  2028,  2037,  2043,  2049,
+    2058,  2064,  2070,  2076,  2082,  2090,  2096,  2104,  2110,  2119,
+    2120,  2121,  2125,  2129,  2131,  2136,  2137,  2141,  2142,  2147,
+    2153,  2154,  2157,  2159,  2160,  2164,  2165,  2166,  2167,  2201,
+    2203,  2204,  2206,  2211,  2216,  2221,  2223,  2225,  2230,  2232,
+    2234,  2236,  2241,  2243,  2252,  2254,  2255,  2260,  2262,  2264,
+    2269,  2271,  2273,  2278,  2280,  2282,  2291,  2292,  2293,  2297,
+    2299,  2301,  2306,  2308,  2310,  2315,  2317,  2319,  2334,  2336,
+    2337,  2339,  2344,  2345,  2350,  2352,  2354,  2359,  2361,  2363,
+    2365,  2370,  2372,  2374,  2384,  2386,  2387,  2389,  2394,  2396,
+    2398,  2403,  2405,  2407,  2409,  2414,  2416,  2418,  2449,  2451,
+    2452,  2454,  2459,  2464,  2472,  2474,  2476,  2481,  2483,  2488,
+    2490,  2504,  2505,  2507,  2512,  2514,  2516,  2518,  2520,  2525,
+    2526,  2528,  2530,  2535,  2537,  2539,  2545,  2547,  2549,  2553,
+    2555,  2557,  2559,  2573,  2574,  2576,  2581,  2583,  2585,  2587,
+    2589,  2594,  2595,  2597,  2599,  2604,  2606,  2608,  2614,  2615,
+    2617,  2626,  2629,  2631,  2634,  2636,  2638,  2651,  2652,  2654,
+    2659,  2661,  2663,  2665,  2667,  2672,  2673,  2675,  2677,  2682,
+    2684,  2692,  2693,  2694,  2699,  2700,  2704,  2706,  2708,  2710,
+    2712,  2714,  2721,  2723,  2725,  2727,  2729,  2731,  2733,  2735,
+    2737,  2739,  2744,  2746,  2748,  2753,  2779,  2780,  2782,  2786,
+    2787,  2791,  2793,  2795,  2797,  2799,  2801,  2808,  2810,  2812,
+    2814,  2816,  2818,  2823,  2828,  2830,  2832,  2850,  2852,  2857,
+    2858
 };
 #endif
@@ -1118,7 +1121,7 @@
   "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
   "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
-  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'*'",
-  "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
-  "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
+  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'",
+  "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'",
+  "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
   "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
   "string_literal_list", "primary_expression", "postfix_expression",
@@ -1130,6 +1133,6 @@
   "logical_AND_expression", "logical_OR_expression",
   "conditional_expression", "constant_expression", "assignment_expression",
-  "assignment_expression_opt", "tuple", "tuple_expression_list",
-  "assignment_operator", "comma_expression", "comma_expression_opt",
+  "assignment_expression_opt", "assignment_operator", "tuple",
+  "tuple_expression_list", "comma_expression", "comma_expression_opt",
   "statement", "labeled_statement", "compound_statement",
   "block_item_list", "block_item", "statement_list",
@@ -1225,7 +1228,7 @@
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
-      41,    91,    93,    46,   123,   125,    44,    58,    42,    38,
-      43,    45,    33,   126,    47,    37,    60,    62,    94,   124,
-      63,    61,    59
+      41,    91,    93,    46,   123,   125,    44,    42,    38,    43,
+      45,    33,   126,    47,    37,    60,    62,    94,   124,    63,
+      58,    61,    59
 };
 # endif
@@ -1237,77 +1240,77 @@
      138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
      142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
-     143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
-     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
+     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
+     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-     148,   148,   148,   149,   149,   149,   150,   150,   150,   150,
-     151,   151,   151,   152,   152,   152,   152,   153,   153,   153,
-     154,   154,   154,   155,   155,   155,   155,   155,   156,   156,
-     156,   157,   157,   158,   158,   159,   159,   160,   160,   161,
-     161,   162,   162,   162,   162,   163,   164,   164,   164,   164,
-     165,   165,   166,   166,   166,   166,   167,   167,   168,   168,
-     168,   168,   168,   168,   168,   168,   168,   168,   169,   169,
-     170,   170,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   172,   173,   173,   174,   174,   175,   175,   175,   175,
-     176,   176,   177,   178,   178,   178,   178,   178,   178,   179,
-     179,   179,   180,   180,   181,   181,   182,   182,   183,   184,
-     184,   185,   185,   186,   186,   187,   187,   187,   187,   188,
-     188,   189,   189,   190,   190,   190,   191,   191,   192,   192,
-     192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
-     193,   194,   194,   194,   194,   194,   195,   195,   195,   195,
-     196,   197,   197,   197,   197,   197,   198,   198,   198,   198,
-     198,   199,   199,   200,   200,   201,   201,   202,   202,   203,
-     203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
-     208,   208,   209,   209,   210,   210,   211,   211,   212,   212,
-     213,   213,   213,   213,   213,   214,   214,   214,   215,   215,
-     215,   216,   216,   216,   216,   216,   217,   217,   217,   218,
-     218,   219,   219,   219,   220,   220,   220,   220,   220,   221,
-     221,   222,   222,   222,   222,   223,   223,   224,   224,   224,
-     224,   225,   225,   225,   225,   226,   226,   227,   227,   228,
-     228,   229,   229,   229,   229,   229,   230,   229,   231,   231,
-     231,   232,   232,   233,   234,   234,   234,   234,   234,   234,
-     234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
-     235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
-     237,   237,   238,   238,   238,   238,   239,   239,   239,   239,
-     240,   240,   240,   240,   241,   241,   241,   242,   242,   242,
-     242,   243,   243,   243,   244,   244,   245,   245,   246,   245,
-     245,   245,   247,   247,   248,   248,   249,   249,   249,   249,
-     250,   250,   250,   250,   251,   251,   252,   252,   252,   252,
-     252,   253,   253,   254,   255,   256,   256,   257,   256,   258,
-     258,   259,   259,   260,   260,   261,   261,   261,   261,   261,
-     262,   262,   262,   262,   263,   263,   264,   264,   265,   265,
-     266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
-     268,   268,   268,   268,   269,   269,   270,   270,   271,   271,
-     272,   272,   272,   273,   273,   273,   274,   274,   274,   275,
-     275,   275,   276,   276,   276,   276,   277,   277,   277,   278,
-     278,   279,   279,   279,   279,   279,   280,   280,   281,   281,
-     282,   282,   282,   282,   282,   282,   283,   283,   283,   283,
-     284,   284,   284,   285,   286,   286,   288,   287,   287,   289,
-     289,   289,   290,   290,   291,   291,   291,   292,   292,   292,
-     292,   293,   293,   293,   294,   294,   295,   295,   296,   297,
-     296,   298,   298,   299,   299,   300,   300,   300,   301,   301,
-     302,   302,   303,   303,   304,   304,   305,   305,   305,   306,
-     305,   305,   307,   307,   307,   308,   308,   308,   308,   308,
-     308,   308,   308,   308,   309,   309,   309,   310,   311,   311,
-     312,   312,   313,   313,   314,   315,   315,   316,   316,   316,
-     317,   317,   317,   317,   318,   318,   318,   318,   319,   319,
-     320,   320,   320,   321,   321,   321,   321,   322,   322,   323,
-     323,   323,   324,   324,   324,   325,   325,   325,   326,   326,
-     326,   327,   327,   327,   328,   328,   328,   329,   329,   329,
-     330,   330,   330,   331,   331,   331,   331,   332,   332,   333,
-     333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
-     336,   336,   336,   337,   337,   337,   338,   338,   338,   338,
-     339,   339,   339,   340,   340,   340,   340,   341,   341,   342,
-     342,   342,   343,   343,   344,   344,   345,   345,   345,   346,
-     346,   346,   346,   346,   347,   347,   347,   347,   348,   348,
-     348,   349,   349,   349,   350,   350,   350,   350,   351,   351,
-     351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
-     354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
-     356,   356,   357,   357,   357,   358,   358,   358,   358,   358,
-     359,   359,   359,   359,   360,   360,   361,   361,   361,   362,
-     362,   363,   363,   363,   363,   363,   363,   364,   364,   364,
-     364,   364,   364,   364,   364,   364,   364,   365,   365,   365,
-     365,   366,   366,   366,   367,   367,   368,   368,   368,   368,
-     368,   368,   369,   369,   369,   369,   369,   369,   370,   371,
-     371,   371,   372,   372,   373,   373
+     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
+     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
+     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
+     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
+     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
+     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
+     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
+     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
+     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
+     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
+     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
+     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
+     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
+     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
+     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
+     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
+     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
+     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
+     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
+     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
+     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
+     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
+     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
+     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
+     238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
+     241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
+     244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
+     248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
+     251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
+     255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
+     260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
+     263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
+     267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
+     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
+     273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
+     276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
+     279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
+     282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
+     286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
+     291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
+     294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
+     300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
+     304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
+     308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
+     309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
+     315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
+     318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
+     321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
+     325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
+     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
+     331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
+     334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
+     337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
+     340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
+     344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
+     347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
+     350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
+     352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
+     355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
+     358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
+     360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
+     363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
+     364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
+     367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
+     369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
+     373
 };
 
@@ -1318,77 +1321,77 @@
        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
        3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
-       2,     7,     4,     1,     3,     0,     1,     3,     7,     9,
-       1,     3,     1,     3,     7,     3,     7,     1,     1,     1,
-       2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
-       4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
-       1,     4,     4,     1,     3,     3,     3,     1,     3,     3,
-       1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     5,     4,     5,     1,     1,     3,     3,     2,
-       0,     1,     2,     5,     6,     7,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       6,     4,     2,     7,     1,     3,     1,     2,     1,     2,
-       1,     2,     2,     5,     7,     5,     9,     5,     9,     1,
-       3,     1,     1,     3,     3,     2,     1,     2,     2,     0,
-       1,     2,     3,     0,     1,     2,     3,     3,     4,     0,
-       1,     1,     2,     5,     7,     6,     6,     4,     3,     4,
-       2,     3,     2,     3,     3,     3,     3,     5,     3,     3,
-       4,     1,     5,     6,     5,     6,     9,    10,     9,    10,
-       2,     1,     2,     2,     2,     1,     6,     8,    10,    12,
-      14,     0,     1,     0,     1,     1,     3,     4,     7,     0,
-       1,     3,     1,     3,     1,     1,     1,     3,     1,     1,
-       1,     3,     0,     1,     3,     4,     1,     3,     1,     1,
-       3,     3,     3,     3,     3,     2,     3,     6,     3,     3,
-       4,     1,     2,     2,     3,     5,     8,     7,     7,     5,
-       9,     2,     2,     5,     3,     5,     4,     3,     4,     4,
-       7,     3,     3,     3,     3,     4,     6,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
-       1,     1,     1,     1,     1,     1,     0,     5,     1,     2,
-       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
+       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
+       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
+       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
+       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
+       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
+       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
+       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
+       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
+       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
+       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
+       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
+       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
+       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
+       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
+       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
+       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
+       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
+       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
+       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
+       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
+       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
+       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     3,     3,
-       1,     3,     1,     2,     2,     2,     4,     4,     4,     4,
-       1,     2,     2,     3,     1,     2,     2,     1,     2,     2,
-       3,     1,     2,     2,     1,     1,     4,     2,     0,     6,
-       7,     2,     2,     2,     0,     2,     2,     3,     2,     3,
-       1,     2,     3,     2,     2,     4,     0,     1,     2,     2,
-       1,     0,     1,     2,     2,     5,     2,     0,     7,     2,
-       4,     0,     2,     0,     1,     1,     1,     5,     5,     5,
-       1,     5,     5,     9,     1,     5,     0,     1,     1,     5,
-       1,     1,     5,     5,     1,     3,     3,     4,     1,     1,
-       1,     1,     2,     1,     3,     3,     1,     2,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     1,     1,     1,     2,     0,     2,     2,     1,
-       4,     0,     1,     2,     3,     4,     2,     2,     1,     2,
-       1,     2,     5,     5,     7,     6,     1,     2,     2,     3,
-       1,     2,     2,     4,     2,     4,     0,     4,     2,     1,
-       1,     1,     0,     2,     5,     5,    13,     1,     1,     3,
-       3,     2,     3,     3,     2,     4,     1,     6,     9,     0,
-      11,     1,     3,     3,     3,     1,     1,     5,     2,     5,
-       0,     1,     1,     3,     0,     1,     1,     1,     1,     0,
-       6,     2,     1,     2,     4,     2,     3,     3,     3,     4,
-       5,     5,     5,     6,     1,     1,     1,     3,     0,     5,
-       0,     1,     1,     2,     6,     1,     3,     0,     1,     4,
-       1,     1,     1,     1,     2,     1,     2,     2,     1,     3,
-       2,     3,     3,     2,     4,     4,     3,     8,     3,     2,
-       1,     2,     6,     8,     3,     2,     3,     3,     4,     4,
-       3,     1,     1,     1,     4,     6,     3,     2,     3,     3,
-       4,     4,     3,     2,     1,     2,     2,     1,     3,     2,
-       3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
-       1,     2,     2,     2,     3,     3,     2,     4,     4,     3,
-       6,     8,     3,     2,     1,     2,     2,     1,     1,     2,
-       3,     3,     2,     4,     6,     8,     1,     2,     2,     1,
-       2,     2,     3,     3,     1,     4,     4,     3,     5,     8,
-       3,     2,     3,     1,     5,     5,     6,     6,     1,     2,
-       2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
-       5,     8,     3,     1,     2,     1,     2,     6,     5,     6,
-       7,     7,     1,     2,     2,     1,     2,     2,     3,     3,
-       1,     4,     4,     3,     8,     3,     1,     1,     2,     1,
-       1,     2,     3,     2,     3,     2,     3,     3,     2,     4,
-       3,     2,     3,     2,     4,     3,     2,     6,     6,     6,
-       7,     1,     2,     1,     1,     1,     2,     3,     2,     3,
-       2,     3,     3,     4,     2,     3,     4,     2,     5,     5,
-       6,     6,     0,     1,     0,     2
+       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
+       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
+       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
+       1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
+       0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
+       2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
+       2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
+       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
+       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
+       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
+       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
+       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
+       3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
+       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
+       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
+       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
+       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
+       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
+       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
+       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
+       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
+       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
+       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
+       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
+       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
+       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
+       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
+       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
+       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
+       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
+       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
+       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
+       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
+       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
+       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
+       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
+       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
+       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
+       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
+       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
+       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
+       2
 };
 
@@ -1398,162 +1401,160 @@
 static const yytype_uint16 yydefact[] =
 {
-     295,   295,   316,   314,   317,   315,   318,   319,   301,   303,
-     302,     0,   304,   330,   322,   327,   325,   326,   324,   323,
-     328,   329,   334,   331,   332,   333,   550,   550,   550,     0,
-       0,     0,   295,   221,   305,   320,   321,     7,   361,     0,
-       8,    14,    15,    65,     0,     2,    63,    64,   568,     9,
-     295,   528,   526,   248,     3,   456,     3,   261,     0,     3,
-       3,     3,   249,     3,     0,     0,     0,   296,   297,   299,
-     295,   308,   311,   313,   342,   287,   335,   340,   288,   350,
-     289,   357,   354,   364,     0,     0,   365,   290,   476,   480,
-       3,     3,     0,     2,   522,   527,   532,   300,     0,     0,
-     550,   580,   550,     2,   591,   592,   593,   295,     0,   734,
-     735,     0,    12,     0,    13,   295,   271,   272,     0,   296,
-     291,   292,   293,   294,   529,   306,   394,   551,   552,   372,
-     373,    12,   447,   448,    11,   443,   446,     0,   506,   501,
-     492,   447,   448,     0,     0,   531,   222,     0,   295,     0,
-       0,     0,     0,     0,     0,     0,     0,   295,   295,     2,
-       0,   736,   296,   585,   597,   740,   733,   731,   738,     0,
-       0,     0,   255,     2,     0,   535,   441,   442,   440,     0,
-       0,     0,     0,   550,     0,   637,   638,     0,     0,   548,
-     544,   550,   565,   550,   550,   546,     2,   545,   550,   604,
-     550,   550,   607,     0,     0,     0,   295,   295,   314,   362,
-       2,   295,   262,   298,   309,   343,   355,   481,     0,     2,
-       0,   456,   263,   296,   336,   351,   358,   477,     0,     2,
-       0,   312,   337,   344,   345,     0,   352,   356,   359,   363,
-     448,   295,   374,   367,   371,     0,   396,   478,   482,     0,
-       0,     0,     1,   295,     2,   533,   579,   581,   295,     2,
-     744,   296,   747,   548,   548,     0,   296,     0,     0,   274,
-     550,   546,     2,   295,     0,     0,   295,   553,     2,   504,
-       2,   557,     0,     0,     0,     0,     0,     0,    18,    58,
-       4,     5,     6,    16,     0,     0,   295,     2,    66,    67,
-      68,    69,    48,    19,    49,    22,    47,    70,   295,     0,
-      73,    77,    80,    83,    88,    91,    93,    95,    97,    99,
-     101,   106,   498,   754,   454,   497,     0,   452,   453,     0,
-     569,   584,   587,   590,   596,   599,   602,   361,     0,     2,
-     742,     0,   295,   745,     2,    63,   295,     3,   428,     0,
-     436,   296,   295,   308,   335,   288,   350,   357,     3,     3,
-     410,   414,   424,   429,   476,   295,   430,   709,   710,   295,
-     431,   433,   295,     2,   586,   598,   732,     2,     2,   250,
-       2,   461,     0,   459,   458,   457,   142,     2,     2,   252,
-       2,     2,   251,     2,   282,     2,   283,     0,   281,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   570,   609,
-       0,   456,     2,   564,   573,   663,   566,   567,   536,   295,
-       2,   603,   612,   605,   606,     0,   277,   295,   295,   341,
-     296,     0,   296,     0,   295,   737,   741,   739,   537,   295,
-     548,   256,   264,   310,     0,     2,   538,   295,   502,   338,
-     339,   284,   353,   360,     0,   295,     0,   752,   401,     0,
-     479,   503,   253,   254,   523,   295,   438,     0,   295,   238,
-       0,     2,   240,     0,   296,     0,   258,     2,   259,   279,
-       0,     0,     2,   295,   548,   295,   489,   491,   490,     0,
-       0,   754,     0,   295,     0,   295,   493,   295,   563,   561,
-     562,   560,     0,   555,   558,     0,     0,   295,    55,   295,
-      70,    50,   295,    61,   295,   295,    53,    54,     2,   128,
-       0,     0,   450,     0,   449,   731,   112,   295,    17,     0,
-      29,    30,    35,     2,     0,    35,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,     0,     0,    51,    52,
+     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
+     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
+     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
+       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
+       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
+     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
+       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
+     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
+     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
+       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
+     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
+       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
+     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
+      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
+     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
+       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
+     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
+       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
+       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
+     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
+     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
+     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
+     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
+     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
+     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
+       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
+     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
+     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
+     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
+       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
+      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
+      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
+     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
+     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
+       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
+     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
+     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
+     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
+     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
+       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
+     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
+     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
+       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
+     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
+     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
+     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
+       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
+       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
+     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
+     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
+      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
+       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
+      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     109,     2,   649,   455,   646,   550,   550,   654,   483,   295,
-       2,   588,   589,     0,   600,   601,     0,     2,   743,   746,
-     112,   295,     0,     2,   711,   296,   715,   706,   707,   713,
-       0,     2,     2,   671,   550,   754,   620,   550,   550,   754,
-     550,   634,   550,   550,   685,   437,   668,   550,   550,   676,
-     683,   295,   432,   296,     0,     0,   295,   721,   296,   726,
-     754,   718,   295,   723,   754,   295,   295,   295,     0,   112,
-       0,    18,     5,     2,     0,    19,     0,   462,   752,     0,
-       0,   468,   242,     0,   295,     0,     0,     0,   548,   572,
-     576,   578,   608,   611,   615,   618,   571,   610,     0,   285,
-     661,     0,   295,   278,     0,     0,     0,     0,   276,     2,
-       0,   260,   539,   295,     0,     0,   295,     2,   366,   386,
-     375,     0,     0,   380,   374,   753,     0,     0,   399,     0,
-     296,     3,   417,     3,   421,   420,   594,     0,   534,   295,
-      63,     3,   295,   436,   296,     3,   430,   431,     2,     0,
-       0,     0,   488,   307,   295,   484,   486,     3,     2,     2,
-       0,   505,     3,     0,   557,   130,     0,     0,   223,     0,
-       0,     0,     2,     0,     0,    36,     0,     0,   112,   295,
-      20,     0,    21,     0,   695,   700,   451,   692,   550,   550,
-       0,   110,     3,     2,    27,     2,     0,    33,     0,     2,
-      25,     0,   107,   108,    74,    75,    76,    78,    79,    81,
-      82,    86,    87,    84,    85,    89,    90,    92,    94,    96,
-      98,   100,     0,     0,   755,   295,     0,     0,     0,   650,
-     651,   647,   648,   500,   499,   295,     0,   295,   717,   295,
-     722,   296,   295,   665,   295,   295,   708,   664,     2,   295,
-       0,     0,     0,     0,     0,     0,     0,     0,   686,     0,
-     672,   623,   639,   673,     2,   619,   626,   434,   621,   622,
-     435,     2,   633,   642,   635,   636,   669,   670,   684,   712,
-     716,   714,   754,   269,     2,   748,     2,   425,   720,   725,
-     426,     0,   404,     3,     3,     3,     3,   456,     3,     0,
-       2,   471,   467,   753,     0,   463,   470,     2,   466,   469,
-       0,   295,   243,   265,     3,   273,   275,     0,   456,     2,
-     574,   575,     2,   613,   614,     0,   662,   540,     3,   347,
-     346,   349,   348,   295,   541,     0,   542,   374,     0,     0,
-     295,   295,     0,     0,   695,   384,   387,   391,   550,   391,
-     390,   383,   376,   550,   378,   381,   295,   401,   395,   105,
-     402,   752,     0,     0,   439,   241,     0,     0,     3,     2,
-     671,   432,     0,   530,     0,   754,   492,     0,   295,   295,
-     295,     0,   554,   556,   131,     0,     0,   216,     0,     0,
-       0,   224,   225,    56,     0,    62,   295,     0,    60,    59,
-       0,     2,   129,     0,     0,     0,   696,   697,   693,   694,
-     461,    71,    72,   111,   116,     3,   110,     0,     0,     0,
-      24,    35,     3,     0,    32,   103,     0,     3,   653,   657,
-     660,   652,     3,   595,     3,   719,   724,     2,    63,   295,
-       3,     3,   296,     0,     3,   625,   629,   632,   641,   675,
-     679,   682,   295,     3,   624,   640,   674,   295,   295,   427,
-     295,   295,   749,     0,     0,     0,     0,   257,     0,   105,
-       0,     3,     3,     0,   464,     0,   460,     0,     0,   246,
-     295,     0,     0,   130,     0,     0,     0,     0,     0,   130,
-       0,     0,   110,   110,    18,     2,     0,     0,     3,   132,
-     133,     2,   144,   134,   135,   136,   137,   138,   139,   146,
-     148,     0,     0,     0,   286,   295,   295,   550,     0,   543,
-     295,   377,   379,     0,   393,   696,   388,   392,   389,   382,
-     386,   369,   400,     0,   582,     2,   667,   666,     0,   672,
-       2,   485,   487,   507,     3,   515,   516,     0,     2,   511,
-       3,     3,     0,     0,   559,   223,     0,     0,     0,   223,
-       0,     0,     3,    37,   112,   699,   703,   705,   698,   752,
-     110,     0,     3,   664,    42,     3,    40,     3,    34,     0,
-       3,   102,   104,     0,     2,   655,   656,     0,     0,   295,
-       0,     0,     0,     3,   641,     0,     2,   627,   628,     2,
-     643,     2,   677,   678,     0,     0,    63,     0,     3,     3,
-       3,     3,   412,   411,   415,     2,     2,   751,   750,   113,
-       0,     0,     0,     0,     3,   465,     3,     0,   244,   147,
-       3,   296,   295,     0,     0,     0,     0,     2,     0,   192,
-       0,   190,     0,     0,     0,     0,     0,     0,     0,   550,
-     112,     0,   152,   149,   295,     0,     0,   268,   280,     3,
-       3,   549,   616,   370,   385,   398,   295,   267,   295,     0,
-     518,   495,   295,     0,     0,   494,   509,     0,     0,     0,
-     217,     0,   226,    57,   110,     0,     2,   701,   702,     0,
-     117,   114,     0,     0,     0,     0,     0,     0,    23,     0,
-     658,   295,   583,   266,   727,   728,   729,     0,   680,   295,
-     295,   295,     3,     3,     0,   688,     0,     0,     0,     0,
-     295,   295,     3,   547,   472,   473,     0,     0,   247,   296,
-       0,     0,     0,     0,   295,   193,   191,   188,     0,   194,
-       0,     0,     0,     0,   198,   201,   199,   195,     0,   196,
-     130,    35,   145,   143,   245,     0,     0,   419,   423,   422,
-       0,   512,     2,   513,     2,   514,   508,   295,   229,     0,
-     227,     0,   229,     3,   664,   295,    31,   115,     2,    45,
-       2,    43,    41,    28,   113,    26,     3,   730,     3,     3,
-       3,     0,     0,   687,   689,   630,   644,   270,     2,   409,
-       3,   408,     0,   475,   472,   130,     0,     0,   130,     3,
-       0,   130,   189,     0,     2,     2,   210,   200,     0,     0,
-       0,   141,     0,   577,   617,     2,     0,     0,     2,   230,
-       0,     0,   218,     0,     0,     0,     3,     0,     0,     0,
-       0,     0,     0,   690,   691,   295,     0,   474,   153,     0,
-       0,     2,   166,   130,   155,     0,   183,     0,   130,     0,
-       2,   157,     0,     2,     0,     2,     2,     2,   197,    32,
-     295,   517,   519,   510,     0,     0,     0,     0,   115,    38,
-       0,     3,     3,   659,   631,   645,   681,   413,   130,   159,
-     162,     0,   161,   165,     3,   168,   167,     0,   130,   185,
-     130,     3,     0,   295,     0,   295,     0,     2,     0,     2,
-     140,     2,   231,   232,     0,   228,   219,     0,   704,     0,
-       0,   154,     0,     0,   164,   234,   169,     2,   236,   184,
-       0,   187,   173,   202,     3,   211,   215,   204,     3,     0,
-     295,     0,   295,     0,     0,     0,    39,    46,    44,   160,
-     163,   130,     0,   170,   295,   130,   130,     0,   174,     0,
-       0,   695,   212,   213,   214,     0,   203,     3,   205,     3,
-     295,   220,   233,   150,   171,   156,   130,   237,   186,   181,
-     179,   175,   158,   130,     0,   696,     0,     0,     0,     0,
-     151,   172,   182,   176,   180,   179,   177,     3,     3,     0,
-       0,   496,   178,   206,   208,     3,     3,   207,   209
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
+       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
+     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
+     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
+       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
+     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
+     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
+     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
+      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
+     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
+     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
+     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
+     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
+       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
+     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
+     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
+     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
+       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
+       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
+     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
+      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
+      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
+      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
+       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
+       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
+     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
+       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
+     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
+     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
+       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
+       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
+       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
+       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
+     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
+     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
+     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
+     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
+       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
+       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
+     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
+      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
+     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
+      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
+     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
+       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
+     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
+     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
+       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
+     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
+       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
+     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
+     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
+     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
+     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
+       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
+       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
+       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
+       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
+       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
+       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
+     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
+     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
+       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
+       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
+       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
+     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
+     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
+       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
+      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
+       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
+     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
+       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
+       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
+     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
+     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
+       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
+     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
+       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
+       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
+     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
+       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
+       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
+     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
+       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
+       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
+     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
+     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
+     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
+     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
+     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
+     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
+     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
+       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
+       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
+     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
+       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
+     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
+     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
+     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
+       3,     3,   203,   205
 };
 
@@ -1561,194 +1562,192 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   819,   469,   302,    48,   135,   136,   303,   304,   305,
-     306,   766,   767,  1145,  1146,   307,   382,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-    1040,   519,   984,   323,   985,   547,   954,  1067,  1543,  1069,
-    1070,  1071,  1072,  1544,  1073,  1074,  1460,  1461,  1422,  1423,
-    1424,  1522,  1523,  1527,  1528,  1563,  1564,  1075,  1380,  1076,
-    1077,  1314,  1315,  1316,  1504,  1078,   147,   960,   961,   962,
-    1400,  1484,  1496,  1497,   470,   471,   881,   882,  1048,    52,
-      53,    54,    55,    56,   348,   160,    59,    60,    61,    62,
-      63,   350,    65,    66,   266,    68,    69,   276,   352,   353,
-      72,    73,    74,    75,   120,    77,   206,   355,   121,    80,
-     122,    82,    83,   456,    84,   455,   690,   691,   692,   915,
-    1096,   916,    85,    86,   459,   457,   698,   861,   862,   358,
-     359,   701,   702,   703,   360,   361,   362,   363,   467,   341,
-     137,   138,   523,   325,   172,   647,   648,   649,   650,   651,
-      87,   123,    89,   490,   491,   946,   492,   279,   496,   326,
-      90,   139,   140,    91,  1337,  1118,  1119,  1120,  1121,    92,
-      93,   719,    94,   275,    95,    96,   189,  1042,   681,   413,
-     127,    97,   502,   503,   504,   190,   270,   192,   193,   194,
-     271,   100,   101,   102,   103,   104,   105,   106,   197,   198,
-     199,   200,   201,   831,   606,   607,   608,   609,   202,   611,
-     612,   613,   573,   574,   575,   576,   755,   107,   615,   616,
-     617,   618,   619,   620,   977,   757,   758,   759,   596,   366,
-     367,   368,   369,   327,   166,   109,   110,   111,   371,   696,
-     570
+      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
+     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
+    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
+    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
+    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
+    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    51,
+      52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
+      62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
+      71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
+     121,    81,    82,   455,    83,   454,   688,   689,   690,   908,
+    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
+     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
+     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
+      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
+      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
+      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
+     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
+     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
+     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
+     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
+     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
+     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
+     569
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1414
+#define YYPACT_NINF -1310
 static const yytype_int16 yypact[] =
 {
-    4857,  9883, -1414,    35, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,   142, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414,    98,    98,    98,  1334,
-     684,   153,  7496,   290, -1414, -1414, -1414, -1414, -1414,   204,
-   -1414, -1414, -1414, -1414,   901,   229, -1414, -1414, -1414, -1414,
-    9565, -1414, -1414, -1414, -1414,   -15,   301, -1414,  1624, -1414,
-   -1414, -1414, -1414,   302,  1806,   471,   143,  7613, -1414, -1414,
-    9603,  1367, -1414, -1414, -1414,  1721,   510,  3394,  1032,  1137,
-    1721,  1303, -1414, -1414,  1174,  1520, -1414,  1721,  1532, -1414,
-     385, -1414,   421,   523, -1414, -1414, -1414, -1414,   460,   301,
-      98, -1414,    98, -1414, -1414, -1414, -1414, 10414,  1624, -1414,
-   -1414,  1624, -1414,   447, -1414, 10444, -1414, -1414,  2082, 10554,
-   -1414,   399,   399,   399, -1414, -1414, -1414,    98, -1414, -1414,
-   -1414,   544,   555,   575, -1414, -1414, -1414,   617, -1414, -1414,
-   -1414, -1414, -1414,   621,   629, -1414, -1414,    11,  9069,  3253,
-     578,   492,   499,   631,   635,   642,   647,  9853,  7015,   649,
-     656, -1414,  9713, -1414, -1414, -1414, -1414,   661, -1414,   193,
-    3453,  3453, -1414,   667,   251, -1414, -1414, -1414, -1414,   692,
-     327,   346,   368,    98,   673, -1414, -1414,  1806,  3136,   748,
-   -1414,    12, -1414,    98,    98,   301, -1414, -1414,    75, -1414,
-      98,    98, -1414,  3167,   711,   722,   399,  6806, -1414, -1414,
-     726,  9565, -1414, -1414,  1721, -1414, -1414, -1414,   301, -1414,
-    1624,   -15, -1414,  7963, -1414,   399,   399,   399,   301, -1414,
-    1334, -1414,  5769, -1414, -1414,   709,   399, -1414,   399, -1414,
-     204,  9069, -1414,   763, -1414,   684,   765,   399, -1414,  1334,
-     750,   766, -1414,  7496,   705, -1414, -1414, -1414,  9532, -1414,
-   -1414, 10864, -1414,   748,    63,  6244, 10554,  2082,  3167, -1414,
-      85, -1414, -1414, 10444,  1624,   804,  7644, -1414, -1414,   319,
-   -1414, 11778,   782,   851,  4657,   828,  4994, 11639, -1414,   839,
-   -1414, -1414, -1414, -1414, 11658, 11658,  8841,   844, -1414, -1414,
-   -1414, -1414, -1414, -1414,   869, -1414,   759,  2440,  9183,  4994,
-   -1414,   593,   571,   645,   313,   861,   842,   858,   843,   911,
-     -20, -1414, -1414,   876,   326, -1414,    83, -1414, -1414,  3253,
-   -1414, -1414,   139,   900, -1414,   422,   900,   905,   204, -1414,
-   -1414,   909, 10414, -1414,   912,   917,  9297, -1414, -1414,  1382,
-    2358,  8427,  6806,  1721, -1414,  1721,   399,   399, -1414, -1414,
-   -1414, -1414, -1414, -1414,   399, 10414,  1624, -1414, -1414, 10584,
-    1776, -1414, 10304, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-     936, 11446,  4994, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414,  2082, -1414,   836,
-     947,   962,   963,   923,   965,   970,   972,  3136, -1414, -1414,
-     959,   -15,   975, -1414, -1414,   978, -1414, -1414, -1414,  9532,
-   -1414, -1414, -1414, -1414, -1414,  3167, -1414,  9069,  9069, -1414,
-     399,  2082,  6926,  1624,  8543, -1414, -1414, -1414, -1414,  9532,
-      63, -1414, -1414,  1721,   301, -1414, -1414,  9532, -1414,  6689,
-   -1414, -1414,   399,   399,   271, 10023,   907,   977,   960,   988,
-     399, -1414, -1414, -1414, -1414, 10980, -1414,   500,  6556, -1414,
-     301,   990, -1414,  2082, 11860, 11504, -1414, -1414, -1414, -1414,
-     935,  3167, -1414,  8659,   748,  6228, -1414, -1414, -1414,  1482,
-     550,   876,   684,  7644,  1180, 10444, -1414,  7644, -1414, -1414,
-   -1414, -1414,   561, -1414,   997,   851,   -13,  8841, -1414, 10694,
-   -1414, -1414,  8841, -1414,  8955,  8841, -1414, -1414,   996, -1414,
-     585,  1003,   455,  1017, -1414, -1414,  9993,  6037, -1414,   419,
-   -1414, -1414, 11562, -1414,   469, 11562, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414,  6244,  6244, -1414, -1414,
-    4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,
-    4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  3735,  6244,
-   -1414,   326,  1049, -1414, -1414,    98,    98, -1414, -1414,  9069,
-   -1414, -1414,   978,   705, -1414,   978, 11581, -1414, -1414, -1414,
-    3645,  6037,  1016,  1018, -1414, 10554, -1414, -1414,   661, -1414,
-    1020,  1157,  1025,  2611,    95,   876, -1414,    98,    98,   876,
-     134, -1414,    98,    98,   978, -1414, -1414,    98,    98, -1414,
-     900, 10724,  1624, 12005,    69,   227, 10724, -1414, 10864, -1414,
-     876, -1414, 10414, -1414,   218,  8079,  8079,  8079,  1624, -1414,
-    5555,  1012,   260,   936,   778,  1021,  1024, -1414,  1026,  3453,
-     343, -1414,  1115,  1624,  8079,   705,  2082,   705,   748,   534,
-     900, -1414, -1414,   596,   900, -1414, -1414, -1414,   851, -1414,
-     900,   301, 10980, -1414,   687,  1042,   700,  1043, -1414,  1044,
-     301, -1414, -1414,  9532,   301,  1041, 10694,  1045, -1414,  2066,
-   -1414,   408,   416,   684, -1414,   684,  1047,  4994, -1414,   684,
-   12005, -1414, -1414,  1053, -1414, -1414, -1414,   705, -1414, 11933,
-     917, -1414,  8079,   489,  8427, -1414, -1414,   661,  1055,  1056,
-    1482,  3284, -1414, -1414,  7644, -1414, -1414,  1038, -1414, -1414,
-    1064, -1414,  1038,  1070, 11778,  6244,    93,  1051,   138,  1074,
-    1058,  1075,   844,  1069,  1077, -1414,  1079,  1081, 10133,  6775,
-   -1414,  6244, -1414,   455,  1974, -1414, -1414, -1414,    98,    98,
-    6104,  6244,  1076, -1414, -1414,   936,   707, -1414,  6244, -1414,
-   -1414,   677, -1414, -1414, -1414, -1414, -1414,   593,   593,   571,
-     571,   645,   645,   645,   645,   313,   313,   861,   842,   858,
-     843,   911,  4994,   847, -1414, 10980,  1083,  1084,  1088,  1049,
-   -1414, -1414, -1414, -1414, -1414, 10980,   717,  8079, -1414, 10414,
-   -1414,  7135,  9411, -1414, 10304,  7015, -1414, -1414,  1157, 10980,
-     945,  1089,  1090,  1095,  1096,  1099,  1100,  1105, -1414,  4392,
-    2611, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,   978, -1414,
-   -1414, -1414,   876, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,  1112, -1414,  1113,  1118, -1414, -1414,   -15,  1076,  5555,
-   -1414, -1414, -1414, 11446,  1116, -1414, -1414, -1414, -1414, -1414,
-     684,  6369,  1201, -1414, -1414, -1414, -1414,  1103,   -15, -1414,
-   -1414,   978, -1414, -1414,   978,   126,   978, -1414, -1414, -1414,
-   -1414, -1414, -1414,  9743, -1414,   301, -1414, -1414,   438,   452,
-   10584,  7255,  2372,  4994,  2870, -1414, -1414,  1127,    39,  1127,
-   -1414,   684, -1414,    98, -1414, -1414, 10163,   960, -1414, -1414,
-   -1414,   977,  1143,  1131, -1414, -1414,  1150,  1153, -1414,   489,
-    1995, -1414,   363, -1414,  3284,   876, -1414,  1160,  7644, 10834,
-    9069,  1161, -1414, -1414,  1151,  1162,  1156, -1414,  4994,   120,
-     279,  1163, -1414,  1166,   705,  1166,  6037,  6244, -1414, -1414,
-    1166,  1165, -1414,  1176,  1182,  1185,  1974, -1414, -1414, -1414,
-   11446, -1414, -1414, -1414, -1414,  1168,  6244,  1188,   705,  5555,
-   -1414, 11562, -1414,   705, -1414, -1414,  6244, -1414,   614,   900,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414,   936,   917,  9297,
-   -1414, -1414,  7375,  1187, -1414,   758,   900, -1414,   785,   797,
-     900, -1414,   399,  5912, -1414, -1414, -1414, 10980, 10980, -1414,
-    8543,  8543, -1414,  1186,  1189,  1191,  1199, -1414,  1206,   439,
-     119,  1076, -1414,   705, -1414,  3453, -1414,  6244,   480, -1414,
-    6655,  1211,  1212, 11388,  1213,  1217,    -6,    58,   117,  6244,
-    1221,   301,  6244,  6244,  1215,  1222,   610,  1203, -1414, -1414,
-   -1414,  1218, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-   -1414,   684,  1226,  6244, -1414, 10980, 10980,    98,  1228, -1414,
-   10273, -1414, -1414,   864, -1414,  2870, -1414, -1414, -1414, -1414,
-    2066, -1414, -1414,  1230, -1414, -1414, -1414, -1414,  1231,  1995,
-   -1414, -1414,  1223, -1414,  1038, -1414, -1414,  2082,  1235, -1414,
-   -1414, -1414,   744,  1237, -1414,   138,  1245,  4994,  1232,   138,
-     138,  1250,  1246, -1414,  9993,   825,   900, -1414, -1414,  1026,
-    6244,  1251,  1168,   536,   161,  1261, -1414,  1246, -1414,  1254,
-    1261, -1414, -1414,  1257, -1414, -1414,   978,  1270,  1271,  6895,
-    1272,  1275,  1280, -1414, -1414,  1283, -1414, -1414,   978, -1414,
-   -1414, -1414, -1414,   978,  6244,  6244,   917,  1282, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-    4994,  4994,  1284,  1286,  1261, -1414, -1414,   684, -1414, -1414,
-   -1414,  5291, 10834,  6244,  6244,  1335,  6244, -1414,  1263, -1414,
-    1267, -1414,  1281,  6244,  1288,  6244,  1039,  1290,    28,    98,
-    5165,   856, -1414, -1414,  6369,  1287,   488, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414, -1414, -1414, 11206, -1414,  8659,  1304,
-   -1414, -1414, 10834,   490,   498, -1414,  1301,  1306,   851,  1317,
-   -1414,   418, -1414, -1414,  6244,  1316, -1414, -1414,   978,  1314,
-   -1414, -1414,  1318,   589,   691,   705,  1320,  1322, -1414,  1329,
-   -1414, 10980, -1414, -1414, -1414, -1414, -1414,  1330, -1414, 10980,
-   10980, 10980, -1414, -1414,  1332, -1414,  1333,  1336,  1339,   517,
-    8195,  8311, -1414, -1414,   123, -1414,  1343,  1348, -1414,  8775,
-     755,   768,  1342,   770,  6525, -1414, -1414, -1414,   508, -1414,
-     777,  1352,  1353,   301,  1403,   933, -1414, -1414,  6244, -1414,
-   11388, 11562, -1414, -1414, -1414,  1359,  1364, -1414, -1414, -1414,
-    1363, -1414, -1414, -1414, -1414, -1414, -1414, 10834,   851,   273,
-   -1414,  1347,   851,  1168,   268, 10980, -1414, -1414, -1414, -1414,
-   -1414, -1414, -1414, -1414,  1365, -1414, -1414, -1414, -1414, -1414,
-   -1414,  1368,  1371, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
-    1375, -1414,  1374, -1414, -1414, 11388,    91,  6244, 11388, -1414,
-    1385,  6244, -1414,   288,  1402,  1405, -1414, -1414,  1390,  1393,
-    1376, -1414,   882, -1414, -1414, -1414,  1624,  2082,  1388,   869,
-     884,  4994, -1414,   803,  1394,  6244, -1414,   705,   705,  1399,
-    1406,  1407,  1409, -1414, -1414,  8543,  1397, -1414,  1473,  4994,
-    1404, -1414, -1414, 11299, -1414,   811, -1414,  1395, 11388,  1401,
-   -1414, -1414,  1410, -1414,  1412, -1414,  1433,  1441, -1414,  1415,
-   10834, -1414, -1414, -1414,   851,   705,  1429,  1417,  1436, -1414,
-    1446,  1261,  1261, -1414, -1414, -1414, -1414, -1414, 11388,   278,
-   -1414,   910, -1414, -1414,  7730, -1414, -1414,  1435,  6244, -1414,
-    6244,  7730,   301, 10694,   301, 10694,  1462, -1414,  1463, -1414,
-   -1414,  1460,   869, -1414,   812, -1414, -1414,  6244, -1414,  1465,
-    1466, -1414,  4994,  4994, -1414, -1414,  1007,    37, -1414, -1414,
-    1447, -1414,  1007, -1414, -1414,  2485,   705, -1414, -1414,   301,
-   10694,   301, 10694,  1472,  1450,   705, -1414, -1414, -1414, -1414,
-   -1414, 11299,  1468,  1007,  7847,  6244, 11210,  1475,  1007,  1477,
-    2485,  2994, -1414, -1414, -1414,  1495, -1414, -1414, -1414, -1414,
-    9069, -1414, -1414, -1414, 11077, -1414, 11299, -1414, -1414,  1476,
-   10984, -1414, -1414, 11210,   301,  2994,   301,  1502,  1506,   813,
-   -1414, 11077, -1414, -1414, -1414, 10984, -1414, -1414, -1414,   301,
-     301, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414
+    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
+     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
+   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
+   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
+   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
+     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
+    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
+   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
+   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
+    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
+    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
+     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
+   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
+     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
+   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
+    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
+     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
+      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
+     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
+    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
+     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
+   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
+    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
+     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
+    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
+   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
+   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
+   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
+   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
+     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
+   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
+   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
+     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
+    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
+   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
+   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
+   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
+     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
+     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
+   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
+    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
+   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
+   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
+   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
+    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
+    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
+     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
+   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
+   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
+    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
+   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
+   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
+   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
+     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
+   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
+    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
+     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
+   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
+    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
+   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
+    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
+    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
+   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
+    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
+   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
+     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
+   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
+    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
+   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
+    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
+    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
+     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
+   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
+   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
+     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
+    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
+     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
+   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
+    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
+   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
+   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
+    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
+   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
+   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
+    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
+     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
+    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
+    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
+   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
+   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
+   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
+   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
+   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
+     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
+    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
+      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
+    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
+    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
+   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
+    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
+    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
+   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
+   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
+     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
+    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
+    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
+   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
+     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
+    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
+    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
+    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
+   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
+     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
+   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
+     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
+   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
+    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
+    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
+   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
+   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
+    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
+   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
+   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
+    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
+     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
+    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
+   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
+   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
+   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
+   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
+   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
+    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
+   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
+   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
+   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
+    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
+    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
+    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
+   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
+    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
+    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310
 };
 
@@ -1756,29 +1755,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1414,  4377,  3077, -1414,  1645, -1414,   305,   958,   -11, -1414,
-     552,  -530,  -487,  -944,  -142,  3604,     0, -1414,  1277,   511,
-     529,   298,   549,  1057,  1060,  1054,  1062,  1065, -1414,  -211,
-    -327,  5116,  -961,  -725,  -952, -1414,  -200,  -594,   572, -1414,
-    1379, -1414,   397, -1413, -1414, -1414,   129, -1414, -1160,  -935,
-     246, -1414, -1414, -1414, -1414,    68, -1131, -1414, -1414, -1414,
-   -1414, -1414, -1414,   321, -1152,    33, -1414,  -696, -1414,   506,
-     296, -1414,   169, -1414,  -339, -1414, -1414, -1414,   558,  -728,
-   -1414, -1414,    19,  -974,   177,  2303, -1414, -1414, -1414,   -91,
-   -1414,   166,   269,  -194,  1705,  3615, -1414, -1414,    36,   224,
-     628,  -235,  1694, -1414,  1557, -1414, -1414,   200,  2163, -1414,
-    2278,   185, -1414, -1414, -1414,  -607, -1414,   956,   957,   545,
-     725,  -320, -1414, -1414, -1414,   950,   719,  -493, -1414,  -472,
-    -355,  1296, -1414, -1414,  -899,  -946,   440,   524,  1067,   168,
-   -1414,  1040,   317,  -281,  -198,  -141,   672,   781, -1414,  1005,
-   -1414,  2834,    55,  -450,   932, -1414, -1414,   712, -1414,  -228,
-   -1414,   104, -1414, -1414, -1414, -1285,   420, -1414, -1414, -1414,
-    1178, -1414,    31, -1414, -1414,  -862,   -94, -1364,  -152,  1641,
-   -1414,  3733, -1414,   927, -1414,  -170,   493,  -184,  -183,  -181,
-       7,   -42,   -36,   -33,  1610,     4,    10,    14,  -143,  -177,
-    -172,  -162,  -161,  -319,  -513,  -508,  -498,  -547,  -310,  -528,
-   -1414, -1414,  -511,  1101,  1102,  1110,  1575,  4802,  -565,  -560,
-    -559,  -541,  -551, -1414,  -506,  -744,  -736,  -732,  -593,  -267,
-    -227, -1414, -1414,   624,   294,   -85, -1414,  3753,    44,  -634,
-    -173
+   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
+     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
+     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
+    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
+     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
+     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
+   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
+     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
+   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
+   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
+     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
+    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
+     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
+    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
+   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
+   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
+   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
+    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
+   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
+       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
+    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
+   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
+    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
+    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
+    -222
 };
 
@@ -1786,757 +1785,739 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -526
+#define YYTABLE_NINF -521
 static const yytype_int16 yytable[] =
 {
-      50,   115,   151,   400,   401,   771,   402,    99,   152,   973,
-     403,   153,   429,   454,   874,   404,   756,   974,   408,  1080,
-     116,   975,   262,   441,   269,   405,   406,   744,   850,   384,
-     385,   605,    50,    51,  1142,   982,    70,   411,   833,    99,
-     610,   825,   826,   727,   149,   409,   499,   732,   154,  1150,
-      50,    31,  1398,   836,   155,  1462,   832,   163,   156,   843,
-     827,   800,   282,   145,   188,    51,  1208,   211,    70,   528,
-      50,   195,   343,   824,   218,   567,  1200,   228,    31,   597,
-     671,  -235,  -235,   400,   401,  1184,   402,   926,   821,   221,
-     403,  1318,   170,   822,   168,   404,   520,   737,   408,  1194,
-     680,  1217,  1218,   823,   738,   405,   406,   115,   684,   426,
-     568,   476,   478,  1550,    31,   115,   171,   124,   268,   273,
-     283,   254,   217,   412,    31,   409,  1209,   410,   715,  1462,
-    1210,  1182,  1183,  1561,    31,  1419,  1420,    31,   629,   244,
-    1565,   955,   633,   865,   866,   151,   675,   677,   308,   149,
-     412,   152,  -235,  1079,   153,  1481,   163,   115,   346,   168,
-    1319,   884,   211,   863,   863,   863,    64,   472,   973,   374,
-     722,   204,   477,    31,   217,   528,   974,    57,   117,  1260,
-     975,   853,   863,   920,   420,   854,   412,   188,   188,  1212,
-    1211,   154,   328,   578,   482,   163,   412,   155,    64,   579,
-      78,   156,   528,   268,   834,  1421,   602,   821,   528,    57,
-     956,    50,   822,   669,   731,  1190,   716,   217,   163,   938,
-     293,   205,   823,   211,    71,   151,   179,   674,   676,  1127,
-     444,   152,    78,   746,   153,  1213,  1087,   666,  -113,  -113,
-     863,   308,  1191,   841,   212,   602,  1263,   222,   580,   958,
-     412,   125,   216,    50,  -113,   437,    71,   589,   825,   826,
-      99,   273,   144,  1466,   667,  1026,   273,   268,   268,   836,
-     118,  1152,   506,   115,  1264,   163,   263,   827,   217,   264,
-     864,   864,   864,  1025,   464,   328,    51,   343,  1001,    70,
-    1013,   214,  1184,   610,   108,   108,   308,  1103,   804,   864,
-    1090,   146,  1343,   658,   216,   821,   113,   520,   308,   378,
-     822,   666,   520,   148,  1004,   520,   217,   437,   725,   161,
-     823,   217,  1199,  1508,   572,   379,   108,   477,   472,   149,
-    1200,   673,  1419,  1420,   448,   863,   374,   678,   667,   855,
-    -470,   157,   115,   856,   905,  1184,   346,   216,   472,   569,
-     603,   621,   168,   461,   597,   528,   472,   864,  1537,   597,
-    1539,  1466,  1080,   810,   108,   626,  1466,   388,   793,   626,
-     930,  -470,   115,  -470,  1492,   833,   260,  -470,  -113,   825,
-     826,   685,  1401,   389,   161,  1405,  1466,   579,   440,  1128,
-     599,  1182,  1183,  1466,   715,  1551,  1129,   268,   827,  -113,
-     442,  1191,  1430,   557,   558,   859,   217,   188,   216,     8,
-       9,    10,    11,    12,   374,   173,   850,   324,   183,    64,
-      43,   252,  1566,   876,   473,   268,   340,   308,   308,  1247,
-      57,   268,   837,  1251,   626,   571,   840,   412,    31,   559,
-     560,   343,   484,   391,    46,    47,   216,   443,   494,   501,
-     495,   216,   864,    78,   877,   115,   644,   857,    78,   392,
-     878,   860,   393,  1451,  1452,  1214,    34,  1170,  1172,  1184,
-    1138,   328,   328,   268,   203,   855,   431,    71,   394,  1110,
-     435,   268,   716,   626,   395,    50,   929,   217,   374,   721,
-    1200,   112,    99,    98,   736,   115,  1079,  1200,  1114,   499,
-     396,   249,    41,    42,  1148,  1259,   888,   308,   875,   115,
-     324,  1024,   308,  -291,   308,   308,  1457,   179,    51,   917,
-     610,    70,   754,  -521,   921,    98,   115,   346,  1341,   217,
-     763,   583,   923,   412,   630,  1342,   216,   150,   634,   328,
-     922,   112,   435,    98,  1026,   489,   919,   108,   924,    43,
-    1200,  -106,    41,    42,   921,  -106,   715,   191,   328,   466,
-      98,  1521,   886,    98,   753,   522,   412,  1526,   923,   254,
-    1091,   572,   572,    46,    47,   214,  1381,   161,   265,   308,
-     769,   995,  1006,    43,  1092,   473,  1094,   810,  1546,  1138,
-     626,   346,   472,  1553,   920,   621,  1197,  1097,   939,  1097,
-     602,   603,   331,   603,  1197,   473,  1332,    46,    47,   332,
-     706,   588,  1198,   473,  1334,   594,   707,   216,   935,    78,
-    1324,   626,  1333,   328,   751,  1024,   626,   812,   621,  1367,
-    1335,  1126,   626,  1368,   627,   626,   626,   626,   631,    78,
-    1382,   340,    98,   889,   716,   412,  -113,    78,  -113,   713,
-     217,    64,  -113,   -10,   626,    98,   268,   895,  1039,   216,
-     723,   112,    57,   343,  -444,   851,   724,  -113,  -113,  1037,
-     599,   733,    41,    42,   165,  1181,   810,   734,   217,  1029,
-     399,   191,   288,   217,  -445,    78,   115,   254,   330,   914,
-    1084,   553,   554,    41,    42,   750,   324,   324,   214,   231,
-    1348,   751,   929,   232,    98,   892,   236,   412,   238,    71,
-    1379,   550,   626,   940,   621,   247,    98,   551,   552,   515,
-     721,   721,  1122,  1154,   689,   412,   278,   959,   400,   401,
-     280,   402,  1044,   555,   556,   403,  1498,   118,   281,   165,
-     404,   333,   597,  1498,   408,   334,    98,   929,   115,   346,
-     405,   406,   335,   754,   754,   217,   112,   336,   141,   142,
-     480,   372,   489,   112,   324,   373,   489,    41,    42,   217,
-     377,   409,  1111,   113,    41,    42,   522,   112,   522,   108,
-     216,   522,   386,   324,   522,  1151,   973,  1429,    41,    42,
-     852,  1392,   994,   991,   974,   340,  1547,   899,   975,   572,
-    1249,   390,  1350,   751,   715,   398,   867,   626,   216,   626,
-     901,  1009,   410,   216,   626,   346,   751,   990,   603,   743,
-     427,   883,    98,   991,   739,   343,   740,  1003,  1174,   741,
-     603,   428,   747,   707,   764,   436,  1039,   743,   433,   770,
-     743,   451,   231,   604,   529,   530,   531,   443,   324,   473,
-     112,   812,   141,   142,  1245,   781,   782,   783,   784,   808,
-     579,    41,    42,  1292,  1293,  1375,   217,  1166,   532,   412,
-     533,   751,   534,   535,  1500,   473,  1501,  -368,  1376,  -397,
-    1378,   308,   462,    78,   751,   216,   751,  1383,   466,   870,
-     849,   505,   716,   751,  1169,   594,   602,   436,   463,   216,
-     191,   858,   501,   626,  1195,   704,  1171,   810,   602,    78,
-     115,   346,   914,  1447,   914,   713,   929,    70,   485,  1444,
-     524,  1467,  1514,  1571,   214,   666,   115,   751,  1515,   579,
-     917,  1548,   165,   293,  1256,  1370,   412,   509,   214,   940,
-     940,   529,   530,   531,   721,   254,   330,   412,   514,   115,
-     308,   528,   667,   561,   562,   689,   526,   919,    49,   114,
-     885,   563,   887,   751,   996,   532,   346,   533,  1115,   534,
-    1321,   716,   565,    37,   330,   412,   754,    40,    98,   929,
-     929,   231,   604,   236,    41,    42,   564,   114,   114,   705,
-      49,  1388,  1389,   489,   328,    43,   216,  1439,   991,  1533,
-    1444,  1445,    49,  1300,  1301,   566,  1303,   569,    49,   346,
-      44,   339,   934,  1308,  -441,  1310,    49,   340,   587,    46,
-      47,   694,    49,  1240,   590,    49,  1493,  1494,    49,    -3,
-     626,   626,   420,   662,   412,   214,     2,   208,     4,     5,
-       6,     7,   114,   114,   482,   330,   412,    64,   639,  1138,
-     308,  1419,  1420,   851,   834,   330,   602,   659,    57,     8,
-       9,    10,    11,    12,   777,   778,    49,   217,   668,    49,
-     143,   231,   660,   661,  1446,   663,    49,   713,  1005,   693,
-     664,    78,   665,   808,   779,   780,  1202,   670,    31,   259,
-     115,   697,  1459,   695,   820,   914,   604,  1311,  1312,  1313,
-     914,    35,   699,    36,  -239,    71,   735,    49,   748,   940,
-     785,   786,   704,   752,   959,    49,    34,   268,   959,   959,
-      49,  1349,  1351,  1352,   243,   246,  1116,   760,   813,   -12,
-     814,   524,   817,   524,   626,   343,   524,   828,   -13,   524,
-    -292,   872,   873,    43,   880,    49,    49,     8,     9,    10,
-      11,    12,   900,   902,   724,   907,   903,   910,   571,   346,
-     412,    49,   928,  -418,    -3,  1519,  1459,    46,    47,    49,
-    -525,   943,   808,   950,   964,   108,    31,  1425,    49,   340,
-     952,    49,   918,   957,   963,   965,   967,   968,   114,   969,
-     929,   970,   986,   998,   999,   689,   705,   216,  1000,  1015,
-    1016,   273,   115,   114,    34,  1017,  1018,   114,   929,  1019,
-    1020,    49,   114,   820,   604,  1021,   473,   489,  1117,   324,
-     115,   221,  1032,  -406,   308,    49,    49,    57,  -405,    37,
-    1081,  1046,    49,    40,  1083,   704,   443,  1339,   626,    49,
-      41,    42,   115,   108,   913,   704,   112,  1105,   141,   240,
-      78,    43,   112,  1104,   141,   142,   217,    41,    42,   704,
-      70,  1115,  1106,    41,    42,  1107,   818,   751,   602,  1131,
-    1113,  1123,  1124,  1125,    71,    46,    47,  1134,   849,  1130,
-     980,   929,   929,   241,  1140,   458,  1135,    49,   242,   728,
-     626,   626,  1136,  1144,   729,  1137,   743,  1164,  1144,   273,
-    1143,  1187,  1185,  1442,   308,  1186,  -293,    49,    49,  1188,
-     693,   820,  1559,     8,     9,    10,    11,    12,  1189,   705,
-    1203,  1204,  1206,   604,    49,   713,  1207,  1399,    49,   705,
-    1215,  1399,  1219,    -3,  1220,  1222,  1227,   115,  1232,   645,
-    1202,  1237,    31,   705,   108,  1235,   400,   401,  1144,   402,
-    1241,  1246,   494,   403,   217,    49,  1115,  1248,   404,   689,
-    1253,   408,  1254,  1261,  1250,    49,  1268,  1270,   405,   406,
-      34,     2,   208,     4,     5,     6,     7,  1265,   212,   222,
-    1272,  1273,  1302,    49,  1274,   666,   216,  1275,   409,    49,
-      64,    49,  1276,  1278,  1285,  1305,  1294,   268,  1295,  1306,
-     230,    57,  1323,   808,   713,  1093,   131,   918,   132,   133,
-     134,  1532,   667,  1307,  1330,   626,  1336,    41,    42,  1116,
-    1309,   646,  1317,  1338,    78,   214,   114,  1340,  1344,  1346,
-    1347,    49,  1353,  1482,  1354,   175,    35,   604,    36,    49,
-     115,  1355,  1357,    49,  1363,  1364,  1365,    49,    71,  1366,
-     114,  1377,   114,  1068,    37,  1373,   176,   177,    40,  1115,
-    1374,  1384,  1385,  1313,   115,    41,    42,   704,   704,  1393,
-     473,   115,   645,   115,  1394,   115,   442,  1395,   255,  1402,
-    1413,    57,  1405,  1414,   216,  -407,  1417,   114,   151,   340,
-     645,   373,   114,   645,   152,  1428,   108,   153,  1432,  1436,
-    1202,  1434,  1437,  1443,    78,  1531,  1448,  1202,  1438,  1453,
-     115,  1117,   115,  1368,  1116,  1458,  1454,  1455,   108,  1456,
-    1472,  1463,  1474,   443,   115,   704,   704,  1468,    71,  1476,
-    1531,  1531,   726,  1470,   730,  -294,   108,  1478,   163,  1485,
-     308,   114,     8,     9,    10,    11,    12,  1480,    49,  1486,
-     693,   705,   705,  1487,    37,  1531,  1488,    76,    40,    49,
-    1202,    49,   374,   511,  1441,    41,    42,  1499,  1144,  1144,
-    1144,    31,  1509,  1511,   418,  1513,    43,  1517,  1518,  1525,
-      49,  1540,  1541,  1545,   328,   548,   549,  1554,   918,    76,
-    1552,   720,   112,   918,   141,   142,    49,   438,   108,    34,
-      46,    47,   114,    41,    42,  1556,  1117,   446,  1562,   705,
-     705,    49,  1569,   114,    49,   114,  1570,  1116,  1221,   789,
-     787,  1322,  1520,   548,   788,  1205,   743,   224,   790,  1431,
-     473,   108,   791,  1572,   245,  1387,  1252,   473,  1403,  1226,
-    1502,    57,   908,   909,  1098,  1234,  1102,    49,    57,   931,
-     806,   114,  1139,   114,  1045,   879,   945,   114,  1112,   548,
-     164,   953,  1331,   718,    78,   114,     0,   126,   129,   130,
-       0,    78,   796,   797,   196,   521,  1328,   219,    49,    49,
-     229,   798,     0,     0,   871,     0,     0,     0,    71,     0,
-     473,     0,    49,     0,     0,    71,    37,     0,   176,   177,
-      40,    57,     0,   178,     0,    67,   119,    41,    42,  1117,
-       0,   704,  1144,  1144,   693,   354,     0,     0,     0,   704,
-     704,   704,     0,     0,    78,     2,   208,     4,     5,     6,
-       7,     0,     0,   925,   108,   927,     0,    67,     0,   458,
-       0,   256,  1505,   257,  1505,     0,     0,     0,    71,     0,
-    1483,     0,     0,   178,     0,   162,   178,     0,   108,   164,
-    1329,   215,     0,     0,     0,   108,   414,     0,     0,     0,
-       0,   234,   375,   422,     0,   223,    49,     0,     0,  1505,
-       0,  1505,     0,     0,     0,   704,     0,     0,    49,   450,
-      35,     0,    36,     0,     0,   705,  1068,     0,   164,     0,
-       0,     0,   178,   705,   705,   705,     0,     0,     0,   324,
-      76,  1534,   261,   215,     0,    76,     0,     0,   108,     0,
-    1542,   164,     0,   682,   397,     0,     0,   774,   775,   776,
-       0,   645,     0,   445,   416,   417,     0,     0,   114,   421,
-       0,   423,   424,     0,     0,   414,     0,     0,    37,   708,
-     176,   177,    40,     0,   329,     0,   215,     0,     0,    41,
-      42,    49,   261,   351,     0,   178,     0,     0,     0,   705,
-      49,     0,    49,     0,     0,     0,     0,     0,    37,   114,
-     185,   186,    40,     0,     0,   377,   521,     0,     0,    41,
-      42,   521,  1391,   407,   521,     0,     0,     0,     0,   577,
-      43,     0,    49,     0,     0,     0,     0,   581,   425,   224,
-     584,   430,   432,   646,     0,   187,   162,   215,     0,   178,
-    1049,     0,   114,     0,    46,    47,   178,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   449,   645,   375,
-       0,   452,     0,   453,     0,     0,   114,  1418,     0,   645,
-    1426,   114,   460,     0,     0,   215,     0,     0,    67,     0,
-     215,  1099,     0,   474,     0,     0,     0,     0,   898,     0,
-       0,     0,     0,   481,   414,   500,    76,     0,   422,     0,
-       0,   432,     0,     0,     8,     9,    10,    11,    12,     0,
-       0,   354,     0,     0,   178,  1465,    76,     0,     0,     0,
-    1469,   114,     0,     0,    76,     8,     9,    10,    11,    12,
-       0,   178,     0,    31,     0,   178,     0,   375,     0,     0,
-     646,     0,   354,   480,     0,     0,     0,     0,     0,     0,
-    1491,     0,     0,     0,    31,     0,     0,   981,     0,   114,
-     354,    34,    76,     0,     0,   215,     0,   261,     0,     0,
-     897,   595,     0,    49,     0,   414,     0,   623,    49,   904,
-       0,     0,    34,   906,     0,     0,     0,     0,    43,     0,
-     628,     0,     0,     0,   628,    49,     0,   261,   178,     0,
-       0,     0,     0,   753,   354,   412,     0,     0,     0,    43,
-       0,   997,    46,    47,     0,     0,     0,  1506,     0,  1506,
-       0,  1002,     0,     0,   939,     0,   602,     0,     0,     0,
-       0,     0,     0,    46,    47,  1014,  1560,     0,     0,     0,
-       0,  1049,  1560,     0,   474,     0,   215,     0,     0,     0,
-       0,     0,     0,  1560,  1506,     0,  1506,  1560,    37,   351,
-     185,   186,    40,   215,   474,     0,   577,   577,   354,    41,
-      42,     0,   474,     0,    37,   114,   185,   186,    40,     0,
-      43,     0,     0,    79,     0,    41,    42,     0,   215,     0,
-     700,     0,     0,   432,     0,   912,    43,   412,    49,     0,
-       0,     0,     0,   913,    46,    47,     0,     0,   714,     0,
-      67,   267,   354,   354,   354,    79,     0,     0,   432,     0,
-      46,    47,   432,     0,     0,     0,     0,     0,     0,     0,
-       0,   354,     0,     0,     0,     0,   801,   802,     0,     0,
-       0,   114,   114,   114,     0,     0,     0,     0,     0,   354,
-       0,   261,   351,   225,   890,   178,     0,  1298,   893,     0,
-      76,     0,     0,     0,     0,   835,     0,     0,   838,   839,
-       0,   842,     0,   844,   845,     0,     0,     0,   846,   847,
-       0,     0,     0,     0,     0,     0,    76,   178,     0,   354,
-       0,     0,     0,     0,     0,     0,     0,   799,    81,   645,
-       0,     0,     0,   178,  1089,     0,   548,     0,     0,   215,
-       0,     0,     0,     0,     0,   628,   811,     0,   178,     0,
-       0,     0,     0,    58,    58,     0,   354,     0,   830,     0,
-      81,     0,     0,     0,     0,     0,     0,   215,     0,     0,
-       0,   356,   215,  1179,  1180,     0,   595,   511,     0,     0,
-       0,   595,     0,     0,     0,    58,     0,   628,     0,     0,
-     351,   351,   351,     0,     0,     0,     0,     0,   226,     0,
-       0,     0,   354,     0,    49,    49,     0,     0,     0,   351,
-       0,     0,   354,     0,   354,   114,   114,     0,     0,   224,
-      58,     0,   354,    58,   577,     0,   354,   700,     0,   178,
-       0,  1229,  1230,     0,     0,     0,     0,     0,   474,     0,
-       0,     0,     0,     0,   215,     0,     0,     0,     0,   978,
-     979,     0,     0,   114,     0,     0,     0,     0,   215,     0,
-       0,     0,     0,     0,   474,     0,    79,   351,     0,     0,
-       0,    79,     0,     0,     0,     0,   944,     0,   500,   432,
-      37,     0,   185,   186,    40,     0,   357,     0,    76,     0,
-    1216,    41,    42,     0,    37,     0,   185,   186,    40,     0,
-       0,     0,    43,   261,   714,    41,    42,     0,     0,   976,
-       0,   349,     0,    49,   114,     0,    43,   601,   354,   602,
-       0,     0,     0,   114,     0,     0,    46,    47,     0,     0,
-       0,   912,     0,   412,     0,     0,     0,     0,    49,    49,
-      46,    47,     0,   414,     0,     0,     0,     0,     0,     0,
-     700,     0,     0,     0,     0,   215,     0,     0,     0,     0,
-     700,     0,   351,    49,   628,   225,     0,  1012,     0,   628,
-     811,     0,     0,   354,   700,     0,    58,     0,     0,     0,
-       0,    81,     0,     0,  1023,     0,    81,   536,   537,   538,
-     539,   540,   541,   542,   543,   544,   545,     0,   178,     0,
-       0,     0,     0,     0,     0,     0,    58,    37,     0,   185,
-     186,    40,     0,     0,  1100,     0,     0,  1356,    41,    42,
-       0,   546,     0,  1155,     0,  1358,  1359,  1360,     0,    43,
-       0,     0,    79,     0,   354,   354,    67,   354,   354,     0,
-    1167,     0,     0,     0,  1530,     0,   412,   356,     0,     0,
-       0,     0,    79,    46,    47,     0,     0,    76,   628,     0,
-      79,     0,     0,     0,     0,   261,   714,     0,     0,  1095,
-       0,     8,     9,    10,    11,    12,     0,     0,   356,     0,
-     226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1406,   354,   354,     0,  1109,   356,     0,    79,     0,
-      31,     0,     0,   432,   119,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
-       0,   351,     0,     0,     0,     0,     0,     0,    34,     0,
-       0,     0,     0,    37,     0,   185,   186,    40,     0,     0,
-     356,     0,  1386,     0,    41,    42,     0,    81,     0,     0,
-       0,     0,     0,     0,     0,    43,   215,     0,     0,     0,
-    1257,     0,   357,     0,   595,     0,   354,    81,     0,     0,
-     601,     0,   602,     0,     0,    81,     0,   430,  1231,    46,
-      47,     0,   700,   700,     0,   351,   351,   349,     0,     0,
-       0,     0,     0,   357,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   356,  1201,     0,     0,     0,   224,
-       0,   357,     0,    81,     0,     0,     0,     0,     0,     0,
+      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
+     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
+     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
+     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
+     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
+     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
+      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
+     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
+     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
+     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
+     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
+     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
+     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
+     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
+      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
+     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
+    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
+     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
+     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
+      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
+     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
+      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
+     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
+     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
+     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
+     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
+     272,  1398,  1399,   202,   588,   272,   267,   267,   723,   821,
+    1249,    63,   114,  1512,   162,  1514,   472,   527,   951,  1080,
+     170,   991,   441,   327,   665,   656,  1015,   463,    50,   164,
+     672,   674,  1093,   815,   342,   307,  -287,   442,   483,   358,
+    1468,   609,  1526,   248,  1382,   500,    69,   307,   251,   596,
+     664,  1003,    56,   671,   596,   804,   357,    97,  -119,   676,
+    -119,   816,   817,   571,  -119,  1187,  1178,    70,   148,  1541,
+      97,  1400,   465,  1398,  1399,   373,  -516,   527,  1084,  -119,
+    -119,   114,   734,  1118,   819,   345,   436,  1171,   713,   602,
+     620,   579,   471,   411,   164,   398,   190,   853,   665,   898,
+     253,   377,   827,  1119,   625,   735,   556,   557,   625,  1201,
+     519,   114,   471,   178,   820,   519,   327,   378,   519,    97,
+     471,  1070,   831,  1116,  1069,   736,   834,   673,   675,   821,
+     629,    97,   358,   111,   633,   847,   267,  1171,   747,   848,
+     510,   558,   559,  1409,    41,    42,   187,   851,   436,   357,
+      77,   854,   986,   373,  1496,    77,  1325,  1169,  1170,   174,
+    1501,    97,   547,   548,   267,   213,   307,   307,   107,   844,
+     267,   787,   759,   625,   714,   479,  1326,   472,   849,  1423,
+    1521,   577,   850,   167,   870,  1528,   642,   578,   342,  1525,
+     435,  1157,  1159,  1424,   114,   729,   358,   472,  1428,  1429,
+     547,  1362,   254,   871,  1126,   472,   859,   860,   264,  1536,
+     447,   849,   267,   357,   742,  1100,  1540,   387,  1187,   330,
+     267,   598,   625,   877,    49,  1187,  1469,   373,   719,   460,
+     498,    98,   683,   388,   114,  1244,   547,    97,   578,   390,
+    1470,   711,   869,    63,   888,   881,   307,  1104,   114,  1135,
+    1014,   307,   435,   307,   307,   391,  1171,   910,   603,   -10,
+      50,   750,  -440,   609,   392,   114,   345,  -441,  1016,   996,
+     582,  -467,   411,  -467,   804,   523,  1187,  1434,    69,   798,
+     393,   931,   277,   879,    56,   394,   112,   164,   213,  1236,
+    -467,     2,   207,     4,     5,     6,     7,   914,   417,    70,
+     704,   395,   327,   327,   916,   912,   705,   914,   916,  1184,
+     571,   571,  1184,   915,   952,   190,    77,   279,   307,  1316,
+     917,   437,  1126,  1081,  1082,  1185,   280,   913,  1308,   625,
+     345,   445,   549,   714,   620,  1317,    77,  1318,   550,   551,
+     602,   747,   602,   882,    77,   411,   331,   760,  1360,  1276,
+    1277,   713,   765,  1319,  1474,   471,    35,  1363,    36,   332,
+     625,  1474,   804,  1014,  1019,   625,   111,   620,   140,   239,
+     327,   625,   994,   333,   625,   625,   625,    41,    42,   111,
+     334,   928,    77,  -102,   806,   335,   846,  -102,   371,   327,
+      41,    42,   625,    97,   267,   372,  1087,   603,  1087,   520,
+     107,   465,   861,   240,   768,   769,   770,   342,   241,  1348,
+     376,  1027,  1522,  1349,   111,   358,   876,   385,   111,    -3,
+     140,   141,  1408,   389,   114,    41,    42,   907,   596,    41,
+      42,  1074,   357,   885,   691,   411,   111,   442,   140,   141,
+     472,   528,   529,   530,  1141,  1112,   411,    41,    42,   397,
+     625,   933,   620,   764,   327,   726,  1101,  1234,   719,   719,
+     727,  1238,  1034,   399,   400,   531,   472,   532,   409,   533,
+     534,  1153,   878,   411,   880,   432,   721,   407,   244,   401,
+     402,   403,   722,   426,   114,   345,   523,   404,   523,   750,
+     750,   523,   405,  1156,   523,   601,   845,   500,  1158,   230,
+     601,   598,   427,   231,   711,  1476,   235,  1477,   237,   814,
+     713,   603,   964,   213,   450,   246,   775,   776,   777,   778,
+    1373,  -288,   965,   966,   927,   408,  -364,   213,     8,     9,
+      10,    11,    12,   571,     2,   207,     4,     5,     6,     7,
+     731,   625,  1241,   625,   411,   999,   732,   680,   625,   345,
+    1161,  -393,   602,   570,  1425,   411,   111,    31,   140,   141,
+    1523,    45,    46,   229,   602,   111,   342,    41,    42,   484,
+    1436,   461,   746,   706,   462,   714,    41,    42,   747,    77,
+       8,     9,    10,    11,    12,    34,    37,   892,   804,   504,
+      40,   253,   329,   747,   292,   864,   911,    41,    42,    35,
+     894,    36,   163,   806,  1330,    77,   747,   980,   508,    31,
+     520,   972,   513,   981,   307,   520,   195,   525,   520,   218,
+     213,   527,   228,   812,   562,   601,  1168,   814,   603,   993,
+    1182,    45,    46,    63,   563,   705,   625,    34,   554,   555,
+    1494,  1436,   230,   114,   345,   907,   111,   907,     2,   207,
+       4,     5,     6,     7,   714,   664,  1232,    41,    42,   114,
+     910,   564,   578,   711,   691,  1356,   565,   749,    69,   411,
+     142,   747,   933,   933,    56,    45,    46,   719,   568,   570,
+      37,   411,   114,   307,    40,  1332,   338,    45,    46,    70,
+    -437,    41,    42,   952,  1357,   586,  1105,   952,   952,   589,
+     747,   163,   932,   665,   601,    48,   113,   750,   912,    -3,
+      45,    46,   657,    35,   374,    36,  1359,    43,  1508,   552,
+     553,   814,   747,   242,   245,    45,    46,   638,     8,     9,
+      10,    11,    12,   603,   113,   113,  1227,    48,  1364,   345,
+     163,   658,  1106,   659,   747,   560,   561,    37,    48,   184,
+     185,    40,   713,   111,    48,   140,   141,    31,    41,    42,
+     625,   625,    48,   163,    41,    42,   661,  1126,    48,   984,
+     981,    48,    77,   890,    48,   444,  1121,   253,   329,   411,
+     307,   230,   897,   235,   186,    34,   899,   662,   113,   113,
+     107,   666,    45,    46,  1284,  1285,    37,  1287,  1132,   472,
+      40,   663,  1132,  1426,  1292,  1444,  1294,    41,    42,  1423,
+     668,   747,    48,  1323,  1083,    48,   911,   442,  1490,   327,
+     114,   258,    48,   692,  1491,   907,  1546,   749,   693,   411,
+     907,   695,   578,   718,  1189,    45,    46,   329,   411,   933,
+      56,    45,    46,   737,   215,   738,   603,   267,   739,  1369,
+    1370,   743,  1132,    48,   547,    70,  1418,   981,   107,  1398,
+    1399,    48,   625,   771,   772,    37,    48,   184,   185,    40,
+     342,   230,   419,   660,   411,   845,    41,    42,   779,   780,
+    1351,   374,   773,   774,   457,   697,   345,  -235,   481,   329,
+     411,    48,    48,   733,   744,   510,   215,   748,   756,   691,
+    1380,   807,   266,   873,  1380,   711,   808,    48,   811,  -289,
+      45,    46,   828,   329,   601,    48,     8,     9,    10,    11,
+      12,  1295,  1296,  1297,    48,   822,   867,    48,   272,   114,
+    1331,  1333,  1334,   893,   113,   -12,   -13,   866,    77,   215,
+     895,   896,   900,   220,   903,    31,   921,   114,  -414,   113,
+    -520,   307,   936,   113,   943,   722,   107,    48,   113,   374,
+     117,   945,  1404,   956,   130,   625,   131,   132,   133,   114,
+      63,    48,    48,    34,   950,    41,    42,   957,    48,   958,
+     959,   960,   961,  1105,   711,    48,   988,   989,   211,   221,
+     990,   977,  1005,  1006,   911,  1007,  1008,  1009,  1010,   911,
+     215,  1459,  1079,   213,  1011,    69,  1022,  1421,   160,  -402,
+    -401,    56,  1036,  1058,   625,   625,  1071,  1534,  1094,   906,
+     644,  1073,  1096,   272,  1097,  1095,    70,  1103,   307,  1106,
+    1113,   747,  1114,    48,  1115,  1120,  1122,   971,   215,  1123,
+    1124,   702,  1125,   215,  1128,  1131,  1151,   472,  1174,  1175,
+    1172,  1173,  1176,    48,    48,     8,     9,    10,    11,    12,
+     691,   114,  1190,   399,   400,   259,  1191,  1132,  1132,  1132,
+      48,  1193,  1194,   160,    48,  1105,   407,  1202,  1206,   401,
+     402,   403,  1189,   441,    31,   643,  -290,   404,    56,  1207,
+    1209,    -3,   405,     8,     9,    10,    11,    12,   442,  1214,
+     664,    48,  1219,    70,  1224,   107,   323,   493,  1222,    77,
+    1507,    48,    34,  1228,   703,   339,  1233,   922,   267,  1235,
+    1237,  1106,    31,  1240,   408,  1250,  1246,   107,   215,    48,
+    1252,   724,  1254,   728,   625,    48,  1256,    48,  1257,  1258,
+    1262,  1259,  1420,  1260,  1269,   107,  1278,  1279,   665,    37,
+      34,   175,   176,    40,   932,  1203,   601,  1286,  1307,   114,
+      41,    42,    45,    46,    37,   430,   175,   176,    40,   434,
+    1289,  1290,   113,  1105,  1291,    41,    42,    48,  1293,  1301,
+    1314,   114,  1192,  1320,  1322,    48,    77,  1328,   114,    48,
+     114,  1324,   114,    48,  1329,  1358,   113,  1335,   113,   323,
+     472,   372,  1336,  1338,   107,  1132,  1132,   472,   985,   215,
+     150,  1344,   151,   152,  1345,  1346,  1347,  1297,  1365,  1106,
+    1354,  1506,   214,  1355,  1366,  1383,   114,  1374,   114,  1375,
+    1376,   434,   233,   113,   488,  1189,  1392,   107,   113,   114,
+    1393,    56,  1189,  1460,  -403,  1506,  1506,   702,    56,  1396,
+    1407,   215,  1415,   162,   521,   307,    70,  1411,   472,  1413,
+     528,   529,   530,    70,  1416,  1417,   160,  1422,  1430,    37,
+    1506,   175,   176,    40,   214,  1431,  1432,   373,  1433,  1435,
+      41,    42,   865,  1349,   531,  1029,   532,   113,   533,  1305,
+    1440,  1445,  1449,  1189,    48,  1451,  1447,  1453,  1455,    56,
+     587,  1509,  1457,  1462,   593,    48,   376,    48,  1463,  1464,
+    1517,  1475,  1492,  1485,    70,  1487,  1500,   214,  1493,  1489,
+     703,  1515,  1516,   626,  1520,  1527,    48,   630,   922,  1529,
+     339,   918,  1531,   920,  1544,   107,  1545,   457,  1208,    77,
+    1537,   783,    48,   781,  1130,   784,    77,   113,   782,   785,
+    1058,  1306,  1495,  1410,  1547,  1368,    48,   107,   113,    48,
+     113,  1239,  1384,  1478,   107,  1088,   702,   216,   901,  1213,
+     902,  1221,   215,   922,  1092,   924,   702,   800,   214,  1127,
+    1035,   872,   938,  1315,   243,   323,   323,  1102,   790,   716,
+     702,   327,    48,   946,   791,   792,   113,    77,   113,     0,
+     215,  1367,   113,     0,     0,   215,     0,     0,  1138,     0,
+     113,     0,     0,   687,   479,   107,   214,     0,     0,   216,
+       0,   214,     0,    48,    48,     0,   117,     0,     0,     0,
+    1482,     0,  1482,     0,     0,     0,   499,    48,     0,   703,
+       0,     0,     0,  1372,     0,     0,     0,     0,     0,   703,
+       0,   488,     0,   323,     0,   488,     0,     0,     0,  1029,
+       0,     0,   216,   703,     0,   521,  1482,   521,  1482,     0,
+     521,     0,   323,   521,     0,     0,   215,   177,     0,     8,
+       9,    10,    11,    12,   339,     0,     0,     0,     0,    37,
+     215,   184,   185,    40,     0,  1397,     0,     0,  1405,     0,
+      41,    42,     0,     0,     0,     0,   214,   644,    31,     0,
+       0,     0,     0,  1039,     0,     0,     0,    48,     0,     0,
+       0,     0,     0,   216,     0,     0,   905,   177,   411,    48,
+     177,     0,     0,     0,    45,    46,    34,   323,     0,   922,
+       0,  1442,     0,     0,     0,     0,  1446,   906,   802,     0,
+       0,     0,     0,  1479,  1089,  1483,     0,     0,     0,     0,
+       0,   216,     0,     0,     0,     0,   216,     0,     0,     0,
+       0,     0,   643,     0,  1467,     0,   177,   891,   113,   843,
+       0,     0,     0,   215,   593,     0,     0,   214,     0,  1511,
+     852,  1513,    66,   118,   702,   702,     0,     0,     0,   922,
+     922,    48,     0,     0,   214,     0,     0,     0,     0,     0,
+      48,   644,    48,     0,     0,     0,     0,     0,     0,   113,
+       0,     0,     0,     0,    66,     0,     0,     0,     0,   214,
+       0,     0,     0,  1542,     0,  1543,     0,     0,     0,   177,
+       0,   161,    48,   687,     0,     0,     0,     0,  1550,  1551,
+       0,   216,   702,   702,     0,     0,     0,     0,  1535,     0,
+       0,   222,   113,     0,  1535,     0,     0,   703,   703,     0,
+       0,     0,     0,     0,     0,  1535,   643,     0,     0,  1535,
+       0,   488,     0,     0,   113,     0,     0,     0,   113,    57,
+      57,     0,     0,   177,     0,     0,   987,     0,   260,     0,
+     177,     0,     0,   339,     0,     0,   992,     0,     0,     0,
+       0,  1039,     0,     0,     0,    75,     0,     0,     0,     0,
+    1004,    57,     0,     0,     0,   703,   703,     0,     0,     0,
+       0,     0,   216,     0,     0,     0,     0,     0,   113,     0,
+     328,     0,     0,     0,     0,     0,     0,    75,   260,   350,
+     214,     0,     0,     0,     0,    57,     0,     0,    57,     0,
+       0,     0,   995,     0,     0,     0,     0,   802,   177,     0,
+       0,     0,     0,     0,   216,     0,   113,     0,   214,   406,
+     215,     0,     0,   214,   223,   177,     0,     0,     0,   177,
+      48,     0,     0,     0,   424,    48,     0,   429,   431,     0,
+    1312,     0,   161,     0,   922,     0,     0,     0,     0,     0,
+       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
+     922,     0,     0,   448,  1282,     0,     0,   451,     0,   452,
+       0,     0,   702,     0,     0,     0,     0,     0,   459,     0,
+     702,   702,   702,     0,    66,     0,   348,     0,     0,   473,
+       0,     0,   177,     0,   214,   802,     0,     0,     0,   480,
+       0,     0,   339,     0,     0,     0,     0,   431,   214,     0,
+       0,    78,   353,  1313,     0,     0,     0,     0,   687,     0,
+       0,    37,     0,   184,   185,    40,     0,     0,   499,   113,
+     922,   922,    41,    42,     0,   216,     0,     0,     0,     0,
+     488,  1107,   323,    78,   702,   703,     0,     0,     0,     0,
+       0,    57,    48,   703,   703,   703,     0,     0,   600,     0,
+     601,     0,     0,   216,  1166,  1167,    45,    46,   216,     0,
+       0,     0,     0,   260,     0,     0,     0,   594,     0,     0,
+     224,    57,     0,   622,     0,     0,   449,     0,     0,     0,
+       0,     0,     0,   113,   113,   113,   627,     0,   843,     0,
+     627,   214,     0,   260,     0,     0,   215,    75,     0,     0,
+       0,     0,    75,     0,     0,     0,     0,   703,     0,     0,
+       0,     0,  1216,  1217,     0,     0,     0,     0,     0,     0,
+      37,     0,   184,   185,    40,     0,     0,     0,     0,   216,
+       0,    41,    42,    37,     0,   184,   185,    40,     0,   177,
+     473,     0,     0,   216,    41,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   350,     0,   905,   355,   411,
+     473,     0,     0,     0,     0,    45,    46,     0,   473,   687,
+    1505,   177,   411,     0,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,   698,   177,     0,   431,
+       0,   215,     0,     0,     0,     0,   223,     0,     0,     0,
+       0,   177,     0,     0,   712,     0,    66,     0,     0,     0,
+       0,   802,    48,    48,   431,     0,     0,     0,   431,     0,
+       0,   113,   113,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,     0,     0,     0,   216,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   260,   350,     0,
+       0,     0,   348,    78,     0,     0,     0,   545,    78,   113,
+       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
+       0,     0,   177,    75,     0,     0,     0,     0,   214,     0,
+       0,    75,  1337,   793,     0,     0,   339,     0,     0,     0,
+    1339,  1340,  1341,    57,     0,     0,     0,     0,     0,   353,
+       0,   627,   805,     0,     0,     0,    48,   113,  1107,     0,
+       0,     0,     0,     0,   824,     0,   113,   353,     0,    75,
+       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
+      48,    48,   594,     0,     0,   348,     0,   594,     0,     0,
+       0,     0,   224,   627,     0,     0,   350,   350,   350,     0,
+       0,     0,   286,     0,  1385,    48,     0,     0,   287,     0,
+       0,   353,   288,     0,   350,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,   698,     0,     0,     8,     9,    10,    11,    12,
+       0,     0,     0,   473,     0,   295,     0,   379,     0,   348,
+    1107,     0,     0,    45,    46,   297,   298,   299,   300,    78,
+       0,     0,     0,     0,    31,     0,   786,     0,     0,   473,
+       0,     0,   350,   216,   355,   353,     0,     0,     0,    78,
+       0,   937,     0,     0,   431,     0,   177,    78,     0,     0,
+       0,     0,    34,   348,   348,   348,     0,    37,     0,   184,
+     185,    40,     0,     0,     0,   355,   260,   712,    41,    42,
+       0,   348,   967,     0,   214,     0,     0,     0,     0,   353,
+     353,   353,     0,   355,     0,    78,     0,     8,     9,    10,
+      11,    12,     0,     0,   600,     0,   601,   353,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,  1107,     0,
+       0,   698,     0,     0,     0,   353,    31,     0,     0,     0,
+       0,   698,     0,   350,     0,   627,    75,   355,  1002,   348,
+     627,   805,     0,     0,     0,   698,     0,     0,     0,  1481,
+       0,  1481,     0,     0,    34,  1013,     0,     0,     0,    37,
+       0,     0,    75,    40,     0,   353,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,   214,
+       0,    80,     0,     0,     0,  1481,     0,  1481,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
+     353,   355,     0,     0,    45,    46,    66,     0,    87,     0,
+     413,     0,     0,    80,   323,     0,     0,   421,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   627,   216,
+     348,     0,     0,     0,     0,   260,   712,     0,   348,  1085,
+      87,     0,     0,     0,   353,   355,   355,   355,     0,     0,
+     225,     0,     0,     0,   353,     0,   353,     0,     0,     0,
+       0,   223,     0,   355,   353,  1099,     0,     0,   353,     0,
+       0,     0,     0,   431,   118,     0,     0,   226,     0,     0,
+       0,   355,     0,     0,     0,     0,     0,     0,     0,   413,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    78,     0,
+       0,   355,     0,     0,   216,     0,     0,     0,     0,    75,
+       0,   594,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,   576,   429,     0,     0,     0,     0,   698,
+     698,   580,   350,   350,   583,     0,   355,     0,     0,   353,
+       0,     0,     0,     0,     0,   363,     0,   177,     0,     0,
+       0,    57,  1188,     0,     0,   206,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+     355,     0,    26,    27,    28,     0,     0,   698,   698,     0,
+     355,    31,   355,     0,     0,     0,     0,   224,   413,     0,
+     355,     0,   421,     0,   355,     0,     0,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,     0,     0,    80,    34,
+       0,    35,     0,    36,    37,     0,   208,    39,    40,   348,
+     348,     0,     0,     0,   627,    41,    42,     0,     0,     0,
+      87,     0,     0,     0,     0,    87,     0,     0,     0,    57,
+       0,     0,   353,   353,     0,   353,   353,     0,   712,     0,
+       0,    43,     0,   209,     0,    78,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,    75,     0,     0,     0,   413,
+       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
+       0,  1283,     0,     0,     0,     0,     0,     0,     0,     0,
+     353,   353,   225,     0,    31,     0,     0,   177,     0,   260,
+       0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   698,     0,   712,     0,   226,
+       0,   118,    34,     0,     0,     0,     0,    37,     0,   184,
+     185,    40,     0,     0,     0,   127,   127,   127,    41,    42,
+       0,     0,     0,     0,     0,     0,     0,   698,     0,     0,
+     576,   576,     0,     0,     0,   698,   698,   698,     0,    80,
+       0,   353,     0,     0,   186,     0,   350,   350,     0,     0,
+       0,     0,    45,    46,   356,     0,     0,    57,    57,    80,
+    1188,     0,     0,     0,     0,     0,    87,    80,   355,   355,
+       0,   355,   355,     0,     0,     0,     0,     0,     0,     0,
+      57,   363,     0,     0,   223,   356,    87,     0,   127,     0,
+     127,    78,     0,   118,    87,     0,     0,     0,    57,   698,
+       0,     0,     0,   356,     0,    80,    75,     0,     0,     0,
+       0,     0,   363,     0,     0,   276,     0,   883,   353,     0,
+     353,   886,     0,     0,     0,     0,   355,   355,     0,     0,
+     363,     0,    87,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   348,   348,     0,     0,   356,     0,     0,
+     353,     0,    57,     0,     0,     0,     0,    57,   353,   353,
+     353,     0,     0,     0,     0,     0,   350,     0,     0,   353,
+     353,   127,     0,     0,   363,     0,     0,     0,     0,   127,
+       0,   127,   127,    75,     0,     0,   127,     0,   127,   127,
+      57,   118,     0,   168,     0,   173,     0,   355,   179,   180,
+     181,     0,   183,     0,     0,     0,     0,     0,     0,     0,
+       0,   356,     0,  1188,     0,     0,     0,   234,     0,     0,
+    1188,     0,   353,     0,     0,     0,     0,     0,     0,   249,
+     250,     0,     0,     0,   125,   128,   129,     0,   363,     0,
+     224,     0,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,     0,     0,   576,     0,   356,   356,   356,   127,     0,
+       0,     0,    78,   348,     0,     0,     0,     0,     0,     0,
+       0,  1188,     0,   356,   355,    31,   355,     0,  1530,     0,
+       0,     0,   363,   363,   363,     0,     0,     0,    57,   353,
+       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+     363,     0,    80,    34,     0,     0,   355,   255,    37,   256,
+      57,     0,    40,     0,   355,   355,   355,    57,   363,    41,
+      42,     0,     0,     0,     0,   355,   355,     0,    80,    87,
+       0,   356,     0,     0,     0,     0,    75,     0,     0,    78,
+       0,     0,     0,    75,     0,   718,     0,     0,     0,     0,
+       0,     0,     0,    45,    46,    87,     0,     0,   363,     8,
+       9,    10,    11,    12,     0,     0,   356,     0,    57,     0,
+       0,   413,     0,     0,     0,     0,     0,     0,   355,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+     396,     0,     0,   363,    75,     0,     0,     0,     0,     0,
+     415,   416,     0,     0,     0,   420,     0,   422,   423,     0,
+     356,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     356,    37,   356,   184,   185,    40,     0,   225,     0,     0,
+     356,     0,    41,    42,   356,     0,     0,   363,     0,     8,
+       9,    10,    11,    12,     0,   355,     0,   363,  1142,   363,
+       0,     0,     0,     0,   226,     0,     0,   363,   905,     0,
+     411,   363,     0,     0,     0,  1154,    45,    46,    31,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
+       0,     0,     0,     0,   591,     0,   599,     0,     0,     0,
+       0,     0,    78,     0,     0,    80,    34,   623,   624,    78,
+      31,    37,     0,   184,   185,    40,     0,     0,     0,     0,
+       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
+       0,     0,    87,     0,     0,   356,     0,     0,    34,     0,
+       0,     0,     0,    37,     0,   184,   185,    40,  1505,     0,
+     411,     0,     0,   413,    41,    42,    45,    46,     0,     0,
+      78,     0,   363,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,   127,     0,     0,     0,     0,     0,
+     266,     0,     0,     0,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,  1242,     0,     0,     0,     0,     0,     0,
+       0,     0,   127,     0,     0,   127,   127,     0,   127,     0,
+     127,   127,     0,     0,     0,   127,   127,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,  -291,     0,    26,    27,    28,    29,   356,   356,
+      30,   356,   356,    31,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    76,     0,     0,     0,     0,     0,     0,    58,     0,
-     700,   700,     0,   354,     0,   354,     0,     0,   356,   356,
-     356,     0,     0,     0,     0,   357,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   356,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   354,     0,
-     349,     0,     0,     0,    88,   356,   354,   354,   354,   628,
-       0,     0,     0,     0,     0,     0,    79,   354,   354,     0,
-       0,  1503,     0,  1507,     0,     0,     0,     0,     0,     0,
-    1320,    76,     0,     0,   714,   178,    88,     0,     0,   357,
-       0,     0,    79,     0,     0,   356,     0,     0,     0,     0,
-       8,     9,    10,    11,    12,     0,     0,     0,  1536,     0,
-    1538,     0,     0,     0,   349,   215,     0,     0,     0,     0,
-       0,     0,   354,     0,   227,     0,     0,  1299,     0,    31,
-       0,     0,   356,   357,   357,   357,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   261,     0,     0,     0,    67,
-       0,     0,   357,  1567,     0,  1568,     0,    34,   349,   349,
-     349,   700,    37,   714,   185,   186,    40,   119,  1575,  1576,
-     357,     0,     0,    41,    42,     0,     0,   349,   356,     0,
-       0,    81,     0,     0,    43,     0,     0,     0,   356,     0,
-     356,     0,   354,     0,     0,   225,   700,     0,   356,   912,
-       0,   412,   356,     0,   700,   700,   700,    81,    46,    47,
-     357,     0,   364,   215,     0,   351,   351,     0,     0,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,  1201,
-       0,     0,     0,     0,     0,   349,     0,     0,     0,     0,
-       0,    76,     0,     0,     0,     0,     0,   357,    76,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-       0,   178,   119,     0,    79,     0,     0,     0,     0,     0,
-     700,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,    37,     0,   185,   186,
-      40,     0,     0,   357,   356,     0,     0,    41,    42,     0,
-       0,    76,     0,   357,     0,   357,     0,    88,    43,     0,
-     226,     0,    88,   357,     0,     0,     0,   357,     0,     0,
-       0,     0,     0,  1530,     0,   412,     0,     0,     0,     0,
-     349,     0,    46,    47,     0,     0,     0,     0,   349,     0,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   356,
-       0,   169,     0,   174,     0,     0,   180,   181,   182,     0,
-     184,     0,     0,     0,     0,   119,     8,     9,    10,    11,
-      12,     0,     0,     0,     0,   235,     0,     0,     0,    81,
-       0,     0,     0,     0,     0,     0,     0,   250,   251,  1201,
-       0,     0,     0,     0,     0,    31,  1201,     8,     9,    10,
-      11,    12,     0,     0,    58,     0,   227,     0,     0,   357,
-     356,   356,     0,   356,   356,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,    31,     0,    37,     0,
-     185,   186,    40,    79,     0,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,     0,  1201,
-      43,     0,     0,     0,    34,     0,  1555,     0,     0,    37,
-       0,   185,   186,    40,   357,   187,     0,     0,   356,   356,
-      41,    42,    58,    88,    46,    47,     0,     0,     0,     0,
-       0,    43,     0,     8,     9,    10,    11,    12,   364,   349,
-       0,     0,     0,    88,     0,     0,   267,     0,     0,     0,
-       0,    88,     0,     0,     0,    46,    47,     0,     0,     0,
-       0,     0,    31,     0,     8,     9,    10,    11,    12,   364,
-       0,     0,     0,     0,     0,   357,   357,     0,   357,   357,
-       0,     0,     0,     0,     0,     0,     0,   364,     0,    88,
-      34,     0,   356,    31,     0,    37,     0,     0,    81,    40,
-       0,     0,     0,   349,   349,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,    58,     0,     0,    37,     0,     0,     0,
-      40,   364,    44,   357,   357,   225,     0,    41,    42,     0,
-       0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
-       0,     0,     0,   720,     0,     0,     0,     0,     0,   356,
-       0,   356,    46,    47,     8,     9,    10,    11,    12,    13,
+       0,    80,     0,     0,     0,   363,   363,     0,   363,   363,
+       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
+       0,     0,  -291,     0,     0,     0,  1012,     0,    87,     8,
+       9,    10,    11,    12,     0,     0,   356,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    44,   283,   284,    31,   285,
+       0,    45,    46,   363,   363,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,   127,   286,    34,     0,     0,     0,
+       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   795,   796,     0,     0,     0,     0,   295,     0,
+     379,     0,     0,     0,   363,     0,   344,    46,   297,   298,
+     299,   300,     0,     0,     0,     0,     0,     0,     0,     0,
+     225,   829,     0,     0,   832,   833,     0,   836,     0,   838,
+     839,     0,     0,     0,   840,   841,     0,     0,     0,     0,
+       0,     0,    80,     0,     0,     0,     0,   226,     0,   925,
+       0,   926,     0,     0,   356,     0,   356,     0,   929,   930,
+       0,     0,     0,   935,     0,     0,     0,     0,     0,    87,
+       0,     0,     0,     0,     0,   940,     0,     0,     0,     0,
+     944,   363,     0,   363,     0,     0,   356,     0,     0,     0,
+       0,     0,     0,     0,   356,   356,   356,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,   356,     0,   978,     0,
+     127,     0,     0,   363,     0,   127,     0,     0,     0,    80,
+       0,   363,   363,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     166,     0,   969,   970,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   363,     0,   219,     0,     0,
+    1162,     0,     0,     8,     9,    10,    11,    12,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1023,  1024,  1025,
+    1026,     0,  1028,     0,     0,     0,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,   356,     0,  1072,     0,     0,
+       0,     0,     0,     0,     0,   166,     0,     0,     0,   273,
+       0,  1078,     0,     0,     0,     0,     0,     0,     0,   286,
+      34,     0,   363,     0,     0,   287,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,   166,   293,
+     294,     0,    80,     0,     0,     0,   127,     0,   369,    80,
+       0,  1098,   375,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,     0,     0,    87,
+    1163,    46,   297,   298,   299,   300,    87,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,  1129,    26,    27,    28,
+      80,   166,  1136,     0,  1090,     0,    31,  1140,     0,     0,
+       0,     0,  1144,   219,  1145,     0,     0,     0,  1147,     0,
+    1148,  1149,     0,     0,  1152,     0,     0,    87,     0,     0,
+       0,   166,     0,  1164,    34,     0,     0,     0,     0,     0,
+       0,   208,    39,     0,     0,     0,     0,     0,     0,     0,
+       0,  1179,  1180,     0,     0,     0,   375,     0,     0,     0,
+       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   127,     0,     0,  1210,     0,
+       0,  1212,     0,     0,    45,    46,   524,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
+       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   232,     0,   236,     0,   238,     0,
+       0,     0,     0,     0,  1226,   247,     0,     0,     0,     0,
+    1230,  1231,     0,     0,     0,     0,   597,     0,     0,     0,
+       0,   621,     0,     0,     0,     0,     0,     0,     0,     0,
+    1247,     0,     0,  1251,     0,     0,   212,  1253,   236,   238,
+     247,     0,     0,     0,     0,  1218,     0,     0,     0,     0,
+    1261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1268,     0,  1270,  1271,  1272,  1273,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
+       0,  1280,     0,  1281,     0,     0,     0,   173,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   166,   166,     0,
+       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1309,  1310,     0,     0,
+       0,     0,     0,     0,     0,   524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,   236,   238,   247,     0,     0,     0,     0,     0,
+       0,     0,     0,   715,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   166,  1342,  1343,     0,     0,
+       0,     0,     0,     0,  1304,     0,  1353,   524,   212,   524,
+       0,     0,   524,   212,   166,   524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   369,   497,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,   592,     0,   600,   364,     0,     0,     0,     0,
-       0,     0,     0,    31,   356,   624,   625,   357,     0,     0,
-       0,     0,   356,   356,   356,     0,     0,     0,     0,     0,
-       0,     0,     0,   356,   356,     0,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,    79,     0,   364,
-     364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
-     226,     0,     0,     0,     0,     0,     0,     0,   364,     0,
-     284,   285,     0,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,    81,     0,    58,    58,   364,     0,   356,     0,
-       0,     0,     0,     0,   357,     0,   357,    88,     0,   287,
-       0,     0,     0,     0,     0,   288,     0,    58,     0,   289,
-       0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
-     295,     0,     0,    88,     0,    58,   364,    43,     0,   357,
-       0,     0,     0,     0,     0,     0,     0,   357,   357,   357,
-       0,     0,   296,     0,   380,     0,     0,   381,   357,   357,
-       0,    46,    47,   298,   299,   300,   301,     0,   356,     0,
-       0,     0,    81,   364,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   349,   349,     0,     0,     0,     0,     0,
-       0,     0,    58,     0,     0,     0,     0,    58,     0,     0,
+      24,    25,  -291,     0,    26,    27,    28,  1388,     0,  1389,
+    1390,  1391,     0,    31,     0,     0,   212,     0,     0,   166,
+       0,  1395,     0,     0,     0,     0,     0,     0,     0,     0,
+    1406,   369,     0,     0,     0,   810,     0,     0,   212,     0,
+       0,    34,     0,   236,   238,     0,    37,     0,   336,   337,
+      40,   247,  -291,     0,     0,  1427,     0,    41,    42,     0,
+       0,   597,     0,     0,   321,     0,   597,     0,     0,     0,
+       0,     0,     0,     0,   346,   369,   369,   369,     0,   157,
+       0,     0,     0,   634,     0,   338,   382,   382,     0,     0,
+       0,    45,    46,   369,   212,     0,     0,     0,  1465,  1466,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   357,     0,     0,     0,    79,     0,   364,
-       0,     0,     0,     0,    79,     0,     0,     0,     0,   364,
-      58,   364,     0,     0,     0,     0,   227,     0,     0,   364,
-       0,     0,     0,   364,     0,     8,     9,    10,    11,    12,
+       0,  1471,   212,     0,     0,     0,     0,   212,  1471,   212,
+     283,   284,     0,   285,     0,   524,     0,   252,     0,     0,
+       0,     0,     0,     0,     0,     0,   212,   257,     0,   212,
+     212,     0,     0,     0,     0,     0,     0,   212,     0,   286,
+    1504,   369,     0,   934,  1510,   287,     0,   321,     0,   288,
+       0,   212,   289,   290,   291,   292,    41,    42,   212,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   478,  1532,     0,  1533,     0,   715,     0,     0,     0,
+       0,     0,   295,   157,   379,     0,     0,   380,     0,     0,
+      45,    46,   297,   298,   299,   300,     0,   386,     0,     0,
+       0,     0,  1548,  1549,     0,     0,     0,     0,     0,     0,
+    1552,  1553,     0,     0,     0,     0,     0,     0,     0,     0,
+     418,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   369,     0,   433,     0,   621,     0,     0,     0,
+     369,     0,     0,   438,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   446,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
+       0,     0,   212,     0,     0,     0,     0,     0,   464,     0,
+       0,     0,     0,   474,     0,     0,     0,   382,     0,     0,
+       0,     0,     0,   286,     0,     0,   482,     0,     0,   287,
+     212,     0,   492,   288,   496,   212,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,   526,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   715,   295,     0,   379,     0,
+       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
+     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   585,     0,     0,     0,     0,   590,     0,
+       0,     0,     0,     0,   166,     0,   212,     0,     0,     0,
+       0,   709,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,     0,     0,     0,     0,     0,   635,     0,     0,
+       0,   636,   637,     0,   639,     0,     0,     0,     0,     0,
+     497,   650,   651,     0,   652,   653,     0,   654,     0,   655,
+     741,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     597,     0,     0,   758,     0,     0,   585,     0,   741,     0,
+       0,   741,     0,     0,   670,     0,     0,     0,     0,     0,
+       0,   369,   369,   767,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   681,
+       0,   212,     0,     0,     0,   788,     0,     0,     0,     0,
+       0,     0,     0,   212,     0,   797,     0,     0,     0,     0,
+       0,     0,   346,     0,     0,   707,     0,   758,     0,     0,
+       0,   710,   212,     0,     0,     0,   464,     0,     0,     0,
+       0,   524,     0,     0,     0,     0,   206,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   745,    26,    27,    28,   862,     0,     0,     0,
+       0,     0,    31,     0,   382,     0,     0,   763,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   715,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,   208,    39,     0,
+       0,     0,     0,   283,   284,   789,   285,     0,     0,     0,
+       0,     0,     0,     0,   799,     0,     0,     0,     0,     0,
+       0,   801,     0,     0,     0,   212,     0,   809,     0,   219,
+       0,     0,   286,     0,   209,     0,   823,     0,   287,     0,
+      45,    46,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,   212,     0,     0,     0,     0,
+       0,     0,   758,     0,   963,     0,   715,     0,     0,   341,
+     364,     0,     0,     0,   974,   295,   863,   379,     0,     0,
+     982,     0,     0,    45,    46,   297,   298,   299,   300,     0,
+     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   212,     0,   414,     0,     0,     0,     0,     0,     0,
+     414,     0,   809,     0,     0,   369,   369,     0,     0,     0,
+     904,     0,  1000,  1001,   219,     0,   346,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
+     346,   509,   512,     0,     0,     0,     0,     0,     0,   515,
+     516,   252,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   941,   942,   509,   509,     0,     0,     0,     0,     0,
+       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
+    1031,     0,   414,     0,   382,     0,     0,   212,     0,     0,
+       0,     0,     0,     0,   979,     0,     0,     0,     0,   983,
+       0,   509,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,   346,    26,    27,    28,     0,     0,     0,     0,     0,
+       0,    31,   684,     0,     0,   369,   414,   509,     0,     0,
+       0,     0,     0,     0,   414,   581,     0,   414,   584,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,    34,
+     321,     0,   613,  1017,     0,     0,    38,    39,     0,     0,
+    1018,     0,     0,     0,     0,     0,   212,     0,     0,     0,
+       0,   631,     0,  1020,   341,  1021,     0,     0,   382,     0,
+       0,   524,     0,   524,   974,     0,     0,     0,   741,  1033,
+       0,     0,     0,   685,     0,  1037,     0,   686,     0,    45,
+      46,   414,     0,     0,     0,   414,     0,  1075,     0,  1150,
+    1076,     0,     0,     0,     0,     0,     0,   524,     0,   524,
+    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   364,     0,     0,     0,
+       0,     0,   382,     0,  1183,     0,   166,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   974,
+     974,   212,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    1215,     0,   414,     0,     0,   364,     0,   590,     0,     0,
+       0,    31,     0,     0,     0,   509,   509,   509,   509,   509,
+     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
+     509,   509,   509,     0,     0,     0,     0,   283,   284,    34,
+     285,     0,  1146,     0,   414,     0,     0,     0,   341,   364,
+       0,     0,     0,     0,     0,   974,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   286,     0,     0,     0,
+       0,     0,   287,   862,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,  1266,  1267,
+       0,     0,     0,   414,   414,     0,     0,     0,     0,     0,
+     526,     0,     0,     0,     0,     0,  1211,     0,     0,   295,
+       0,   379,   803,   364,   971,     0,     0,    45,    46,   297,
+     298,   299,   300,   613,     0,   613,   613,     0,     0,     0,
+       0,     0,   613,     0,     0,     0,     0,     0,     0,     0,
+    1223,     0,   842,   364,     0,  1225,     0,     0,   364,     0,
+       0,     0,     0,  1229,     0,     0,     0,   364,   364,   364,
+       0,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   364,     0,     0,     0,     0,
+     414,   884,     0,     0,   414,   887,  1255,     0,     0,     0,
+       0,   889,     0,     0,     0,     0,     0,     0,  1263,     0,
+       0,  1264,     0,  1265,     0,     0,     0,     0,     0,     0,
+     414,     0,     0,     0,     0,     0,     0,  1274,  1275,     0,
+       0,     0,   509,     0,     0,     0,     0,     0,   212,  1371,
+       0,     0,   741,   364,   613,     0,     0,     0,     0,  1288,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   341,   364,     0,
+       0,     0,   414,   414,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1327,     0,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,  -291,
+       0,    26,    27,    28,     0,     0,   414,     0,     0,     0,
+      31,     0,     0,     0,   364,     0,     0,     0,     0,     0,
+       0,   803,   364,     0,     0,   613,     0,   613,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   613,    34,     0,
+       0,     0,     0,    37,     0,   336,   337,    40,     0,  -291,
+       0,  1377,     0,  1378,    41,    42,     0,     0,     0,     0,
+       0,     0,   509,     0,     0,  1386,     0,  1387,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   338,     0,  1394,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1412,  1414,     0,     0,     0,     0,     0,   509,     0,   803,
+       0,  1419,     0,     0,  1229,     0,   341,   364,   414,     0,
+     414,     0,     0,     0,   414,     0,     0,     0,     0,     0,
+       0,     0,   321,     0,     0,  1441,     0,     0,     0,     0,
+       0,     0,   509,     0,  1448,   613,   613,  1450,     0,  1452,
+    1454,  1456,     0,     0,     0,   509,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,  -291,     0,     0,     0,     0,     0,
+     414,     0,     0,     0,     0,    31,     0,     0,     0,  1486,
+       0,  1488,     0,  1229,     0,     0,   509,     0,     0,     0,
+       0,   414,  1143,     0,     0,     0,     0,     0,  1499,     0,
+       0,     0,   364,    34,     0,     0,     0,     0,   414,  1155,
+       0,   613,   613,  1160,  -291,     0,     0,     0,     0,     0,
+       0,     0,     0,   364,   364,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,   509,    26,    27,    28,    29,     0,     0,
+      30,   283,   284,    31,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   414,     0,   414,     0,
+       0,     0,     0,   414,     0,     0,     0,     0,     0,     0,
+     286,    34,   613,    35,     0,    36,   287,     0,    38,    39,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,   509,   509,   803,   414,  1243,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,  1055,     0,     0,     0,   364,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  -126,     0,     1,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
-       0,     0,   213,     0,    31,     0,     0,    79,     0,     0,
-       0,     0,   233,   357,   237,     0,   239,     0,     0,     0,
-       0,     0,     0,   248,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,    88,     0,    37,   349,   337,
-     338,    40,     0,  -295,     0,     0,     0,     0,    41,    42,
-       0,     0,     0,     0,   213,     0,   237,   239,   248,    43,
-       0,     0,    81,    58,     0,   364,     0,     0,     0,    81,
-       0,     0,     0,     0,   635,     0,   339,     0,     0,   128,
-     128,   128,     0,    46,    47,     0,     0,    58,     0,     0,
-       0,     0,   284,   285,    58,   286,     0,   213,   932,     0,
-     933,     0,     0,     0,     0,     0,     0,   936,   937,     0,
-       0,     0,   942,     0,     0,     0,     0,     0,     0,     0,
-     364,   287,    81,   167,   947,     0,     0,   288,     0,   951,
-       0,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-     220,   294,   295,     0,     0,     0,     0,    58,     0,    43,
-       0,     0,     0,   128,     0,   128,     0,     0,   213,   987,
-     237,   239,   248,     0,   296,     0,   380,     0,     0,     0,
-       0,     0,   792,    46,    47,   298,   299,   300,   301,     0,
-     277,   364,   364,     0,   364,   364,     0,     0,   167,     0,
-       0,     0,   274,     0,     0,     0,   213,     0,     0,     0,
-       0,   213,     0,     0,    88,     0,     0,     0,   508,     0,
-     510,   513,     0,     0,     0,     0,   498,     0,   516,   517,
-       0,   167,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   370,   510,   510,     0,   376,   128,     0,     0,   364,
-     364,     0,     0,     0,   128,     0,   128,   128,     0,     0,
-       0,   128,     0,   128,   128,     0,     0,     0,     0,     0,
-    1033,  1034,  1035,  1036,   213,  1038,     0,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1082,     0,     0,   167,     0,   213,     0,     0,     0,
-       0,   237,   239,     0,     0,  1088,   220,     0,     0,   248,
-       0,     0,     0,     0,     0,     0,   510,     0,     0,     0,
-       0,     0,     0,   364,   167,     0,     0,     0,     0,     0,
-       0,     0,     0,   128,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1108,     0,     0,     0,   376,
-       0,     0,   213,     0,     0,     0,   167,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   227,     0,     0,     0,
-     213,     0,     0,     0,     0,   213,     0,   213,     0,   525,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,   167,  1141,     0,   213,     0,     0,   213,   213,  1149,
-     364,     0,   364,     0,  1153,   213,     0,     0,     0,  1157,
-       0,  1158,     0,     0,     0,  1160,     0,  1161,  1162,   213,
-       0,  1165,     0,     0,     0,     0,   213,     0,     0,   598,
-    1177,     0,     0,     0,   622,   364,     0,     0,     0,     0,
-       0,     0,     0,   364,   364,   364,     0,     0,  1192,  1193,
-       0,     0,     0,     0,   364,   364,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,     0,     0,     0,     0,  1223,     0,     0,  1225,     0,
-       0,     0,     0,     0,   510,   510,   510,   510,   510,   510,
-     510,   510,   510,   510,   510,   510,   510,   510,   510,   510,
-     510,   510,     0,     0,     0,     0,     0,     0,     0,   364,
-     167,   167,     0,     0,     0,     0,     0,   370,     0,     0,
-       0,  1239,     0,     0,     0,     0,     0,  1243,  1244,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   525,  1255,
-     213,     0,     0,     0,     0,     0,     0,     0,     0,  1262,
-       0,     0,  1266,     0,  1267,     0,     0,  1269,     0,     0,
-       0,     0,     0,     0,     0,     0,   717,     0,   213,     0,
-    1277,     0,     0,   213,     0,     0,     0,     0,   167,   364,
-       0,     0,     0,  1284,     0,  1286,  1287,  1288,  1289,     0,
-     525,     0,   525,     0,     0,   525,     0,   167,   525,     0,
-       0,  1296,     0,  1297,     0,     0,     0,   174,     0,     0,
-     370,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
-       0,   510,     0,     0,     0,    88,  1325,  1326,   128,   128,
-       0,     0,     0,     0,     0,   213,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   213,
-       0,     0,   167,     0,     0,     0,     0,   128,     0,     0,
-     128,   128,     0,   128,   370,   128,   128,     0,   816,   498,
-     128,   128,     0,     0,     0,     0,     0,     0,    88,  1361,
-    1362,     0,     0,     0,   510,     0,     0,     0,     0,  1372,
-       0,     0,     0,     0,   598,     0,     0,     0,     0,   598,
-       0,     0,     0,     0,     0,     0,     0,     0,   370,   370,
-     370,     0,     0,     0,     0,     0,   510,     0,     0,  1022,
-       0,     0,     8,     9,    10,    11,    12,   370,     0,     0,
-       0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
-    1404,     0,   158,     0,     0,     0,   213,     0,     0,   284,
-     285,    31,   286,  1409,     0,  1410,  1411,  1412,     0,   525,
-       0,     0,     0,     0,     0,   213,     0,  1416,     0,     0,
-       0,     0,     0,     0,     0,     0,  1427,     0,   287,    34,
-       0,     0,     0,     0,   288,   370,     0,   941,   289,     0,
-     253,   290,   291,   292,   293,    41,    42,     0,   294,   295,
-     258,     0,     0,  1450,     0,     0,    43,     0,     0,     0,
-       0,   128,   128,     0,     0,     0,     0,     0,     0,     0,
-       0,   296,   717,   380,     0,     0,     0,     0,     0,     0,
-     345,    47,   298,   299,   300,   301,     0,   510,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1489,  1490,
-       0,     0,     0,     0,     0,     0,   158,     0,     0,     0,
-       0,  1495,     0,     0,     0,     0,     0,     0,  1495,     0,
-     387,     0,     0,     0,     0,     0,     0,     0,     0,   213,
-     370,     0,   510,     0,   622,     0,     0,     0,   370,     0,
-       0,     0,     0,   419,     0,     0,     0,     0,     0,     0,
-       0,  1529,     0,     0,     0,  1535,     0,   434,     0,     0,
-       0,   213,     0,     0,     0,     0,   439,     0,     0,     0,
-     510,     0,     0,     0,     0,     0,   447,     0,     0,     0,
-       0,     0,     0,   510,  1557,     0,  1558,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   213,     0,     0,
-       0,   465,     0,     0,     0,     0,   475,     0,   213,     0,
-       0,     0,     0,     0,  1573,  1574,     0,     0,     0,   483,
-       0,   128,  1577,  1578,   510,   493,   128,   497,     0,     0,
-       0,     0,     0,     0,   717,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   527,     0,     0,     0,     0,   525,
+      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
+       0,    30,   283,   284,    31,  1040,  1041,     0,  1042,     0,
+     341,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
+       0,     0,  1051,     0,     0,     0,  1052,  1053,   364,    33,
+       0,   286,    34,     0,    35,     0,    36,  1054,     0,    38,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   284,   285,     0,   286,     0,     0,
-       0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
-     213,     0,     0,     0,     0,     0,   586,     0,     0,   370,
-       0,   591,     0,   287,   213,     0,     0,     0,     0,   288,
-       0,   510,     0,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-     636,    43,     0,     0,   637,   638,     0,   640,     0,     0,
-       0,     0,   598,     0,   652,   653,   507,   654,   655,     0,
-     656,     0,   657,     0,     0,    46,    47,   298,   299,   300,
-     301,     0,     0,   370,   370,     0,     0,     0,     0,   586,
-       0,     0,     0,     0,   510,   510,     0,   672,     0,     0,
+       0,     0,     0,     0,   295,     0,  1055,   364,   364,   172,
+       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
+       0,     0,  1056,     0,     0,     0,     0,  -126,     0,     0,
+       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,   509,    26,
+      27,    28,    29,     0,     0,    30,   283,   284,    31,   285,
+       0,     0,     0,     0,   509,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   213,     0,     0,     0,
-     128,     0,   683,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   286,    34,     0,    35,     0,
+      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+      44,     0,     0,     0,   509,   509,    45,    46,   297,   298,
+     299,   300,     0,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -292,     0,     0,   414,   286,    34,     0,    35,     0,
+      36,   287,    31,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,   414,   414,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   525,     0,     0,     0,     0,   709,     0,
-       0,     0,     0,     0,   712,     0,     0,  -520,     0,   465,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      34,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+     343,  -292,     0,   414,     0,   757,   344,    46,   297,   298,
+     299,   300,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,   283,   284,    31,   285,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,   286,    34,     0,    35,    31,    36,
+     287,     0,    38,    39,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+       0,   111,     0,    38,    39,     0,     0,   295,     0,   962,
+       0,     0,    41,    42,   757,   344,    46,   297,   298,   299,
+     300,     2,   207,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-      29,     0,     0,    30,     0,   749,    31,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     768,     0,   717,     0,   213,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,    34,     0,    35,     0,    36,    37,
-       0,    38,    39,    40,     0,     0,     0,     0,     0,     0,
-      41,    42,     0,     0,     0,     0,     0,     0,   795,     0,
-       0,    43,   128,     0,   220,     0,     0,   805,     0,   342,
-     365,     0,     0,     0,   807,     0,    44,     0,    45,     0,
-     815,     0,     0,     0,     0,    46,    47,     0,     0,   829,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   717,     0,   415,     0,     0,     0,     0,     0,     0,
-     415,     0,     0,     0,     0,   510,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     869,     0,     0,   510,     0,     0,     0,     0,     0,     0,
-       0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,   370,   370,     0,     0,     0,     0,     0,
-       0,     0,   220,     0,     0,     0,   815,     0,     0,     0,
-     287,     0,     0,     0,   911,     0,   288,     0,     0,     0,
-     289,     0,   415,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,   253,   510,   510,     0,     0,
-       0,     0,     0,   296,     0,   948,   949,     0,     0,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,   966,
-       0,     0,     0,     0,     0,     0,   415,     0,     0,     0,
-       0,     0,     0,     0,   415,   582,     0,   415,   585,     0,
-     988,     0,   989,     0,     0,     0,   993,     0,   365,     0,
-       0,     0,   614,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   370,     0,
-     213,   632,     0,     0,   342,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
-       0,   415,     0,     0,    31,   415,     0,     0,     0,     0,
-       0,  1027,     0,     0,     0,     0,     0,     0,  1028,     0,
-       0,     0,     0,     0,     0,     0,   525,     0,   525,     0,
-       0,  1030,    34,  1031,     0,     0,   365,    37,     0,   337,
-     338,    40,     0,  -295,     0,     0,     0,  1043,    41,    42,
-       0,     0,     0,     0,  1047,     0,     0,     0,     0,    43,
-       0,     0,     0,   525,   322,   525,  1085,     0,     0,  1086,
-       0,     0,     0,     0,   347,     0,   339,     0,     0,     0,
-       0,     0,   415,    46,    47,   365,   383,   383,     0,     0,
-       0,     0,     0,   167,   207,     2,   208,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,   415,     0,     0,     0,   342,   365,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   591,     0,
-       0,     0,     0,     0,     0,     0,     0,   322,    34,     0,
-      35,     0,    36,     0,     0,   209,    39,     0,     0,     0,
-       0,     0,     0,   415,   415,     0,     0,     0,     0,     0,
-       0,   479,     0,     0,  1159,    43,     0,     0,     0,     0,
-       0,     0,   809,   365,     0,     0,     0,     0,     0,     0,
-       0,     0,   210,   614,     0,   614,   614,     0,     0,    46,
-      47,     0,   614,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   848,   365,     0,     0,     0,     0,   365,     0,
-       0,     0,     0,     0,     0,     0,     0,   365,   365,   365,
-       0,     0,   527,     0,     0,     0,     0,     0,  1224,     0,
-       0,     0,     0,     0,     0,     0,   365,     0,     0,     0,
-       0,   415,   891,     0,     0,   415,   894,     0,     0,     0,
-       0,     0,   896,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1236,     0,     0,     0,     0,  1238,     0,     0,
-       0,   415,     0,     0,     0,  1242,     0,   383,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   365,   614,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1271,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1279,     0,     0,  1280,     0,  1281,     0,
-     342,   365,     0,     0,     0,   415,   415,     0,     0,     0,
-       0,     0,  1290,  1291,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1304,     0,     0,     0,     0,     0,
-       0,   711,   284,   285,     0,   286,     0,     0,     0,     0,
-       0,   415,     0,     0,     0,     0,     0,     0,     0,   365,
-       0,     0,     0,     0,     0,     0,   809,   365,     0,     0,
-     614,   287,   614,     0,     0,     0,     0,   288,     0,     0,
-     745,   289,   614,  1345,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,   762,     0,     0,     0,     0,   745,    43,
-       0,   745,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   772,   773,   296,     0,   380,     0,     0,     0,
-       0,   761,     0,    46,    47,   298,   299,   300,   301,     0,
-       0,     0,     0,     0,     0,   794,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   803,     0,     0,     0,     0,
-       0,     0,   347,     0,     0,   809,     0,   762,     0,  1396,
-       0,  1397,   342,   365,   415,     0,   415,     0,     0,     0,
-     415,     0,     0,     0,     0,  1407,     0,  1408,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   614,   614,     0,     0,  1415,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   868,     0,     0,     0,
-       0,  1433,  1435,     0,     0,   383,     0,     0,   365,     0,
-       0,     0,  1440,     0,     0,  1242,     0,     0,   415,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -295,  1464,     0,
-     415,  1156,     0,     0,     0,     0,     0,  1471,    31,     0,
-    1473,   365,  1475,  1477,  1479,     0,     0,   415,  1168,     0,
-     614,   614,  1173,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   365,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  -295,     0,     0,
-       0,     0,     0,     0,  1510,     0,  1512,     0,  1242,     0,
-       0,     0,     0,     0,     0,   762,     0,   972,     0,     0,
-       0,     0,     0,     0,  1524,     0,     0,   983,     0,     0,
-       0,     0,     0,     0,   992,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   415,     0,   415,     0,     0,
-       0,     0,   415,     0,     0,     0,     0,     0,     0,     0,
-       0,   614,     0,     0,     0,     0,     0,     0,     0,  1175,
-       0,     0,     8,     9,    10,    11,    12,  1010,  1011,     0,
-       0,   347,     0,     0,     0,     0,   809,   415,  1258,     0,
-       0,     0,     0,     0,     0,   347,     0,     0,     0,   284,
-     285,    31,   286,     0,     0,     0,     0,     0,     0,     0,
-       0,   365,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   287,    34,
-       0,     0,     0,     0,   288,  1041,     0,     0,   289,   383,
-       0,   290,   291,   292,   293,    41,    42,     0,   294,   295,
-       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   296,   342,   380,     0,     0,     0,   347,     0,     0,
-    1176,    47,   298,   299,   300,   301,     0,     0,     0,     0,
-     365,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,   322,    26,    27,    28,
-       0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
-       0,     0,  1132,  1133,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   365,     0,     0,   383,     0,     0,     0,
-       0,     0,   983,   287,    34,  1147,    35,   745,    36,   288,
-       0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,  1163,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,  1178,
-       0,   284,   285,     0,   286,     0,   296,     0,   344,     0,
-       0,     0,     0,   761,     0,   345,    47,   298,   299,   300,
-     301,   383,     0,  1196,     0,     0,     0,     0,     0,     0,
-     287,     0,     0,     0,     0,     0,   288,     0,   983,   983,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,  1228,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,   365,   980,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+       0,     0,     0,     0,   283,   284,    31,   285,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,   983,     0,    26,    27,
-      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
-       0,     0,     0,     0,     0,   868,     0,     0,     0,     0,
-       0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-    1282,  1283,    33,     0,     0,    34,     0,    35,     0,    36,
-      37,     0,    38,    39,    40,     0,     0,   415,     0,     0,
-     287,    41,    42,     0,     0,     0,   288,     0,     0,     0,
-     289,     0,    43,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,   415,   415,     0,     0,     0,    44,    43,    45,
-       0,     0,     0,  -524,     0,     0,    46,    47,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,   415,     0,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-     983,     0,     1,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,    29,     0,     0,    30,   284,   285,    31,  1050,
-    1051,     0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
-    1062,  1063,     0,    33,  1390,   287,    34,   745,    35,     0,
-      36,  1064,     0,    38,    39,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-    1065,     0,     0,   173,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,     0,     0,  1066,     0,     0,
-       0,  -130,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1449,     0,     0,     0,     0,     0,     0,     1,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   284,   285,    31,   286,     8,     9,    10,    11,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,   286,    34,     0,    35,    31,    36,   287,
+       0,    38,    39,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    38,    39,     0,     0,   295,     0,   962,     0,
+       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
+       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,  1516,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,   112,     0,
-      38,    39,     0,     0,   296,     0,  1065,     0,     0,    41,
-      42,     0,     0,    46,    47,   298,   299,   300,   301,     0,
-       0,     0,     0,     0,     0,     0,   322,  -130,     1,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   284,   285,    31,   286,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -296,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,    31,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,    45,  -296,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+       0,     0,     0,   283,   284,    31,   285,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   286,    34,     0,    35,    31,    36,   287,     0,
+      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
+       0,   208,    39,     0,     0,   295,     0,   343,     0,     0,
+       0,     0,     0,   344,    46,   297,   298,   299,   300,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      38,    39,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,   761,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-     209,    39,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,   761,     0,    46,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,     0,   283,   284,    31,   285,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
+       0,   286,    34,     0,    35,     0,    36,   287,     0,   208,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   344,     0,     0,     0,
-       0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   997,     0,     0,     0,
+       0,     0,   998,    46,   297,   298,   299,   300,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,   283,   284,    31,   285,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
+     286,    34,     0,    35,     0,    36,   287,     0,    38,    39,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,  1007,     0,     0,     0,
-       0,     0,     0,  1008,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,   962,     0,     0,     0,     0,
+       0,   344,    46,   297,   298,   299,   300,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
+      34,     0,    35,     0,    36,   287,     0,   208,    39,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   971,     0,     0,     0,
-       0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,     0,   380,     0,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     1,
+       0,     0,   295,     0,   379,     0,     0,     0,     0,     0,
+      45,    46,   297,   298,   299,   300,  -515,     0,     0,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -2548,66 +2529,321 @@
       38,    39,    40,     0,     0,     0,     0,     0,     0,    41,
       42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      43,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    44,     0,    45,     0,     0,
-       0,     0,     0,     0,    46,    47,   207,     2,   208,     4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    43,     0,    44,     0,     0,
+       0,     0,     0,    45,    46,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
+       0,    31,    32,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,    34,
+       0,    35,     0,    36,    37,     0,    38,    39,    40,     0,
+       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    43,     0,    44,     0,     0,     0,  -519,     0,    45,
+      46,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    33,     0,     0,    34,     0,    35,     0,    36,
+      37,     0,    38,    39,    40,     0,     0,     0,     0,     0,
+       0,    41,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    43,     0,    44,
+       0,     0,     0,     0,     0,    45,    46,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,    29,     0,     0,
+      30,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
+       0,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,     0,     0,     0,    44,    31,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,    35,     0,    36,    37,
+       0,   208,    39,    40,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,   209,     0,
+       0,     0,     0,     0,    45,    46,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
+       0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    34,     0,    26,    27,    28,     0,     0,
+      38,    39,  -399,   677,    31,     0,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,   634,    36,   338,     0,    38,
+      39,     0,     0,    45,    46,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1350,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   677,     0,     0,     0,
+       0,     0,    45,    46,     2,   207,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,    34,     0,    35,
+       0,    36,    31,   684,    38,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1352,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   677,     0,     0,     0,     0,     0,    45,    46,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   685,    26,    27,    28,  1091,     0,
+      45,    46,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
+      39,     0,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,   271,    31,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
+       0,     0,    38,    39,     0,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,   677,
+      31,     0,     0,     0,     0,    45,    46,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+      35,     0,    36,     0,     0,    38,    39,     0,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,     0,   592,    31,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,    35,     0,    36,     0,     0,   208,    39,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,   283,   284,    31,
+     285,     0,     0,     0,     0,   209,     0,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   286,    34,     0,     0,
+       0,     0,   287,     0,    38,    39,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   295,
+       0,   517,     0,     0,   172,     0,     0,    45,    46,   297,
+     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+     283,   284,    31,   285,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,   286,
+      34,     0,     0,    31,     0,   287,     0,    38,    39,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,     0,    37,     0,   336,   337,
+      40,     0,   295,   -35,   296,     0,     0,    41,    42,     0,
+      45,    46,   297,   298,   299,   300,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,   338,    26,    27,    28,     0,
+       0,    45,    46,   283,   284,    31,   285,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   286,    34,     0,     0,    31,     0,   287,     0,
+      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,   111,
+       0,    38,    39,     0,     0,   295,     0,   296,     0,     0,
+      41,    42,     0,    45,    46,   297,   298,   299,   300,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    44,    26,
+      27,    28,     0,     0,    45,    46,   283,   284,    31,   285,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   286,    34,     0,     0,    31,
+     684,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    38,    39,     0,     0,   295,     0,
+     158,     0,     0,     0,     0,     0,    45,    46,   297,   298,
+     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,   685,    26,    27,    28,  1220,     0,    45,    46,   283,
+     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,   286,    34,
+       0,     0,    31,     0,   287,     0,    38,    39,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   295,     0,   592,     0,     0,     0,     0,     0,    45,
+      46,   297,   298,   299,   300,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   258,    26,    27,    28,     0,     0,
+      45,    46,   283,   284,    31,   285,     0,     0,     0,     0,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   286,    34,    26,    27,    28,     0,   287,     0,    38,
+      39,   288,    31,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,   295,     0,   379,    38,    39,     0,
+       0,     0,    45,    46,   297,   298,   299,   300,   467,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   158,    26,    27,    28,     0,     0,
+      45,    46,     0,     0,    31,     0,     0,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,    34,     0,    35,     0,    36,    31,     0,    38,
+      39,     0,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,    34,    26,    27,    28,     0,
+      37,     0,    38,    39,    40,    31,     0,     0,     0,    -3,
+       0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,    34,    26,    27,    28,    43,    37,   158,
+      38,    39,    40,    31,     0,    45,    46,     0,     0,    41,
+      42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,    34,    26,    27,    28,    43,    37,    44,   208,    39,
+      40,    31,     0,    45,    46,     0,     0,    41,    42,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -291,    34,
+      26,    27,    28,    43,    37,   271,   336,   337,    40,    31,
+       0,    45,    46,     0,     0,    41,    42,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,  -291,    34,    26,    27,
+      28,   634,     0,   338,    38,    39,     0,    31,  -291,    45,
+      46,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,    34,     0,     0,     0,   634,
+      31,   338,    38,    39,     0,     0,  -291,    45,    46,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
+      27,    28,     0,     0,     0,   208,    39,     0,    31,   338,
+       0,     0,     0,     0,     0,    45,    46,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,    34,    26,    27,    28,
+       0,     0,   271,    38,    39,     0,    31,     0,    45,    46,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,    34,     0,     0,     0,     0,    31,
+     338,    38,    39,     0,     0,     0,    45,    46,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
+      28,     0,     0,     0,    38,    39,     0,    31,   685,     0,
+       0,     0,     0,     0,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,   592,    38,    39,     0,     0,     0,    45,    46,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,    44,
+       0,     0,     0,     0,    31,    45,    46,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
+      39,   283,   284,     0,   285,  1041,     0,  1042,     0,     0,
+    1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,
+    1524,  1051,     0,     0,     0,  1052,  1053,     0,    33,     0,
+     286,     0,     0,     0,     0,  -412,  1054,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,   379,     0,     0,   172,     0,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,   283,
+     284,  1056,   285,  1041,     0,  1042,  -126,     0,  1043,  1044,
+    1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,
+       0,     0,     0,  1052,  1053,     0,    33,     0,   286,     0,
+       0,     0,     0,     0,  1054,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   295,     0,   379,     0,     0,   172,     0,     0,    45,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,  1056,
+       0,     0,     0,     0,  -126,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
+      31,     0,   283,   284,     0,   285,  1041,     0,  1042,  1398,
+    1399,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
+       0,  1524,  1051,     0,     0,     0,  1052,  1053,    34,    33,
+      35,   286,    36,     0,     0,    38,    39,  1054,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,  1311,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
+       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
+     283,   284,  1056,   285,  1041,     0,  1042,  1398,  1399,  1043,
+    1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,
+    1051,     0,     0,     0,  1052,  1053,     0,    33,     0,   286,
+       0,     0,     0,     0,     0,  1054,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,   172,     0,     0,
+      45,    46,   297,   298,   299,   300,     0,     0,   283,   284,
+    1056,   285,  1041,     0,  1042,     0,     0,  1043,  1044,  1045,
+    1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,     0,
+       0,     0,  1052,  1053,     0,    33,     0,   286,     0,     0,
+       0,     0,     0,  1054,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     295,     0,   379,     0,     0,   172,     0,     0,    45,    46,
+     297,   298,   299,   300,   286,     0,     0,     0,  1056,     0,
+     640,     0,   140,   141,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
+       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   295,     0,   641,
+       0,   642,   380,     0,     0,    45,    46,   297,   298,   299,
+     300,   286,     0,     0,     0,     0,     0,   287,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,   283,
+     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,   283,   284,
+       0,   285,   708,    46,   297,   298,   299,   300,   286,     0,
+       0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,   286,   293,   294,
+       0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,   295,     0,   379,     0,   283,   284,     0,   285,   344,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,     0,
+     506,     0,     0,     0,   283,   284,     0,   285,    45,    46,
+     297,   298,   299,   300,   286,     0,     0,     0,     0,     0,
+     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,   286,   293,   294,     0,     0,     0,   287,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,   295,     0,     0,
+       0,   283,   284,     0,   285,    45,    46,   297,   298,   299,
+     300,     0,     0,     0,     0,     0,   511,     0,     0,     0,
+       0,     0,     0,     0,    45,    46,   297,   298,   299,   300,
+     286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   514,     0,     0,     0,     0,     0,     0,
+       0,    45,    46,   297,   298,   299,   300,     2,   207,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,   486,   487,   488,
-      34,     0,    35,    31,    36,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
-       0,    46,    47,     1,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,  -295,     0,
-      26,    27,    28,    29,     0,     0,    30,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,    38,    39,     0,     0,  -295,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    43,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    45,     0,     0,     0,     0,     0,     0,    46,    47,
-       1,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,    38,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
-       0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+      25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
-       0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  -403,
-     679,     0,     0,     0,     0,     0,     0,    46,    47,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      34,     0,    35,     0,    36,    37,     0,   175,   176,    40,
+       0,     0,     0,     0,     0,     0,    41,    42,   206,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
@@ -2615,391 +2851,27 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
-      39,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,  1369,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   679,     0,     0,     0,
-       0,     0,     0,    46,    47,     2,   208,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
-      35,     0,    36,     0,     0,    38,    39,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    43,     0,  1371,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   679,     0,     0,     0,     0,     0,     0,    46,
-      47,     2,   208,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
+      39,   467,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,   209,    39,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   272,     0,
-       0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   679,     0,     0,     0,     0,     0,
-       0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     593,     0,     0,     0,     0,     0,     0,    46,    47,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
-      39,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    43,
-       0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
-      31,   286,     0,     0,     0,     0,   210,     0,     0,     0,
-       0,     0,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
-       0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     296,     0,   518,     0,     0,   173,     0,     0,     0,    46,
-      47,   298,   299,   300,   301,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   287,    34,     0,     0,     0,     0,   641,     0,    38,
-      39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
-       0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   296,   -35,   742,     0,     0,     0,
-       0,     0,     0,    46,    47,   298,   299,   300,   301,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,   284,   285,    31,   286,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   287,    34,     0,     0,     0,
-       0,   288,     0,    38,    39,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-     297,     0,     0,     0,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-     284,   285,    31,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   287,
-      34,     0,     0,     0,     0,   288,     0,    38,    39,   289,
-       0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
-     295,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   296,     0,   159,     0,     0,     0,     0,     0,
-       0,    46,    47,   298,   299,   300,   301,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   287,    34,     0,     0,     0,     0,   288,
-       0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   296,     0,   593,     0,
-       0,     0,     0,     0,     0,    46,    47,   298,   299,   300,
-     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
-      31,   286,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
-       0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     296,     0,   380,     0,     0,     0,     0,     0,     0,    46,
-      47,   298,   299,   300,   301,   468,     2,   208,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,    34,
-       0,    35,     0,    36,    31,     0,    38,    39,     0,     0,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,    34,    26,    27,    28,     0,    37,     0,    38,
-      39,    40,    31,     0,     0,     0,    -3,     0,    41,    42,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,    44,    37,   159,    38,    39,    40,
-       0,     0,     0,    46,    47,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    44,     0,    45,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,     0,     0,    37,     0,   209,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,    37,     0,   337,   338,    40,
-       0,     0,    44,     0,   272,     0,    41,    42,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,     0,     0,    37,     0,   337,   338,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,   112,     0,    38,    39,     0,
-       0,     0,     0,     0,   339,     0,    41,    42,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
-       0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   687,     0,     0,     0,   688,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-      34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
-       0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,   339,     0,     0,     0,     0,     0,
-       0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   687,     0,     0,     0,  1101,     0,
-       0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,   686,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,   687,     0,     0,     0,  1233,     0,
-       0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   635,     0,   339,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   259,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   159,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,   209,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   272,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   339,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,   687,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   593,     0,     0,     0,     0,
-       0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,   209,    39,
-       0,     0,     0,     0,     0,    45,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    46,    47,     2,   208,     4,     5,     6,     7,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
+       0,     0,    38,    39,     2,   207,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
-       0,   284,   285,     0,   286,  1051,     0,  1052,     0,     0,
-    1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,     0,     0,
-    1549,  1061,     0,     0,     0,  1062,  1063,    34,    33,    35,
-     287,    36,     0,     0,    38,    39,  1064,     0,     0,     0,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,   485,   486,   487,    34,     0,    35,
+      31,    36,     0,     0,   208,    39,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -416,     0,     0,   296,     0,   380,     0,     0,   173,     0,
-       0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
-       0,     0,  1066,     0,   284,   285,  -130,   286,  1051,     0,
-    1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,  1059,
-    1060,     0,     0,     0,  1061,     0,     0,     0,  1062,  1063,
-       0,    33,     0,   287,     0,     0,     0,     0,     0,  1064,
-       0,     0,     0,   289,     0,     0,   290,   291,   292,   293,
-      41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
-       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   296,     0,   380,     0,
-       0,   173,     0,     0,     0,    46,    47,   298,   299,   300,
-     301,     0,     0,     0,     0,  1066,     0,     0,     0,  -130,
-       2,   208,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,     0,     0,     0,     0,    31,     0,   284,   285,     0,
-     286,  1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,
-    1057,  1058,  1059,  1060,     0,     0,  1549,  1061,     0,     0,
-       0,  1062,  1063,    34,    33,    35,   287,    36,     0,     0,
-      38,    39,  1064,     0,     0,     0,   289,     0,     0,   290,
-     291,   292,   293,    41,    42,     0,   294,   295,     0,     0,
-       0,     0,  1327,     0,    43,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   296,
-       0,   380,     0,     0,   173,     0,     0,     0,    46,    47,
-     298,   299,   300,   301,     0,     0,   284,   285,  1066,   286,
-    1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,  1057,
-    1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
-    1062,  1063,     0,    33,     0,   287,     0,     0,     0,     0,
-       0,  1064,     0,     0,     0,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
-       0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
-     380,     0,     0,   173,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,   284,   285,  1066,   286,  1051,
-       0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,
-    1059,  1060,     0,     0,     0,  1061,     0,     0,     0,  1062,
-    1063,     0,    33,     0,   287,     0,     0,     0,     0,     0,
-    1064,     0,     0,     0,   289,     0,     0,   290,   291,   292,
-     293,    41,    42,     0,   294,   295,     0,     0,     0,     0,
-       0,     0,    43,   284,   285,     0,   286,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   296,     0,   380,
-       0,     0,   173,     0,     0,     0,    46,    47,   298,   299,
-     300,   301,   287,     0,     0,     0,  1066,     0,   641,     0,
-     141,   142,   289,     0,     0,   290,   642,   292,   293,    41,
-      42,     0,   294,   295,     0,     0,     0,     0,     0,     0,
-      43,   284,   285,     0,   286,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   296,     0,   643,     0,   644,
-     381,     0,     0,     0,    46,    47,   298,   299,   300,   301,
-     287,     0,     0,     0,     0,     0,   288,     0,     0,     0,
-     289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
-     294,   295,     0,     0,     0,     0,     0,     0,    43,   284,
-     285,     0,   286,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   296,     0,   380,     0,     0,   284,   285,
-       0,   286,   710,    47,   298,   299,   300,   301,   287,     0,
-       0,     0,     0,     0,   641,     0,     0,     0,   289,     0,
-       0,   290,   291,   292,   293,    41,    42,   287,   294,   295,
-       0,     0,     0,   288,     0,     0,    43,   289,     0,     0,
-     290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
-       0,   296,     0,   765,     0,    43,   284,   285,     0,   286,
-      46,    47,   298,   299,   300,   301,     0,     0,     0,     0,
-     296,     0,   380,     0,     0,   284,   285,     0,   286,   345,
-      47,   298,   299,   300,   301,   287,     0,     0,     0,     0,
-       0,   288,     0,     0,     0,   289,     0,     0,   290,   291,
-     292,   293,    41,    42,   287,   294,   295,     0,     0,     0,
-     288,     0,     0,    43,   289,     0,     0,   290,   291,   292,
-     293,    41,    42,     0,   294,   295,     0,     0,   512,     0,
-       0,     0,    43,     0,     0,     0,     0,    46,    47,   298,
-     299,   300,   301,     0,     0,     0,     0,   515,     0,     0,
-       0,     0,     0,     0,     0,     0,    46,    47,   298,   299,
-     300,   301,     2,   208,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
-      37,     0,   176,   177,    40,     0,     0,     0,     0,     0,
-       0,    41,    42,   207,     2,   208,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,   209,    39,   468,     2,   208,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
-     208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
-      39
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-1414))
+  ((yystate) == (-1310))
 
 #define yytable_value_is_error(yytable_value) \
@@ -3008,706 +2880,700 @@
 static const yytype_int16 yycheck[] =
 {
-       0,     1,    44,   187,   187,   535,   187,     0,    44,   753,
-     187,    44,   206,   241,   648,   187,   522,   753,   188,   881,
-       1,   753,   107,   221,   118,   187,   187,   514,   621,   170,
-     171,   350,    32,     0,   986,   760,     0,   189,   603,    32,
-     350,   601,   601,   493,    44,   188,   281,   497,    44,   993,
-      50,    39,  1337,   604,    44,  1419,   603,    50,    44,   610,
-     601,   572,    51,    32,    64,    32,    72,    67,    32,    82,
-      70,    64,   157,   601,    67,    95,  1050,    70,    39,   346,
-     419,    44,    45,   267,   267,  1031,   267,   694,   601,    70,
-     267,    63,   107,   601,    50,   267,   296,   110,   268,  1043,
-     439,  1062,  1063,   601,   117,   267,   267,   107,   447,   203,
-     130,   263,   264,  1526,    39,   115,   131,    82,   118,   119,
-     109,   109,    67,   111,    39,   268,   132,    64,   483,  1493,
-      72,  1030,  1031,  1546,    39,    44,    45,    39,   365,    84,
-    1553,   735,   369,   636,   637,   187,   427,   428,   148,   149,
-     111,   187,   115,   881,   187,  1440,   149,   157,   158,   115,
-     132,   654,   162,   635,   636,   637,     0,   258,   912,   162,
-     489,    28,   109,    39,   119,    82,   912,     0,     1,  1140,
-     912,   112,   654,   689,   109,   116,   111,   187,   188,    72,
-     132,   187,   148,   110,   109,   188,   111,   187,    32,   116,
-       0,   187,    82,   203,   109,   114,   111,   720,    82,    32,
-     117,   211,   720,   411,   495,    96,   483,   162,   211,   712,
-      82,    78,   720,   223,     0,   267,    58,   427,   428,   109,
-     223,   267,    32,   514,   267,   118,   110,   407,   115,   116,
-     712,   241,   123,   109,    67,   111,    85,    70,   109,   111,
-     111,   109,    67,   253,   131,   211,    32,   342,   818,   818,
-     253,   261,   109,  1423,   407,   830,   266,   267,   268,   820,
-       1,   996,   283,   273,   113,   268,   108,   818,   223,   111,
-     635,   636,   637,   830,   253,   241,   253,   372,   799,   253,
-     818,    67,  1238,   603,     0,     1,   296,   931,   579,   654,
-     907,    11,  1254,   397,   119,   818,     1,   507,   308,   116,
-     818,   481,   512,   109,   807,   515,   261,   273,   491,    50,
-     818,   266,  1050,  1475,   324,   132,    32,   109,   419,   329,
-    1304,   425,    44,    45,   230,   807,   329,   431,   481,   112,
-      80,   112,   342,   116,   683,  1291,   346,   162,   439,   131,
-     350,   351,   308,   249,   621,    82,   447,   712,  1510,   626,
-    1512,  1521,  1224,   590,    70,   365,  1526,   116,   568,   369,
-     697,   111,   372,   113,    96,   940,   107,   117,   110,   939,
-     939,   110,   109,   132,   115,   117,  1546,   116,   220,   110,
-     346,  1290,  1291,  1553,   749,  1526,   117,   397,   939,   131,
-     223,   123,   114,    90,    91,   632,   351,   407,   223,    10,
-      11,    12,    13,    14,   407,   114,  1009,   148,   116,   253,
-      94,     0,  1553,    80,   258,   425,   157,   427,   428,  1125,
-     253,   431,   605,  1129,   434,   109,   609,   111,    39,   126,
-     127,   526,   274,   116,   118,   119,   261,   223,   129,   281,
-     131,   266,   807,   253,   111,   455,   113,   630,   258,   132,
-     117,   634,   116,  1407,  1408,  1059,    67,  1018,  1019,  1415,
-     976,   427,   428,   473,     3,   112,   207,   253,   132,   116,
-     211,   481,   749,   483,   116,   485,   697,   432,   481,   489,
-    1464,    72,   485,     0,   505,   495,  1224,  1471,   948,   734,
-     132,   116,    83,    84,   991,  1139,   658,   507,   649,   509,
-     241,   830,   512,     3,   514,   515,  1415,   349,   485,   689,
-     830,   485,   522,     0,   116,    32,   526,   527,   110,   474,
-     111,   109,   116,   111,   366,   117,   351,    44,   370,   495,
-     132,    72,   273,    50,  1109,   276,   689,   253,   132,    94,
-    1524,   112,    83,    84,   116,   116,   911,    64,   514,   254,
-      67,  1496,   656,    70,   109,   296,   111,  1502,   116,   109,
-     132,   571,   572,   118,   119,   351,  1304,   308,   131,   579,
-     111,   792,   809,    94,   132,   419,   913,   814,  1523,  1095,
-     590,   591,   683,  1528,  1100,   595,   116,   917,   109,   919,
-     111,   601,   110,   603,   116,   439,   116,   118,   119,   110,
-     110,   342,   132,   447,   116,   346,   116,   432,   709,   419,
-     132,   621,   132,   579,   116,   944,   626,   591,   628,   112,
-     132,   958,   632,   116,   365,   635,   636,   637,   369,   439,
-     132,   372,   149,   109,   911,   111,   110,   447,   112,   483,
-     595,   485,   116,   109,   654,   162,   656,   668,   869,   474,
-     110,    72,   485,   748,   109,   621,   116,   131,   132,   867,
-     626,   110,    83,    84,    50,  1030,   903,   116,   623,   852,
-     187,   188,    72,   628,   109,   485,   686,   109,   110,   689,
-     888,   120,   121,    83,    84,   110,   427,   428,   474,    71,
-     111,   116,   913,    75,   211,   109,    78,   111,    80,   485,
-    1304,   118,   712,   713,   714,    87,   223,   124,   125,   109,
-     720,   721,   950,   109,   455,   111,   109,   738,   912,   912,
-     109,   912,   873,    88,    89,   912,  1464,   468,   109,   115,
-     912,   110,  1009,  1471,   914,   110,   253,   958,   748,   749,
-     912,   912,   110,   753,   754,   700,    72,   110,    74,    75,
-     267,   112,   493,    72,   495,   109,   497,    83,    84,   714,
-     109,   914,   945,   468,    83,    84,   507,    72,   509,   485,
-     595,   512,   115,   514,   515,   996,  1530,  1381,    83,    84,
-     622,  1321,   115,   116,  1530,   526,  1524,   110,  1530,   799,
-    1127,   109,   111,   116,  1159,   132,   638,   807,   623,   809,
-     110,   811,    64,   628,   814,   815,   116,   110,   818,   514,
-     109,   653,   329,   116,   507,   910,   509,   110,  1022,   512,
-     830,   109,   515,   116,   529,   211,  1047,   532,   112,   534,
-     535,   132,   214,   350,    85,    86,    87,   623,   579,   683,
-      72,   815,    74,    75,   110,   557,   558,   559,   560,   590,
-     116,    83,    84,  1190,  1191,   110,   811,   109,   109,   111,
-     111,   116,   113,   114,  1468,   709,  1470,   114,   110,   114,
-     110,   881,   132,   683,   116,   700,   116,   110,   583,   111,
-     621,   109,  1159,   116,   109,   626,   111,   273,   132,   714,
-     407,   632,   734,   903,  1045,   465,   109,  1134,   111,   709,
-     910,   911,   912,   110,   914,   749,  1127,   881,   114,   116,
-     296,   110,   110,   110,   700,  1095,   926,   116,   116,   116,
-    1100,  1525,   308,    82,   109,  1290,   111,   109,   714,   939,
-     940,    85,    86,    87,   944,   109,   110,   111,   109,   949,
-     950,    82,  1095,    92,    93,   686,   112,  1100,     0,     1,
-     655,   119,   657,   116,   117,   109,   966,   111,   949,   113,
-     114,  1238,   129,    72,   110,   111,   976,    76,   485,  1190,
-    1191,   353,   489,   355,    83,    84,   128,    29,    30,   465,
-      32,    58,    59,   724,   950,    94,   811,   115,   116,  1505,
-     116,   117,    44,  1203,  1204,    94,  1206,   131,    50,  1009,
-     109,   111,   707,  1213,   109,  1215,    58,   748,   109,   118,
-     119,   114,    64,  1117,   112,    67,   116,   117,    70,   112,
-    1030,  1031,   109,   110,   111,   811,     4,     5,     6,     7,
-       8,     9,    84,    85,   109,   110,   111,   881,   112,  1555,
-    1050,    44,    45,  1009,   109,   110,   111,   110,   881,    10,
-      11,    12,    13,    14,   553,   554,   108,  1012,   109,   111,
-      30,   443,   110,   110,  1401,   110,   118,   911,   809,   455,
-     110,   881,   110,   814,   555,   556,  1050,   112,    39,   111,
-    1090,   131,  1419,   116,   601,  1095,   603,    58,    59,    60,
-    1100,    69,   114,    71,   114,   881,   109,   149,   112,  1109,
-     561,   562,   672,   110,  1125,   157,    67,  1117,  1129,  1130,
-     162,  1263,  1264,  1265,    84,    85,   949,   110,   112,   117,
-     112,   507,   112,   509,  1134,  1220,   512,   112,   117,   515,
-       3,   117,   116,    94,    29,   187,   188,    10,    11,    12,
-      13,    14,   110,   110,   116,   114,   112,   112,   109,  1159,
-     111,   203,   115,   110,   132,  1492,  1493,   118,   119,   211,
-     115,   115,   903,   109,   116,   881,    39,  1377,   220,   910,
-     110,   223,   689,   132,   110,   110,   117,   110,   230,   110,
-    1401,   110,   116,   110,   110,   926,   672,  1012,   110,   110,
-     110,  1201,  1202,   245,    67,   110,   110,   249,  1419,   110,
-     110,   253,   254,   720,   721,   110,  1050,   948,   949,   950,
-    1220,  1202,   110,   110,  1224,   267,   268,  1050,   110,    72,
-      29,   115,   274,    76,   131,   795,  1012,  1248,  1238,   281,
-      83,    84,  1242,   949,   117,   805,    72,   116,    74,    75,
-    1050,    94,    72,   110,    74,    75,  1201,    83,    84,   819,
-    1224,  1242,   112,    83,    84,   112,   109,   116,   111,   964,
-     110,   110,   110,   117,  1050,   118,   119,   112,  1009,   116,
-     114,  1492,  1493,   109,   116,   245,   110,   329,   114,   109,
-    1290,  1291,   110,   988,   114,   110,   991,   110,   993,  1299,
-     112,   110,   116,  1397,  1304,   116,     3,   349,   350,   110,
-     686,   818,  1540,    10,    11,    12,    13,    14,   112,   795,
-     109,   109,   109,   830,   366,  1159,   109,  1338,   370,   805,
-     109,  1342,   117,   115,   112,   132,   110,  1337,   110,   381,
-    1304,   110,    39,   819,  1050,   115,  1530,  1530,  1043,  1530,
-     115,   114,   129,  1530,  1299,   397,  1337,   112,  1530,  1090,
-     110,  1531,   116,   112,   132,   407,   112,   110,  1530,  1530,
-      67,     4,     5,     6,     7,     8,     9,   116,  1201,  1202,
-     110,   110,    47,   425,   112,  1555,  1201,   112,  1531,   431,
-    1224,   433,   112,   110,   112,   132,   112,  1397,   112,   132,
-      33,  1224,   115,  1134,  1238,   912,    72,   914,    74,    75,
-      76,  1505,  1555,   132,   110,  1415,   115,    83,    84,  1242,
-     132,   381,   132,   117,  1224,  1201,   468,   110,   112,   115,
-     112,   473,   112,  1444,   112,    56,    69,   944,    71,   481,
-    1440,   112,   112,   485,   112,   112,   110,   489,  1224,   110,
-     492,   109,   494,   881,    72,   112,    74,    75,    76,  1440,
-     112,   109,   109,    60,  1464,    83,    84,  1027,  1028,   110,
-    1304,  1471,   514,  1473,   110,  1475,  1299,   114,    99,   132,
-     112,  1304,   117,   112,  1299,   110,   112,   529,  1530,  1220,
-     532,   109,   534,   535,  1530,   110,  1202,  1530,    96,   109,
-    1464,    96,   109,   115,  1304,  1505,   112,  1471,   132,   110,
-    1510,  1242,  1512,   116,  1337,    42,   110,   110,  1224,   110,
-     110,   117,   110,  1299,  1524,  1085,  1086,   132,  1304,    96,
-    1530,  1531,   492,   132,   494,     3,  1242,    96,  1531,   110,
-    1540,   583,    10,    11,    12,    13,    14,   132,   590,   132,
-     926,  1027,  1028,   117,    72,  1555,   110,     0,    76,   601,
-    1524,   603,  1555,   286,  1396,    83,    84,   132,  1263,  1264,
-    1265,    39,   110,   110,   195,   115,    94,   112,   112,   132,
-     622,   109,   132,   115,  1540,   308,   309,   110,  1095,    32,
-     115,   109,    72,  1100,    74,    75,   638,   218,  1304,    67,
-     118,   119,   644,    83,    84,   110,  1337,   228,   132,  1085,
-    1086,   653,   110,   655,   656,   657,   110,  1440,  1066,   565,
-     563,  1224,  1493,   346,   564,  1053,  1321,    70,   566,  1383,
-    1464,  1337,   567,  1565,   114,  1314,  1130,  1471,  1342,  1081,
-    1471,  1464,   686,   686,   919,  1100,   927,   689,  1471,   699,
-     583,   693,   980,   695,   873,   650,   724,   699,   946,   382,
-      50,   734,  1242,   485,  1464,   707,    -1,    26,    27,    28,
-      -1,  1471,   571,   571,    64,   296,  1236,    67,   720,   721,
-      70,   571,    -1,    -1,   644,    -1,    -1,    -1,  1464,    -1,
-    1524,    -1,   734,    -1,    -1,  1471,    72,    -1,    74,    75,
-      76,  1524,    -1,    58,    -1,     0,     1,    83,    84,  1440,
-      -1,  1271,  1407,  1408,  1090,   158,    -1,    -1,    -1,  1279,
-    1280,  1281,    -1,    -1,  1524,     4,     5,     6,     7,     8,
-       9,    -1,    -1,   693,  1440,   695,    -1,    32,    -1,   699,
-      -1,   100,  1473,   102,  1475,    -1,    -1,    -1,  1524,    -1,
-    1445,    -1,    -1,   108,    -1,    50,   111,    -1,  1464,   149,
-    1236,    67,    -1,    -1,    -1,  1471,   191,    -1,    -1,    -1,
-      -1,    77,   162,   198,    -1,    70,   818,    -1,    -1,  1510,
-      -1,  1512,    -1,    -1,    -1,  1345,    -1,    -1,   830,   232,
-      69,    -1,    71,    -1,    -1,  1271,  1224,    -1,   188,    -1,
-      -1,    -1,   157,  1279,  1280,  1281,    -1,    -1,    -1,  1540,
-     253,  1506,   107,   119,    -1,   258,    -1,    -1,  1524,    -1,
-    1515,   211,    -1,   444,   183,    -1,    -1,   550,   551,   552,
-      -1,   873,    -1,   223,   193,   194,    -1,    -1,   880,   198,
-      -1,   200,   201,    -1,    -1,   270,    -1,    -1,    72,   470,
-      74,    75,    76,    -1,   149,    -1,   162,    -1,    -1,    83,
-      84,   903,   157,   158,    -1,   220,    -1,    -1,    -1,  1345,
-     912,    -1,   914,    -1,    -1,    -1,    -1,    -1,    72,   921,
-      74,    75,    76,    -1,    -1,   109,   507,    -1,    -1,    83,
-      84,   512,  1320,   188,   515,    -1,    -1,    -1,    -1,   324,
-      94,    -1,   944,    -1,    -1,    -1,    -1,   332,   203,   352,
-     335,   206,   207,   873,    -1,   109,   211,   223,    -1,   274,
-     880,    -1,   964,    -1,   118,   119,   281,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   232,   980,   329,
-      -1,   236,    -1,   238,    -1,    -1,   988,  1375,    -1,   991,
-    1378,   993,   247,    -1,    -1,   261,    -1,    -1,   253,    -1,
-     266,   921,    -1,   258,    -1,    -1,    -1,    -1,   672,    -1,
-      -1,    -1,    -1,   268,   399,   281,   419,    -1,   403,    -1,
-      -1,   276,    -1,    -1,    10,    11,    12,    13,    14,    -1,
-      -1,   434,    -1,    -1,   349,  1423,   439,    -1,    -1,    -1,
-    1428,  1043,    -1,    -1,   447,    10,    11,    12,    13,    14,
-      -1,   366,    -1,    39,    -1,   370,    -1,   407,    -1,    -1,
-     980,    -1,   465,  1530,    -1,    -1,    -1,    -1,    -1,    -1,
-    1458,    -1,    -1,    -1,    39,    -1,    -1,   760,    -1,  1081,
-     483,    67,   485,    -1,    -1,   351,    -1,   342,    -1,    -1,
-     671,   346,    -1,  1095,    -1,   480,    -1,   352,  1100,   680,
-      -1,    -1,    67,   684,    -1,    -1,    -1,    -1,    94,    -1,
-     365,    -1,    -1,    -1,   369,  1117,    -1,   372,   433,    -1,
-      -1,    -1,    -1,   109,   527,   111,    -1,    -1,    -1,    94,
-      -1,   795,   118,   119,    -1,    -1,    -1,  1473,    -1,  1475,
-      -1,   805,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   819,  1544,    -1,    -1,    -1,
-      -1,  1081,  1550,    -1,   419,    -1,   432,    -1,    -1,    -1,
-      -1,    -1,    -1,  1561,  1510,    -1,  1512,  1565,    72,   434,
-      74,    75,    76,   449,   439,    -1,   571,   572,   591,    83,
-      84,    -1,   447,    -1,    72,  1197,    74,    75,    76,    -1,
-      94,    -1,    -1,     0,    -1,    83,    84,    -1,   474,    -1,
-     465,    -1,    -1,   468,    -1,   109,    94,   111,  1220,    -1,
-      -1,    -1,    -1,   117,   118,   119,    -1,    -1,   483,    -1,
-     485,   109,   635,   636,   637,    32,    -1,    -1,   493,    -1,
-     118,   119,   497,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   654,    -1,    -1,    -1,    -1,   575,   576,    -1,    -1,
-      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,   672,
-      -1,   526,   527,    70,   659,   590,    -1,  1197,   663,    -1,
-     683,    -1,    -1,    -1,    -1,   604,    -1,    -1,   607,   608,
-      -1,   610,    -1,   612,   613,    -1,    -1,    -1,   617,   618,
-      -1,    -1,    -1,    -1,    -1,    -1,   709,   622,    -1,   712,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   572,     0,  1321,
-      -1,    -1,    -1,   638,   905,    -1,  1009,    -1,    -1,   595,
-      -1,    -1,    -1,    -1,    -1,   590,   591,    -1,   653,    -1,
-      -1,    -1,    -1,     0,     1,    -1,   749,    -1,   603,    -1,
-      32,    -1,    -1,    -1,    -1,    -1,    -1,   623,    -1,    -1,
-      -1,   158,   628,  1027,  1028,    -1,   621,  1050,    -1,    -1,
-      -1,   626,    -1,    -1,    -1,    32,    -1,   632,    -1,    -1,
-     635,   636,   637,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-      -1,    -1,   795,    -1,  1396,  1397,    -1,    -1,    -1,   654,
-      -1,    -1,   805,    -1,   807,  1407,  1408,    -1,    -1,   812,
-      67,    -1,   815,    70,   799,    -1,   819,   672,    -1,   734,
-      -1,  1085,  1086,    -1,    -1,    -1,    -1,    -1,   683,    -1,
-      -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,   758,
-     759,    -1,    -1,  1445,    -1,    -1,    -1,    -1,   714,    -1,
-      -1,    -1,    -1,    -1,   709,    -1,   253,   712,    -1,    -1,
-      -1,   258,    -1,    -1,    -1,    -1,   721,    -1,   734,   724,
-      72,    -1,    74,    75,    76,    -1,   158,    -1,   881,    -1,
-    1061,    83,    84,    -1,    72,    -1,    74,    75,    76,    -1,
-      -1,    -1,    94,   748,   749,    83,    84,    -1,    -1,   754,
-      -1,   158,    -1,  1505,  1506,    -1,    94,   109,   911,   111,
-      -1,    -1,    -1,  1515,    -1,    -1,   118,   119,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1530,  1531,
-     118,   119,    -1,   918,    -1,    -1,    -1,    -1,    -1,    -1,
-     795,    -1,    -1,    -1,    -1,   811,    -1,    -1,    -1,    -1,
-     805,    -1,   807,  1555,   809,   352,    -1,   812,    -1,   814,
-     815,    -1,    -1,   966,   819,    -1,   223,    -1,    -1,    -1,
-      -1,   253,    -1,    -1,   829,    -1,   258,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,    -1,   903,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   253,    72,    -1,    74,
-      75,    76,    -1,    -1,   923,    -1,    -1,  1271,    83,    84,
-      -1,   131,    -1,   998,    -1,  1279,  1280,  1281,    -1,    94,
-      -1,    -1,   419,    -1,  1027,  1028,   881,  1030,  1031,    -1,
-    1015,    -1,    -1,    -1,   109,    -1,   111,   434,    -1,    -1,
-      -1,    -1,   439,   118,   119,    -1,    -1,  1050,   903,    -1,
-     447,    -1,    -1,    -1,    -1,   910,   911,    -1,    -1,   914,
-      -1,    10,    11,    12,    13,    14,    -1,    -1,   465,    -1,
-     352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1345,  1085,  1086,    -1,   940,   483,    -1,   485,    -1,
-      39,    -1,    -1,   948,   949,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1093,    -1,
-      -1,   966,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-     527,    -1,  1313,    -1,    83,    84,    -1,   419,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,  1012,    -1,    -1,    -1,
-    1135,    -1,   434,    -1,  1009,    -1,  1159,   439,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   447,    -1,  1022,  1087,   118,
-     119,    -1,  1027,  1028,    -1,  1030,  1031,   434,    -1,    -1,
-      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   591,  1050,    -1,    -1,    -1,  1202,
-      -1,   483,    -1,   485,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,     1,   240,   205,   186,   186,   117,     0,    43,   534,
+      43,    43,   600,   756,   646,     1,   749,   187,   521,     0,
+     186,   186,   186,   157,   169,   170,   749,   749,   186,   106,
+     220,   602,    32,   186,   345,   349,     0,   188,   280,    32,
+     157,   513,   600,    43,   874,    43,   603,   874,   349,    49,
+     620,    32,   609,   733,     0,   983,    49,   600,   492,   571,
+       0,     1,   496,    63,   602,   187,    66,    32,    32,    69,
+      63,   692,    43,    66,    64,     0,    69,  1040,    39,   156,
+       1,   600,    57,    69,   266,   266,    32,    43,    51,  1398,
+     364,   202,    32,    63,   368,  1321,   418,   267,    82,   600,
+     266,   266,   266,  1052,  1053,  1033,   106,    32,   266,   600,
+     600,   262,   263,   266,   114,    72,   438,   117,   118,   109,
+     282,    72,  1402,    96,   446,    39,    66,   695,    39,    69,
+      28,   109,   107,    39,    39,   110,    95,    39,    82,   128,
+      39,    66,   131,  1021,    82,   267,   109,   147,   148,   122,
+     111,   186,    11,   186,   186,   148,   156,   157,     0,   295,
+    1469,   161,   132,  1020,  1021,   109,    44,    45,   161,     0,
+     129,   482,   905,   109,   488,   132,     0,     1,    72,  1128,
+      78,   132,   905,   905,   687,    49,   186,   187,   186,   109,
+      32,   257,   130,  1419,   187,   109,   109,   111,   109,   718,
+     111,    32,   202,   109,   109,   111,   111,   109,    32,   111,
+     210,   131,    43,  1040,    72,   186,  1496,   210,    49,    82,
+     410,  1501,   222,   117,   812,    83,    84,   718,   718,   222,
+     186,   266,    63,   266,   266,    66,   406,   115,    69,  1452,
+     240,  1521,    85,   986,   219,    69,   112,   110,  1528,    82,
+     114,   109,   252,   824,   812,   116,   107,   814,   114,   252,
+     260,    44,    45,     3,   341,   265,   266,   267,   490,   812,
+     113,   252,   272,  1486,   267,  1488,   257,    82,   111,   900,
+     131,   793,   222,   147,   406,   396,   824,   252,   252,    49,
+     426,   427,   924,   812,   371,   295,     3,   222,   273,   433,
+      96,   602,  1501,   116,   109,   280,   252,   307,     0,   620,
+     480,   812,   252,   424,   625,   589,   433,   148,   110,   430,
+     112,   812,   812,   323,   116,  1288,   122,   252,   328,  1528,
+     161,   114,   253,    44,    45,   328,     0,    82,   906,   131,
+     132,   341,   504,   110,   932,   345,   210,  1225,   482,   349,
+     350,   109,   418,   111,   114,   186,   187,   631,   480,   681,
+     109,   116,   933,   130,   364,   110,    90,    91,   368,  1049,
+     506,   371,   438,   348,   932,   511,   240,   132,   514,   210,
+     446,  1211,   604,   951,  1211,   130,   608,   426,   427,   932,
+     365,   222,   526,    72,   369,   112,   396,  1275,   116,   116,
+     285,   125,   126,   114,    83,    84,   406,   629,   272,   526,
+     252,   633,   130,   406,  1472,   257,   110,  1274,  1275,    55,
+    1478,   252,   307,   308,   424,   350,   426,   427,   252,   999,
+     430,   567,   111,   433,   745,   266,   130,   418,   112,   116,
+    1498,   110,   116,   307,   111,  1503,   113,   116,   525,  1501,
+     210,  1008,  1009,   130,   454,   494,   590,   438,  1386,  1387,
+     345,  1288,    98,   130,   967,   446,   635,   636,   131,  1521,
+     229,   112,   472,   590,   513,   116,  1528,   116,  1441,   110,
+     480,   345,   482,   652,   484,  1448,   116,   480,   488,   248,
+     732,   484,   110,   132,   494,  1127,   381,   328,   116,   116,
+     130,   482,   647,   484,   666,   656,   506,   941,   508,   981,
+     824,   511,   272,   513,   514,   132,  1394,   687,   349,   109,
+     484,   521,   109,   824,   116,   525,   526,   109,  1099,   803,
+     109,   111,   111,   113,   808,   295,  1499,  1394,   484,   578,
+     132,   710,   109,   654,   484,   116,   467,   307,   473,  1117,
+     130,     4,     5,     6,     7,     8,     9,   116,   194,   484,
+     110,   132,   426,   427,   116,   687,   116,   116,   116,   116,
+     570,   571,   116,   132,   736,   406,   418,   109,   578,   116,
+     132,   217,  1085,   132,   132,   132,   109,  1090,   132,   589,
+     590,   227,   117,   904,   594,   132,   438,   116,   123,   124,
+     600,   116,   602,   109,   446,   111,   110,   528,  1288,  1177,
+    1178,   745,   533,   132,  1441,   681,    69,   132,    71,   110,
+     620,  1448,   896,   937,   846,   625,    72,   627,    74,    75,
+     494,   631,   801,   110,   634,   635,   636,    83,    84,    72,
+     110,   707,   484,   112,   590,   110,   621,   116,   112,   513,
+      83,    84,   652,   484,   654,   109,   910,   488,   912,   295,
+     484,   582,   637,   109,   549,   550,   551,   744,   114,   112,
+     109,   861,  1499,   116,    72,   809,   651,   115,    72,   132,
+      74,    75,  1362,   109,   684,    83,    84,   687,   999,    83,
+      84,   881,   809,   109,   454,   111,    72,   622,    74,    75,
+     681,    85,    86,    87,   109,   943,   111,    83,    84,   132,
+     710,   711,   712,   111,   578,   109,   938,  1115,   718,   719,
+     114,  1119,   867,   905,   905,   109,   707,   111,    64,   113,
+     114,   109,   653,   111,   655,   112,   110,   907,   114,   905,
+     905,   905,   116,   109,   744,   745,   506,   905,   508,   749,
+     750,   511,   905,   109,   514,   111,   620,   732,   109,    70,
+     111,   625,   109,    74,   745,  1445,    77,  1447,    79,   600,
+     904,   602,  1505,   698,   132,    86,   556,   557,   558,   559,
+    1305,     3,  1505,  1505,   705,   907,   114,   712,    10,    11,
+      12,    13,    14,   793,     4,     5,     6,     7,     8,     9,
+     110,   801,   109,   803,   111,   805,   116,   443,   808,   809,
+    1012,   114,   812,   109,  1382,   111,    72,    39,    74,    75,
+    1500,   117,   118,    33,   824,    72,   903,    83,    84,   114,
+    1398,   132,   110,   469,   132,  1146,    83,    84,   116,   681,
+      10,    11,    12,    13,    14,    67,    72,   110,  1122,   109,
+      76,   109,   110,   116,    82,   111,   687,    83,    84,    69,
+     110,    71,    49,   809,   111,   707,   116,   110,   109,    39,
+     506,   756,   109,   116,   874,   511,    63,   112,   514,    66,
+     805,    82,    69,   109,   118,   111,  1020,   718,   719,   110,
+    1035,   117,   118,   874,   127,   116,   896,    67,    88,    89,
+    1468,  1469,   213,   903,   904,   905,    72,   907,     4,     5,
+       6,     7,     8,     9,  1225,  1085,   110,    83,    84,   919,
+    1090,   128,   116,   904,   684,   110,    94,   109,   874,   111,
+      30,   116,   932,   933,   874,   117,   118,   937,   131,   109,
+      72,   111,   942,   943,    76,   111,   111,   117,   118,   874,
+     109,    83,    84,  1115,   110,   109,   942,  1119,  1120,   112,
+     116,   148,   109,  1085,   111,     0,     1,   967,  1090,   112,
+     117,   118,   110,    69,   161,    71,   110,   109,  1481,   119,
+     120,   812,   116,    83,    84,   117,   118,   112,    10,    11,
+      12,    13,    14,   824,    29,    30,  1107,    32,   110,   999,
+     187,   110,   942,   110,   116,    92,    93,    72,    43,    74,
+      75,    76,  1146,    72,    49,    74,    75,    39,    83,    84,
+    1020,  1021,    57,   210,    83,    84,   110,  1530,    63,   115,
+     116,    66,   874,   669,    69,   222,   957,   109,   110,   111,
+    1040,   352,   678,   354,   109,    67,   682,   110,    83,    84,
+     874,   109,   117,   118,  1190,  1191,    72,  1193,   979,  1040,
+      76,   110,   983,   110,  1200,   110,  1202,    83,    84,   116,
+     112,   116,   107,  1235,   905,   110,   907,  1002,   110,   943,
+    1080,   111,   117,   114,   116,  1085,   110,   109,   116,   111,
+    1090,   131,   116,   109,  1040,   117,   118,   110,   111,  1099,
+    1040,   117,   118,   506,    66,   508,   937,  1107,   511,    58,
+      59,   514,  1033,   148,   999,  1040,   115,   116,   942,    44,
+      45,   156,  1122,   552,   553,    72,   161,    74,    75,    76,
+    1207,   442,   109,   110,   111,   999,    83,    84,   560,   561,
+    1274,   328,   554,   555,   244,   114,  1146,   114,   109,   110,
+     111,   186,   187,   109,   112,  1040,   118,   110,   110,   919,
+    1322,   112,   109,    29,  1326,  1146,   112,   202,   112,     3,
+     117,   118,   109,   110,   111,   210,    10,    11,    12,    13,
+      14,    58,    59,    60,   219,   112,   116,   222,  1188,  1189,
+    1248,  1249,  1250,   110,   229,   130,   130,   130,  1040,   161,
+     110,   112,   114,  1189,   112,    39,   115,  1207,   110,   244,
+     115,  1211,   115,   248,   109,   116,  1040,   252,   253,   406,
+       1,   110,  1358,   110,    72,  1225,    74,    75,    76,  1229,
+    1211,   266,   267,    67,   132,    83,    84,   116,   273,   110,
+     110,   110,   110,  1229,  1225,   280,   110,   110,  1188,  1189,
+     110,   116,   110,   110,  1085,   110,   110,   110,   110,  1090,
+     222,  1423,   898,  1188,   110,  1211,   110,  1378,    49,   110,
+     110,  1211,   115,   874,  1274,  1275,    29,  1515,   110,   130,
+     380,   131,   112,  1283,   112,   116,  1211,   110,  1288,  1229,
+     110,   116,   110,   328,   130,   116,   112,   114,   260,   110,
+     110,   464,   110,   265,   116,   112,   110,  1288,   110,   110,
+     116,   116,   112,   348,   349,    10,    11,    12,    13,    14,
+    1080,  1321,   109,  1505,  1505,   106,   109,  1248,  1249,  1250,
+     365,   109,   109,   114,   369,  1321,  1506,   109,   130,  1505,
+    1505,  1505,  1288,  1283,    39,   380,     3,  1505,  1288,   112,
+     132,   115,  1505,    10,    11,    12,    13,    14,  1283,   110,
+    1530,   396,   110,  1288,   110,  1189,   147,   128,   115,  1211,
+    1481,   406,    67,   115,   464,   156,   114,   695,  1378,   112,
+     132,  1321,    39,   110,  1506,   116,   112,  1211,   350,   424,
+     112,   491,   110,   493,  1394,   430,   110,   432,   110,   112,
+     110,   112,  1377,   112,   112,  1229,   112,   112,  1530,    72,
+      67,    74,    75,    76,   109,  1051,   111,    47,   115,  1419,
+      83,    84,   117,   118,    72,   206,    74,    75,    76,   210,
+     132,   132,   467,  1419,   132,    83,    84,   472,   132,   132,
+     110,  1441,  1043,   115,   130,   480,  1288,   115,  1448,   484,
+    1450,   110,  1452,   488,   112,   109,   491,   112,   493,   240,
+    1441,   109,   112,   112,  1288,  1386,  1387,  1448,   786,   431,
+    1505,   112,  1505,  1505,   112,   110,   110,    60,   109,  1419,
+     112,  1481,    66,   112,   109,   132,  1486,   110,  1488,   110,
+     114,   272,    76,   528,   275,  1441,   112,  1321,   533,  1499,
+     112,  1441,  1448,  1424,   110,  1505,  1506,   670,  1448,   112,
+     110,   473,   109,  1506,   295,  1515,  1441,    96,  1499,    96,
+      85,    86,    87,  1448,   109,   132,   307,   115,   110,    72,
+    1530,    74,    75,    76,   118,   110,   110,  1530,   110,    42,
+      83,    84,   642,   116,   109,   863,   111,   582,   113,   114,
+     130,   132,   110,  1499,   589,   110,   132,    96,    96,  1499,
+     341,  1482,   132,   110,   345,   600,   109,   602,   132,   110,
+    1491,   132,   112,   110,  1499,   110,   132,   161,   112,   115,
+     670,   109,   132,   364,   115,   115,   621,   368,   906,   110,
+     371,   691,   110,   693,   110,  1419,   110,   697,  1056,  1441,
+     132,   564,   637,   562,   977,   565,  1448,   642,   563,   566,
+    1211,  1211,  1469,  1364,  1540,  1298,   651,  1441,   653,   654,
+     655,  1120,  1326,  1448,  1448,   912,   789,    66,   684,  1071,
+     684,  1090,   594,   951,   920,   697,   799,   582,   222,   971,
+     867,   648,   722,  1229,    83,   426,   427,   939,   570,   484,
+     813,  1515,   687,   732,   570,   570,   691,  1499,   693,    -1,
+     622,  1297,   697,    -1,    -1,   627,    -1,    -1,   986,    -1,
+     705,    -1,    -1,   454,  1505,  1499,   260,    -1,    -1,   118,
+      -1,   265,    -1,   718,   719,    -1,   467,    -1,    -1,    -1,
+    1450,    -1,  1452,    -1,    -1,    -1,   280,   732,    -1,   789,
+      -1,    -1,    -1,  1304,    -1,    -1,    -1,    -1,    -1,   799,
+      -1,   492,    -1,   494,    -1,   496,    -1,    -1,    -1,  1037,
+      -1,    -1,   161,   813,    -1,   506,  1486,   508,  1488,    -1,
+     511,    -1,   513,   514,    -1,    -1,   698,    57,    -1,    10,
+      11,    12,    13,    14,   525,    -1,    -1,    -1,    -1,    72,
+     712,    74,    75,    76,    -1,  1356,    -1,    -1,  1359,    -1,
+      83,    84,    -1,    -1,    -1,    -1,   350,   867,    39,    -1,
+      -1,    -1,    -1,   873,    -1,    -1,    -1,   812,    -1,    -1,
+      -1,    -1,    -1,   222,    -1,    -1,   109,   107,   111,   824,
+     110,    -1,    -1,    -1,   117,   118,    67,   578,    -1,  1117,
+      -1,  1402,    -1,    -1,    -1,    -1,  1407,   130,   589,    -1,
+      -1,    -1,    -1,  1449,   914,  1451,    -1,    -1,    -1,    -1,
+      -1,   260,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,   867,    -1,  1435,    -1,   156,   670,   873,   620,
+      -1,    -1,    -1,   805,   625,    -1,    -1,   431,    -1,  1485,
+     631,  1487,     0,     1,  1017,  1018,    -1,    -1,    -1,  1177,
+    1178,   896,    -1,    -1,   448,    -1,    -1,    -1,    -1,    -1,
+     905,   971,   907,    -1,    -1,    -1,    -1,    -1,    -1,   914,
+      -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,   473,
+      -1,    -1,    -1,  1529,    -1,  1531,    -1,    -1,    -1,   219,
+      -1,    49,   937,   684,    -1,    -1,    -1,    -1,  1544,  1545,
+      -1,   350,  1075,  1076,    -1,    -1,    -1,    -1,  1519,    -1,
+      -1,    69,   957,    -1,  1525,    -1,    -1,  1017,  1018,    -1,
+      -1,    -1,    -1,    -1,    -1,  1536,   971,    -1,    -1,  1540,
+      -1,   722,    -1,    -1,   979,    -1,    -1,    -1,   983,     0,
+       1,    -1,    -1,   273,    -1,    -1,   789,    -1,   106,    -1,
+     280,    -1,    -1,   744,    -1,    -1,   799,    -1,    -1,    -1,
+      -1,  1071,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,
+     813,    32,    -1,    -1,    -1,  1075,  1076,    -1,    -1,    -1,
+      -1,    -1,   431,    -1,    -1,    -1,    -1,    -1,  1033,    -1,
+     148,    -1,    -1,    -1,    -1,    -1,    -1,    32,   156,   157,
+     594,    -1,    -1,    -1,    -1,    66,    -1,    -1,    69,    -1,
+      -1,    -1,   803,    -1,    -1,    -1,    -1,   808,   348,    -1,
+      -1,    -1,    -1,    -1,   473,    -1,  1071,    -1,   622,   187,
+    1002,    -1,    -1,   627,    69,   365,    -1,    -1,    -1,   369,
+    1085,    -1,    -1,    -1,   202,  1090,    -1,   205,   206,    -1,
+    1223,    -1,   210,    -1,  1382,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1398,    -1,    -1,   231,  1184,    -1,    -1,   235,    -1,   237,
+      -1,    -1,  1255,    -1,    -1,    -1,    -1,    -1,   246,    -1,
+    1263,  1264,  1265,    -1,   252,    -1,   157,    -1,    -1,   257,
+      -1,    -1,   432,    -1,   698,   896,    -1,    -1,    -1,   267,
+      -1,    -1,   903,    -1,    -1,    -1,    -1,   275,   712,    -1,
+      -1,     0,   157,  1223,    -1,    -1,    -1,    -1,   919,    -1,
+      -1,    72,    -1,    74,    75,    76,    -1,    -1,   732,  1184,
+    1468,  1469,    83,    84,    -1,   594,    -1,    -1,    -1,    -1,
+     941,   942,   943,    32,  1327,  1255,    -1,    -1,    -1,    -1,
+      -1,   222,  1207,  1263,  1264,  1265,    -1,    -1,   109,    -1,
+     111,    -1,    -1,   622,  1017,  1018,   117,   118,   627,    -1,
+      -1,    -1,    -1,   341,    -1,    -1,    -1,   345,    -1,    -1,
+      69,   252,    -1,   351,    -1,    -1,   231,    -1,    -1,    -1,
+      -1,    -1,    -1,  1248,  1249,  1250,   364,    -1,   999,    -1,
+     368,   805,    -1,   371,    -1,    -1,  1188,   252,    -1,    -1,
+      -1,    -1,   257,    -1,    -1,    -1,    -1,  1327,    -1,    -1,
+      -1,    -1,  1075,  1076,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   698,
+      -1,    83,    84,    72,    -1,    74,    75,    76,    -1,   589,
+     418,    -1,    -1,   712,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   433,    -1,   109,   157,   111,
+     438,    -1,    -1,    -1,    -1,   117,   118,    -1,   446,  1080,
+     109,   621,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,    -1,    -1,    -1,   464,   637,    -1,   467,
+      -1,  1283,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,   651,    -1,    -1,   482,    -1,   484,    -1,    -1,    -1,
+      -1,  1122,  1377,  1378,   492,    -1,    -1,    -1,   496,    -1,
+      -1,  1386,  1387,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,    -1,    -1,    -1,   805,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   525,   526,    -1,
+      -1,    -1,   433,   252,    -1,    -1,    -1,   131,   257,  1424,
+      -1,    -1,    -1,   418,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,
+      -1,    -1,   732,   438,    -1,    -1,    -1,    -1,  1002,    -1,
+      -1,   446,  1255,   571,    -1,    -1,  1207,    -1,    -1,    -1,
+    1263,  1264,  1265,   484,    -1,    -1,    -1,    -1,    -1,   464,
+      -1,   589,   590,    -1,    -1,    -1,  1481,  1482,  1229,    -1,
+      -1,    -1,    -1,    -1,   602,    -1,  1491,   482,    -1,   484,
+      -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
+    1505,  1506,   620,    -1,    -1,   526,    -1,   625,    -1,    -1,
+      -1,    -1,   351,   631,    -1,    -1,   634,   635,   636,    -1,
+      -1,    -1,    66,    -1,  1327,  1530,    -1,    -1,    72,    -1,
+      -1,   526,    76,    -1,   652,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   670,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,   681,    -1,   109,    -1,   111,    -1,   590,
+    1321,    -1,    -1,   117,   118,   119,   120,   121,   122,   418,
+      -1,    -1,    -1,    -1,    39,    -1,   130,    -1,    -1,   707,
+      -1,    -1,   710,  1002,   433,   590,    -1,    -1,    -1,   438,
+      -1,   719,    -1,    -1,   722,    -1,   896,   446,    -1,    -1,
+      -1,    -1,    67,   634,   635,   636,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,   464,   744,   745,    83,    84,
+      -1,   652,   750,    -1,  1188,    -1,    -1,    -1,    -1,   634,
+     635,   636,    -1,   482,    -1,   484,    -1,    10,    11,    12,
+      13,    14,    -1,    -1,   109,    -1,   111,   652,    -1,    -1,
+      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,  1419,    -1,
+      -1,   789,    -1,    -1,    -1,   670,    39,    -1,    -1,    -1,
+      -1,   799,    -1,   801,    -1,   803,   681,   526,   806,   710,
+     808,   809,    -1,    -1,    -1,   813,    -1,    -1,    -1,  1450,
+      -1,  1452,    -1,    -1,    67,   823,    -1,    -1,    -1,    72,
+      -1,    -1,   707,    76,    -1,   710,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1283,
+      -1,     0,    -1,    -1,    -1,  1486,    -1,  1488,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+     745,   590,    -1,    -1,   117,   118,   874,    -1,     0,    -1,
+     190,    -1,    -1,    32,  1515,    -1,    -1,   197,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   896,  1188,
+     801,    -1,    -1,    -1,    -1,   903,   904,    -1,   809,   907,
+      32,    -1,    -1,    -1,   789,   634,   635,   636,    -1,    -1,
+      69,    -1,    -1,    -1,   799,    -1,   801,    -1,    -1,    -1,
+      -1,   806,    -1,   652,   809,   933,    -1,    -1,   813,    -1,
+      -1,    -1,    -1,   941,   942,    -1,    -1,    69,    -1,    -1,
+      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   269,
+      -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   874,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
+      -1,   710,    -1,    -1,  1283,    -1,    -1,    -1,    -1,   874,
+      -1,   999,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
+      -1,    -1,    -1,   323,  1012,    -1,    -1,    -1,    -1,  1017,
+    1018,   331,  1020,  1021,   334,    -1,   745,    -1,    -1,   904,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,  1207,    -1,    -1,
+      -1,   942,  1040,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+     789,    -1,    30,    31,    32,    -1,    -1,  1075,  1076,    -1,
+     799,    39,   801,    -1,    -1,    -1,    -1,   806,   398,    -1,
+     809,    -1,   402,    -1,   813,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   252,    -1,    -1,    -1,    -1,   257,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1020,
+    1021,    -1,    -1,    -1,  1122,    83,    84,    -1,    -1,    -1,
+     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,  1040,
+      -1,    -1,  1017,  1018,    -1,  1020,  1021,    -1,  1146,    -1,
+      -1,   109,    -1,   111,    -1,   874,    -1,    -1,    -1,   117,
+     118,    -1,    -1,    -1,    -1,  1040,    -1,    -1,    -1,   479,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,    -1,   904,    -1,    -1,    -1,    -1,
+      -1,  1189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1075,  1076,   351,    -1,    39,    -1,    -1,  1377,    -1,  1207,
+      -1,    -1,    -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1223,    -1,  1225,    -1,   351,
+      -1,  1229,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,    26,    27,    28,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1255,    -1,    -1,
+     570,   571,    -1,    -1,    -1,  1263,  1264,  1265,    -1,   418,
+      -1,  1146,    -1,    -1,   109,    -1,  1274,  1275,    -1,    -1,
+      -1,    -1,   117,   118,   433,    -1,    -1,  1188,  1189,   438,
+    1288,    -1,    -1,    -1,    -1,    -1,   418,   446,  1017,  1018,
+      -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1211,   433,    -1,    -1,  1189,   464,   438,    -1,    99,    -1,
+     101,  1040,    -1,  1321,   446,    -1,    -1,    -1,  1229,  1327,
+      -1,    -1,    -1,   482,    -1,   484,  1211,    -1,    -1,    -1,
+      -1,    -1,   464,    -1,    -1,   126,    -1,   657,  1223,    -1,
+    1225,   661,    -1,    -1,    -1,    -1,  1075,  1076,    -1,    -1,
+     482,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1274,  1275,    -1,    -1,   526,    -1,    -1,
+    1255,    -1,  1283,    -1,    -1,    -1,    -1,  1288,  1263,  1264,
+    1265,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,  1274,
+    1275,   182,    -1,    -1,   526,    -1,    -1,    -1,    -1,   190,
+      -1,   192,   193,  1288,    -1,    -1,   197,    -1,   199,   200,
+    1321,  1419,    -1,    53,    -1,    55,    -1,  1146,    58,    59,
+      60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   590,    -1,  1441,    -1,    -1,    -1,    77,    -1,    -1,
+    1448,    -1,  1327,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    -1,    -1,    -1,    26,    27,    28,    -1,   590,    -1,
+    1189,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    -1,    -1,   793,    -1,   634,   635,   636,   269,    -1,
+      -1,    -1,  1211,  1394,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1499,    -1,   652,  1223,    39,  1225,    -1,  1506,    -1,
+      -1,    -1,   634,   635,   636,    -1,    -1,    -1,  1419,  1394,
+      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     652,    -1,   681,    67,    -1,    -1,  1255,    99,    72,   101,
+    1441,    -1,    76,    -1,  1263,  1264,  1265,  1448,   670,    83,
+      84,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   707,   681,
+      -1,   710,    -1,    -1,    -1,    -1,  1441,    -1,    -1,  1288,
+      -1,    -1,    -1,  1448,    -1,   109,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   707,    -1,    -1,   710,    10,
+      11,    12,    13,    14,    -1,    -1,   745,    -1,  1499,    -1,
+      -1,   911,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+     182,    -1,    -1,   745,  1499,    -1,    -1,    -1,    -1,    -1,
+     192,   193,    -1,    -1,    -1,   197,    -1,   199,   200,    -1,
+     789,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     799,    72,   801,    74,    75,    76,    -1,   806,    -1,    -1,
+     809,    -1,    83,    84,   813,    -1,    -1,   789,    -1,    10,
+      11,    12,    13,    14,    -1,  1394,    -1,   799,   988,   801,
+      -1,    -1,    -1,    -1,   806,    -1,    -1,   809,   109,    -1,
+     111,   813,    -1,    -1,    -1,  1005,   117,   118,    39,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   344,    -1,   346,    -1,    -1,    -1,
+      -1,    -1,  1441,    -1,    -1,   874,    67,   357,   358,  1448,
+      39,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   874,    -1,    -1,   904,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,   109,    -1,
+     111,    -1,    -1,  1083,    83,    84,   117,   118,    -1,    -1,
+    1499,    -1,   904,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   574,   575,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   603,    -1,    -1,   606,   607,    -1,   609,    -1,
+     611,   612,    -1,    -1,    -1,   616,   617,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    -1,    30,    31,    32,    33,  1017,  1018,
+      36,  1020,  1021,    39,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1224,    -1,    -1,    -1,    -1,    -1,    -1,   485,    -1,
-    1085,  1086,    -1,  1236,    -1,  1238,    -1,    -1,   635,   636,
-     637,    -1,    -1,    -1,    -1,   527,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,
-     527,    -1,    -1,    -1,     0,   672,  1279,  1280,  1281,  1134,
-      -1,    -1,    -1,    -1,    -1,    -1,   683,  1290,  1291,    -1,
-      -1,  1472,    -1,  1474,    -1,    -1,    -1,    -1,    -1,    -1,
-    1219,  1304,    -1,    -1,  1159,  1220,    32,    -1,    -1,   591,
-      -1,    -1,   709,    -1,    -1,   712,    -1,    -1,    -1,    -1,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,  1509,    -1,
-    1511,    -1,    -1,    -1,   591,  1201,    -1,    -1,    -1,    -1,
-      -1,    -1,  1345,    -1,    70,    -1,    -1,  1202,    -1,    39,
-      -1,    -1,   749,   635,   636,   637,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1220,    -1,    -1,    -1,  1224,
-      -1,    -1,   654,  1554,    -1,  1556,    -1,    67,   635,   636,
-     637,  1236,    72,  1238,    74,    75,    76,  1242,  1569,  1570,
-     672,    -1,    -1,    83,    84,    -1,    -1,   654,   795,    -1,
-      -1,   683,    -1,    -1,    94,    -1,    -1,    -1,   805,    -1,
-     807,    -1,  1415,    -1,    -1,   812,  1271,    -1,   815,   109,
-      -1,   111,   819,    -1,  1279,  1280,  1281,   709,   118,   119,
-     712,    -1,   158,  1299,    -1,  1290,  1291,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,  1304,
-      -1,    -1,    -1,    -1,    -1,   712,    -1,    -1,    -1,    -1,
-      -1,  1464,    -1,    -1,    -1,    -1,    -1,   749,  1471,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1396,  1337,    -1,   881,    -1,    -1,    -1,    -1,    -1,
-    1345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
-      76,    -1,    -1,   795,   911,    -1,    -1,    83,    84,    -1,
-      -1,  1524,    -1,   805,    -1,   807,    -1,   253,    94,    -1,
-     812,    -1,   258,   815,    -1,    -1,    -1,   819,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
-     807,    -1,   118,   119,    -1,    -1,    -1,    -1,   815,    -1,
-    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   966,
-      -1,    54,    -1,    56,    -1,    -1,    59,    60,    61,    -1,
-      63,    -1,    -1,    -1,    -1,  1440,    10,    11,    12,    13,
-      14,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,   881,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,  1464,
-      -1,    -1,    -1,    -1,    -1,    39,  1471,    10,    11,    12,
-      13,    14,    -1,    -1,   881,    -1,   352,    -1,    -1,   911,
-    1027,  1028,    -1,  1030,  1031,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    -1,    39,    -1,    72,    -1,
-      74,    75,    76,  1050,    -1,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1524,
-      94,    -1,    -1,    -1,    67,    -1,  1531,    -1,    -1,    72,
-      -1,    74,    75,    76,   966,   109,    -1,    -1,  1085,  1086,
-      83,    84,   949,   419,   118,   119,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    10,    11,    12,    13,    14,   434,   966,
-      -1,    -1,    -1,   439,    -1,    -1,   109,    -1,    -1,    -1,
-      -1,   447,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,   465,
-      -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   485,
-      67,    -1,  1159,    39,    -1,    72,    -1,    -1,  1050,    76,
-      -1,    -1,    -1,  1030,  1031,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,  1050,    -1,    -1,    72,    -1,    -1,    -1,
-      76,   527,   109,  1085,  1086,  1202,    -1,    83,    84,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,  1236,
-      -1,  1238,   118,   119,    10,    11,    12,    13,    14,    15,
+      -1,  1040,    -1,    -1,    -1,  1017,  1018,    -1,  1020,  1021,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      -1,    -1,    78,    -1,    -1,    -1,     7,    -1,  1040,    10,
+      11,    12,    13,    14,    -1,    -1,  1075,  1076,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   111,    37,    38,    39,    40,
+      -1,   117,   118,  1075,  1076,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   754,   755,    66,    67,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,  1146,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   574,   575,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,  1146,    -1,   117,   118,   119,   120,
+     121,   122,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1189,   603,    -1,    -1,   606,   607,    -1,   609,    -1,   611,
+     612,    -1,    -1,    -1,   616,   617,    -1,    -1,    -1,    -1,
+      -1,    -1,  1211,    -1,    -1,    -1,    -1,  1189,    -1,   699,
+      -1,   701,    -1,    -1,  1223,    -1,  1225,    -1,   708,   709,
+      -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,  1211,
+      -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
+     730,  1223,    -1,  1225,    -1,    -1,  1255,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1263,  1264,  1265,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   758,    -1,
+     911,    -1,    -1,  1255,    -1,   916,    -1,    -1,    -1,  1288,
+      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1274,  1275,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1288,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      49,    -1,   754,   755,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1327,    -1,    66,    -1,    -1,
+       7,    -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   857,   858,   859,
+     860,    -1,   862,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,  1394,    -1,   877,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,   118,
+      -1,   891,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      67,    -1,  1394,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,   147,    86,
+      87,    -1,  1441,    -1,    -1,    -1,  1077,    -1,   157,  1448,
+      -1,   931,   161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1441,
+     117,   118,   119,   120,   121,   122,  1448,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,   976,    30,    31,    32,
+    1499,   210,   982,    -1,   916,    -1,    39,   987,    -1,    -1,
+      -1,    -1,   992,   222,   994,    -1,    -1,    -1,   998,    -1,
+    1000,  1001,    -1,    -1,  1004,    -1,    -1,  1499,    -1,    -1,
+      -1,   240,    -1,  1013,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1031,  1032,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1206,    -1,    -1,  1058,    -1,
+      -1,  1061,    -1,    -1,   117,   118,   295,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    76,    -1,    78,    -1,    80,    -1,
+      -1,    -1,    -1,    -1,  1104,    87,    -1,    -1,    -1,    -1,
+    1110,  1111,    -1,    -1,    -1,    -1,   345,    -1,    -1,    -1,
+      -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1130,    -1,    -1,  1133,    -1,    -1,   118,  1137,   120,   121,
+     122,    -1,    -1,    -1,    -1,  1077,    -1,    -1,    -1,    -1,
+    1150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1163,    -1,  1165,  1166,  1167,  1168,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,
+      -1,  1181,    -1,  1183,    -1,    -1,    -1,  1187,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,   427,    -1,
+      -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1216,  1217,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     222,    -1,   224,   225,   226,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   482,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   494,  1266,  1267,    -1,    -1,
+      -1,    -1,    -1,    -1,  1206,    -1,  1276,   506,   260,   508,
+      -1,    -1,   511,   265,   513,   514,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   526,   280,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   345,    -1,   347,   591,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,  1271,   358,   359,  1159,    -1,    -1,
-      -1,    -1,  1279,  1280,  1281,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   635,
-     636,   637,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,
-      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1224,    -1,  1201,  1202,   672,    -1,  1345,    -1,
-      -1,    -1,    -1,    -1,  1236,    -1,  1238,   683,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    72,    -1,  1224,    -1,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,   709,    -1,  1242,   712,    94,    -1,  1271,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,
-      -1,    -1,   109,    -1,   111,    -1,    -1,   114,  1290,  1291,
-      -1,   118,   119,   120,   121,   122,   123,    -1,  1415,    -1,
-      -1,    -1,  1304,   749,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1299,    -1,    -1,    -1,    -1,  1304,    -1,    -1,
+      26,    27,    28,    -1,    30,    31,    32,  1337,    -1,  1339,
+    1340,  1341,    -1,    39,    -1,    -1,   328,    -1,    -1,   578,
+      -1,  1351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1360,   590,    -1,    -1,    -1,   594,    -1,    -1,   350,    -1,
+      -1,    67,    -1,   355,   356,    -1,    72,    -1,    74,    75,
+      76,   363,    78,    -1,    -1,  1385,    -1,    83,    84,    -1,
+      -1,   620,    -1,    -1,   147,    -1,   625,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   157,   634,   635,   636,    -1,    44,
+      -1,    -1,    -1,   109,    -1,   111,   169,   170,    -1,    -1,
+      -1,   117,   118,   652,   406,    -1,    -1,    -1,  1428,  1429,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1345,    -1,    -1,    -1,  1464,    -1,   795,
-      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,   805,
-    1337,   807,    -1,    -1,    -1,    -1,   812,    -1,    -1,   815,
-      -1,    -1,    -1,   819,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    67,    -1,    39,    -1,    -1,  1524,    -1,    -1,
-      -1,    -1,    77,  1415,    79,    -1,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,   881,    -1,    72,  1415,    74,
-      75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
-      -1,    -1,    -1,    -1,   119,    -1,   121,   122,   123,    94,
-      -1,    -1,  1464,  1440,    -1,   911,    -1,    -1,    -1,  1471,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    26,
-      27,    28,    -1,   118,   119,    -1,    -1,  1464,    -1,    -1,
-      -1,    -1,    37,    38,  1471,    40,    -1,   162,   701,    -1,
-     703,    -1,    -1,    -1,    -1,    -1,    -1,   710,   711,    -1,
-      -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     966,    66,  1524,    50,   727,    -1,    -1,    72,    -1,   732,
-      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      67,    86,    87,    -1,    -1,    -1,    -1,  1524,    -1,    94,
-      -1,    -1,    -1,   100,    -1,   102,    -1,    -1,   223,   762,
-     225,   226,   227,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,   123,    -1,
-     127,  1027,  1028,    -1,  1030,  1031,    -1,    -1,   115,    -1,
-      -1,    -1,   119,    -1,    -1,    -1,   261,    -1,    -1,    -1,
-      -1,   266,    -1,    -1,  1050,    -1,    -1,    -1,   284,    -1,
-     286,   287,    -1,    -1,    -1,    -1,   281,    -1,   294,   295,
-      -1,   148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   158,   308,   309,    -1,   162,   183,    -1,    -1,  1085,
-    1086,    -1,    -1,    -1,   191,    -1,   193,   194,    -1,    -1,
-      -1,   198,    -1,   200,   201,    -1,    -1,    -1,    -1,    -1,
-     863,   864,   865,   866,   329,   868,    -1,    -1,    -1,    -1,
-     346,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   884,    -1,    -1,   211,    -1,   351,    -1,    -1,    -1,
-      -1,   356,   357,    -1,    -1,   898,   223,    -1,    -1,   364,
-      -1,    -1,    -1,    -1,    -1,    -1,   382,    -1,    -1,    -1,
-      -1,    -1,    -1,  1159,   241,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   270,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   938,    -1,    -1,    -1,   266,
-      -1,    -1,   407,    -1,    -1,    -1,   273,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1202,    -1,    -1,    -1,
-     425,    -1,    -1,    -1,    -1,   430,    -1,   432,    -1,   296,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,
-      -1,   308,   985,    -1,   449,    -1,    -1,   452,   453,   992,
-    1236,    -1,  1238,    -1,   997,   460,    -1,    -1,    -1,  1002,
-      -1,  1004,    -1,    -1,    -1,  1008,    -1,  1010,  1011,   474,
-      -1,  1014,    -1,    -1,    -1,    -1,   481,    -1,    -1,   346,
-    1023,    -1,    -1,    -1,   351,  1271,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1279,  1280,  1281,    -1,    -1,  1041,  1042,
-      -1,    -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1304,    -1,
-      -1,    -1,    -1,    -1,    -1,  1068,    -1,    -1,  1071,    -1,
-      -1,    -1,    -1,    -1,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
-     566,   567,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1345,
-     427,   428,    -1,    -1,    -1,    -1,    -1,   434,    -1,    -1,
-      -1,  1114,    -1,    -1,    -1,    -1,    -1,  1120,  1121,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   455,  1132,
-     595,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1142,
-      -1,    -1,  1145,    -1,  1147,    -1,    -1,  1150,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   623,    -1,
-    1163,    -1,    -1,   628,    -1,    -1,    -1,    -1,   495,  1415,
-      -1,    -1,    -1,  1176,    -1,  1178,  1179,  1180,  1181,    -1,
-     507,    -1,   509,    -1,    -1,   512,    -1,   514,   515,    -1,
-      -1,  1194,    -1,  1196,    -1,    -1,    -1,  1200,    -1,    -1,
-     527,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,
-      -1,   697,    -1,    -1,    -1,  1471,  1229,  1230,   575,   576,
-      -1,    -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   714,
-      -1,    -1,   579,    -1,    -1,    -1,    -1,   604,    -1,    -1,
-     607,   608,    -1,   610,   591,   612,   613,    -1,   595,   734,
-     617,   618,    -1,    -1,    -1,    -1,    -1,    -1,  1524,  1282,
-    1283,    -1,    -1,    -1,   760,    -1,    -1,    -1,    -1,  1292,
-      -1,    -1,    -1,    -1,   621,    -1,    -1,    -1,    -1,   626,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
-     637,    -1,    -1,    -1,    -1,    -1,   792,    -1,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,   654,    -1,    -1,
-      -1,    -1,    -1,    -1,   799,    -1,    -1,    -1,    -1,    -1,
-    1343,    -1,    45,    -1,    -1,    -1,   811,    -1,    -1,    37,
-      38,    39,    40,  1356,    -1,  1358,  1359,  1360,    -1,   686,
-      -1,    -1,    -1,    -1,    -1,   830,    -1,  1370,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1379,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    72,   712,    -1,   714,    76,    -1,
-      93,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-     103,    -1,    -1,  1406,    -1,    -1,    94,    -1,    -1,    -1,
-      -1,   758,   759,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,   749,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,    -1,   913,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1451,  1452,
-      -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,
-      -1,  1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,
-     173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   944,
-     807,    -1,   958,    -1,   811,    -1,    -1,    -1,   815,    -1,
-      -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1504,    -1,    -1,    -1,  1508,    -1,   210,    -1,    -1,
-      -1,   976,    -1,    -1,    -1,    -1,   219,    -1,    -1,    -1,
-     996,    -1,    -1,    -1,    -1,    -1,   229,    -1,    -1,    -1,
-      -1,    -1,    -1,  1009,  1537,    -1,  1539,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1012,    -1,    -1,
-      -1,   254,    -1,    -1,    -1,    -1,   259,    -1,  1023,    -1,
-      -1,    -1,    -1,    -1,  1567,  1568,    -1,    -1,    -1,   272,
-      -1,   918,  1575,  1576,  1050,   278,   923,   280,    -1,    -1,
-      -1,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   297,    -1,    -1,    -1,    -1,   926,
+      -1,  1441,   424,    -1,    -1,    -1,    -1,   429,  1448,   431,
+      37,    38,    -1,    40,    -1,   684,    -1,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   448,   102,    -1,   451,
+     452,    -1,    -1,    -1,    -1,    -1,    -1,   459,    -1,    66,
+    1480,   710,    -1,   712,  1484,    72,    -1,   240,    -1,    76,
+      -1,   473,    79,    80,    81,    82,    83,    84,   480,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   264,  1512,    -1,  1514,    -1,   745,    -1,    -1,    -1,
+      -1,    -1,   109,   158,   111,    -1,    -1,   114,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,   172,    -1,    -1,
+      -1,    -1,  1542,  1543,    -1,    -1,    -1,    -1,    -1,    -1,
+    1550,  1551,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     195,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   801,    -1,   209,    -1,   805,    -1,    -1,    -1,
+     809,    -1,    -1,   218,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   228,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
+      -1,    -1,   594,    -1,    -1,    -1,    -1,    -1,   253,    -1,
+      -1,    -1,    -1,   258,    -1,    -1,    -1,   380,    -1,    -1,
+      -1,    -1,    -1,    66,    -1,    -1,   271,    -1,    -1,    72,
+     622,    -1,   277,    76,   279,   627,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   904,   109,    -1,   111,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
+     919,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,   343,    -1,
+      -1,    -1,    -1,    -1,   943,    -1,   698,    -1,    -1,    -1,
+      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     712,    -1,    -1,    -1,    -1,    -1,    -1,   372,    -1,    -1,
+      -1,   376,   377,    -1,   379,    -1,    -1,    -1,    -1,    -1,
+     732,   386,   387,    -1,   389,   390,    -1,   392,    -1,   394,
+     513,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     999,    -1,    -1,   526,    -1,    -1,   411,    -1,   531,    -1,
+      -1,   534,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,
+      -1,  1020,  1021,   546,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   444,
+      -1,   793,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   805,    -1,   578,    -1,    -1,    -1,    -1,
+      -1,    -1,   585,    -1,    -1,   470,    -1,   590,    -1,    -1,
+      -1,   476,   824,    -1,    -1,    -1,   481,    -1,    -1,    -1,
+      -1,  1080,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   517,    30,    31,    32,   639,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,   647,    -1,    -1,   532,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
-      -1,    -1,    -1,   950,    -1,    -1,    -1,    -1,    -1,    -1,
-    1095,    -1,    -1,    -1,    -1,    -1,   339,    -1,    -1,   966,
-      -1,   344,    -1,    66,  1109,    -1,    -1,    -1,    -1,    72,
-      -1,  1127,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-     373,    94,    -1,    -1,   377,   378,    -1,   380,    -1,    -1,
-      -1,    -1,  1009,    -1,   387,   388,   109,   390,   391,    -1,
-     393,    -1,   395,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,  1030,  1031,    -1,    -1,    -1,    -1,   412,
-      -1,    -1,    -1,    -1,  1190,  1191,    -1,   420,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1146,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    37,    38,   570,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,    -1,
+      -1,   586,    -1,    -1,    -1,   937,    -1,   592,    -1,  1188,
+      -1,    -1,    66,    -1,   111,    -1,   601,    -1,    72,    -1,
+     117,   118,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,   967,    -1,    -1,    -1,    -1,
+      -1,    -1,   745,    -1,   747,    -1,  1225,    -1,    -1,   156,
+     157,    -1,    -1,    -1,   757,   109,   641,   111,    -1,    -1,
+     763,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
+    1002,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1013,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
+     197,    -1,   677,    -1,    -1,  1274,  1275,    -1,    -1,    -1,
+     685,    -1,   805,   806,  1283,    -1,   809,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   283,
+     823,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,   293,
+     294,   716,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   726,   727,   307,   308,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1085,    -1,    -1,    -1,    -1,    -1,    -1,
+     863,    -1,   269,    -1,   867,    -1,    -1,  1099,    -1,    -1,
+      -1,    -1,    -1,    -1,   759,    -1,    -1,    -1,    -1,   764,
+      -1,   345,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,   904,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    40,    -1,    -1,  1394,   323,   381,    -1,    -1,
+      -1,    -1,    -1,    -1,   331,   332,    -1,   334,   335,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,    67,
+     943,    -1,   349,   828,    -1,    -1,    74,    75,    -1,    -1,
+     835,    -1,    -1,    -1,    -1,    -1,  1188,    -1,    -1,    -1,
+      -1,   368,    -1,   848,   371,   850,    -1,    -1,   971,    -1,
+      -1,  1450,    -1,  1452,   977,    -1,    -1,    -1,   981,   864,
+      -1,    -1,    -1,   111,    -1,   870,    -1,   115,    -1,   117,
+     118,   398,    -1,    -1,    -1,   402,    -1,   882,    -1,  1002,
+     885,    -1,    -1,    -1,    -1,    -1,    -1,  1486,    -1,  1488,
+    1013,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
+      -1,    -1,  1035,    -1,  1037,    -1,  1515,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1052,
+    1053,  1283,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    1073,    -1,   479,    -1,    -1,   482,    -1,   962,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,   549,   550,   551,   552,   553,
+     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,   565,   566,    -1,    -1,    -1,    -1,    37,    38,    67,
+      40,    -1,   997,    -1,   521,    -1,    -1,    -1,   525,   526,
+      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    72,  1146,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,  1161,  1162,
+      -1,    -1,    -1,   570,   571,    -1,    -1,    -1,    -1,    -1,
+    1055,    -1,    -1,    -1,    -1,    -1,  1061,    -1,    -1,   109,
+      -1,   111,   589,   590,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,   600,    -1,   602,   603,    -1,    -1,    -1,
+      -1,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1095,    -1,   619,   620,    -1,  1100,    -1,    -1,   625,    -1,
+      -1,    -1,    -1,  1108,    -1,    -1,    -1,   634,   635,   636,
+      -1,   695,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   652,    -1,    -1,    -1,    -1,
+     657,   658,    -1,    -1,   661,   662,  1141,    -1,    -1,    -1,
+      -1,   668,    -1,    -1,    -1,    -1,    -1,    -1,  1153,    -1,
+      -1,  1156,    -1,  1158,    -1,    -1,    -1,    -1,    -1,    -1,
+     687,    -1,    -1,    -1,    -1,    -1,    -1,  1172,  1173,    -1,
+      -1,    -1,   756,    -1,    -1,    -1,    -1,    -1,  1530,  1302,
+      -1,    -1,  1305,   710,   711,    -1,    -1,    -1,    -1,  1194,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1201,    -1,    -1,    -1,
-    1087,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   786,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   744,   745,    -1,
+      -1,    -1,   749,   750,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      -1,    30,    31,    32,    -1,    -1,   793,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,
+      -1,   808,   809,    -1,    -1,   812,    -1,   814,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   824,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    78,
+      -1,  1316,    -1,  1318,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,   906,    -1,    -1,  1330,    -1,  1332,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,   471,    -1,
-      -1,    -1,    -1,    -1,   477,    -1,    -1,     0,    -1,   482,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      33,    -1,    -1,    36,    -1,   518,    39,    40,    -1,    -1,
+      -1,    -1,   111,    -1,  1349,    -1,    -1,    -1,   117,   118,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     533,    -1,  1159,    -1,  1299,    -1,    -1,    -1,    -1,    -1,
-      -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,   571,    -1,
-      -1,    94,  1219,    -1,  1201,    -1,    -1,   580,    -1,   157,
-     158,    -1,    -1,    -1,   587,    -1,   109,    -1,   111,    -1,
-     593,    -1,    -1,    -1,    -1,   118,   119,    -1,    -1,   602,
+    1365,  1366,    -1,    -1,    -1,    -1,    -1,   951,    -1,   896,
+      -1,  1376,    -1,    -1,  1379,    -1,   903,   904,   905,    -1,
+     907,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1515,    -1,    -1,  1400,    -1,    -1,    -1,    -1,
+      -1,    -1,   986,    -1,  1409,   932,   933,  1412,    -1,  1414,
+    1415,  1416,    -1,    -1,    -1,   999,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
+     967,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,  1454,
+      -1,  1456,    -1,  1458,    -1,    -1,  1040,    -1,    -1,    -1,
+      -1,   988,   989,    -1,    -1,    -1,    -1,    -1,  1473,    -1,
+      -1,    -1,   999,    67,    -1,    -1,    -1,    -1,  1005,  1006,
+      -1,  1008,  1009,  1010,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,  1117,    30,    31,    32,    33,    -1,    -1,
+      36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,  1085,    -1,
+      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,    -1,    -1,
+      66,    67,  1099,    69,    -1,    71,    72,    -1,    74,    75,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,  1177,  1178,  1122,  1123,  1124,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1238,    -1,   191,    -1,    -1,    -1,    -1,    -1,    -1,
-     198,    -1,    -1,    -1,    -1,  1401,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     643,    -1,    -1,  1419,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1299,    -1,    -1,    -1,   679,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,   687,    -1,    72,    -1,    -1,    -1,
-      76,    -1,   270,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,   718,  1492,  1493,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   728,   729,    -1,    -1,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,   742,
-      -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   332,   333,    -1,   335,   336,    -1,
-     763,    -1,   765,    -1,    -1,    -1,   769,    -1,   346,    -1,
-      -1,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1415,    -1,
-    1555,   369,    -1,    -1,   372,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
-      -1,   399,    -1,    -1,    39,   403,    -1,    -1,    -1,    -1,
-      -1,   834,    -1,    -1,    -1,    -1,    -1,    -1,   841,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1473,    -1,  1475,    -1,
-      -1,   854,    67,   856,    -1,    -1,   434,    72,    -1,    74,
-      75,    76,    -1,    78,    -1,    -1,    -1,   870,    83,    84,
-      -1,    -1,    -1,    -1,   877,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,  1510,   148,  1512,   889,    -1,    -1,   892,
-      -1,    -1,    -1,    -1,   158,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,   480,   118,   119,   483,   170,   171,    -1,    -1,
-      -1,    -1,    -1,  1540,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,   522,    -1,    -1,    -1,   526,   527,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   971,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   241,    67,    -1,
-      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,   571,   572,    -1,    -1,    -1,    -1,    -1,
-      -1,   265,    -1,    -1,  1007,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,   590,   591,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,   601,    -1,   603,   604,    -1,    -1,   118,
-     119,    -1,   610,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   620,   621,    -1,    -1,    -1,    -1,   626,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,   637,
-      -1,    -1,  1065,    -1,    -1,    -1,    -1,    -1,  1071,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,
-      -1,   659,   660,    -1,    -1,   663,   664,    -1,    -1,    -1,
-      -1,    -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1105,    -1,    -1,    -1,    -1,  1110,    -1,    -1,
-      -1,   689,    -1,    -1,    -1,  1118,    -1,   381,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   712,   713,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1166,    -1,    -1,  1169,    -1,  1171,    -1,
-     748,   749,    -1,    -1,    -1,   753,   754,    -1,    -1,    -1,
-      -1,    -1,  1185,  1186,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1207,    -1,    -1,    -1,    -1,    -1,
-      -1,   475,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
-      -1,   799,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   807,
-      -1,    -1,    -1,    -1,    -1,    -1,   814,   815,    -1,    -1,
-     818,    66,   820,    -1,    -1,    -1,    -1,    72,    -1,    -1,
-     514,    76,   830,  1256,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,   527,    -1,    -1,    -1,    -1,   532,    94,
-      -1,   535,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   546,   547,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,   569,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,
-      -1,    -1,   586,    -1,    -1,   903,    -1,   591,    -1,  1332,
-      -1,  1334,   910,   911,   912,    -1,   914,    -1,    -1,    -1,
-     918,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   939,   940,    -1,    -1,  1368,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   640,    -1,    -1,    -1,
-      -1,  1384,  1385,    -1,    -1,   649,    -1,    -1,   966,    -1,
-      -1,    -1,  1395,    -1,    -1,  1398,    -1,    -1,   976,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,  1421,    -1,
-     998,   999,    -1,    -1,    -1,    -1,    -1,  1430,    39,    -1,
-    1433,  1009,  1435,  1436,  1437,    -1,    -1,  1015,  1016,    -1,
-    1018,  1019,  1020,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1030,  1031,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,  1477,    -1,  1479,    -1,  1481,    -1,
-      -1,    -1,    -1,    -1,    -1,   749,    -1,   751,    -1,    -1,
-      -1,    -1,    -1,    -1,  1497,    -1,    -1,   761,    -1,    -1,
-      -1,    -1,    -1,    -1,   768,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1093,    -1,  1095,    -1,    -1,
-      -1,    -1,  1100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,   811,   812,    -1,
-      -1,   815,    -1,    -1,    -1,    -1,  1134,  1135,  1136,    -1,
-      -1,    -1,    -1,    -1,    -1,   829,    -1,    -1,    -1,    37,
-      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    72,   869,    -1,    -1,    76,   873,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,  1220,   111,    -1,    -1,    -1,   911,    -1,    -1,
-     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
-    1238,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,   950,    30,    31,    32,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,   966,   967,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1290,  1291,    -1,    -1,   980,    -1,    -1,    -1,
-      -1,    -1,   986,    66,    67,   989,    69,   991,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,  1012,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
-      -1,    37,    38,    -1,    40,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,   116,    -1,   118,   119,   120,   121,   122,
-     123,  1045,    -1,  1047,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,  1062,  1063,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,  1083,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,  1415,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,  1140,    -1,    30,    31,
-      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,  1159,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-    1174,  1175,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
-      72,    -1,    74,    75,    76,    -1,    -1,  1505,    -1,    -1,
-      66,    83,    84,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    94,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,  1530,  1531,    -1,    -1,    -1,   109,    94,   111,
-      -1,    -1,    -1,   115,    -1,    -1,   118,   119,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,  1555,    -1,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-    1254,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
-      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,  1318,    66,    67,  1321,    69,    -1,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
-      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1405,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,  1146,
+      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   132,    -1,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    10,    11,    12,    13,
+      -1,    36,    37,    38,    39,    40,    41,    -1,    43,    -1,
+    1207,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    -1,    57,    -1,    -1,    -1,    61,    62,  1225,    64,
+      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,  1274,  1275,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      -1,    -1,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,  1382,    30,
+      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,  1398,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,  1468,  1469,   117,   118,   119,   120,
+     121,   122,    -1,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    -1,  1481,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,  1505,  1506,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,  1530,    -1,   116,   117,   118,   119,   120,
+     121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    66,    67,    -1,    69,    39,    71,
+      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+      -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    83,    84,   116,   117,   118,   119,   120,   121,
+     122,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    66,    67,    -1,    69,    39,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,  1487,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    83,
-      84,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1540,   132,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    39,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    78,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
+      -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    66,    67,    -1,    69,    39,    71,    72,    -1,
+      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -3718,44 +3584,32 @@
       -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      66,    67,    -1,    69,    -1,    71,    72,    -1,    74,    75,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
+      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     3,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+     117,   118,   119,   120,   121,   122,     0,    -1,    -1,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
@@ -3767,65 +3621,320 @@
       74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,   119,     3,     4,     5,     6,
+      -1,    -1,    -1,   117,   118,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
+      -1,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,   117,
+     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,
+      36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      -1,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
+      -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    67,    -1,    30,    31,    32,    -1,    -1,
+      74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,   117,
+     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,   109,    71,   111,    -1,    74,
+      75,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    67,    -1,    69,
+      -1,    71,    39,    40,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
+     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,
+      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
+      -1,    -1,    74,    75,    -1,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,
+      39,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      69,    -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,   111,    39,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
+      40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
+      67,    -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
+      76,    -1,   109,   110,   111,    -1,    -1,    83,    84,    -1,
+     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,   111,    30,    31,    32,    -1,
+      -1,   117,   118,    37,    38,    39,    40,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
+      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
+      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      83,    84,    -1,   117,   118,   119,   120,   121,   122,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,   111,    30,
+      31,    32,    -1,    -1,   117,   118,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
+      40,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
+     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,   111,    30,    31,    32,   115,    -1,   117,   118,    37,
+      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
+      -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+     117,   118,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    66,    67,    30,    31,    32,    -1,    72,    -1,    74,
+      75,    76,    39,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    67,    -1,    69,    -1,    71,    39,    -1,    74,
+      75,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    67,    30,    31,    32,    -1,
+      72,    -1,    74,    75,    76,    39,    -1,    -1,    -1,   114,
+      -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
+      74,    75,    76,    39,    -1,   117,   118,    -1,    -1,    83,
+      84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    67,    30,    31,    32,   109,    72,   111,    74,    75,
+      76,    39,    -1,   117,   118,    -1,    -1,    83,    84,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    67,
+      30,    31,    32,   109,    72,   111,    74,    75,    76,    39,
+      -1,   117,   118,    -1,    -1,    83,    84,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    67,    30,    31,
+      32,   109,    -1,   111,    74,    75,    -1,    39,    78,   117,
+     118,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    67,    -1,    -1,    -1,   109,
+      39,   111,    74,    75,    -1,    -1,    78,   117,   118,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
+      31,    32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    67,    30,    31,    32,
+      -1,    -1,   111,    74,    75,    -1,    39,    -1,   117,   118,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    67,    -1,    -1,    -1,    -1,    39,
+     111,    74,    75,    -1,    -1,    -1,   117,   118,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
+      32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,   111,    74,    75,    -1,    -1,    -1,   117,   118,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,   111,
+      -1,    -1,    -1,    -1,    39,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
+      56,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,
+      66,    -1,    -1,    -1,    -1,   110,    72,    -1,    -1,    -1,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
+      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    37,
+      38,   127,    40,    41,    -1,    43,   132,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,
+     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
+      -1,    -1,    -1,    -1,   132,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      39,    -1,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,    64,
+      69,    66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    96,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      37,    38,   127,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
+      57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,    -1,    37,    38,
+     127,    40,    41,    -1,    43,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
+      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,
+     119,   120,   121,   122,    66,    -1,    -1,    -1,   127,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,   113,   114,    -1,    -1,   117,   118,   119,   120,   121,
+     122,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    37,    38,
+      -1,    40,   117,   118,   119,   120,   121,   122,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,   109,    -1,   111,    -1,    37,    38,    -1,    40,   117,
+     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,    -1,    -1,    37,    38,    -1,    40,   117,   118,
+     119,   120,   121,   122,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    66,    86,    87,    -1,    -1,    -1,    72,
+      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,    -1,
+      -1,    37,    38,    -1,    40,   117,   118,   119,   120,   121,
+     122,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
+      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
-      67,    -1,    69,    39,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
-      30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -3835,386 +3944,22 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      75,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    94,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,   110,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
-      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
-      39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    67,
-      -1,    69,    -1,    71,    39,    -1,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    67,    30,    31,    32,    -1,    72,    -1,    74,
-      75,    76,    39,    -1,    -1,    -1,   114,    -1,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,   109,    72,   111,    74,    75,    76,
-      -1,    -1,    -1,   118,   119,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,   109,    -1,   111,    -1,    83,    84,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    83,    84,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,   119,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
+      -1,    -1,    74,    75,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
-      56,    57,    -1,    -1,    -1,    61,    62,    67,    64,    69,
-      66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
+      39,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     110,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,    -1,   128,    -1,    37,    38,   132,    40,    41,    -1,
-      43,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
-      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
-      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,   132,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    -1,    39,    -1,    37,    38,    -1,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    -1,    -1,    56,    57,    -1,    -1,
-      -1,    61,    62,    67,    64,    69,    66,    71,    -1,    -1,
-      74,    75,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
-      -1,    -1,    96,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
-     120,   121,   122,   123,    -1,    -1,    37,    38,   128,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    37,    38,   128,    40,    41,
-      -1,    43,    -1,    -1,    46,    47,    48,    49,    50,    51,
-      52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,
-      62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,    66,    -1,    -1,    -1,   128,    -1,    72,    -1,
-      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,   113,
-     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
-      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
-      -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
-      -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
-     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,    37,    38,    -1,    40,   118,
-     119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
-      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
-      72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
-      -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
-      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
-      75
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75
 };
 
@@ -4227,101 +3972,100 @@
       22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
       36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
-      76,    83,    84,    94,   109,   111,   118,   119,   137,   140,
-     149,   198,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     231,   232,   233,   234,   235,   236,   237,   238,   240,   241,
-     242,   243,   244,   245,   247,   255,   256,   283,   284,   285,
-     293,   296,   302,   303,   305,   307,   308,   314,   319,   323,
-     324,   325,   326,   327,   328,   329,   330,   350,   367,   368,
-     369,   370,    72,   139,   140,   149,   215,   217,   225,   227,
-     237,   241,   243,   284,    82,   109,   312,   313,   314,   312,
-     312,    72,    74,    75,    76,   138,   139,   273,   274,   294,
-     295,    74,    75,   274,   109,   305,    11,   199,   109,   149,
-     319,   324,   325,   326,   328,   329,   330,   112,   134,   111,
-     218,   225,   227,   323,   327,   366,   367,   370,   371,   135,
-     107,   131,   277,   114,   135,   173,    74,    75,   137,   272,
-     135,   135,   135,   116,   135,    74,    75,   109,   149,   309,
-     318,   319,   320,   321,   322,   323,   327,   331,   332,   333,
-     334,   335,   341,     3,    28,    78,   239,     3,     5,    74,
-     111,   149,   217,   228,   232,   235,   244,   285,   323,   327,
-     370,   215,   217,   227,   237,   241,   243,   284,   323,   327,
-      33,   233,   233,   228,   235,   135,   233,   228,   233,   228,
-      75,   109,   114,   274,   285,   114,   274,   233,   228,   116,
-     135,   135,     0,   134,   109,   173,   312,   312,   134,   111,
-     225,   227,   368,   272,   272,   131,   227,   109,   149,   309,
-     319,   323,   111,   149,   370,   306,   230,   314,   109,   290,
-     109,   109,    51,   109,    37,    38,    40,    66,    72,    76,
-      79,    80,    81,    82,    86,    87,   109,   111,   120,   121,
-     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   164,   166,   225,   276,   292,   366,   371,   227,
-     110,   110,   110,   110,   110,   110,   110,    74,    75,   111,
-     225,   272,   350,   368,   111,   118,   149,   164,   217,   218,
-     224,   227,   231,   232,   237,   240,   241,   243,   262,   263,
-     267,   268,   269,   270,   284,   350,   362,   363,   364,   365,
-     370,   371,   112,   109,   323,   327,   370,   109,   116,   132,
-     111,   114,   149,   164,   278,   278,   115,   134,   116,   132,
-     109,   116,   132,   116,   132,   116,   132,   312,   132,   319,
-     320,   321,   322,   332,   333,   334,   335,   227,   318,   331,
-      64,   311,   111,   312,   349,   350,   312,   312,   173,   134,
-     109,   312,   349,   312,   312,   227,   309,   109,   109,   226,
-     227,   225,   227,   112,   134,   225,   366,   371,   173,   134,
-     272,   277,   217,   232,   323,   327,   173,   134,   294,   227,
-     237,   132,   227,   227,   292,   248,   246,   258,   274,   257,
-     227,   294,   132,   132,   305,   134,   139,   271,     3,   135,
-     207,   208,   222,   224,   227,   134,   311,   109,   311,   164,
-     319,   227,   109,   134,   272,   114,    33,    34,    35,   225,
-     286,   287,   289,   134,   129,   131,   291,   134,   228,   234,
-     235,   272,   315,   316,   317,   109,   141,   109,   148,   109,
-     148,   151,   109,   148,   109,   109,   148,   148,   111,   164,
-     169,   173,   225,   275,   366,   370,   112,   134,    82,    85,
-      86,    87,   109,   111,   113,   114,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   131,   168,   151,   151,
-     118,   124,   125,   120,   121,    88,    89,    90,    91,   126,
-     127,    92,    93,   119,   128,   129,    94,    95,   130,   131,
-     373,   109,   149,   345,   346,   347,   348,   349,   110,   116,
-     109,   349,   350,   109,   349,   350,   134,   109,   225,   368,
-     112,   134,   135,   111,   225,   227,   361,   362,   370,   371,
-     135,   109,   111,   149,   319,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   350,   351,   352,   353,   354,   355,
-     356,   149,   370,   227,   135,   135,   149,   225,   227,   363,
-     272,   225,   350,   363,   272,   109,   134,   134,   134,   112,
-     134,    72,    80,   111,   113,   140,   274,   278,   279,   280,
-     281,   282,   134,   134,   134,   134,   134,   134,   309,   110,
-     110,   110,   110,   110,   110,   110,   318,   331,   109,   277,
-     112,   207,   134,   309,   169,   276,   169,   276,   309,   111,
-     207,   311,   173,   134,   207,   110,    40,   111,   115,   225,
-     249,   250,   251,   366,   114,   116,   372,   131,   259,   114,
-     227,   264,   265,   266,   269,   270,   110,   116,   173,   134,
-     118,   164,   134,   224,   227,   263,   362,   370,   303,   304,
-     109,   149,   336,   110,   116,   373,   274,   286,   109,   114,
-     274,   276,   286,   110,   116,   109,   141,   110,   117,   275,
-     275,   275,   111,   139,   145,   164,   276,   275,   112,   134,
-     110,   116,   110,   109,   149,   349,   357,   358,   359,   360,
-     110,   116,   164,   111,   139,   111,   144,   145,   134,   111,
-     139,   144,   164,   164,   151,   151,   151,   152,   152,   153,
-     153,   154,   154,   154,   154,   155,   155,   156,   157,   158,
-     159,   160,   117,   169,   164,   134,   346,   347,   348,   227,
-     345,   312,   312,   164,   276,   134,   271,   134,   225,   350,
-     363,   227,   231,   112,   112,   134,   370,   112,   109,   134,
-     319,   337,   338,   339,   342,   352,   353,   354,   112,   134,
-     227,   336,   340,   351,   109,   312,   355,   373,   312,   312,
-     373,   109,   312,   355,   312,   312,   312,   312,   350,   225,
-     361,   371,   272,   112,   116,   112,   116,   373,   225,   363,
-     373,   260,   261,   262,   263,   260,   260,   272,   164,   134,
-     111,   274,   117,   116,   372,   278,    80,   111,   117,   282,
-      29,   209,   210,   272,   260,   139,   309,   139,   311,   109,
-     349,   350,   109,   349,   350,   141,   350,   173,   264,   110,
-     110,   110,   110,   112,   173,   207,   173,   114,   250,   251,
-     112,   134,   109,   117,   149,   252,   254,   318,   319,   331,
-     357,   116,   132,   116,   132,   274,   248,   274,   115,   162,
-     163,   258,   135,   135,   139,   222,   135,   135,   260,   109,
-     149,   370,   135,   115,   227,   287,   288,   135,   134,   134,
-     109,   135,   110,   316,   169,   170,   117,   132,   111,   141,
-     200,   201,   202,   110,   116,   110,   134,   117,   110,   110,
-     110,   111,   164,   358,   359,   360,   227,   357,   312,   312,
-     114,   151,   166,   164,   165,   167,   116,   135,   134,   134,
-     110,   116,   164,   134,   115,   162,   117,   264,   110,   110,
-     110,   345,   264,   110,   260,   225,   363,   111,   118,   149,
+      76,    83,    84,   109,   111,   117,   118,   137,   140,   149,
+     198,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   231,
+     232,   233,   234,   235,   236,   237,   238,   240,   241,   242,
+     243,   244,   245,   247,   255,   256,   283,   284,   285,   293,
+     296,   302,   303,   305,   307,   308,   314,   319,   323,   324,
+     325,   326,   327,   328,   329,   330,   350,   367,   368,   369,
+     370,    72,   139,   140,   149,   215,   217,   225,   227,   237,
+     241,   243,   284,    82,   109,   312,   313,   314,   312,   312,
+      72,    74,    75,    76,   138,   139,   273,   274,   294,   295,
+      74,    75,   274,   109,   305,    11,   199,   109,   149,   319,
+     324,   325,   326,   328,   329,   330,   112,   134,   111,   218,
+     225,   227,   323,   327,   366,   367,   370,   371,   135,   107,
+     131,   277,   114,   135,   173,    74,    75,   137,   272,   135,
+     135,   135,   116,   135,    74,    75,   109,   149,   309,   318,
+     319,   320,   321,   322,   323,   327,   331,   332,   333,   334,
+     335,   341,     3,    28,    78,   239,     3,     5,    74,   111,
+     149,   217,   228,   232,   235,   244,   285,   323,   327,   370,
+     215,   217,   227,   237,   241,   243,   284,   323,   327,    33,
+     233,   233,   228,   235,   135,   233,   228,   233,   228,    75,
+     109,   114,   274,   285,   114,   274,   233,   228,   116,   135,
+     135,     0,   134,   109,   173,   312,   312,   134,   111,   225,
+     227,   368,   272,   272,   131,   227,   109,   149,   309,   319,
+     323,   111,   149,   370,   306,   230,   314,   109,   290,   109,
+     109,    51,   109,    37,    38,    40,    66,    72,    76,    79,
+      80,    81,    82,    86,    87,   109,   111,   119,   120,   121,
+     122,   136,   140,   141,   142,   143,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   164,   167,   225,   276,   292,   366,   371,   227,   110,
+     110,   110,   110,   110,   110,   110,    74,    75,   111,   225,
+     272,   350,   368,   111,   117,   149,   164,   217,   218,   224,
+     227,   231,   232,   237,   240,   241,   243,   262,   263,   267,
+     268,   269,   270,   284,   350,   362,   363,   364,   365,   370,
+     371,   112,   109,   323,   327,   370,   109,   116,   132,   111,
+     114,   149,   164,   278,   278,   115,   134,   116,   132,   109,
+     116,   132,   116,   132,   116,   132,   312,   132,   319,   320,
+     321,   322,   332,   333,   334,   335,   227,   318,   331,    64,
+     311,   111,   312,   349,   350,   312,   312,   173,   134,   109,
+     312,   349,   312,   312,   227,   309,   109,   109,   226,   227,
+     225,   227,   112,   134,   225,   366,   371,   173,   134,   272,
+     277,   217,   232,   323,   327,   173,   134,   294,   227,   237,
+     132,   227,   227,   292,   248,   246,   258,   274,   257,   227,
+     294,   132,   132,   305,   134,   139,   271,     3,   135,   207,
+     208,   222,   224,   227,   134,   311,   109,   311,   164,   319,
+     227,   109,   134,   272,   114,    33,    34,    35,   225,   286,
+     287,   289,   134,   128,   131,   291,   134,   228,   234,   235,
+     272,   315,   316,   317,   109,   141,   109,   148,   109,   148,
+     151,   109,   148,   109,   109,   148,   148,   111,   164,   169,
+     173,   225,   275,   366,   370,   112,   134,    82,    85,    86,
+      87,   109,   111,   113,   114,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   131,   166,   151,   151,   117,
+     123,   124,   119,   120,    88,    89,    90,    91,   125,   126,
+      92,    93,   118,   127,   128,    94,    95,   129,   131,   373,
+     109,   149,   345,   346,   347,   348,   349,   110,   116,   109,
+     349,   350,   109,   349,   350,   134,   109,   225,   368,   112,
+     134,   135,   111,   225,   227,   361,   362,   370,   371,   135,
+     109,   111,   149,   319,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   350,   351,   352,   353,   354,   355,   356,
+     149,   370,   227,   135,   135,   149,   225,   227,   363,   272,
+     225,   350,   363,   272,   109,   134,   134,   134,   112,   134,
+      72,   111,   113,   140,   274,   278,   279,   280,   281,   282,
+     134,   134,   134,   134,   134,   134,   309,   110,   110,   110,
+     110,   110,   110,   110,   318,   331,   109,   277,   112,   207,
+     134,   309,   169,   276,   169,   276,   309,   111,   207,   311,
+     173,   134,   207,   110,    40,   111,   115,   225,   249,   250,
+     251,   366,   114,   116,   372,   131,   259,   114,   227,   264,
+     265,   266,   269,   270,   110,   116,   173,   134,   117,   164,
+     134,   224,   227,   263,   362,   370,   303,   304,   109,   149,
+     336,   110,   116,   373,   274,   286,   109,   114,   274,   276,
+     286,   110,   116,   109,   141,   110,   130,   275,   275,   275,
+     145,   164,   276,   275,   112,   134,   110,   116,   110,   109,
+     149,   349,   357,   358,   359,   360,   110,   116,   164,   111,
+     139,   144,   145,   134,   111,   139,   144,   164,   151,   151,
+     151,   152,   152,   153,   153,   154,   154,   154,   154,   155,
+     155,   156,   157,   158,   159,   160,   130,   169,   164,   134,
+     346,   347,   348,   227,   345,   312,   312,   164,   276,   134,
+     271,   134,   225,   350,   363,   227,   231,   112,   112,   134,
+     370,   112,   109,   134,   319,   337,   338,   339,   342,   352,
+     353,   354,   112,   134,   227,   336,   340,   351,   109,   312,
+     355,   373,   312,   312,   373,   109,   312,   355,   312,   312,
+     312,   312,   350,   225,   361,   371,   272,   112,   116,   112,
+     116,   373,   225,   363,   373,   260,   261,   262,   263,   260,
+     260,   272,   164,   134,   111,   274,   130,   116,   372,   278,
+     111,   130,   282,    29,   209,   210,   272,   260,   139,   309,
+     139,   311,   109,   349,   350,   109,   349,   350,   141,   350,
+     173,   264,   110,   110,   110,   110,   112,   173,   207,   173,
+     114,   250,   251,   112,   134,   109,   130,   149,   252,   254,
+     318,   319,   331,   357,   116,   132,   116,   132,   274,   248,
+     274,   115,   162,   163,   258,   135,   135,   139,   222,   135,
+     135,   260,   109,   149,   370,   135,   115,   227,   287,   288,
+     135,   134,   134,   109,   135,   110,   316,   169,   170,   130,
+     132,   111,   141,   200,   201,   202,   110,   116,   110,   110,
+     110,   110,   111,   164,   358,   359,   360,   227,   357,   312,
+     312,   114,   151,   167,   164,   165,   168,   116,   135,   134,
+     110,   116,   164,   134,   115,   162,   130,   264,   110,   110,
+     110,   345,   264,   110,   260,   225,   363,   111,   117,   149,
      164,   164,   227,   342,   264,   110,   110,   110,   110,   110,
      110,   110,     7,   227,   336,   340,   351,   134,   134,   373,
@@ -4329,5 +4073,5 @@
      163,   164,   310,   134,   278,   280,   115,   134,   211,   274,
       40,    41,    43,    46,    47,    48,    49,    50,    51,    52,
-      53,    57,    61,    62,    72,   111,   128,   170,   171,   172,
+      53,    57,    61,    62,    72,   111,   127,   170,   171,   172,
      173,   174,   175,   177,   178,   190,   192,   193,   198,   212,
      308,    29,   135,   131,   277,   134,   134,   110,   135,   173,
@@ -4335,50 +4079,49 @@
      312,   115,   259,   372,   110,   116,   112,   112,   135,   227,
      116,   373,   290,   110,   286,   215,   217,   225,   298,   299,
-     300,   301,   292,   110,   110,   117,   163,   109,   110,   117,
-     116,   139,   164,   164,   112,   110,   110,   110,   357,   279,
-     116,   135,   167,   112,   139,   146,   147,   164,   145,   135,
-     146,   162,   166,   135,   109,   349,   350,   135,   135,   134,
-     135,   135,   135,   164,   110,   135,   109,   349,   350,   109,
-     355,   109,   355,   350,   226,     7,   118,   135,   164,   264,
-     264,   263,   267,   267,   268,   116,   116,   110,   110,   112,
-      96,   123,   135,   135,   146,   278,   164,   116,   132,   212,
-     216,   227,   231,   109,   109,   171,   109,   109,    72,   132,
-      72,   132,    72,   118,   170,   109,   173,   165,   165,   117,
-     112,   143,   132,   135,   134,   135,   211,   110,   164,   264,
-     264,   312,   110,   115,   252,   115,   134,   110,   134,   135,
-     309,   115,   134,   135,   135,   110,   114,   200,   112,   163,
-     132,   200,   202,   110,   116,   135,   109,   349,   350,   372,
-     165,   112,   135,    85,   113,   116,   135,   135,   112,   135,
-     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
-     134,   134,   164,   164,   135,   112,   135,   135,   135,   135,
-     134,   134,   163,   163,   112,   112,   135,   135,   274,   227,
-     169,   169,    47,   169,   134,   132,   132,   132,   169,   132,
-     169,    58,    59,    60,   194,   195,   196,   132,    63,   132,
-     312,   114,   175,   115,   132,   135,   135,    96,   269,   270,
-     110,   299,   116,   132,   116,   132,   115,   297,   117,   141,
-     110,   110,   117,   167,   112,   134,   115,   112,   111,   147,
-     111,   147,   147,   112,   112,   112,   264,   112,   264,   264,
-     264,   135,   135,   112,   112,   110,   110,   112,   116,    96,
-     263,    96,   135,   112,   112,   110,   110,   109,   110,   170,
-     191,   212,   132,   110,   109,   109,   173,   196,    58,    59,
-     164,   171,   144,   110,   110,   114,   134,   134,   298,   141,
-     203,   109,   132,   203,   135,   117,   264,   134,   134,   135,
-     135,   135,   135,   112,   112,   134,   135,   112,   171,    44,
-      45,   114,   181,   182,   183,   169,   171,   135,   110,   170,
-     114,   183,    96,   134,    96,   134,   109,   109,   132,   115,
-     134,   272,   309,   115,   116,   117,   163,   110,   112,   164,
-     135,   146,   146,   110,   110,   110,   110,   267,    42,   163,
-     179,   180,   310,   117,   134,   171,   181,   110,   132,   171,
-     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
-     132,   298,   141,   139,   204,   110,   132,   117,   110,   135,
-     135,   171,    96,   116,   117,   135,   205,   206,   212,   132,
-     170,   170,   205,   173,   197,   225,   366,   173,   197,   110,
-     134,   110,   134,   115,   110,   116,   164,   112,   112,   163,
-     179,   182,   184,   185,   134,   132,   182,   186,   187,   135,
-     109,   149,   309,   357,   139,   135,   173,   197,   173,   197,
-     109,   132,   139,   171,   176,   115,   182,   212,   170,    56,
-     176,   189,   115,   182,   110,   227,   110,   135,   135,   292,
-     171,   176,   132,   188,   189,   176,   189,   173,   173,   110,
-     110,   110,   188,   135,   135,   173,   173,   135,   135
+     300,   301,   292,   110,   110,   130,   163,   109,   110,   130,
+     116,   139,   112,   110,   110,   110,   357,   279,   116,   135,
+     168,   112,   139,   146,   147,   145,   135,   146,   162,   167,
+     135,   109,   349,   350,   135,   135,   134,   135,   135,   135,
+     164,   110,   135,   109,   349,   350,   109,   355,   109,   355,
+     350,   226,     7,   117,   135,   164,   264,   264,   263,   267,
+     267,   268,   116,   116,   110,   110,   112,    96,   122,   135,
+     135,   146,   278,   164,   116,   132,   212,   216,   227,   231,
+     109,   109,   171,   109,   109,    72,   132,    72,   132,    72,
+     117,   170,   109,   173,   165,   165,   130,   112,   143,   132,
+     135,   134,   135,   211,   110,   164,   264,   264,   312,   110,
+     115,   252,   115,   134,   110,   134,   135,   309,   115,   134,
+     135,   135,   110,   114,   200,   112,   163,   132,   200,   202,
+     110,   109,   349,   350,   372,   165,   112,   135,    85,   113,
+     116,   135,   112,   135,   110,   134,   110,   110,   112,   112,
+     112,   135,   110,   134,   134,   134,   164,   164,   135,   112,
+     135,   135,   135,   135,   134,   134,   163,   163,   112,   112,
+     135,   135,   274,   227,   169,   169,    47,   169,   134,   132,
+     132,   132,   169,   132,   169,    58,    59,    60,   194,   195,
+     196,   132,    63,   132,   312,   114,   175,   115,   132,   135,
+     135,    96,   269,   270,   110,   299,   116,   132,   116,   132,
+     115,   297,   130,   141,   110,   110,   130,   134,   115,   112,
+     111,   147,   111,   147,   147,   112,   112,   264,   112,   264,
+     264,   264,   135,   135,   112,   112,   110,   110,   112,   116,
+      96,   263,    96,   135,   112,   112,   110,   110,   109,   110,
+     170,   191,   212,   132,   110,   109,   109,   173,   196,    58,
+      59,   164,   171,   144,   110,   110,   114,   134,   134,   298,
+     141,   203,   109,   132,   203,   264,   134,   134,   135,   135,
+     135,   135,   112,   112,   134,   135,   112,   171,    44,    45,
+     114,   181,   182,   183,   169,   171,   135,   110,   170,   114,
+     183,    96,   134,    96,   134,   109,   109,   132,   115,   134,
+     272,   309,   115,   116,   130,   163,   110,   135,   146,   146,
+     110,   110,   110,   110,   267,    42,   163,   179,   180,   310,
+     130,   134,   171,   181,   110,   132,   171,   132,   134,   110,
+     134,   110,   134,    96,   134,    96,   134,   132,   298,   141,
+     139,   204,   110,   132,   110,   135,   135,   171,    96,   116,
+     130,   135,   205,   206,   212,   132,   170,   170,   205,   173,
+     197,   225,   366,   173,   197,   110,   134,   110,   134,   115,
+     110,   116,   112,   112,   163,   179,   182,   184,   185,   134,
+     132,   182,   186,   187,   135,   109,   149,   309,   357,   139,
+     135,   173,   197,   173,   197,   109,   132,   139,   171,   176,
+     115,   182,   212,   170,    56,   176,   189,   115,   182,   110,
+     227,   110,   135,   135,   292,   171,   176,   132,   188,   189,
+     176,   189,   173,   173,   110,   110,   110,   188,   135,   135,
+     173,   173,   135,   135
 };
 
@@ -5217,5 +4960,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 292 "parser.yy"
+#line 299 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5226,5 +4969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 298 "parser.yy"
+#line 305 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5235,6 +4978,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
-    { (yyval.constant) = makeConstantInteger( *(yyvsp[(1) - (1)].tok) ); }
+#line 314 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5242,6 +4985,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 308 "parser.yy"
-    { (yyval.constant) = makeConstantFloat( *(yyvsp[(1) - (1)].tok) ); }
+#line 315 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5249,6 +4992,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 309 "parser.yy"
-    { (yyval.constant) = makeConstantChar( *(yyvsp[(1) - (1)].tok) ); }
+#line 316 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5256,6 +4999,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 334 "parser.yy"
-    { (yyval.constant) = makeConstantStr( *(yyvsp[(1) - (1)].tok) ); }
+#line 341 "parser.yy"
+    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5263,6 +5006,10 @@
 
 /* Line 1806 of yacc.c  */
-#line 335 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
+#line 343 "parser.yy"
+    {
+			appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
+			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
+			(yyval.constant) = (yyvsp[(1) - (2)].constant);
+		}
     break;
 
@@ -5270,6 +5017,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 342 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+#line 354 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5277,6 +5024,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+#line 356 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5284,5 +5031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 358 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5291,6 +5038,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 348 "parser.yy"
-    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
+#line 360 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
 
@@ -5298,6 +5045,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
+#line 370 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
 
@@ -5305,6 +5052,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 360 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
+#line 372 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5312,6 +5059,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 364 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+#line 376 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5319,6 +5066,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 367 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+#line 379 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5326,6 +5073,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
+#line 382 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5333,6 +5080,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
+#line 384 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5340,6 +5087,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
-    { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
+#line 386 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
 
@@ -5347,8 +5094,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 376 "parser.yy"
+#line 388 "parser.yy"
     {
-			Token fn; fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) );
+			Token fn;
+			fn.str = new std::string( "?{}" ); // location undefined
+			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
@@ -5357,5 +5105,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 398 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5364,20 +5112,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 390 "parser.yy"
+#line 403 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 37:
-
-/* Line 1806 of yacc.c  */
-#line 393 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
-    break;
-
   case 38:
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
-    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
+#line 409 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -5385,6 +5126,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 400 "parser.yy"
-    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
+#line 414 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 40:
+
+/* Line 1806 of yacc.c  */
+#line 418 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5392,476 +5140,479 @@
 
 /* Line 1806 of yacc.c  */
-#line 405 "parser.yy"
+#line 420 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
+    break;
+
+  case 42:
+
+/* Line 1806 of yacc.c  */
+#line 422 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
+    break;
+
+  case 43:
+
+/* Line 1806 of yacc.c  */
+#line 424 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
+    break;
+
+  case 45:
+
+/* Line 1806 of yacc.c  */
+#line 432 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
+  case 46:
+
+/* Line 1806 of yacc.c  */
+#line 434 "parser.yy"
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
+    break;
+
+  case 47:
+
+/* Line 1806 of yacc.c  */
+#line 436 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
+    break;
+
+  case 48:
+
+/* Line 1806 of yacc.c  */
+#line 441 "parser.yy"
+    {
+			switch ( (yyvsp[(1) - (2)].op) ) {
+			  case OperKinds::AddressOf:
+				(yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
+				break;
+			  case OperKinds::PointTo:
+				(yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
+    break;
+
+  case 49:
+
+/* Line 1806 of yacc.c  */
+#line 454 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 50:
+
+/* Line 1806 of yacc.c  */
+#line 456 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 51:
+
+/* Line 1806 of yacc.c  */
+#line 458 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 52:
+
+/* Line 1806 of yacc.c  */
+#line 460 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 53:
+
+/* Line 1806 of yacc.c  */
+#line 462 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
+    break;
+
+  case 54:
+
+/* Line 1806 of yacc.c  */
+#line 464 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 55:
+
+/* Line 1806 of yacc.c  */
+#line 466 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
+    break;
+
+  case 56:
+
+/* Line 1806 of yacc.c  */
+#line 468 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
+    break;
+
+  case 57:
+
+/* Line 1806 of yacc.c  */
+#line 470 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
+    break;
+
+  case 58:
+
+/* Line 1806 of yacc.c  */
+#line 472 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 59:
+
+/* Line 1806 of yacc.c  */
+#line 474 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
+    break;
+
+  case 60:
+
+/* Line 1806 of yacc.c  */
+#line 480 "parser.yy"
+    { (yyval.op) = OperKinds::PointTo; }
+    break;
+
+  case 61:
+
+/* Line 1806 of yacc.c  */
+#line 481 "parser.yy"
+    { (yyval.op) = OperKinds::AddressOf; }
+    break;
+
+  case 62:
+
+/* Line 1806 of yacc.c  */
+#line 487 "parser.yy"
+    { (yyval.op) = OperKinds::UnPlus; }
+    break;
+
+  case 63:
+
+/* Line 1806 of yacc.c  */
+#line 488 "parser.yy"
+    { (yyval.op) = OperKinds::UnMinus; }
+    break;
+
+  case 64:
+
+/* Line 1806 of yacc.c  */
+#line 489 "parser.yy"
+    { (yyval.op) = OperKinds::Neg; }
+    break;
+
+  case 65:
+
+/* Line 1806 of yacc.c  */
+#line 490 "parser.yy"
+    { (yyval.op) = OperKinds::BitNeg; }
+    break;
+
+  case 67:
+
+/* Line 1806 of yacc.c  */
+#line 496 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 68:
+
+/* Line 1806 of yacc.c  */
+#line 498 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 70:
+
+/* Line 1806 of yacc.c  */
+#line 504 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 71:
+
+/* Line 1806 of yacc.c  */
+#line 506 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 72:
+
+/* Line 1806 of yacc.c  */
+#line 508 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 74:
+
+/* Line 1806 of yacc.c  */
+#line 514 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 75:
+
+/* Line 1806 of yacc.c  */
+#line 516 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 77:
+
+/* Line 1806 of yacc.c  */
+#line 522 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 78:
+
+/* Line 1806 of yacc.c  */
+#line 524 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 80:
+
+/* Line 1806 of yacc.c  */
+#line 530 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 81:
+
+/* Line 1806 of yacc.c  */
+#line 532 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 82:
+
+/* Line 1806 of yacc.c  */
+#line 534 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 83:
+
+/* Line 1806 of yacc.c  */
+#line 536 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 85:
+
+/* Line 1806 of yacc.c  */
+#line 542 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 86:
+
+/* Line 1806 of yacc.c  */
+#line 544 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 88:
+
+/* Line 1806 of yacc.c  */
+#line 550 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 90:
+
+/* Line 1806 of yacc.c  */
+#line 556 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 92:
+
+/* Line 1806 of yacc.c  */
+#line 562 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 94:
+
+/* Line 1806 of yacc.c  */
+#line 568 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
+    break;
+
+  case 96:
+
+/* Line 1806 of yacc.c  */
+#line 574 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
+    break;
+
+  case 98:
+
+/* Line 1806 of yacc.c  */
+#line 580 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    break;
+
+  case 99:
+
+/* Line 1806 of yacc.c  */
+#line 583 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 100:
+
+/* Line 1806 of yacc.c  */
+#line 585 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    break;
+
+  case 103:
+
+/* Line 1806 of yacc.c  */
+#line 596 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 104:
+
+/* Line 1806 of yacc.c  */
+#line 598 "parser.yy"
+    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 105:
+
+/* Line 1806 of yacc.c  */
+#line 603 "parser.yy"
+    { (yyval.en) = nullptr; }
+    break;
+
+  case 107:
+
+/* Line 1806 of yacc.c  */
+#line 608 "parser.yy"
+    { (yyval.op) = OperKinds::Assign; }
+    break;
+
+  case 108:
+
+/* Line 1806 of yacc.c  */
+#line 609 "parser.yy"
+    { (yyval.op) = OperKinds::MulAssn; }
+    break;
+
+  case 109:
+
+/* Line 1806 of yacc.c  */
+#line 610 "parser.yy"
+    { (yyval.op) = OperKinds::DivAssn; }
+    break;
+
+  case 110:
+
+/* Line 1806 of yacc.c  */
+#line 611 "parser.yy"
+    { (yyval.op) = OperKinds::ModAssn; }
+    break;
+
+  case 111:
+
+/* Line 1806 of yacc.c  */
+#line 612 "parser.yy"
+    { (yyval.op) = OperKinds::PlusAssn; }
+    break;
+
+  case 112:
+
+/* Line 1806 of yacc.c  */
+#line 613 "parser.yy"
+    { (yyval.op) = OperKinds::MinusAssn; }
+    break;
+
+  case 113:
+
+/* Line 1806 of yacc.c  */
+#line 614 "parser.yy"
+    { (yyval.op) = OperKinds::LSAssn; }
+    break;
+
+  case 114:
+
+/* Line 1806 of yacc.c  */
+#line 615 "parser.yy"
+    { (yyval.op) = OperKinds::RSAssn; }
+    break;
+
+  case 115:
+
+/* Line 1806 of yacc.c  */
+#line 616 "parser.yy"
+    { (yyval.op) = OperKinds::AndAssn; }
+    break;
+
+  case 116:
+
+/* Line 1806 of yacc.c  */
+#line 617 "parser.yy"
+    { (yyval.op) = OperKinds::ERAssn; }
+    break;
+
+  case 117:
+
+/* Line 1806 of yacc.c  */
+#line 618 "parser.yy"
+    { (yyval.op) = OperKinds::OrAssn; }
+    break;
+
+  case 118:
+
+/* Line 1806 of yacc.c  */
+#line 625 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple() ); }
+    break;
+
+  case 119:
+
+/* Line 1806 of yacc.c  */
+#line 627 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
+    break;
+
+  case 120:
+
+/* Line 1806 of yacc.c  */
+#line 629 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
+    break;
+
+  case 121:
+
+/* Line 1806 of yacc.c  */
+#line 631 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 123:
+
+/* Line 1806 of yacc.c  */
+#line 637 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 42:
-
-/* Line 1806 of yacc.c  */
-#line 410 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 43:
-
-/* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
-    break;
-
-  case 44:
-
-/* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
-    break;
-
-  case 45:
-
-/* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
-    break;
-
-  case 46:
-
-/* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
-    break;
-
-  case 48:
-
-/* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 49:
-
-/* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 50:
-
-/* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
-    break;
-
-  case 51:
-
-/* Line 1806 of yacc.c  */
-#line 437 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (2)].op) == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( (yyvsp[(2) - (2)].en) ) )
-											: (ExpressionNode*)new CompositeExprNode( new OperatorNode ( (yyvsp[(1) - (2)].op) ), (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 52:
-
-/* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 53:
-
-/* Line 1806 of yacc.c  */
-#line 442 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::Incr, (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 54:
-
-/* Line 1806 of yacc.c  */
-#line 444 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr1( OperatorNode::Decr, (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 55:
-
-/* Line 1806 of yacc.c  */
-#line 446 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 56:
-
-/* Line 1806 of yacc.c  */
-#line 448 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
-    break;
-
-  case 57:
-
-/* Line 1806 of yacc.c  */
-#line 450 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
-    break;
-
-  case 58:
-
-/* Line 1806 of yacc.c  */
-#line 452 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 59:
-
-/* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
-    break;
-
-  case 60:
-
-/* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 61:
-
-/* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 62:
-
-/* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
-    break;
-
-  case 63:
-
-/* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
-    { (yyval.op) = OperatorNode::PointTo; }
-    break;
-
-  case 64:
-
-/* Line 1806 of yacc.c  */
-#line 467 "parser.yy"
-    { (yyval.op) = OperatorNode::AddressOf; }
-    break;
-
-  case 65:
-
-/* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
-    { (yyval.op) = OperatorNode::And; }
-    break;
-
-  case 66:
-
-/* Line 1806 of yacc.c  */
-#line 473 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
-    break;
-
-  case 67:
-
-/* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
-    break;
-
-  case 68:
-
-/* Line 1806 of yacc.c  */
-#line 475 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::Neg ); }
-    break;
-
-  case 69:
-
-/* Line 1806 of yacc.c  */
-#line 476 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
-    break;
-
-  case 71:
-
-/* Line 1806 of yacc.c  */
-#line 482 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 72:
-
-/* Line 1806 of yacc.c  */
-#line 484 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 74:
-
-/* Line 1806 of yacc.c  */
-#line 490 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 75:
-
-/* Line 1806 of yacc.c  */
-#line 492 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 76:
-
-/* Line 1806 of yacc.c  */
-#line 494 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 78:
-
-/* Line 1806 of yacc.c  */
-#line 500 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 79:
-
-/* Line 1806 of yacc.c  */
-#line 502 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 81:
-
-/* Line 1806 of yacc.c  */
-#line 508 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 82:
-
-/* Line 1806 of yacc.c  */
-#line 510 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 84:
-
-/* Line 1806 of yacc.c  */
-#line 516 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 85:
-
-/* Line 1806 of yacc.c  */
-#line 518 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 86:
-
-/* Line 1806 of yacc.c  */
-#line 520 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 87:
-
-/* Line 1806 of yacc.c  */
-#line 522 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 89:
-
-/* Line 1806 of yacc.c  */
-#line 528 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 90:
-
-/* Line 1806 of yacc.c  */
-#line 530 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 92:
-
-/* Line 1806 of yacc.c  */
-#line 536 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 94:
-
-/* Line 1806 of yacc.c  */
-#line 542 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 96:
-
-/* Line 1806 of yacc.c  */
-#line 548 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 98:
-
-/* Line 1806 of yacc.c  */
-#line 554 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
-    break;
-
-  case 100:
-
-/* Line 1806 of yacc.c  */
-#line 560 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
-    break;
-
-  case 102:
-
-/* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
-    break;
-
-  case 103:
-
-/* Line 1806 of yacc.c  */
-#line 569 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 104:
-
-/* Line 1806 of yacc.c  */
-#line 571 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
-    break;
-
-  case 107:
-
-/* Line 1806 of yacc.c  */
-#line 582 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 108:
-
-/* Line 1806 of yacc.c  */
-#line 584 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 109:
-
-/* Line 1806 of yacc.c  */
-#line 586 "parser.yy"
-    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 110:
-
-/* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
-    { (yyval.en) = new NullExprNode; }
-    break;
-
-  case 112:
-
-/* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
-    break;
-
-  case 113:
-
-/* Line 1806 of yacc.c  */
-#line 601 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
-    break;
-
-  case 114:
-
-/* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
-    break;
-
-  case 115:
-
-/* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
-    break;
-
-  case 117:
-
-/* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 118:
-
-/* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
-    break;
-
-  case 119:
-
-/* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
-    break;
-
-  case 120:
-
-/* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
-    break;
-
-  case 121:
-
-/* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
-    break;
-
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 619 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
-    break;
-
-  case 123:
-
-/* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
-    break;
-
-  case 124:
-
-/* Line 1806 of yacc.c  */
-#line 621 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
-    break;
-
   case 125:
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
+#line 643 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5869,20 +5620,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 623 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
-    break;
-
-  case 127:
-
-/* Line 1806 of yacc.c  */
-#line 624 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
-    break;
-
-  case 129:
-
-/* Line 1806 of yacc.c  */
-#line 631 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 648 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -5890,30 +5627,23 @@
 
 /* Line 1806 of yacc.c  */
-#line 636 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 134:
-
-/* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
+#line 657 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
 
-  case 140:
-
-/* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
+  case 136:
+
+/* Line 1806 of yacc.c  */
+#line 664 "parser.yy"
     {
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
-				(ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			(yyval.sn) = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
 		}
     break;
 
-  case 141:
-
-/* Line 1806 of yacc.c  */
-#line 662 "parser.yy"
+  case 137:
+
+/* Line 1806 of yacc.c  */
+#line 674 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5921,9 +5651,30 @@
     break;
 
+  case 138:
+
+/* Line 1806 of yacc.c  */
+#line 681 "parser.yy"
+    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
+    break;
+
+  case 139:
+
+/* Line 1806 of yacc.c  */
+#line 688 "parser.yy"
+    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
+    break;
+
+  case 141:
+
+/* Line 1806 of yacc.c  */
+#line 694 "parser.yy"
+    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
+    break;
+
   case 142:
 
 /* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
+#line 699 "parser.yy"
+    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
@@ -5931,26 +5682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 676 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
-    break;
-
-  case 145:
-
-/* Line 1806 of yacc.c  */
-#line 682 "parser.yy"
-    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
-    break;
-
-  case 146:
-
-/* Line 1806 of yacc.c  */
-#line 687 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
-    break;
-
-  case 147:
-
-/* Line 1806 of yacc.c  */
-#line 689 "parser.yy"
+#line 701 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5960,9 +5690,37 @@
     break;
 
+  case 144:
+
+/* Line 1806 of yacc.c  */
+#line 707 "parser.yy"
+    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+    break;
+
+  case 147:
+
+/* Line 1806 of yacc.c  */
+#line 714 "parser.yy"
+    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+    break;
+
   case 148:
 
 /* Line 1806 of yacc.c  */
-#line 695 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+#line 719 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
+    break;
+
+  case 149:
+
+/* Line 1806 of yacc.c  */
+#line 726 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
+    break;
+
+  case 150:
+
+/* Line 1806 of yacc.c  */
+#line 729 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
 
@@ -5970,6 +5728,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 702 "parser.yy"
-    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+#line 732 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
@@ -5977,35 +5735,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 707 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
-    break;
-
-  case 153:
-
-/* Line 1806 of yacc.c  */
-#line 713 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 154:
-
-/* Line 1806 of yacc.c  */
-#line 715 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
-    break;
-
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 717 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
+#line 734 "parser.yy"
     {
-			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
+			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
@@ -6017,26 +5747,48 @@
     break;
 
-  case 157:
-
-/* Line 1806 of yacc.c  */
-#line 729 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 731 "parser.yy"
+  case 153:
+
+/* Line 1806 of yacc.c  */
+#line 745 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 154:
+
+/* Line 1806 of yacc.c  */
+#line 747 "parser.yy"
     {
-			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
+			//StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
 			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
 		}
     break;
 
+  case 155:
+
+/* Line 1806 of yacc.c  */
+#line 758 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 760 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 158:
+
+/* Line 1806 of yacc.c  */
+#line 765 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
+    break;
+
   case 159:
 
 /* Line 1806 of yacc.c  */
-#line 741 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+#line 767 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
     break;
 
@@ -6044,13 +5796,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 743 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Range, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 162:
-
-/* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
+#line 771 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 772 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
 
@@ -6058,6 +5810,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 750 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
+#line 778 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
 
@@ -6065,6 +5817,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
-    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+#line 782 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
 
@@ -6072,6 +5824,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 755 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
+#line 787 "parser.yy"
+    { (yyval.sn) = 0; }
     break;
 
@@ -6079,6 +5831,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
+#line 793 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
 
@@ -6086,6 +5838,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 765 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
+#line 795 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
 
@@ -6093,5 +5845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 770 "parser.yy"
+#line 800 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6100,6 +5852,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 776 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
+#line 806 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
 
@@ -6107,6 +5859,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+#line 808 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
 
@@ -6114,34 +5866,34 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 810 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 812 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+    break;
+
+  case 175:
+
+/* Line 1806 of yacc.c  */
+#line 817 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+    break;
+
+  case 177:
+
+/* Line 1806 of yacc.c  */
+#line 823 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
   case 178:
 
 /* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+#line 825 "parser.yy"
+    { (yyval.sn) = 0; }
     break;
 
@@ -6149,69 +5901,76 @@
 
 /* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+#line 830 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 832 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
+    break;
+
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 834 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
+    break;
+
+  case 182:
+
+/* Line 1806 of yacc.c  */
+#line 839 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
+    break;
+
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 841 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+    break;
+
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 846 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 850 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 853 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
+    break;
+
+  case 187:
+
+/* Line 1806 of yacc.c  */
+#line 857 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 860 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
 
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 808 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 813 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 815 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
-    break;
-
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
-    break;
-
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 822 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
-    break;
-
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 829 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
   case 189:
 
 /* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
+#line 864 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -6219,6 +5978,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 836 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
+#line 866 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6226,6 +5985,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 840 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
+#line 868 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6233,6 +5992,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 843 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+#line 872 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6240,6 +5999,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 847 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
+#line 874 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
 
@@ -6247,6 +6006,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
+#line 881 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
@@ -6254,6 +6013,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
+#line 883 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
@@ -6261,33 +6020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
-    break;
-
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 864 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
+#line 885 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6296,9 +6027,37 @@
     break;
 
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 896 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 898 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    break;
+
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 900 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 902 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    break;
+
   case 202:
 
 /* Line 1806 of yacc.c  */
-#line 879 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+#line 907 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
@@ -6306,6 +6065,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 881 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+#line 909 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
 
@@ -6313,6 +6072,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 883 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+#line 911 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
@@ -6320,6 +6079,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+#line 913 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
 
@@ -6327,33 +6086,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 892 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
+#line 918 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6362,8 +6093,8 @@
     break;
 
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+  case 208:
+
+/* Line 1806 of yacc.c  */
+#line 932 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6372,15 +6103,15 @@
     break;
 
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 920 "parser.yy"
+  case 209:
+
+/* Line 1806 of yacc.c  */
+#line 937 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 922 "parser.yy"
+  case 210:
+
+/* Line 1806 of yacc.c  */
+#line 939 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6389,9 +6120,37 @@
     break;
 
+  case 212:
+
+/* Line 1806 of yacc.c  */
+#line 948 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+    break;
+
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 950 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+    break;
+
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 952 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+    break;
+
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 954 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ); }
+    break;
+
   case 216:
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+#line 956 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ); }
     break;
 
@@ -6399,6 +6158,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 933 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+#line 961 "parser.yy"
+    { (yyval.flag) = false; }
     break;
 
@@ -6406,6 +6165,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 935 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+#line 963 "parser.yy"
+    { (yyval.flag) = true; }
     break;
 
@@ -6413,20 +6172,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 937 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
-    break;
-
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
-    break;
-
-  case 221:
-
-/* Line 1806 of yacc.c  */
-#line 944 "parser.yy"
-    { (yyval.flag) = false; }
+#line 968 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -6434,6 +6179,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 946 "parser.yy"
-    { (yyval.flag) = true; }
+#line 975 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -6441,5 +6186,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 951 "parser.yy"
+#line 980 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asm( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 224:
+
+/* Line 1806 of yacc.c  */
+#line 982 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asm( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
+    break;
+
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 987 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6448,6 +6207,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 958 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 989 "parser.yy"
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
 
@@ -6455,6 +6214,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 963 "parser.yy"
-    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
+#line 991 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
 
@@ -6462,6 +6221,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 965 "parser.yy"
-    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
+#line 996 "parser.yy"
+    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -6469,6 +6228,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 970 "parser.yy"
-    { (yyval.constant) = 0; }
+#line 998 "parser.yy"
+    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
 
@@ -6476,20 +6235,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 231:
-
-/* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
-    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
-    break;
-
-  case 232:
-
-/* Line 1806 of yacc.c  */
-#line 979 "parser.yy"
-    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
+#line 1005 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -6497,6 +6242,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
-    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
+#line 1012 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
@@ -6504,5 +6249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 1017 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6511,40 +6256,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 995 "parser.yy"
+#line 1024 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 238:
-
-/* Line 1806 of yacc.c  */
-#line 1000 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 241:
-
-/* Line 1806 of yacc.c  */
-#line 1007 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 246:
-
-/* Line 1806 of yacc.c  */
-#line 1021 "parser.yy"
+  case 242:
+
+/* Line 1806 of yacc.c  */
+#line 1038 "parser.yy"
     {}
     break;
 
-  case 247:
-
-/* Line 1806 of yacc.c  */
-#line 1022 "parser.yy"
+  case 243:
+
+/* Line 1806 of yacc.c  */
+#line 1039 "parser.yy"
     {}
     break;
 
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1051 "parser.yy"
+  case 251:
+
+/* Line 1806 of yacc.c  */
+#line 1068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6553,8 +6284,8 @@
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1058 "parser.yy"
+  case 252:
+
+/* Line 1806 of yacc.c  */
+#line 1075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6563,8 +6294,8 @@
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1063 "parser.yy"
+  case 253:
+
+/* Line 1806 of yacc.c  */
+#line 1080 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6573,8 +6304,8 @@
     break;
 
-  case 258:
-
-/* Line 1806 of yacc.c  */
-#line 1073 "parser.yy"
+  case 254:
+
+/* Line 1806 of yacc.c  */
+#line 1090 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6583,8 +6314,8 @@
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1078 "parser.yy"
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1095 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6593,8 +6324,8 @@
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1083 "parser.yy"
+  case 256:
+
+/* Line 1806 of yacc.c  */
+#line 1100 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6603,8 +6334,8 @@
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1091 "parser.yy"
+  case 257:
+
+/* Line 1806 of yacc.c  */
+#line 1108 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6613,8 +6344,8 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1096 "parser.yy"
+  case 258:
+
+/* Line 1806 of yacc.c  */
+#line 1113 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6623,8 +6354,8 @@
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1101 "parser.yy"
+  case 259:
+
+/* Line 1806 of yacc.c  */
+#line 1118 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6633,8 +6364,8 @@
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1106 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1123 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6643,8 +6374,8 @@
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1111 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1128 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6653,8 +6384,8 @@
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1119 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1136 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6662,8 +6393,8 @@
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1142 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1159 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6671,8 +6402,8 @@
     break;
 
-  case 268:
-
-/* Line 1806 of yacc.c  */
-#line 1146 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1163 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6680,22 +6411,22 @@
     break;
 
-  case 269:
-
-/* Line 1806 of yacc.c  */
-#line 1153 "parser.yy"
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1170 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 270:
-
-/* Line 1806 of yacc.c  */
-#line 1157 "parser.yy"
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1174 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
-  case 271:
-
-/* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+  case 267:
+
+/* Line 1806 of yacc.c  */
+#line 1179 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6704,8 +6435,8 @@
     break;
 
-  case 272:
-
-/* Line 1806 of yacc.c  */
-#line 1167 "parser.yy"
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1184 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6714,8 +6445,8 @@
     break;
 
-  case 273:
-
-/* Line 1806 of yacc.c  */
-#line 1172 "parser.yy"
+  case 269:
+
+/* Line 1806 of yacc.c  */
+#line 1189 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6724,8 +6455,8 @@
     break;
 
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1183 "parser.yy"
+  case 270:
+
+/* Line 1806 of yacc.c  */
+#line 1200 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6734,8 +6465,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1188 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1205 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6744,8 +6475,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1210 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6754,8 +6485,8 @@
     break;
 
-  case 277:
-
-/* Line 1806 of yacc.c  */
-#line 1198 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1215 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6764,8 +6495,8 @@
     break;
 
-  case 278:
-
-/* Line 1806 of yacc.c  */
-#line 1203 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1220 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6774,8 +6505,8 @@
     break;
 
-  case 279:
-
-/* Line 1806 of yacc.c  */
-#line 1212 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1229 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6784,8 +6515,8 @@
     break;
 
-  case 280:
-
-/* Line 1806 of yacc.c  */
-#line 1217 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1234 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6794,8 +6525,8 @@
     break;
 
-  case 285:
-
-/* Line 1806 of yacc.c  */
-#line 1234 "parser.yy"
+  case 281:
+
+/* Line 1806 of yacc.c  */
+#line 1251 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6804,8 +6535,8 @@
     break;
 
-  case 286:
-
-/* Line 1806 of yacc.c  */
-#line 1239 "parser.yy"
+  case 282:
+
+/* Line 1806 of yacc.c  */
+#line 1256 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6814,16 +6545,44 @@
     break;
 
-  case 295:
-
-/* Line 1806 of yacc.c  */
-#line 1261 "parser.yy"
+  case 291:
+
+/* Line 1806 of yacc.c  */
+#line 1278 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
+  case 294:
+
+/* Line 1806 of yacc.c  */
+#line 1290 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 297:
+
+/* Line 1806 of yacc.c  */
+#line 1301 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+    break;
+
   case 298:
 
 /* Line 1806 of yacc.c  */
-#line 1273 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 1303 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+    break;
+
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1305 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+    break;
+
+  case 300:
+
+/* Line 1806 of yacc.c  */
+#line 1307 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
@@ -6831,6 +6590,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1284 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+#line 1309 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
@@ -6838,33 +6597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
-    break;
-
-  case 303:
-
-/* Line 1806 of yacc.c  */
-#line 1288 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-    break;
-
-  case 304:
-
-/* Line 1806 of yacc.c  */
-#line 1290 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-    break;
-
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1292 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1294 "parser.yy"
+#line 1311 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6872,8 +6603,8 @@
     break;
 
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1298 "parser.yy"
+  case 303:
+
+/* Line 1806 of yacc.c  */
+#line 1315 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6882,324 +6613,338 @@
     break;
 
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+  case 305:
+
+/* Line 1806 of yacc.c  */
+#line 1324 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 306:
+
+/* Line 1806 of yacc.c  */
+#line 1326 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 308:
+
+/* Line 1806 of yacc.c  */
+#line 1337 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 310:
 
 /* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
+#line 1346 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1348 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1350 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1352 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1354 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+    break;
+
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1356 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1358 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+    break;
+
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1360 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+    break;
+
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1365 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1367 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1369 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1371 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1373 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1375 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1377 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1379 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1381 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1383 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1385 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1387 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1389 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1398 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1400 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 312:
-
-/* Line 1806 of yacc.c  */
-#line 1320 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1402 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1408 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1415 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1417 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
-    break;
-
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 331:
-
-/* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
-    break;
-
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1419 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1424 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+    break;
+
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1426 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1428 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1430 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1436 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1438 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1440 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1398 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1446 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1400 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1448 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
-    break;
-
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1419 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1454 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1421 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1456 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1423 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1458 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1463 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1465 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1467 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1439 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1441 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
   case 362:
 
 /* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+#line 1477 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
 
@@ -7207,19 +6952,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1460 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
-    break;
-
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+#line 1479 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7228,9 +6959,37 @@
     break;
 
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1484 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1486 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+    break;
+
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1488 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+    break;
+
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1490 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+    break;
+
   case 368:
 
 /* Line 1806 of yacc.c  */
-#line 1467 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1495 "parser.yy"
+    { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
@@ -7238,6 +6997,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1469 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+#line 1497 "parser.yy"
+    { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
@@ -7245,6 +7004,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+#line 1502 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7252,13 +7011,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1473 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Struct; }
+#line 1504 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7266,13 +7018,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Union; }
-    break;
-
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1510 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
 
@@ -7280,19 +7025,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
-    break;
-
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1496 "parser.yy"
+#line 1513 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7302,9 +7033,37 @@
     break;
 
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1523 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1525 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+    break;
+
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1527 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+    break;
+
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1532 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 381:
 
 /* Line 1806 of yacc.c  */
-#line 1506 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+#line 1534 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
@@ -7312,6 +7071,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1508 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+#line 1539 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
@@ -7319,6 +7078,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1510 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+#line 1541 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
@@ -7326,6 +7085,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1515 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+#line 1544 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7333,13 +7092,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
-    break;
-
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1522 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
+#line 1547 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7347,6 +7099,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+#line 1553 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7354,6 +7106,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1527 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+#line 1555 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
@@ -7361,6 +7113,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1530 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+#line 1560 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7368,6 +7120,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
-    { (yyval.en) = 0; }
+#line 1569 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -7375,26 +7127,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1538 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1543 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
+#line 1571 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7403,9 +7134,37 @@
     break;
 
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1576 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1578 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+    break;
+
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1583 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1585 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
   case 397:
 
 /* Line 1806 of yacc.c  */
-#line 1559 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1590 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7413,6 +7172,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+#line 1592 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7420,27 +7179,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 400:
-
-/* Line 1806 of yacc.c  */
-#line 1568 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 401:
-
-/* Line 1806 of yacc.c  */
-#line 1573 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 402:
-
-/* Line 1806 of yacc.c  */
-#line 1575 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
+#line 1599 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7448,69 +7186,83 @@
 
 /* Line 1806 of yacc.c  */
-#line 1582 "parser.yy"
+#line 1607 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1609 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1611 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 407:
+
+/* Line 1806 of yacc.c  */
+#line 1619 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1621 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1623 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1629 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1634 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1590 "parser.yy"
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1641 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1648 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1592 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1594 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1602 "parser.yy"
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1650 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1604 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 413:
-
-/* Line 1806 of yacc.c  */
-#line 1606 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 416:
-
-/* Line 1806 of yacc.c  */
-#line 1617 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1624 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+  case 421:
+
+/* Line 1806 of yacc.c  */
+#line 1659 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7518,6 +7270,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1631 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+#line 1662 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7525,40 +7277,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1633 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1642 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 426:
-
-/* Line 1806 of yacc.c  */
-#line 1645 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 427:
-
-/* Line 1806 of yacc.c  */
-#line 1647 "parser.yy"
+#line 1664 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 432:
-
-/* Line 1806 of yacc.c  */
-#line 1657 "parser.yy"
+  case 428:
+
+/* Line 1806 of yacc.c  */
+#line 1674 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
+  case 430:
+
+/* Line 1806 of yacc.c  */
+#line 1680 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7567,8 +7298,8 @@
     break;
 
-  case 435:
-
-/* Line 1806 of yacc.c  */
-#line 1668 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1685 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7577,37 +7308,65 @@
     break;
 
-  case 437:
-
-/* Line 1806 of yacc.c  */
-#line 1677 "parser.yy"
+  case 433:
+
+/* Line 1806 of yacc.c  */
+#line 1694 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 438:
-
-/* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+  case 434:
+
+/* Line 1806 of yacc.c  */
+#line 1703 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 439:
-
-/* Line 1806 of yacc.c  */
-#line 1688 "parser.yy"
+  case 435:
+
+/* Line 1806 of yacc.c  */
+#line 1705 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
+  case 447:
+
+/* Line 1806 of yacc.c  */
+#line 1730 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 451:
 
 /* Line 1806 of yacc.c  */
-#line 1713 "parser.yy"
+#line 1738 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
+  case 452:
+
+/* Line 1806 of yacc.c  */
+#line 1743 "parser.yy"
+    { (yyval.in) = 0; }
+    break;
+
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1745 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1747 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
   case 455:
 
 /* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+#line 1751 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
 
@@ -7615,27 +7374,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 1726 "parser.yy"
+#line 1752 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1757 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1728 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 458:
-
-/* Line 1806 of yacc.c  */
-#line 1730 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
   case 459:
 
 /* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+#line 1759 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
@@ -7643,6 +7395,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+#line 1760 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
@@ -7650,6 +7402,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1740 "parser.yy"
-    { (yyval.in) = 0; }
+#line 1762 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
@@ -7657,13 +7409,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1742 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
-    break;
-
-  case 464:
-
-/* Line 1806 of yacc.c  */
-#line 1743 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
+#line 1778 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
 
@@ -7671,6 +7416,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1745 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+#line 1784 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1790 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
@@ -7678,6 +7430,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
+#line 1793 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+    break;
+
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1795 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
@@ -7685,6 +7444,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
+#line 1797 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
 
@@ -7692,13 +7451,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1775 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1777 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
+#line 1799 "parser.yy"
+    { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
 
@@ -7706,6 +7458,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1780 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1823 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7713,6 +7465,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1825 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7720,13 +7472,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1784 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new CompositeExprNode2( build_opr2( OperatorNode::Range, (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
-    break;
-
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1786 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
+#line 1827 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1833 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7734,6 +7486,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+#line 1835 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7741,13 +7493,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1812 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1814 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+#line 1840 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1846 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
@@ -7755,6 +7507,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1820 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+#line 1851 "parser.yy"
+    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
@@ -7762,13 +7514,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+#line 1853 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1859 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Type; }
     break;
 
@@ -7776,6 +7528,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1833 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
+#line 1861 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
@@ -7783,6 +7535,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1838 "parser.yy"
-    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
+#line 1863 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
@@ -7790,6 +7542,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+#line 1868 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1870 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7797,40 +7556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Type; }
-    break;
-
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1848 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Ftype; }
-    break;
-
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1850 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Dtype; }
-    break;
-
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1857 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+#line 1875 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7839,9 +7563,37 @@
     break;
 
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1880 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+    break;
+
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1882 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1887 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
+    break;
+
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1890 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
+    break;
+
   case 495:
 
 /* Line 1806 of yacc.c  */
-#line 1867 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+#line 1892 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -7849,6 +7601,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1869 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1897 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7856,6 +7608,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1874 "parser.yy"
-    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
+#line 1899 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1901 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
@@ -7863,6 +7622,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1877 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
+#line 1906 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7870,6 +7629,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1879 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+#line 1908 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7877,40 +7636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1884 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1886 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1888 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1895 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1913 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7919,8 +7643,8 @@
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1905 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7929,8 +7653,8 @@
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1926 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7939,8 +7663,8 @@
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1918 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1931 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7949,8 +7673,8 @@
     break;
 
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 1923 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1936 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7960,15 +7684,15 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1933 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1946 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1943 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1956 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7977,8 +7701,8 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1961 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7987,8 +7711,8 @@
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1953 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1966 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7997,8 +7721,8 @@
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1961 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1974 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8007,8 +7731,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1979 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8017,15 +7741,15 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1976 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1989 "parser.yy"
     {}
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 1978 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1991 "parser.yy"
     {
 			if ( theTree ) {
@@ -8037,9 +7761,23 @@
     break;
 
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 2003 "parser.yy"
+    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+    break;
+
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 2008 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
   case 523:
 
 /* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
-    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+#line 2016 "parser.yy"
+    {}
     break;
 
@@ -8047,19 +7785,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 528:
-
-/* Line 1806 of yacc.c  */
-#line 2003 "parser.yy"
-    {}
-    break;
-
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 2005 "parser.yy"
+#line 2018 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -8068,8 +7792,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 2023 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -8079,8 +7803,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2016 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2029 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -8090,8 +7814,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 2044 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8101,8 +7825,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2037 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 2050 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8112,8 +7836,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2046 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2059 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8123,8 +7847,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2052 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2065 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8134,8 +7858,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2058 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2071 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8145,8 +7869,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2064 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2077 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8156,8 +7880,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2070 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8167,8 +7891,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2091 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8178,8 +7902,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2084 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2097 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8189,8 +7913,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2105 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8200,8 +7924,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2098 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2111 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8211,26 +7935,12 @@
     break;
 
-  case 547:
-
-/* Line 1806 of yacc.c  */
-#line 2113 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_opr2( OperatorNode::Range, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2123 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 553:
-
-/* Line 1806 of yacc.c  */
-#line 2130 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 554:
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2126 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 545:
 
 /* Line 1806 of yacc.c  */
@@ -8239,16 +7949,58 @@
     break;
 
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2151 "parser.yy"
+  case 548:
+
+/* Line 1806 of yacc.c  */
+#line 2143 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2149 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2164 "parser.yy"
     {}
     break;
 
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2165 "parser.yy"
+    {}
+    break;
+
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2166 "parser.yy"
+    {}
+    break;
+
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2167 "parser.yy"
+    {}
+    break;
+
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2202 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 561:
 
 /* Line 1806 of yacc.c  */
-#line 2152 "parser.yy"
-    {}
+#line 2205 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8256,6 +8008,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2153 "parser.yy"
-    {}
+#line 2207 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8263,33 +8015,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
-    {}
-    break;
-
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2189 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2192 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2194 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2199 "parser.yy"
+#line 2212 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8298,428 +8022,428 @@
     break;
 
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2217 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2222 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2224 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2226 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2231 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 569:
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+#line 2233 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2235 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2209 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2242 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2244 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2253 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2256 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2261 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2263 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2265 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2270 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2211 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2213 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2274 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2279 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2281 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2283 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2298 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2300 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2302 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2307 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2309 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2311 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2316 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2318 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2320 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2335 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2338 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2340 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2346 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2351 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2353 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2355 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2220 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2362 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2364 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2224 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2366 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2229 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2371 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2231 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2375 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2240 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2388 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2390 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2395 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2397 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2399 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2404 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2406 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2408 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2410 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2250 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2417 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2259 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2268 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2270 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2285 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2287 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2296 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2305 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2307 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2322 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2450 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2325 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2453 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2455 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2342 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2349 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2353 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2362 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2372 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2375 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2384 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2386 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2393 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2395 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2397 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2404 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
   case 632:
 
 /* Line 1806 of yacc.c  */
-#line 2406 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2437 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2440 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
+#line 2460 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8728,8 +8452,8 @@
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2452 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2465 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8738,618 +8462,653 @@
     break;
 
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2473 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2475 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2477 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2482 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2484 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 639:
 
 /* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+#line 2489 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2491 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2506 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2508 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2513 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2515 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2517 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2462 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2519 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2464 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2527 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2529 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2531 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2538 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2540 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2548 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2554 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2556 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2558 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2560 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2575 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2577 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2582 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2584 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2586 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2588 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2596 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2598 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2600 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2605 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2607 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2609 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2616 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2471 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2627 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2630 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2632 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2635 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2637 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2639 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2653 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2655 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2662 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2664 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2666 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2674 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2478 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2676 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2678 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2683 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2493 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2495 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2502 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2504 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2506 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2685 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2562 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2564 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2571 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2573 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2575 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2585 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2587 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2594 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2603 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2617 "parser.yy"
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2695 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2705 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2707 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2709 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2711 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2713 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2715 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2722 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2724 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2726 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2728 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2730 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2732 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2734 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2736 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2738 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2740 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2745 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2747 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2640 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2642 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2649 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2651 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2663 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2672 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2682 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2752 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2754 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2781 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2792 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2794 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2696 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2796 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2698 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2798 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2800 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2802 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2709 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2809 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2811 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2813 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2713 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2815 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2817 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2819 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2723 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2727 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2768 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2779 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2781 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2783 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2785 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2787 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2789 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2796 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
   case 743:
 
 /* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2824 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -9357,6 +9116,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+#line 2829 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
@@ -9364,6 +9123,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2802 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2831 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9371,20 +9130,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2804 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2806 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+#line 2833 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9392,6 +9137,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2816 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
+#line 2857 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -9399,26 +9144,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2818 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
-  case 754:
-
-/* Line 1806 of yacc.c  */
-#line 2844 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 755:
-
-/* Line 1806 of yacc.c  */
-#line 2846 "parser.yy"
+#line 2859 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9427,5 +9151,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9430 "Parser/parser.cc"
+#line 9154 "Parser/parser.cc"
       default: break;
     }
@@ -9658,5 +9382,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2849 "parser.yy"
+#line 2862 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/parser.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -262,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -271,8 +271,9 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 
@@ -280,5 +281,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 283 "Parser/parser.h"
+#line 284 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/Parser/parser.yy	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 08:15:57 2016
-// Update Count     : 1721
+// Last Modified On : Wed Aug 10 13:09:53 2016
+// Update Count     : 1844
 //
 
@@ -60,4 +60,9 @@
 std::stack< LinkageSpec::Type > linkageStack;
 TypedefTable typedefTable;
+
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
 %}
 
@@ -116,8 +121,9 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 }
@@ -128,8 +134,7 @@
 
 // expressions
-%type<constant> constant
+%type<en> constant
 %type<en> tuple							tuple_expression_list
-%type<op> ptrref_operator
-%type<en> unary_operator				assignment_operator
+%type<op> ptrref_operator				unary_operator				assignment_operator
 %type<en> primary_expression			postfix_expression			unary_expression
 %type<en> cast_expression				multiplicative_expression	additive_expression			shift_expression
@@ -138,9 +143,11 @@
 %type<en> constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			for_control_expression		assignment_opt
+//%type<en> argument_expression_list		argument_expression			for_control_expression		assignment_opt
+%type<en> argument_expression_list		argument_expression			assignment_opt
+%type<fctl> for_control_expression
 %type<en> subrange
 %type<en> asm_operands_opt asm_operands_list asm_operand
 %type<label> label_list
-%type<constant> asm_clobbers_list_opt
+%type<en> asm_clobbers_list_opt
 %type<flag> asm_volatile_opt
 
@@ -305,7 +312,7 @@
 constant:
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-INTEGERconstant									{ $$ = makeConstantInteger( *$1 ); }
-	| FLOATINGconstant							{ $$ = makeConstantFloat( *$1 ); }
-	| CHARACTERconstant							{ $$ = makeConstantChar( *$1 ); }
+INTEGERconstant									{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
 	;
 
@@ -332,6 +339,11 @@
 
 string_literal_list:									// juxtaposed strings are concatenated
-	STRINGliteral								{ $$ = makeConstantStr( *$1 ); }
-	| string_literal_list STRINGliteral			{ $$ = $1->appendstr( $2 ); }
+	STRINGliteral								{ $$ = build_constantStr( *$1 ); }
+	| string_literal_list STRINGliteral
+		{
+			appendStr( $1->get_constant()->get_value(), $2 );
+			delete $2;									// allocated by lexer
+			$$ = $1;
+		}
 	;
 
@@ -340,11 +352,11 @@
 primary_expression:
 	IDENTIFIER											// typedef name cannot be used as a variable name
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| zero_one
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| '(' comma_expression ')'
 		{ $$ = $2; }
 	| '(' compound_statement ')'						// GCC, lambda expression
-		{ $$ = new ValofExprNode( $2 ); }
+	{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
 	;
 
@@ -356,25 +368,26 @@
 		// little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
 		// equivalent to the old x[i,j].
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Index, $1, $4 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
 	| postfix_expression '(' argument_expression_list ')'
-		{ $$ = new CompositeExprNode( $1, $3 ); }
+		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ICR
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::IncrPost, $1 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
 	| postfix_expression DECR
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::DecrPost, $1 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
-		{ $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
+		{ $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
 	| postfix_expression '{' argument_expression_list '}' // CFA
 		{
-			Token fn; fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) );
+			Token fn;
+			fn.str = new std::string( "?{}" ); // location undefined
+			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
 		}
 	;
@@ -390,13 +403,4 @@
 		{ $$ = 0; }										// use default argument
 	| assignment_expression
-	| no_attr_identifier ':' assignment_expression
-		{ $$ = $3->set_argName( $1 ); }
-		// Only a list of no_attr_identifier_or_type_name is allowed in this context. However, there is insufficient
-		// look ahead to distinguish between this list of parameter names and a tuple, so the tuple form must be used
-		// with an appropriate semantic check.
-	| '[' push assignment_expression pop ']' ':' assignment_expression
-		{ $$ = $7->set_argName( $3 ); }
-	| '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression
-		{ $$ = $9->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 )))); }
 	;
 
@@ -408,15 +412,15 @@
 field:													// CFA, tuple field selector
 	no_attr_identifier
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
-		{ $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); }
 	| no_attr_identifier ARROW field
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); }
 	;
 
@@ -428,5 +432,5 @@
 		{ $$ = $1; }
 	| string_literal_list
-		{ $$ = $1; }
+		{ $$ = new ExpressionNode( $1 ); }
 	| EXTENSION cast_expression							// GCC
 		{ $$ = $2->set_extension( true ); }
@@ -435,44 +439,54 @@
 		//		{ * int X; } // CFA declaration of pointer to int
 	| ptrref_operator cast_expression					// CFA
-		{ $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) )
-											: (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); }
+		{
+			switch ( $1 ) {
+			  case OperKinds::AddressOf:
+				$$ = new ExpressionNode( build_addressOf( $2 ) );
+				break;
+			  case OperKinds::PointTo:
+				$$ = new ExpressionNode( build_unary_val( $1, $2 ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
 	| unary_operator cast_expression
-		{ $$ = new CompositeExprNode( $1, $2 ); }
+	  	{ $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
 	| ICR unary_expression
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::Incr, $2 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
 	| DECR unary_expression
-	  	{ $$ = new CompositeExprNode2( build_opr1( OperatorNode::Decr, $2 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
 	| SIZEOF unary_expression
-		{ $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); }
+		{ $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); }
 	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_sizeOftype( $3 ) ); }
+	| ALIGNOF unary_expression							// GCC, variable alignment
+		{ $$ = new ExpressionNode( build_alignOfexpr( $2 ) ); }
+	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
+		{ $$ = new ExpressionNode( build_alignOftype( $3 ) ); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-		{ $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); }
 	| ATTR_IDENTIFIER
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ) ); }
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), nullptr ) ); }
+	| ATTR_IDENTIFIER '(' argument_expression ')'
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), $3 ) ); }
 	| ATTR_IDENTIFIER '(' type_name ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 ) ); }
-	| ATTR_IDENTIFIER '(' argument_expression ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
-	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new CompositeExprNode2( build_alignOf( $2 ) ); }
-	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); }
 //	| ANDAND IDENTIFIER									// GCC, address of label
-//		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
+//		{ $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); }
 	;
 
 ptrref_operator:
-	'*'											{ $$ = OperatorNode::PointTo; }
-	| '&'										{ $$ = OperatorNode::AddressOf; }
+	'*'											{ $$ = OperKinds::PointTo; }
+	| '&'										{ $$ = OperKinds::AddressOf; }
 		// GCC, address of label must be handled by semantic check for ref,ref,label
-	| ANDAND									{ $$ = OperatorNode::And; }
+//	| ANDAND									{ $$ = OperKinds::And; }
 	;
 
 unary_operator:
-	'+'											{ $$ = new OperatorNode( OperatorNode::UnPlus ); }
-	| '-'										{ $$ = new OperatorNode( OperatorNode::UnMinus ); }
-	| '!'										{ $$ = new OperatorNode( OperatorNode::Neg ); }
-	| '~'										{ $$ = new OperatorNode( OperatorNode::BitNeg ); }
+	'+'											{ $$ = OperKinds::UnPlus; }
+	| '-'										{ $$ = OperKinds::UnMinus; }
+	| '!'										{ $$ = OperKinds::Neg; }
+	| '~'										{ $$ = OperKinds::BitNeg; }
 	;
 
@@ -480,7 +494,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	| '(' type_name_no_function ')' tuple
-		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	;
 
@@ -488,9 +502,9 @@
 	cast_expression
 	| multiplicative_expression '*' cast_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mul, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
 	| multiplicative_expression '/' cast_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Div, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
 	| multiplicative_expression '%' cast_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mod, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
 	;
 
@@ -498,7 +512,7 @@
 	multiplicative_expression
 	| additive_expression '+' multiplicative_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Plus, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
 	| additive_expression '-' multiplicative_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Minus, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
 	;
 
@@ -506,7 +520,7 @@
 	additive_expression
 	| shift_expression LS additive_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::LShift, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
 	| shift_expression RS additive_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::RShift, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
 	;
 
@@ -514,11 +528,11 @@
 	shift_expression
 	| relational_expression '<' shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::LThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
 	| relational_expression '>' shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::GThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
 	| relational_expression LE shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::LEThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
 	| relational_expression GE shift_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::GEThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
 	;
 
@@ -526,7 +540,7 @@
 	relational_expression
 	| equality_expression EQ relational_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Eq, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
 	| equality_expression NE relational_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Neq, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
 	;
 
@@ -534,5 +548,5 @@
 	equality_expression
 	| AND_expression '&' equality_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitAnd, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
 	;
 
@@ -540,5 +554,5 @@
 	AND_expression
 	| exclusive_OR_expression '^' AND_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Xor, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
 	;
 
@@ -546,5 +560,5 @@
 	exclusive_OR_expression
 	| inclusive_OR_expression '|' exclusive_OR_expression
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitOr, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
 	;
 
@@ -552,5 +566,5 @@
 	inclusive_OR_expression
 	| logical_AND_expression ANDAND inclusive_OR_expression
-		{ $$ = new CompositeExprNode2( build_and_or( $1, $3, true ) ); }
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); }
 	;
 
@@ -558,5 +572,5 @@
 	logical_AND_expression
 	| logical_OR_expression OROR logical_AND_expression
-		{ $$ = new CompositeExprNode2( build_and_or( $1, $3, false ) ); }
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); }
 	;
 
@@ -564,9 +578,10 @@
 	logical_OR_expression
 	| logical_OR_expression '?' comma_expression ':' conditional_expression
-		{ $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
+		// FIX ME: this hack computes $1 twice
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4 ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); }
 	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-		{ $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
 	;
 
@@ -578,16 +593,28 @@
 		// CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples
 	conditional_expression
-	| unary_expression '=' assignment_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
 	| unary_expression assignment_operator assignment_expression
-		{ $$ = new CompositeExprNode( $2, $1, $3 ); }
+		{ $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
 	| tuple assignment_opt								// CFA, tuple expression
-		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2 ); }
+		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
 	;
 
 assignment_expression_opt:
 	// empty
-		{ $$ = new NullExprNode; }
+		{ $$ = nullptr; }
 	| assignment_expression
+	;
+
+assignment_operator:
+	'='											{ $$ = OperKinds::Assign; }
+	| MULTassign								{ $$ = OperKinds::MulAssn; }
+	| DIVassign									{ $$ = OperKinds::DivAssn; }
+	| MODassign									{ $$ = OperKinds::ModAssn; }
+	| PLUSassign								{ $$ = OperKinds::PlusAssn; }
+	| MINUSassign								{ $$ = OperKinds::MinusAssn; }
+	| LSassign									{ $$ = OperKinds::LSAssn; }
+	| RSassign									{ $$ = OperKinds::RSAssn; }
+	| ANDassign									{ $$ = OperKinds::AndAssn; }
+	| ERassign									{ $$ = OperKinds::ERAssn; }
+	| ORassign									{ $$ = OperKinds::OrAssn; }
 	;
 
@@ -596,11 +623,11 @@
 		// comma_expression in new_identifier_parameter_array and new_abstract_array
 	'[' ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
+		{ $$ = new ExpressionNode( build_tuple() ); }
 	| '[' push assignment_expression pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), $3 ); }
+		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
 	;
 
@@ -611,22 +638,8 @@
 	;
 
-assignment_operator:
-	MULTassign									{ $$ = new OperatorNode( OperatorNode::MulAssn ); }
-	| DIVassign									{ $$ = new OperatorNode( OperatorNode::DivAssn ); }
-	| MODassign									{ $$ = new OperatorNode( OperatorNode::ModAssn ); }
-	| PLUSassign								{ $$ = new OperatorNode( OperatorNode::PlusAssn ); }
-	| MINUSassign								{ $$ = new OperatorNode( OperatorNode::MinusAssn ); }
-	| LSassign									{ $$ = new OperatorNode( OperatorNode::LSAssn ); }
-	| RSassign									{ $$ = new OperatorNode( OperatorNode::RSAssn ); }
-	| ANDassign									{ $$ = new OperatorNode( OperatorNode::AndAssn ); }
-	| ERassign									{ $$ = new OperatorNode( OperatorNode::ERAssn ); }
-	| ORassign									{ $$ = new OperatorNode( OperatorNode::OrAssn ); }
-	;
-
 comma_expression:
 	assignment_expression
-	| comma_expression ',' assignment_expression	// { $$ = (ExpressionNode *)$1->add_to_list( $3 ); }
-	//{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); }
-		{ $$ = new CompositeExprNode2( build_comma( $1, $3 ) ); }
+	| comma_expression ',' assignment_expression
+		{ $$ = new ExpressionNode( build_comma( $1, $3 ) ); }
 	;
 
@@ -650,7 +663,7 @@
 	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
 		{
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
-				(ExpressionNode *)( $2 )->set_link( $4 ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			$$ = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
 		}
 	;
@@ -710,12 +723,15 @@
 	IF '(' comma_expression ')' statement				%prec THEN
 		// explicitly deal with the shift/reduce conflict on if/else
-		{ $$ = new StatementNode( StatementNode::If, $3, $5 ); }
+		//{ $$ = new StatementNode( StatementNode::If, $3, $5 ); }
+		{ $$ = new StatementNode2( build_if( $3, $5, nullptr ) ); }
 	| IF '(' comma_expression ')' statement ELSE statement
-		{ $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }
+		//{ $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }
+		{ $$ = new StatementNode2( build_if( $3, $5, $7 ) ); }
 	| SWITCH '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		//{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		{ $$ = new StatementNode2( build_switch( $3, $5 ) ); }
 	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
@@ -726,8 +742,10 @@
 		}
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		//{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		{ $$ = new StatementNode2( build_switch( $3, $5 ) ); }
 	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			//StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
 			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
 		}
@@ -740,5 +758,5 @@
 	constant_expression							{ $$ = $1; }
 	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
 	| subrange											// CFA, subrange
 	;
@@ -810,17 +828,17 @@
 iteration_statement:
 	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode( StatementNode::While, $3, $5 ); }
+		{ $$ = new StatementNode2( build_while( $3, $5 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode( StatementNode::Do, $5, $2 ); }
+		{ $$ = new StatementNode2( build_while( $5, $2 ) ); }
 	| FOR '(' push for_control_expression ')' statement
-		{ $$ = new StatementNode( StatementNode::For, $4, $6 ); }
+		{ $$ = new StatementNode2( build_for( $4, $6 ) ); }
 	;
 
 for_control_expression:
 	comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtlExprNode( $1, $4, $6 ); }
+		{ $$ = new ForCtl( $1, $4, $6 ); }
 	| declaration comma_expression_opt ';' comma_expression_opt // C99
-		{ $$ = new ForCtlExprNode( $1, $2, $4 ); }
-	;
+		{ $$ = new ForCtl( $1, $2, $4 ); }
+ 	;
 
 jump_statement:
@@ -936,5 +954,5 @@
 		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); }
 	| ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
-	{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
+		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
 	;
 
@@ -960,7 +978,7 @@
 asm_operand:											// GCC
 	string_literal_list '(' constant_expression ')'
-		{ $$ = new AsmExprNode( 0, $1, $3 ); }
+		{ $$ = new ExpressionNode( build_asm( 0, $1, $3 ) ); }
 	| '[' constant_expression ']' string_literal_list '(' constant_expression ')'
-		{ $$ = new AsmExprNode( $2, $4, $6 ); }
+	{ $$ = new ExpressionNode( build_asm( $2, $4, $6 ) ); }
 	;
 
@@ -969,7 +987,7 @@
 		{ $$ = 0; }										// use default argument
 	| string_literal_list
-		{ $$ = $1; }
+		{ $$ = new ExpressionNode( $1 ); }
 	| asm_clobbers_list_opt ',' string_literal_list
-		{ $$ = (ConstantNode *)$1->set_link( $3 ); }
+	{ $$ = (ExpressionNode *)$1->set_link( new ExpressionNode( $3 ) ); }
 	;
 
@@ -1758,5 +1776,5 @@
 	designator_list ':'									// C99, CFA uses ":" instead of "="
 	| no_attr_identifier_or_type_name ':'				// GCC, field name
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	;
 
@@ -1764,24 +1782,20 @@
 	designator
 	| designator_list designator
-		{ $$ = (ExpressionNode *)( $1->set_link( $2 )); }
-	//| designator_list designator						{ $$ = new CompositeExprNode( $1, $2 ); }
+		{ $$ = (ExpressionNode *)( $1->set_link( $2 ) ); }
+	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
 	;
 
 designator:
-		// lexer ambiguity: designator ".0" is floating-point constant or designator for name 0 only ".0" and ".1"
-		// allowed => semantic check
-	FLOATINGconstant
-		{ $$ = new DesignatorNode( new VarRefNode( $1 ) ); }
-	| '.' no_attr_identifier_or_type_name				// C99, field name
-		{ $$ = new DesignatorNode( new VarRefNode( $2 ) ); }
+	'.' no_attr_identifier_or_type_name					// C99, field name
+		{ $$ = new ExpressionNode( build_varref( $2 ) ); }
 	| '[' push assignment_expression pop ']'			// C99, single array element
 		// assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple.
-		{ $$ = new DesignatorNode( $3, true ); }
+		{ $$ = $3; }
 	| '[' push subrange pop ']'							// CFA, multiple array elements
-		{ $$ = new DesignatorNode( $3, true ); }
+		{ $$ = $3; }
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
-		{ $$ = new DesignatorNode( new CompositeExprNode2( build_opr2( OperatorNode::Range, $3, $5 ) ), true ); }
+		{ $$ = new ExpressionNode( build_range( $3, $5 ) ); }
 	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
-		{ $$ = new DesignatorNode( $4 ); }
+		{ $$ = $4; }
 	;
 
@@ -1871,8 +1885,8 @@
 type_name_list:											// CFA
 	type_name
-		{ $$ = new TypeValueNode( $1 ); }
+		{ $$ = new ExpressionNode( build_typevalue( $1 ) ); }
 	| assignment_expression
 	| type_name_list ',' type_name
-		{ $$ = (ExpressionNode *)( $1->set_link( new TypeValueNode( $3 ))); }
+		{ $$ = (ExpressionNode *)( $1->set_link( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
 	| type_name_list ',' assignment_expression
 		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
@@ -2110,5 +2124,5 @@
 subrange:
 	constant_expression '~' constant_expression			// CFA, integer subrange
-		{ $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
 	;
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/SynTree/Expression.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug  3 17:06:51 2016
-// Update Count     : 45
+// Last Modified On : Fri Aug  5 14:23:56 2016
+// Update Count     : 49
 //
 
@@ -529,5 +529,5 @@
 }
 
-RangeExpr::RangeExpr( ConstantExpr *low, ConstantExpr *high ) : low( low ), high( high ) {}
+RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
 RangeExpr::RangeExpr( const RangeExpr &other ) : low( other.low->clone() ), high( other.high->clone() ) {}
 void RangeExpr::print( std::ostream &os, int indent ) const {
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/SynTree/Expression.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug  3 17:08:44 2016
-// Update Count     : 27
+// Last Modified On : Sat Aug  6 08:52:53 2016
+// Update Count     : 35
 //
 
@@ -28,5 +28,5 @@
 class Expression {
   public:
-	Expression(Expression *_aname = 0 );
+	Expression( Expression *_aname = nullptr );
 	Expression( const Expression &other );
 	virtual ~Expression();
@@ -70,6 +70,6 @@
 typedef std::map< UniqueId, ParamEntry > InferredParams;
 
-/// ApplicationExpr represents the application of a function to a set of parameters.  This is the
-/// result of running an UntypedExpr through the expression analyzer.
+/// ApplicationExpr represents the application of a function to a set of parameters.  This is the result of running an
+/// UntypedExpr through the expression analyzer.
 class ApplicationExpr : public Expression {
   public:
@@ -93,12 +93,12 @@
 };
 
-/// UntypedExpr represents the application of a function to a set of parameters, but where the
-/// particular overload for the function name has not yet been determined.  Most operators are
-/// converted into functional form automatically, to permit operator overloading.
+/// UntypedExpr represents the application of a function to a set of parameters, but where the particular overload for
+/// the function name has not yet been determined.  Most operators are converted into functional form automatically, to
+/// permit operator overloading.
 class UntypedExpr : public Expression {
   public:
-	UntypedExpr( Expression *function, Expression *_aname = 0 );
+	UntypedExpr( Expression *function, Expression *_aname = nullptr );
 	UntypedExpr( const UntypedExpr &other );
-	UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = 0 );
+	UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = nullptr );
 	virtual ~UntypedExpr();
 
@@ -124,5 +124,5 @@
 class NameExpr : public Expression {
   public:
-	NameExpr( std::string name, Expression *_aname = 0 );
+	NameExpr( std::string name, Expression *_aname = nullptr );
 	NameExpr( const NameExpr &other );
 	virtual ~NameExpr();
@@ -145,5 +145,5 @@
 class AddressExpr : public Expression {
   public:
-	AddressExpr( Expression *arg, Expression *_aname = 0 );
+	AddressExpr( Expression *arg, Expression *_aname = nullptr );
 	AddressExpr( const AddressExpr &other );
 	virtual ~AddressExpr();
@@ -181,6 +181,6 @@
 class CastExpr : public Expression {
   public:
-	CastExpr( Expression *arg, Expression *_aname = 0 );
-	CastExpr( Expression *arg, Type *toType, Expression *_aname = 0 );
+	CastExpr( Expression *arg, Expression *_aname = nullptr );
+	CastExpr( Expression *arg, Type *toType, Expression *_aname = nullptr );
 	CastExpr( const CastExpr &other );
 	virtual ~CastExpr();
@@ -200,5 +200,5 @@
 class UntypedMemberExpr : public Expression {
   public:
-	UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = 0 );
+	UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr );
 	UntypedMemberExpr( const UntypedMemberExpr &other );
 	virtual ~UntypedMemberExpr();
@@ -221,5 +221,5 @@
 class MemberExpr : public Expression {
   public:
-	MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = 0 );
+	MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = nullptr );
 	MemberExpr( const MemberExpr &other );
 	virtual ~MemberExpr();
@@ -242,5 +242,5 @@
 class VariableExpr : public Expression {
   public:
-	VariableExpr( DeclarationWithType *var, Expression *_aname = 0 );
+	VariableExpr( DeclarationWithType *var, Expression *_aname = nullptr );
 	VariableExpr( const VariableExpr &other );
 	virtual ~VariableExpr();
@@ -260,5 +260,5 @@
 class ConstantExpr : public Expression {
   public:
-	ConstantExpr( Constant constant, Expression *_aname = 0 );
+	ConstantExpr( Constant constant, Expression *_aname = nullptr );
 	ConstantExpr( const ConstantExpr &other );
 	virtual ~ConstantExpr();
@@ -278,7 +278,7 @@
 class SizeofExpr : public Expression {
   public:
-	SizeofExpr( Expression *expr, Expression *_aname = 0 );
+	SizeofExpr( Expression *expr, Expression *_aname = nullptr );
 	SizeofExpr( const SizeofExpr &other );
-	SizeofExpr( Type *type, Expression *_aname = 0 );
+	SizeofExpr( Type *type, Expression *_aname = nullptr );
 	virtual ~SizeofExpr();
 
@@ -303,7 +303,7 @@
 class AlignofExpr : public Expression {
   public:
-	AlignofExpr( Expression *expr, Expression *_aname = 0 );
+	AlignofExpr( Expression *expr, Expression *_aname = nullptr );
 	AlignofExpr( const AlignofExpr &other );
-	AlignofExpr( Type *type, Expression *_aname = 0 );
+	AlignofExpr( Type *type, Expression *_aname = nullptr );
 	virtual ~AlignofExpr();
 
@@ -328,5 +328,5 @@
 class UntypedOffsetofExpr : public Expression {
   public:
-	UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = 0 );
+	UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = nullptr );
 	UntypedOffsetofExpr( const UntypedOffsetofExpr &other );
 	virtual ~UntypedOffsetofExpr();
@@ -349,5 +349,5 @@
 class OffsetofExpr : public Expression {
   public:
-	OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = 0 );
+	OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = nullptr );
 	OffsetofExpr( const OffsetofExpr &other );
 	virtual ~OffsetofExpr();
@@ -390,7 +390,7 @@
 class AttrExpr : public Expression {
   public:
-	AttrExpr(Expression *attr, Expression *expr, Expression *_aname = 0 );
+	AttrExpr(Expression *attr, Expression *expr, Expression *_aname = nullptr );
 	AttrExpr( const AttrExpr &other );
-	AttrExpr( Expression *attr, Type *type, Expression *_aname = 0 );
+	AttrExpr( Expression *attr, Type *type, Expression *_aname = nullptr );
 	virtual ~AttrExpr();
 
@@ -418,5 +418,5 @@
 class LogicalExpr : public Expression {
   public:
-	LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = 0 );
+	LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = nullptr );
 	LogicalExpr( const LogicalExpr &other );
 	virtual ~LogicalExpr();
@@ -441,5 +441,5 @@
 class ConditionalExpr : public Expression {
   public:
-	ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = 0 );
+	ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = nullptr );
 	ConditionalExpr( const ConditionalExpr &other );
 	virtual ~ConditionalExpr();
@@ -465,5 +465,5 @@
 class CommaExpr : public Expression {
   public:
-	CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = 0 );
+	CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = nullptr );
 	CommaExpr( const CommaExpr &other );
 	virtual ~CommaExpr();
@@ -486,5 +486,5 @@
 class TupleExpr : public Expression {
   public:
-	TupleExpr( Expression *_aname = 0 );
+	TupleExpr( Expression *_aname = nullptr );
 	TupleExpr( const TupleExpr &other );
 	virtual ~TupleExpr();
@@ -504,6 +504,6 @@
 class SolvedTupleExpr : public Expression {
   public:
-	SolvedTupleExpr( Expression *_aname = 0 ) : Expression( _aname ) {}
-	SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = 0 );
+	SolvedTupleExpr( Expression *_aname = nullptr ) : Expression( _aname ) {}
+	SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = nullptr );
 	SolvedTupleExpr( const SolvedTupleExpr &other );
 	virtual ~SolvedTupleExpr() {}
@@ -598,5 +598,5 @@
 class UntypedValofExpr : public Expression {
   public:
-	UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {}
+	UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}
 	UntypedValofExpr( const UntypedValofExpr & other );
 	virtual ~UntypedValofExpr();
@@ -637,11 +637,11 @@
 class RangeExpr : public Expression {
   public:
-	RangeExpr( ConstantExpr *low, ConstantExpr *high );
+	RangeExpr( Expression *low, Expression *high );
 	RangeExpr( const RangeExpr &other );
 
-	ConstantExpr * get_low() const { return low.get(); }
-	ConstantExpr * get_high() const { return high.get(); }
-	RangeExpr * set_low( ConstantExpr *low ) { RangeExpr::low.reset( low ); return this; }
-	RangeExpr * set_high( ConstantExpr *high ) { RangeExpr::high.reset( high ); return this; }
+	Expression * get_low() const { return low; }
+	Expression * get_high() const { return high; }
+	RangeExpr * set_low( Expression *low ) { RangeExpr::low = low; return this; }
+	RangeExpr * set_high( Expression *high ) { RangeExpr::high = high; return this; }
 
 	virtual RangeExpr *clone() const { return new RangeExpr( *this ); }
@@ -650,5 +650,5 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
-	std::unique_ptr<ConstantExpr> low, high;
+	Expression *low, *high;
 };
 
Index: src/SynTree/Label.h
===================================================================
--- src/SynTree/Label.h	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/SynTree/Label.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Wed Jun 8 12:53:12 2016
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jun 8 12:53:28 2016
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Aug  7 14:44:29 2016
+// Update Count     : 2
 //
 
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/driver/cfa.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  2 12:23:11 2016
-// Update Count     : 147
+// Last Modified On : Sat Aug  6 16:14:55 2016
+// Update Count     : 148
 //
 
@@ -87,5 +87,5 @@
 	bool cpp_flag = false;								// -E or -M flag, preprocessor only
 	bool std_flag = false;								// -std= flag
-	bool noincstd_flag = false;							// -no-include-std= flag
+	bool noincstd_flag = false;							// -no-include-stdhdr= flag
 	bool debugging __attribute(( unused )) = false;		// -g flag
 
@@ -145,6 +145,6 @@
 			} else if ( arg == "-nohelp" ) {
 				help = false;							// strip the nohelp flag
-			} else if ( arg == "-no-include-std" ) {
-				noincstd_flag = true;					// strip the no-include-std flag
+			} else if ( arg == "-no-include-stdhdr" ) {
+				noincstd_flag = true;					// strip the no-include-stdhdr flag
 			} else if ( arg == "-compiler" ) {
 				// use the user specified compiler
Index: src/examples/gc_no_raii/src/gc.h
===================================================================
--- src/examples/gc_no_raii/src/gc.h	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/examples/gc_no_raii/src/gc.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -7,9 +7,15 @@
 static inline gcpointer(T) gcmalloc()
 {
-    gcpointer(T) ptr;
-    void* address = gc_allocate(sizeof(T));
-    (&ptr){ address };
-    ctor(&ptr, address);
+    gcpointer(T) ptr = { gc_allocate(sizeof(T)) };
+    ptr{};
     gc_conditional_collect();
     return ptr;
 }
+
+forall(otype T)
+static inline void gcmalloc(gcpointer(T)* ptr)
+{
+	ptr{ gc_allocate(sizeof(T)) };
+      (*ptr){};
+      gc_conditional_collect();
+}
Index: src/examples/gc_no_raii/test/gctest.c
===================================================================
--- src/examples/gc_no_raii/test/gctest.c	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/examples/gc_no_raii/test/gctest.c	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -8,4 +8,7 @@
 	sout | "Bonjour au monde!\n";
 
-	gcpointer(int) anInt = gcmalloc();
+	for(int i = 0; i < 1000000; i++) {
+		gcpointer(int) anInt;
+		gcmalloc(&anInt);
+	}
 }
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/libcfa/Makefile.am	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:54:01 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Tue Aug  2 12:17:23 2016
-## Update Count     : 196
+## Last Modified On : Sat Aug  6 16:15:15 2016
+## Update Count     : 197
 ###############################################################################
 
@@ -53,5 +53,5 @@
 	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
 
-CFLAGS = -quiet -no-include-std -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
+CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
 CC = ${abs_top_srcdir}/src/driver/cfa
 
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/libcfa/Makefile.in	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -136,5 +136,5 @@
 CFA_LIBDIR = @CFA_LIBDIR@
 CFA_PREFIX = @CFA_PREFIX@
-CFLAGS = -quiet -no-include-std -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
+CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
Index: src/main.cc
===================================================================
--- src/main.cc	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/main.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 15:23:11 2016
-// Update Count     : 209
+// Last Modified On : Sat Aug  6 16:17:41 2016
+// Update Count     : 210
 //
 
@@ -193,5 +193,5 @@
 			input = fopen( argv[ optind ], "r" );
 			if ( ! input ) {
-				std::cout << "Error: can't open " << argv[ optind ] << std::endl;
+				std::cout << "Error: cannot open " << argv[ optind ] << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -219,5 +219,5 @@
 			FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
 			if ( builtins == NULL ) {
-				std::cerr << "Error: can't open builtins.cf" << std::endl;
+				std::cerr << "Error: cannot open builtins.cf" << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -227,5 +227,5 @@
 			FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
 			if ( extras == NULL ) {
-				std::cerr << "Error: can't open extras.cf" << std::endl;
+				std::cerr << "Error: cannot open extras.cf" << std::endl;
 				exit( EXIT_FAILURE );
 			} // if
@@ -236,5 +236,5 @@
 				FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
 				if ( prelude == NULL ) {
-					std::cerr << "Error: can't open prelude.cf" << std::endl;
+					std::cerr << "Error: cannot open prelude.cf" << std::endl;
 					exit( EXIT_FAILURE );
 				} // if
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/tests/Makefile.am	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 09:08:15 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Sat Jul  9 11:23:24 2016
-## Update Count     : 35
+## Last Modified On : Tue Aug  9 15:34:57 2016
+## Update Count     : 38
 ###############################################################################
 
@@ -27,14 +27,14 @@
 
 all-local :
-	+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
+	@+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
 
 all-tests :
-	+python test.py --all
+	@+python test.py --all		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
-	-rm -f ${EXTRA_PROGRAMS}
+	rm -f ${EXTRA_PROGRAMS}
 
 list :
-	+python test.py --list
+	@+python test.py --list
 
 constant0-1DP : constant0-1.c
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/tests/Makefile.in	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -635,14 +635,14 @@
 
 all-local :
-	+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
+	@+python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
 
 all-tests :
-	+python test.py --all
+	@+python test.py --all		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
-	-rm -f ${EXTRA_PROGRAMS}
+	rm -f ${EXTRA_PROGRAMS}
 
 list :
-	+python test.py --list
+	@+python test.py --list
 
 constant0-1DP : constant0-1.c
Index: src/tests/labelledExit.c
===================================================================
--- src/tests/labelledExit.c	(revision f18a7116aa1cfebf9345699d96b99221a153dc0f)
+++ src/tests/labelledExit.c	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -1,2 +1,17 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// labelledExit.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 10 07:29:39 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 10 07:30:15 2016
+// Update Count     : 1
+// 
+
 int foo() {
   	int i;
@@ -136,14 +151,12 @@
 	else
 		i += 1;
-
 }
 
-int main(int argc, char const *argv[]) {
+int main( int argc, char const *argv[] ) {
 	/* code */
-	return 0;
 }
 
 // Local Variables: //
 // tab-width: 4 //
-// compile-command: "cfa LabelledExit.c" //
+// compile-command: "cfa labelledExit.c" //
 // End: //
