Index: .gitignore
===================================================================
--- .gitignore	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ .gitignore	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -29,6 +29,6 @@
 src/driver/cfa-cpp
 
-src/libcfa/builtins.cf
-src/libcfa/extras.cf
+src/prelude/builtins.cf
+src/prelude/extras.cf
 src/libcfa/libcfa-prelude.c
 
Index: Jenkinsfile
===================================================================
--- Jenkinsfile	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ Jenkinsfile	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -23,5 +23,5 @@
 		//escapes the sandbox
 		//Also specify the compiler by hand
-		sh "./configure CXX=${currentCC.cpp_cc} CXXFLAGS=${flags} CFAFLAGS=${flags} --with-backend-compiler=${currentCC.cfa_backend_cc} --prefix=${install_dir} --enable-silent-rules --quiet"
+		sh "./configure CXX=${currentCC.cpp_cc} ${flags} --with-backend-compiler=${currentCC.cfa_backend_cc} --prefix=${install_dir} --enable-silent-rules --quiet"
 
 		//Compile the project
@@ -33,5 +33,6 @@
 		dir ('src/tests') {
 			if (full_build) {
-				sh 'make all-tests'
+				sh 'make all-tests debug=yes'
+				sh 'make all-tests debug=no'
 			}
 			else {
@@ -166,5 +167,12 @@
 
 				bIsFullBuild = isFullBuild == 'true'
-				architectureFlag = buildArchitecture == '64-bit' ? '-m64' : (buildArchitecture == '32-bit' ? '-m32' : 'ERROR')
+				architectureFlag = ''
+				if (buildArchitecture == '64-bit') {
+					architectureFlag = '--host=x86_64 CXXFLAGS="-m64" CFAFLAGS="-m64"'
+				} else if (buildArchitecture == '32-bit'){
+					architectureFlag = '--host=i386 CXXFLAGS="-m32" CFAFLAGS="-m32"'
+				} else {
+					architectureFlag = 'ERROR'
+				}
 
 				echo "FULL BUILD = ${isFullBuild}\nArchitecture = ${buildArchitecture} (flag ${architectureFlag})"
Index: Makefile.am
===================================================================
--- Makefile.am	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -11,10 +11,10 @@
 ## Created On       : Sun May 31 22:14:18 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Fri Jun 17 14:56:18 2016
-## Update Count     : 13
+## Last Modified On : Wed Dec 14 14:20:48 2016
+## Update Count     : 15
 ###############################################################################
 
 AUTOMAKE_OPTIONS = foreign		# do not require all the GNU file names
-SUBDIRS = src/driver src src/libcfa	# order important, src before libcfa because cfa-cpp used to build prelude
+SUBDIRS = src/driver src src/prelude src/libcfa # order important, src before prelude because cfa-cpp used to build prelude
 EXTRA_DIST = Docs			# non-source files
 BACKEND_CC = @BACKEND_CC@		# C compiler used to compile Cforall programs, versus C++ compiler used to build cfa command
Index: Makefile.in
===================================================================
--- Makefile.in	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -35,10 +35,12 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
 	$(top_srcdir)/configure INSTALL automake/compile \
-	automake/depcomp automake/install-sh automake/missing \
-	automake/ylwrap
+	automake/config.guess automake/config.sub automake/depcomp \
+	automake/install-sh automake/missing automake/ylwrap
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -124,4 +126,7 @@
 BACKEND_CC = @BACKEND_CC@		# C compiler used to compile Cforall programs, versus C++ compiler used to build cfa command
 CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
 CCDEPMODE = @CCDEPMODE@
 CFA_BACKEND_CC = @CFA_BACKEND_CC@
@@ -158,4 +163,5 @@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -189,5 +195,9 @@
 am__untar = @am__untar@
 bindir = @bindir@
+build = @build@
 build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
 builddir = @builddir@
 datadir = @datadir@
@@ -196,5 +206,9 @@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+host = @host@
 host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
 htmldir = @htmldir@
 includedir = @includedir@
@@ -221,5 +235,5 @@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign		# do not require all the GNU file names
-SUBDIRS = src/driver src src/libcfa	# order important, src before libcfa because cfa-cpp used to build prelude
+SUBDIRS = src/driver src src/prelude src/libcfa # order important, src before prelude because cfa-cpp used to build prelude
 EXTRA_DIST = Docs			# non-source files
 MAINTAINERCLEANFILES = lib/* bin/* src/examples/.deps/* src/tests/.deps/* src/tests/.out/*
Index: aclocal.m4
===================================================================
--- aclocal.m4	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ aclocal.m4	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -60,4 +60,26 @@
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
+# Figure out how to run the assembler.                      -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_PROG_AS
+# ----------
+AC_DEFUN([AM_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+AC_ARG_VAR([CCAS],      [assembler compiler command (defaults to CC)])
+AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+])
+
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
@@ -113,4 +135,44 @@
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_COND_IF                                            -*- Autoconf -*-
+
+# Copyright (C) 2008, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE.  Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+	   [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+  m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+  $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
 ])
 
Index: automake/config.guess
===================================================================
--- automake/config.guess	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ automake/config.guess	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,1 @@
+/usr/share/automake-1.11/config.guess
Index: automake/config.sub
===================================================================
--- automake/config.sub	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ automake/config.sub	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,1 @@
+/usr/share/automake-1.11/config.sub
Index: configure
===================================================================
--- configure	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ configure	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -616,4 +616,9 @@
 YFLAGS
 YACC
+am__fastdepCCAS_FALSE
+am__fastdepCCAS_TRUE
+CCASDEPMODE
+CCASFLAGS
+CCAS
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
@@ -639,4 +644,13 @@
 CXXFLAGS
 CXX
+MACHINE_TYPE
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
 CFA_FLAGS
 CFA_LIBDIR
@@ -644,4 +658,10 @@
 CFA_INCDIR
 CFA_PREFIX
+BUILD_NO_LIB_FALSE
+BUILD_NO_LIB_TRUE
+BUILD_DEBUG_FALSE
+BUILD_DEBUG_TRUE
+BUILD_RELEASE_FALSE
+BUILD_RELEASE_TRUE
 CFA_BACKEND_CC
 BACKEND_CC
@@ -720,4 +740,6 @@
 enable_maintainer_mode
 with_backend_compiler
+enable_target_release
+enable_target_debug
 enable_dependency_tracking
 '
@@ -733,4 +755,6 @@
 CC
 CFLAGS
+CCAS
+CCASFLAGS
 YACC
 YFLAGS
@@ -1339,4 +1363,8 @@
   --program-suffix=SUFFIX            append SUFFIX to installed program names
   --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
 _ACEOF
 fi
@@ -1356,4 +1384,6 @@
   --disable-maintainer-mode  disable make rules and dependencies not useful
 			  (and sometimes confusing) to the casual installer
+  --enable-target-release Build and install the release target
+  --enable-target-debug   Build and install the debug target
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
@@ -1374,4 +1404,6 @@
   CC          C compiler command
   CFLAGS      C compiler flags
+  CCAS        assembler compiler command (defaults to CC)
+  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
   YACC        The `Yet Another Compiler Compiler' implementation to use.
               Defaults to the first program found out of: `bison -y', `byacc',
@@ -3079,4 +3111,93 @@
 
 
+
+
+# Check whether --enable-target-release was given.
+if test "${enable_target_release+set}" = set; then :
+  enableval=$enable_target_release;
+fi
+
+# Check whether --enable-target-debug was given.
+if test "${enable_target_debug+set}" = set; then :
+  enableval=$enable_target_debug;
+fi
+
+
+case "$enable_target_release" in
+	yes)
+		case "$enable_target_debug" in
+			yes)
+				build_release="yes"
+				build_debug="yes"
+				;;
+			no)
+				build_release="yes"
+				build_debug="no"
+				;;
+			*)
+				build_release="yes"
+				build_debug="no"
+				;;
+		esac
+		;;
+	no)
+		case "$enable_target_debug" in
+			yes)
+				build_release="no"
+				build_debug="yes"
+				;;
+			no)
+				build_release="no"
+				build_debug="no"
+				;;
+			*)
+				build_release="no"
+				build_debug="yes"
+				;;
+		esac
+		;;
+	*)
+		case "$enable_target_debug" in
+			yes)
+				build_release="no"
+				build_debug="yes"
+				;;
+			no)
+				build_release="yes"
+				build_debug="no"
+				;;
+			*)
+				build_release="yes"
+				build_debug="yes"
+				;;
+		esac
+		;;
+esac
+
+ if test "x$build_release" = "xyes"; then
+  BUILD_RELEASE_TRUE=
+  BUILD_RELEASE_FALSE='#'
+else
+  BUILD_RELEASE_TRUE='#'
+  BUILD_RELEASE_FALSE=
+fi
+
+ if test "x$build_debug" = "xyes"; then
+  BUILD_DEBUG_TRUE=
+  BUILD_DEBUG_FALSE='#'
+else
+  BUILD_DEBUG_TRUE='#'
+  BUILD_DEBUG_FALSE=
+fi
+
+ if test "x$build_release$build_debug" = "xnono"; then
+  BUILD_NO_LIB_TRUE=
+  BUILD_NO_LIB_FALSE='#'
+else
+  BUILD_NO_LIB_TRUE='#'
+  BUILD_NO_LIB_FALSE=
+fi
+
+
 if test "x$prefix" = "xNONE"; then
 	cfa_prefix=${ac_default_prefix}
@@ -3137,4 +3258,78 @@
 
 CFA_FLAGS=${CFAFLAGS}
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+MACHINE_TYPE=$host_cpu
 
 
@@ -4503,4 +4698,137 @@
   am__fastdepCC_TRUE='#'
   am__fastdepCC_FALSE=
+fi
+
+
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CCAS_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CCAS_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CCAS_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+  am__fastdepCCAS_TRUE=
+  am__fastdepCCAS_FALSE='#'
+else
+  am__fastdepCCAS_TRUE='#'
+  am__fastdepCCAS_FALSE=
 fi
 
@@ -5856,5 +6184,5 @@
 
 
-ac_config_files="$ac_config_files Makefile src/driver/Makefile src/Makefile src/examples/Makefile src/tests/Makefile src/libcfa/Makefile"
+ac_config_files="$ac_config_files Makefile src/driver/Makefile src/Makefile src/examples/Makefile src/tests/Makefile src/prelude/Makefile src/libcfa/Makefile"
 
 
@@ -5980,4 +6308,16 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_RELEASE_TRUE}" && test -z "${BUILD_RELEASE_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_RELEASE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_DEBUG_TRUE}" && test -z "${BUILD_DEBUG_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_DEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_NO_LIB_TRUE}" && test -z "${BUILD_NO_LIB_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_NO_LIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
@@ -5990,4 +6330,8 @@
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
@@ -6603,4 +6947,5 @@
     "src/examples/Makefile") CONFIG_FILES="$CONFIG_FILES src/examples/Makefile" ;;
     "src/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/tests/Makefile" ;;
+    "src/prelude/Makefile") CONFIG_FILES="$CONFIG_FILES src/prelude/Makefile" ;;
     "src/libcfa/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcfa/Makefile" ;;
 
@@ -7333,4 +7678,22 @@
 
 
+if test -z "$BUILD_RELEASE_TRUE"; then :
+  if test -z "$BUILD_DEBUG_TRUE"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Building libcfa for target: release & debug" >&5
+$as_echo "$as_me: Building libcfa for target: release & debug" >&6;}
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Building libcfa for target: release" >&5
+$as_echo "$as_me: Building libcfa for target: release" >&6;}
+fi
+else
+  if test -z "$BUILD_DEBUG_TRUE"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Building libcfa for target: debug" >&5
+$as_echo "$as_me: Building libcfa for target: debug" >&6;}
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Running cfa without libcfa" >&5
+$as_echo "$as_me: Running cfa without libcfa" >&6;}
+fi
+fi
+
 # Final text
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cforall configuraton completed. Type \"make -j 8 install\"." >&5
Index: configure.ac
===================================================================
--- configure.ac	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ configure.ac	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -53,4 +53,64 @@
 AC_SUBST(CFA_BACKEND_CC)
 
+
+
+AC_ARG_ENABLE(target-release, AS_HELP_STRING([--enable-target-release], [Build and install the release target]))
+AC_ARG_ENABLE(target-debug, AS_HELP_STRING([--enable-target-debug], [Build and install the debug target]))
+
+case "$enable_target_release" in
+	yes)
+		case "$enable_target_debug" in
+			yes)
+				build_release="yes"
+				build_debug="yes"
+				;;
+			no)
+				build_release="yes"
+				build_debug="no"
+				;;
+			*)
+				build_release="yes"
+				build_debug="no"
+				;;
+		esac
+		;;
+	no)
+		case "$enable_target_debug" in
+			yes)
+				build_release="no"
+				build_debug="yes"
+				;;
+			no)
+				build_release="no"
+				build_debug="no"
+				;;
+			*)
+				build_release="no"
+				build_debug="yes"
+				;;
+		esac
+		;;
+	*)
+		case "$enable_target_debug" in
+			yes)
+				build_release="no"
+				build_debug="yes"
+				;;
+			no)
+				build_release="yes"
+				build_debug="no"
+				;;
+			*)
+				build_release="yes"
+				build_debug="yes"
+				;;
+		esac
+		;;
+esac
+
+AM_CONDITIONAL([BUILD_RELEASE], [test "x$build_release" = "xyes"])
+AM_CONDITIONAL([BUILD_DEBUG], [test "x$build_debug" = "xyes"])
+AM_CONDITIONAL([BUILD_NO_LIB], [test "x$build_release$build_debug" = "xnono"])
+
 if test "x$prefix" = "xNONE"; then
 	cfa_prefix=${ac_default_prefix}
@@ -87,8 +147,12 @@
 AC_DEFINE_UNQUOTED(CFA_FLAGS, "${CFAFLAGS}", [compilation flags for cfa libraries and test programs.])
 AC_SUBST(CFA_FLAGS, ${CFAFLAGS})
+
+AC_CANONICAL_HOST
+AC_SUBST([MACHINE_TYPE],[$host_cpu])
 
 # Checks for programs.
 AC_PROG_CXX
 AC_PROG_CC
+AM_PROG_AS
 AM_PROG_CC_C_O	# deprecated
 # These are often not installed and people miss seeing the "no", so stop the configure.
@@ -128,4 +192,5 @@
 	src/examples/Makefile
 	src/tests/Makefile
+	src/prelude/Makefile
 	src/libcfa/Makefile
 	])
@@ -133,4 +198,12 @@
 AC_OUTPUT
 
+AM_COND_IF([BUILD_RELEASE],
+	[AM_COND_IF([BUILD_DEBUG],
+		[AC_MSG_NOTICE(Building libcfa for target: release & debug)],
+		[AC_MSG_NOTICE(Building libcfa for target: release)])],
+	[AM_COND_IF([BUILD_DEBUG],
+		[AC_MSG_NOTICE(Building libcfa for target: debug)],
+		[AC_MSG_NOTICE(Running cfa without libcfa)])])
+
 # Final text
 AC_MSG_RESULT(Cforall configuraton completed. Type "make -j 8 install".)
Index: doc/proposals/NOTE.txt
===================================================================
--- doc/proposals/NOTE.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ doc/proposals/NOTE.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,1 @@
+PDFs created using www.markdowntopdf.com
Index: doc/proposals/closure.md
===================================================================
--- doc/proposals/closure.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ doc/proposals/closure.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,150 @@
+## Light-weight Closures for Cforall ##
+
+A core capability of the Cforall type system is the ability to use 
+monomorphic specializations of polymorphic functions seamlessly and 
+invisibly to the user programmer, primarily in type assertions:
+
+    forall(otype T | { T ?+?(T, T); })
+    T double( T x ) { return x + x; }
+
+    forall(otype R | { R double(R); })
+    R quadruple( R y ) { return double( double( y ) ); }
+
+    void fred() {
+        float magic = quadruple( 10.5f );
+    }
+
+In the example above, `R` and `T` are both bound to `float`, and the 
+`double` type assertion on `quadruple` is satisfied by monomorphizing the 
+polymorphic `double` function to `float` (using the builtin `float` addition 
+operator). The existing implementation uses GCC nested functions to 
+implement this monomorphization, as in the following (much simplified) 
+generated code:
+
+    void double(size_t _sizeof_T,  
+                void (*_assign_T)(void*, void*),
+                void (*_add_T)(void*, void*, void*),
+                void *_rtn, 
+                void *x ) {
+        _add_T( _rtn, x, x );
+    }
+
+    void quadruple(size_t _sizeof_R,  
+                   void (*_assign_R)(void*, void*),
+                   void (*_double_R)(void*, void*), 
+                   void *_rtn,
+                   void *y ) {
+        void *_tmp0 = alloca(_sizeof_R);
+        _double_R( _rtn, (_double_R( _tmp0, y ), _tmp0) );
+     }
+
+     void fred() {
+         // nested thunk to adapt double() to _double_R()
+         void _thunk0( void *_rtn, void *x ) {
+             double( sizeof(float), _builtin_assign_float, 
+                     _builtin_add_float,
+                     _rtn, x );
+         }
+
+         float magic;
+         float _tmp1 = 10.5f;
+         quadruple( sizeof(float), _builtin_assign_float, _thunk0,
+                    &magic, &_tmp1 );
+     }
+
+Now, in the example above, `_thunk0` could be hoisted to static scope, as 
+`sizeof(float)`, `_builtin_assign_float`, and `builtin_add_float` all exist 
+in static scope. In general, however, these parameters which are used to 
+monomorphize polymorphic functions could be local to the calling scope (e.g. 
+if `fred()` was a polymorphic function itself, or had a local overload of 
+`float` addition).
+
+The crux of the issue is that these monomorphization thunks need a lexical 
+link to their creation context, but C's standard calling convention provides 
+no way to include such a lexical link. GCC fixes this for nested functions 
+by placing an executable trampoline on the stack to modify the calling 
+convention; this trampoline has the standard calling convention, and calls 
+the nested function after setting up the lexical link. This prevents the 
+stack from being marked as non-executable, opening a variety of potential 
+security vulnerabilities. More to the point of this proposal, it also means 
+that the thunk exists on the stack, and may go out of scope before it is 
+used if it is copied somewhere else (for instance, to the root of a new 
+stack in a coroutine).
+
+The standard solution to this sort of problem is a *closure*; this proposal 
+describes how to integrate a restricted sort of closure into Cforall that 
+would be sufficiently powerful to monomorphize polymorphic functions. 
+
+Monomorphization parameters in the current implementation fall into four 
+categories:
+  1. Size/alignment of types; a single unsigned integer
+  2. Field offsets for generic types; a fixed length array of unsigned 
+  3. Functions used to satisfy type assertions: a single function pointer
+  4. Variables used to satisfy type assertions: a single void pointer
+
+The gist of this proposal is to develop a copyable closure object (similar  
+in concept to `std::function` in C++) that can encapsulate a function 
+pointer and an arbitrary list of these monomorphization parameters and 
+provide a function call operator that passes the appropriate parameters to 
+the underlying function. In (very-)pseudo-Cforall, it might look something 
+like the following:
+
+    forall(ttype Rtns, ttype Args) struct Fn {
+        [assertion...] closed;
+        forall(closed) Rtns (*f)(Args...);
+    };
+
+    forall(ttype Rtns, ttype Args, [assertion...] Closed)
+    void ?{}( Fn(Rtns, Args) *this, 
+              forall(Closed) Rtns (*f)(Args), Closed closed ) {
+        this->closed = closed;
+        this->f = f;
+    }
+    // ^ function pointers convert implicitly to Fn, as they have an empty 
+    // assertion list here
+
+    forall(ttype Rtns, ttype Args)
+    Rtns ?() ( Fn(Rtns, Args) fn, Args args ) {
+        return fn.f( fn.closed, args );
+    }
+
+Using this `Fn` closure internally (even if it was never exposed to user 
+programmers), the top example would codegen something like this, with `Fn` 
+substituted for the implicit function pointers:
+
+    void double(size_t _sizeof_T,  
+                Fn(void, [void*, void*]) _assign_T,
+                Fn(void, [void*, void*, void*]) _add_T,
+                void *_rtn, 
+                void *x ) {
+        _add_T( _rtn, x, x );
+    }
+
+    void quadruple(size_t _sizeof_R,  
+                   Fn(void, [void*, void*]) _assign_R,
+                   Fn(void, [void*, void*]) _double_R, 
+                   void *_rtn,
+                   void *y ) {
+        void *_tmp0 = alloca(_sizeof_R);
+        _double_R( _rtn, (_double_R( _tmp0, y ), _tmp0) );
+     }
+
+     void fred() {
+         // closure wrapper for static function
+         Fn(void, [void*, void*]) _thunk0 = { _builtin_assign_float };
+         // nested closure to adapt double() to _double_R()
+         Fn(void, [void*, void*]) _thunk1 = { double, 
+             [sizeof(float), _builtin_assign_float, _builtin_add_float] };
+            
+         float magic;
+         float _tmp1 = 10.5f;
+         quadruple( sizeof(float), _thunk0, _thunk1,
+                    &magic, &_tmp1 );
+     }
+
+The main challenge with this approach is that the `Fn` closure is 
+(necessarily) variable in size, as it can close over an arbitrary (but fixed 
+at construction time) number of parameters. This will make memory management 
+for it somewhat challenging, and writing the code in the translator to 
+implement the function call operator passing a variable number of type 
+assertions should also be non-trivial, but tractable.
Index: doc/proposals/concurrency/Makefile
===================================================================
--- doc/proposals/concurrency/Makefile	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ doc/proposals/concurrency/Makefile	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -9,4 +9,6 @@
 SOURCES = ${addsuffix .tex, \
 concurrency \
+style \
+glossary \
 }
 
Index: doc/proposals/concurrency/concurrency.tex
===================================================================
--- doc/proposals/concurrency/concurrency.tex	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ doc/proposals/concurrency/concurrency.tex	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,10 +1,10 @@
 % requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
 
-% inline code �...� (copyright symbol) emacs: C-q M-)
-% red highlighting �...� (registered trademark symbol) emacs: C-q M-.
-% blue highlighting �...� (sharp s symbol) emacs: C-q M-_
-% green highlighting �...� (cent symbol) emacs: C-q M-"
-% LaTex escape �...� (section symbol) emacs: C-q M-'
-% keyword escape �...� (pilcrow symbol) emacs: C-q M-^
+% inline code ©...© (copyright symbol) emacs: C-q M-)
+% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
+% blue highlighting ß...ß (sharp s symbol) emacs: C-q M-_
+% green highlighting ¢...¢ (cent symbol) emacs: C-q M-"
+% LaTex escape §...§ (section symbol) emacs: C-q M-'
+% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
 % math escape $...$ (dollar symbol)
 
@@ -100,7 +100,7 @@
 
 \section{Introduction}
-This proposal provides a minimal core concurrency API that is both simple, efficient and can be reused to build higher-level features. The simplest possible concurrency core is a thread and a lock but this low-level approach is hard to master. An easier approach for users is to support higher-level constructs as the basis of the concurrency in \CFA. Indeed, for highly productive parallel programming, high-level approaches are much more popular~\cite{HPP:Study}. Examples are task based parallelism, message passing and implicit threading.
-
-There are actually two problems that need to be solved in the design of the concurrency for a programming language. Which concurrency tools are available to the users and which parallelism tools are available. While these two concepts are often seen together, they are in fact distinct concepts that require different sorts of tools~\cite{Buhr05a}. Concurrency tools need to handle mutual exclusion and synchronization, while parallelism tools are more about performance, cost and resource utilization.
+This proposal provides a minimal core concurrency API that is both simple, efficient and can be reused to build higher-level features. The simplest possible concurrency core is a thread and a lock but this low-level approach is hard to master. An easier approach for users is to support higher-level constructs as the basis of the concurrency in \CFA. Indeed, for highly productive parallel programming, high-level approaches are much more popular~\cite{HPP:Study}. Examples are task based, message passing and implicit threading.
+
+There are actually two problems that need to be solved in the design of the concurrency for a programming language: which concurrency tools are available to the users and which parallelism tools are available. While these two concepts are often seen together, they are in fact distinct concepts that require different sorts of tools~\cite{Buhr05a}. Concurrency tools need to handle mutual exclusion and synchronization, while parallelism tools are more about performance, cost and resource utilization.
 
 %  #####  ####### #     #  #####  #     # ######  ######  ####### #     #  #####  #     #
@@ -113,5 +113,5 @@
 
 \section{Concurrency}
-Several tool can be used to solve concurrency challenges. Since these challenges always appear with the use of mutable shared state, some languages and libraries simply disallow mutable shared-state (Erlang~\cite{Erlang}, Haskell~\cite{Haskell}, Akka (Scala)~\cite{Akka}). In these paradigms, interaction among concurrent objects relies on message passing~\cite{Thoth,Harmony,V-Kernel} or other paradigms that closely relate to networking concepts. However, in languages that use routine calls as their core abstraction mechanism, these approaches force a clear distinction between concurrent and non-concurrent paradigms (i.e. message passing versus routine call). Which in turn means that, in order to be effective, programmers need to learn two sets of designs patterns. This distinction can be hidden away in library code, but effective use of the librairy will still have to take both paradigms into account. Approaches based on shared memory are more closely related to non-concurrent paradigms since they often rely on non-concurrent constructs like routine calls and objects. At a lower level these can be implemented as locks and atomic operations. Many such mechanisms have been proposed, including semaphores~\cite{Dijkstra68b} and path expressions~\cite{Campbell74}. However, for productivity reasons it is desireable to have a higher-level construct to be the core concurrency paradigm~\cite{HPP:Study}. An approach that is worth mentionning because it is gaining in popularity is transactionnal memory~\cite{Dice10}[Check citation]. While this approach is even pursued by system languages like \CC\cit, the performance and feature set is currently too restrictive to be possible to add such a paradigm to a language like C or \CC\cit, which is why it was rejected as the core paradigm for concurrency in \CFA. One of the most natural, elegant, and efficient mechanisms for synchronization and communication, especially for shared memory systems, is the \emph{monitor}. Monitors were first proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}. Many programming languages---e.g., Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Modula~\cite{Modula-2}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, NeWS~\cite{NeWS}, Emerald~\cite{Emerald}, \uC~\cite{Buhr92a} and Java~\cite{Java}---provide monitors as explicit language constructs. In addition, operating-system kernels and device drivers have a monitor-like structure, although they often use lower-level primitives such as semaphores or locks to simulate monitors. For these reasons, this project proposes Monitors as the core concurrency construct.
+Several tool can be used to solve concurrency challenges. Since these challenges always appear with the use of mutable shared-state, some languages and libraries simply disallow mutable shared-state (Erlang~\cite{Erlang}, Haskell~\cite{Haskell}, Akka (Scala)~\cite{Akka}). In these paradigms, interaction among concurrent objects relies on message passing~\cite{Thoth,Harmony,V-Kernel} or other paradigms that closely relate to networking concepts (channels\cit for example). However, in languages that use routine calls as their core abstraction mechanism, these approaches force a clear distinction between concurrent and non-concurrent paradigms (i.e., message passing versus routine call). Which in turn means that, in order to be effective, programmers need to learn two sets of designs patterns. This distinction can be hidden away in library code, but effective use of the librairy still has to take both paradigms into account. Approaches based on shared memory are more closely related to non-concurrent paradigms since they often rely on basic constructs like routine calls and objects. At a lower level these can be implemented as locks and atomic operations. Many such mechanisms have been proposed, including semaphores~\cite{Dijkstra68b} and path expressions~\cite{Campbell74}. However, for productivity reasons it is desireable to have a higher-level construct be the core concurrency paradigm~\cite{HPP:Study}. An approach that is worth mentionning because it is gaining in popularity is transactionnal memory~\cite{Dice10}[Check citation]. While this approach is even pursued by system languages like \CC\cit, the performance and feature set is currently too restrictive to add such a paradigm to a language like C or \CC\cit, which is why it was rejected as the core paradigm for concurrency in \CFA. One of the most natural, elegant, and efficient mechanisms for synchronization and communication, especially for shared memory systems, is the \emph{monitor}. Monitors were first proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}. Many programming languages---e.g., Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Modula~\cite{Modula-2}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, NeWS~\cite{NeWS}, Emerald~\cite{Emerald}, \uC~\cite{Buhr92a} and Java~\cite{Java}---provide monitors as explicit language constructs. In addition, operating-system kernels and device drivers have a monitor-like structure, although they often use lower-level primitives such as semaphores or locks to simulate monitors. For these reasons, this project proposes monitors as the core concurrency construct.
 
 % #     # ####### #     # ### ####### ####### ######   #####
@@ -144,24 +144,23 @@
 
 \subsubsection{Call semantics} \label{call}
-The above monitor example displays some of their intrinsic characteristics. Indeed, it is necessary to use pass-by-reference over pass-by-value for monitor routines. This semantics is important because at their core, monitors are implicit mutual-exclusion objects (locks), and these objects cannot be copied. Therefore, monitors are implicitly non-copyable.
-
-Another aspect to consider is when a monitor acquires its mutual exclusion. For example, a monitor may need to be passed through multiple helper routines that do not acquire the monitor mutual exclusion on entry. Pass through can be both generic helper routines (\code{swap}, \code{sort}, etc.) or specific helper routines like the following to implement an atomic large counter :
-
-\begin{lstlisting}
-	mutex struct counter_t { /*...*/ };
-
-	void ?{}(counter_t & nomutex this);
-	size_t ++?(counter_t & mutex this);
+The above monitor example displays some of the intrinsic characteristics. Indeed, it is necessary to use pass-by-reference over pass-by-value for monitor routines. This semantics is important because at their core, monitors are implicit mutual-exclusion objects (locks), and these objects cannot be copied. Therefore, monitors are implicitly non-copyable.
+
+Another aspect to consider is when a monitor acquires its mutual exclusion. For example, a monitor may need to be passed through multiple helper routines that do not acquire the monitor mutual-exclusion on entry. Pass through can be both generic helper routines (\code{swap}, \code{sort}, etc.) or specific helper routines like the following to implement an atomic counter :
+
+\begin{lstlisting}
+	mutex struct counter_t { /*...see section Â§\ref{data}Â§...*/ };
+
+	void ?{}(counter_t & nomutex this); //constructor
+	size_t ++?(counter_t & mutex this); //increment
 
 	//need for mutex is platform dependent here
-	void ?{}(size_t * this, counter_t & mutex cnt);
-\end{lstlisting}
-*semantics of the declaration of \code{mutex struct counter_t} are discussed in details in section \ref{data}
-
-Here, the constructor(\code(?{})) uses the \code{nomutex} keyword to signify that it does not acquire the monitor mutual exclusion when constructing. This semantics is because object not yet constructed should never be shared and therefore do not require mutual exclusion. The prefix increment operator uses \code{mutex} to protect the incrementing process from race conditions. Finally, there is a conversion operator from \code{counter_t} to \code{size_t}. This conversion may or may not require the \code{mutex} key word depending on whether or not reading an \code{size_t} is an atomic operation or not.
-
-Having both \code{mutex} and \code{nomutex} keywords could be argued to be redundant based on the meaning of a routine having neither of these keywords. If there were a meaning to routine \code{void foo(counter_t & this)} then one could argue that it should default to the safest option : \code{mutex}. On the other hand, the option of having routine \code{void foo(counter_t & this)} mean \code{nomutex} is unsafe by default and may easily cause subtle errors. It can be argued that this is the more "normal" behavior, \code{nomutex} effectively stating explicitly that "this routine has nothing special". Another alternative is to make having exactly one of these keywords mandatory, which would provide the same semantics but without the ambiguity of supporting routine \code{void foo(counter_t & this)}. Mandatory keywords would also have the added benefice of being self-documented but at the cost of extra typing. In the end, which solution should be picked is still up for debate. For the reminder of this proposal, the explicit approach is used for clarity.
-
-Regardless of which keyword is kept, it is important to establish when mutex/nomutex may be used as a type qualifier. Consider :
+	void ?{}(size_t * this, counter_t & mutex cnt); //conversion
+\end{lstlisting}
+
+Here, the constructor(\code{?\{\}}) uses the \code{nomutex} keyword to signify that it does not acquire the monitor mutual exclusion when constructing. This semantics is because an object not yet constructed should never be shared and therefore does not require mutual exclusion. The prefix increment operator uses \code{mutex} to protect the incrementing process from race conditions. Finally, there is a conversion operator from \code{counter_t} to \code{size_t}. This conversion may or may not require the \code{mutex} key word depending on whether or not reading an \code{size_t} is an atomic operation or not.
+
+Having both \code{mutex} and \code{nomutex} keywords could be argued to be redundant based on the meaning of a routine having neither of these keywords. For example, given a routine without wualifiers \code{void foo(counter_t & this)} then one could argue that it should default to the safest option \code{mutex}. On the other hand, the option of having routine \code{void foo(counter_t & this)} mean \code{nomutex} is unsafe by default and may easily cause subtle errors. It can be argued that \code{nomutex} is the more "normal" behaviour, the \code{nomutex} keyword effectively stating explicitly that "this routine has nothing special". Another alternative is to make having exactly one of these keywords mandatory, which would provide the same semantics but without the ambiguity of supporting routine \code{void foo(counter_t & this)}. Mandatory keywords would also have the added benefice of being self-documented but at the cost of extra typing. In the end, which solution should be picked is still up for debate. For the reminder of this proposal, the explicit approach is used for clarity.
+
+The next semantic decision is to establish when mutex/nomutex may be used as a type qualifier. Consider the following declarations:
 \begin{lstlisting}
 	int f1(monitor & mutex m);
@@ -171,6 +170,5 @@
 	int f5(graph(monitor*) & mutex m);
 \end{lstlisting}
-
-The problem is to indentify which object(s) should be acquired. Furthermore, each object needs to be acquired only once. In case of simple routines like \code{f1} and \code{f2} it is easy to identify an exhaustive list of objects to acquire on entering. Adding indirections (\code{f3}) still allows the compiler and programmer to indentify which object is acquired. However, adding in arrays (\code{f4}) makes it much harder. Array lengths are not necessarily known in C and even then making sure we only acquire objects once becomes also none trivial. This can be extended to absurd limits like \code{f5}, which uses a graph of monitors. To keep everyone as sane as possible~\cite{Chicken}, this projects imposes the requirement that a routine may only acquire one monitor per parameter and it must be the type of the parameter (ignoring potential qualifiers and indirections). Also note that while routine \code{f3} can be supported, meaning that monitor \code{**m} will be acquired, passing an array to this routine would be type safe and result in undefined behavior. For this reason, it would also be reasonnable to disallow mutex in the context where arrays may be passed.
+The problem is to indentify which object(s) should be acquired. Furthermore, each object needs to be acquired only once. In the case of simple routines like \code{f1} and \code{f2} it is easy to identify an exhaustive list of objects to acquire on entry. Adding indirections (\code{f3}) still allows the compiler and programmer to indentify which object is acquired. However, adding in arrays (\code{f4}) makes it much harder. Array lengths are not necessarily known in C and even then making sure we only acquire objects once becomes also none trivial. This can be extended to absurd limits like \code{f5}, which uses a graph of monitors. To keep everyone as sane as possible~\cite{Chicken}, this projects imposes the requirement that a routine may only acquire one monitor per parameter and it must be the type of the parameter (ignoring potential qualifiers and indirections). Also note that while routine \code{f3} can be supported, meaning that monitor \code{**m} is be acquired, passing an array to this routine would be type safe and yet result in undefined behavior because only the first element of the array is acquired. However, this ambiguity is part of the C type system with respects to arrays. For this reason, it would also be reasonnable to disallow mutex in the context where arrays may be passed.
 
 % ######     #    #######    #
@@ -183,5 +181,5 @@
 
 \subsubsection{Data semantics} \label{data}
-Once the call semantics are established, the next step is to establish data semantics. Indeed, until now a monitor is used simply as a generic handle but in most cases monitors contian shared data. This data should be intrinsic to the monitor declaration to prevent any accidental use of data without its appripriate protection. For example here is a more fleshed-out version of the counter showed in \ref{call}:
+Once the call semantics are established, the next step is to establish data semantics. Indeed, until now a monitor is used simply as a generic handle but in most cases monitors contian shared data. This data should be intrinsic to the monitor declaration to prevent any accidental use of data without its appropriate protection. For example, here is a complete version of the counter showed in section \ref{call}:
 \begin{lstlisting}
 	mutex struct counter_t {
@@ -203,10 +201,12 @@
 \end{lstlisting}
 
-This simple counter offers an example of monitor usage. Notice how the counter is used without any explicit synchronisation and yet supports thread-safe semantics for both reading and writting :
+This simple counter is used as follows:
 \begin{center}
 \begin{tabular}{c @{\hskip 0.35in} c @{\hskip 0.35in} c}
 \begin{lstlisting}
+	//shared counter
 	counter_t cnt;
 
+	//multiple threads access counter
 	thread 1 : cnt++;
 	thread 2 : cnt++;
@@ -218,5 +218,5 @@
 \end{center}
 
-These simple mutual exclusion semantics also naturally expand to multi-monitor calls.
+Notice how the counter is used without any explicit synchronisation and yet supports thread-safe semantics for both reading and writting. Unlike object-oriented monitors, where calling a mutex member \emph{implicitly} acquires mutual-exclusion, \CFA uses an explicit mechanism to acquire mutual-exclusion. A consequence of this approach is that it extends to multi-monitor calls.
 \begin{lstlisting}
 	int f(MonitorA & mutex a, MonitorB & mutex b);
@@ -226,31 +226,30 @@
 	f(a,b);
 \end{lstlisting}
-
-This code acquires both locks before entering the critical section (Referenced as \gls{group-acquire} from now on). In practice, writing multi-locking routines that can not lead to deadlocks can be tricky. Having language support for such a feature is therefore a significant asset for \CFA. In the case presented above, \CFA guarantees that the order of aquisition will be consistent across calls to routines using the same monitors as arguments. However, since \CFA monitors use multi-acquiring locks users can effectively force the acquiring order. For example, notice which routines use \code{mutex}/\code{nomutex} and how this affects aquiring order :
-\begin{lstlisting}
-	void foo(A & mutex a, B & mutex a) {
-		//...
-	}
-
-	void bar(A & mutex a, B & nomutex a)
-		//...
-		foo(a, b);
-		//...
-	}
-
-	void baz(A & nomutex a, B & mutex a)
-		//...
-		foo(a, b);
-		//...
-	}
-\end{lstlisting}
-
-Such a use will lead to nested monitor call problems~\cite{Lister77}, which are a specific implementation of the lock acquiring order problem. In the example above, the user uses implicit ordering in the case of function \code{foo} but explicit ordering in the case of \code{bar} and \code{baz}. This subtle mistake means that calling these routines concurrently may lead to deadlocks, depending on the implicit ordering matching the explicit ordering. As shown on several occasion\cit, solving this problems requires to :
+This code acquires both locks before entering the critical section, called \emph{\gls{group-acquire}}. In practice, writing multi-locking routines that do not lead to deadlocks is tricky. Having language support for such a feature is therefore a significant asset for \CFA. In the case presented above, \CFA guarantees that the order of aquisition is consistent across calls to routines using the same monitors as arguments. However, since \CFA monitors use multi-acquisition locks, users can effectively force the acquiring order. For example, notice which routines use \code{mutex}/\code{nomutex} and how this affects aquiring order :
+\begin{lstlisting}
+	void foo(A & mutex a, B & mutex b) { //acquire a & b
+		//...
+	}
+
+	void bar(A & mutex a, B & nomutex b) { //acquire a
+		//...
+		foo(a, b); //acquire b
+		//...
+	}
+
+	void baz(A & nomutex a, B & mutex b) { //acquire b
+		//...
+		foo(a, b); //acquire a
+		//...
+	}
+\end{lstlisting}
+
+The multi-acquisition monitor lock allows a monitor lock to be acquired by both \code{bar} or \code{baz} and acquired again in \code{foo}. In the calls to \code{bar} and \code{baz} the monitors are acquired in opposite order. such use leads to nested monitor call problems~\cite{Lister77}, which is a specific implementation of the lock acquiring order problem. In the example above, the user uses implicit ordering in the case of function \code{foo} but explicit ordering in the case of \code{bar} and \code{baz}. This subtle mistake means that calling these routines concurrently may lead to deadlock and is therefore undefined behavior. As shown on several occasion\cit, solving this problem requires :
 \begin{enumerate}
-	\item Dynamically track the monitor call order.
+	\item Dynamically tracking of the monitor-call order.
 	\item Implement rollback semantics.
 \end{enumerate}
 
-While the first requirement is already a significant constraint on the system, implementing a general rollback semantics in a C-like language is prohibitively complex \cit. In \CFA users simply need to be carefull when acquiring multiple monitors at the same time.
+While the first requirement is already a significant constraint on the system, implementing a general rollback semantics in a C-like language is prohibitively complex \cit. In \CFA, users simply need to be carefull when acquiring multiple monitors at the same time.
 
 % ######  ####### #######    #    ### #        #####
@@ -271,8 +270,74 @@
 
 \subsubsection{Implementation Details: Interaction with polymorphism}
-At first glance, interaction between monitors and \CFA's concept of polymorphism seem complex to support. However, it can be reasoned that entry-point locking can solve most of the issues that could be present with polymorphism.
-
-First of all, interaction between \code{otype} polymorphism and monitors is impossible since monitors do not support copying. Therefore, the main question is how to support \code{dtype} polymorphism. Since a monitor's main purpose is to ensure mutual exclusion when accessing shared data, this implies that mutual exclusion is only required for routines that do in fact access shared data. However, since \code{dtype} polymorphism always handles incomplete types (by definition), no \code{dtype} polymorphic routine can access shared data since the data requires knowledge about the type. Therefore the only concern when combining \code{dtype} polymorphism and monitors is to protect access to routines. \Gls{callsite-locking}\footnotemark would require a significant amount of work, since any \code{dtype} routine may have to obtain some lock before calling a routine, depending on whether or not the type passed is a monitor. However, with \gls{entry-point-locking}\footnotemark[\value{footnote}] calling a monitor routine becomes exactly the same as calling it from anywhere else.
-\footnotetext{See glossary for a definition of \gls{callsite-locking} and \gls{entry-point-locking}}
+At first glance, interaction between monitors and \CFA's concept of polymorphism seems complex to support. However, it is shown that entry-point locking can solve most of the issues.
+
+Before looking into complex control flow, it is important to present the difference between the two acquiring options : \gls{callsite-locking} and \gls{entry-point-locking}, i.e. acquiring the monitors before making a mutex call or as the first instruction of the mutex call. For example:
+
+\begin{center}
+\begin{tabular}{|c|c|c|}
+Code & \gls{callsite-locking} & \gls{entry-point-locking} \\
+\CFA & pseudo-code & pseudo-code \\
+\hline
+\begin{lstlisting}
+void foo(monitor & mutex a) {
+
+
+
+	//Do Work
+	//...
+
+}
+
+void main() {
+	monitor a;
+
+
+
+	foo(a);
+
+}
+\end{lstlisting} &\begin{lstlisting}
+foo(& a) {
+
+
+
+	//Do Work
+	//...
+
+}
+
+main() {
+	monitor a;
+	//calling routine
+	//handles concurrency
+	acquire(a);
+	foo(a);
+	release(a);
+}
+\end{lstlisting} &\begin{lstlisting}
+foo(& a) {
+	//called routine
+	//handles concurrency
+	acquire(a);
+	//Do Work
+	//...
+	release(a);
+}
+
+main() {
+	monitor a;
+
+
+
+	foo(a);
+
+}
+\end{lstlisting}
+\end{tabular}
+\end{center}
+
+First of all, interaction between \code{otype} polymorphism and monitors is impossible since monitors do not support copying. Therefore, the main question is how to support \code{dtype} polymorphism. Since a monitor's main purpose is to ensure mutual exclusion when accessing shared data, this implies that mutual exclusion is only required for routines that do in fact access shared data. However, since \code{dtype} polymorphism always handles incomplete types (by definition), no \code{dtype} polymorphic routine can access shared data since the data requires knowledge about the type. Therefore, the only concern when combining \code{dtype} polymorphism and monitors is to protect access to routines. \Gls{callsite-locking} would require a significant amount of work, since any \code{dtype} routine may have to obtain some lock before calling a routine, depending on whether or not the type passed is a monitor. However, with \gls{entry-point-locking} calling a monitor routine becomes exactly the same as calling it from anywhere else.
+
+
 
 % ### #     # #######         #####   #####  #     # ####### ######
@@ -285,5 +350,5 @@
 
 \subsection{Internal scheduling} \label{insched}
-Monitors also need to schedule waiting threads within it as a mean of synchronization. Internal scheduling is one of the simple examples of such a feature. It allows users to declare condition variables and have threads wait and signaled from them. Here is a simple example of such a technique :
+Monitors also need to schedule waiting threads internally as a mean of synchronization. Internal scheduling is one of the simple examples of such a feature. It allows users to declare condition variables and have threads wait and signaled from them. Here is a simple example of such a technique :
 
 \begin{lstlisting}
@@ -303,5 +368,5 @@
 \end{lstlisting}
 
-Here routine \code{foo} waits for the \code{signal} from \code{bar} before making further progress, effectively ensuring a basic ordering. This semantic can easily be extended to multi-monitor calls by offering the same guarantee.
+Note that in \CFA, \code{condition} have no particular need to be stored inside a monitor, beyond any software engineering reasons. Here routine \code{foo} waits for the \code{signal} from \code{bar} before making further progress, effectively ensuring a basic ordering. This semantic can easily be extended to multi-monitor calls by offering the same guarantee.
 \begin{center}
 \begin{tabular}{ c @{\hskip 0.65in} c }
@@ -337,8 +402,9 @@
 condition e;
 
+//acquire a & b
 void foo(monitor & mutex a,
            monitor & mutex b) {
 
-	wait(e);
+	wait(e); //release a & b
 }
 
@@ -352,4 +418,5 @@
 condition e;
 
+//acquire a
 void bar(monitor & mutex a,
            monitor & nomutex b) {
@@ -357,7 +424,8 @@
 }
 
+//acquire a & b
 void foo(monitor & mutex a,
            monitor & mutex b) {
-	wait(e);
+	wait(e);  //release a & b
 }
 
@@ -366,4 +434,5 @@
 condition e;
 
+//acquire a
 void bar(monitor & mutex a,
            monitor & nomutex b) {
@@ -371,7 +440,8 @@
 }
 
+//acquire b
 void baz(monitor & nomutex a,
            monitor & mutex b) {
-	wait(e);
+	wait(e);  //release b
 }
 
@@ -381,5 +451,5 @@
 \end{center}
 
-Note that in \CFA, \code{condition} have no particular need to be stored inside a monitor, beyond any software engineering reasons. Context 1 is the simplest way of acquiring more than one monitor (\gls{group-acquire}), using a routine wiht multiple parameters having the \code{mutex} keyword. Context 2 also uses \gls{group-acquire} as well in routine \code{foo}. However, the routine is called by routine \code{bar} which only acquires monitor \code{a}. Since monitors can be acquired multiple times this will not cause a deadlock by itself but it does force the acquiring order to \code{a} then \code{b}. Context 3 also forces the acquiring order to be \code{a} then \code{b} but does not use \gls{group-acquire}. The previous example tries to illustrate the semantics that must be established to support releasing monitors in a \code{wait} statement. In all cases the behavior of the wait statment is to release all the locks that were acquired my the inner-most monitor call. That is \code{a & b} in context 1 and 2 and \code{b} only in context 3. Here are a few other examples of this behavior.
+Context 1 is the simplest way of acquiring more than one monitor (\gls{group-acquire}), using a routine with multiple parameters having the \code{mutex} keyword. Context 2 also uses \gls{group-acquire} as well in routine \code{foo}. However, the routine is called by routine \code{bar}, which only acquires monitor \code{a}. Since monitors can be acquired multiple times this does not cause a deadlock by itself but it does force the acquiring order to \code{a} then \code{b}. Context 3 also forces the acquiring order to be \code{a} then \code{b} but does not use \gls{group-acquire}. The previous example tries to illustrate the semantics that must be established to support releasing monitors in a \code{wait} statement. In all cases, the behavior of the wait statment is to release all the locks that were acquired my the inner-most monitor call. That is \code{a & b} in context 1 and 2 and \code{b} only in context 3. Here are a few other examples of this behavior.
 
 
@@ -389,5 +459,5 @@
 condition e;
 
-//acquire a
+//acquire b
 void foo(monitor & nomutex a,
            monitor & mutex b) {
@@ -399,7 +469,6 @@
            monitor & nomutex b) {
 
-	//release a
-	//keep b
-	wait(e);
+	wait(e); //release a
+	          //keep b
 }
 
@@ -418,7 +487,6 @@
            monitor & nomutex b) {
 
-   	//release b
-	//keep a
-	wait(e);
+	wait(e); //release b
+	          //keep a
 }
 
@@ -437,7 +505,6 @@
            monitor & nomutex b) {
 
-	//release a & b
-	//keep none
-	wait(e);
+	wait(e); //release a & b
+	          //keep none
 }
 
@@ -446,9 +513,45 @@
 \end{tabular}
 \end{center}
-Note the right-most example which uses a helper routine and therefore is not relevant to find which monitors will be released.
-
-These semantics imply that in order to release of subset of the monitors currently held, users must write (and name) a routine that only acquires the desired subset and simply calls wait. While users can use this method, \CFA offers the \code{wait_release}\footnote{Not sure if an overload of \code{wait} would work...} which will release only the specified monitors.
-
-Regardless of the context in which the \code{wait} statement is used, \code{signal} must used holding the same set of monitors. In all cases, signal only needs a single parameter, the condition variable that needs to be signalled. But \code{signal} needs to be called from the same monitor(s) that call to \code{wait}. Otherwise, mutual exclusion cannot be properly transferred back to the waiting monitor.
+Note the right-most example is actually a trick pulled on the reader. Monitor state information is stored in thread local storage rather then in the routine context, which means that helper routines and other \code{nomutex} routines are invisible to the runtime system in regards to concurrency. This means that in the right-most example, the routine parameters are completly unnecessary. However, calling this routine from outside a valid monitor context is undefined.
+
+These semantics imply that in order to release of subset of the monitors currently held, users must write (and name) a routine that only acquires the desired subset and simply calls wait. While users can use this method, \CFA offers the \code{wait_release}\footnote{Not sure if an overload of \code{wait} would work...} which will release only the specified monitors. In the center previous examples, the code in the center uses the \code{bar} routine to only release monitor \code{b}. Using the \code{wait_release} helper, this can be rewritten without having the name two routines :
+\begin{center}
+\begin{tabular}{ c c c }
+\begin{lstlisting}
+	condition e;
+
+	//acquire a & b
+	void foo(monitor & mutex a,
+	           monitor & mutex b) {
+		bar(a,b);
+	}
+
+	//acquire b
+	void bar(monitor & mutex a,
+	           monitor & nomutex b) {
+
+		wait(e); //release b
+		          //keep a
+	}
+
+	foo(a, b);
+\end{lstlisting} &\begin{lstlisting}
+	=>
+\end{lstlisting} &\begin{lstlisting}
+	condition e;
+
+	//acquire a & b
+	void foo(monitor & mutex a,
+	           monitor & mutex b) {
+		wait_release(e,b); //release b
+			                 //keep a
+	}
+
+	foo(a, b);
+\end{lstlisting}
+\end{tabular}
+\end{center}
+
+Regardless of the context in which the \code{wait} statement is used, \code{signal} must be called holding the same set of monitors. In all cases, signal only needs a single parameter, the condition variable that needs to be signalled. But \code{signal} needs to be called from the same monitor(s) that call to \code{wait}. Otherwise, mutual exclusion cannot be properly transferred back to the waiting monitor.
 
 Finally, an additional semantic which can be very usefull is the \code{signal_block} routine. This routine behaves like signal for all of the semantics discussed above, but with the subtelty that mutual exclusion is transferred to the waiting task immediately rather than wating for the end of the critical section.
@@ -464,5 +567,5 @@
 \newpage
 \subsection{External scheduling} \label{extsched}
-As one might expect, the alternative to Internal scheduling is to use External scheduling instead. This method is somewhat more robust to deadlocks since one of the threads keeps a relatively tight control on scheduling. Indeed, as the following examples will demonstrate, external scheduling allows users to wait for events from other threads without the concern of unrelated events occuring. External scheduling can generally be done either in terms of control flow (ex: \uC) or in terms of data (ex: Go). Of course, both of these paradigms have their own strenghts and weaknesses but for this project control flow semantics where chosen to stay consistent with the rest of the languages semantics. Two challenges specific to \CFA arise when trying to add external scheduling with loose object definitions and multi-monitor routines. The following example shows what a simple use \code{accept} versus \code{wait}/\code{signal} and its advantages.
+An alternative to internal scheduling is to use external scheduling instead. This method is more constrained and explicit which may help users tone down the undeterministic nature of concurrency. Indeed, as the following examples demonstrates, external scheduling allows users to wait for events from other threads without the concern of unrelated events occuring. External scheduling can generally be done either in terms of control flow (ex: \uC) or in terms of data (ex: Go). Of course, both of these paradigms have their own strenghts and weaknesses but for this project control flow semantics where chosen to stay consistent with the rest of the languages semantics. Two challenges specific to \CFA arise when trying to add external scheduling with loose object definitions and multi-monitor routines. The following example shows a simple use \code{accept} versus \code{wait}/\code{signal} and its advantages.
 
 \begin{center}
@@ -482,5 +585,5 @@
 
 	public:
-		void f();
+		void f() { /*...*/ }
 		void g() { _Accept(f); }
 	private:
@@ -490,5 +593,5 @@
 \end{center}
 
-In the case of internal scheduling, the call to \code{wait} only guarantees that \code{g} was the last routine to access the monitor. This intails that the routine \code{f} may have acquired mutual exclusion several times while routine \code{h} was waiting. On the other hand, external scheduling guarantees that while routine \code{h} was waiting, no routine other than \code{g} could acquire the monitor.
+In the case of internal scheduling, the call to \code{wait} only guarantees that \code{g} is the last routine to access the monitor. This intails that the routine \code{f} may have acquired mutual exclusion several times while routine \code{h} was waiting. On the other hand, external scheduling guarantees that while routine \code{h} was waiting, no routine other than \code{g} could acquire the monitor.
 \\
 
@@ -673,23 +776,23 @@
 % #       #     # #     # #     # ####### ####### ####### ####### ###  #####  #     #
 \section{Parallelism}
-Historically, computer performance was about processor speeds and instructions count. However, with heat dissipation being a direct consequence of speed increase, parallelism has become the new source for increased performance~\cite{Sutter05, Sutter05b}. In this decade, it is not longer reasonnable to create high-performance application without caring about parallelism. Indeed, parallelism is an important aspect of performance and more specifically throughput and hardware utilization. The lowest level approach of parallelism is to use \glspl{kthread} in combination with semantics like \code{fork}, \code{join}, etc. However, since these have significant costs and limitations \glspl{kthread} are now mostly used as an implementation tool rather than a user oriented one. There are several alternatives to solve these issues that all have strengths and weaknesses. While there are many variations of the presented paradigms, most of these variations do not actually change the guarantees or the semantics, they simply move costs in order to achieve better performance for certain workloads.
+Historically, computer performance was about processor speeds and instructions count. However, with heat dissipation being a direct consequence of speed increase, parallelism has become the new source for increased performance~\cite{Sutter05, Sutter05b}. In this decade, it is not longer reasonnable to create a high-performance application without caring about parallelism. Indeed, parallelism is an important aspect of performance and more specifically throughput and hardware utilization. The lowest-level approach of parallelism is to use \glspl{kthread} in combination with semantics like \code{fork}, \code{join}, etc. However, since these have significant costs and limitations, \glspl{kthread} are now mostly used as an implementation tool rather than a user oriented one. There are several alternatives to solve these issues that all have strengths and weaknesses. While there are many variations of the presented paradigms, most of these variations do not actually change the guarantees or the semantics, they simply move costs in order to achieve better performance for certain workloads.
 
 \subsection{User-level threads}
-A direct improvement on the \gls{kthread} approach is to use \glspl{uthread}. These threads offer most of the same features that the operating system already provide but can be used on a much larger scale. This approach is the most powerfull solution as it allows all the features of multi-threading while removing several of the more expensives costs of using kernel threads. The down side is that almost none of the low-level threading problems are hidden, users still have to think about data races, deadlocks and synchronization issues. These issues can be somewhat alleviated by a concurrency toolkit with strong garantees but the parallelism toolkit offers very little to reduce complexity in itself.
-
-Examples of languages that support are Erlang~\cite{Erlang} and \uC~\cite{uC++book}.
-
-\subsection{Fibers : user-level threads without preemption}
-In the middle of the flexibility versus complexity spectrum lay \glspl{fiber} which offer \glspl{uthread} without the complexity of preemption by using cooperative scheduling. On a single core machine this means users need not worry about concurrency. On multi-core machines, while concurrency is still a concern, it is only a problem for fibers across cores but not while on the same core. This extra guarantee plus the fact that creating and destroying fibers are implicit synchronizing points means preventing mutable shared ressources still leaves many control flow options. However, multi-core processors can still execute fibers in parallel. This means users either need to worry about mutual exclusion, deadlocks and race conditions, or limit themselves to subset of concurrency primitives, raising the complexity in both cases. In this aspect, fibers can be seen as a more powerfull alternative to \glspl{job}.
+A direct improvement on the \gls{kthread} approach is to use \glspl{uthread}. These threads offer most of the same features that the operating system already provide but can be used on a much larger scale. This approach is the most powerfull solution as it allows all the features of multi-threading, while removing several of the more expensives costs of using kernel threads. The down side is that almost none of the low-level threading problems are hidden, users still have to think about data races, deadlocks and synchronization issues. These issues can be somewhat alleviated by a concurrency toolkit with strong garantees but the parallelism toolkit offers very little to reduce complexity in itself.
+
+Examples of languages that support \glspl{uthread} are Erlang~\cite{Erlang} and \uC~\cite{uC++book}.
+
+\subsubsection{Fibers : user-level threads without preemption}
+A popular varient of \glspl{uthread} is what is often reffered to as \glspl{fiber}. However, \glspl{fiber} do not present meaningful semantical differences with \glspl{uthread}. Advocates of \glspl{fiber} list their high performance and ease of implementation as majors strenghts of \glspl{fiber} but the performance difference between \glspl{uthread} and \glspl{fiber} is controversial and the ease of implementation, while true, is a weak argument in the context of language design. Therefore this proposal largely ignore fibers.
 
 An example of a language that uses fibers is Go~\cite{Go}
 
 \subsection{Jobs and thread pools}
-The approach on the opposite end of the spectrum is to base parallelism on \glspl{pool}. Indeed, \glspl{pool} offer limited flexibility but at the benefit of a simpler user interface. In \gls{pool} based systems, users express parallelism as units of work and the dependency graph (either explicit or implicit) that tie them together. This approach means users need not worry about concurrency but significantly limits the interaction that can occur between different jobs. Indeed, any \gls{job} that blocks also blocks the underlying worker, which effectively means the CPU utilization, and therefore throughput, suffers noticeably. It can be argued that a solution to this problem is to use more workers than available cores. However, unless the number of jobs and the number of workers are comparable, having a significant amount of blocked jobs will always results in idles cores.
+The approach on the opposite end of the spectrum is to base parallelism on \glspl{pool}. Indeed, \glspl{pool} offer limited flexibility but at the benefit of a simpler user interface. In \gls{pool} based systems, users express parallelism as units of work and a dependency graph (either explicit or implicit) that tie them together. This approach means users need not worry about concurrency but significantly limits the interaction that can occur among jobs. Indeed, any \gls{job} that blocks also blocks the underlying worker, which effectively means the CPU utilization, and therefore throughput, suffers noticeably. It can be argued that a solution to this problem is to use more workers than available cores. However, unless the number of jobs and the number of workers are comparable, having a significant amount of blocked jobs always results in idles cores.
 
 The gold standard of this implementation is Intel's TBB library~\cite{TBB}.
 
 \subsection{Paradigm performance}
-While the choice between the three paradigms listed above may have significant performance implication, it is difficult to pindown the performance implications of chosing a model at the language level. Indeed, in many situations one of these paradigms may show better performance but it all strongly depends on the workload. Having a large amount of mostly independent units of work to execute almost guarantess that the \gls{pool} based system has the best performance thanks to the lower memory overhead. However, interactions between jobs can easily exacerbate contention. User-level threads may allows fine grain context switching which may result in better resource utilisation but context switches will be more expansive and it is also harder for users to get perfect tunning. As with every example, fibers sit somewhat in the middle of the spectrum. Furthermore, if the units of uninterrupted work are large enough the paradigm choice will be largely amorticised by the actual work done.
+While the choice between the three paradigms listed above may have significant performance implication, it is difficult to pindown the performance implications of chosing a model at the language level. Indeed, in many situations one of these paradigms may show better performance but it all strongly depends on the workload. Having a large amount of mostly independent units of work to execute almost guarantess that the \gls{pool} based system has the best performance thanks to the lower memory overhead. However, interactions between jobs can easily exacerbate contention. User-level threads allow fine-grain context switching, which results in better resource utilisation, but context switches will be more expansive and the extra control means users need to tweak more variables to get the desired performance. Furthermore, if the units of uninterrupted work are large enough the paradigm choice is largely amorticised by the actual work done.
 
 %  #####  #######    #          ####### ######  ######
@@ -702,22 +805,5 @@
 
 \section{\CFA 's Thread Building Blocks}
-As a system level language, \CFA should offer both performance and flexibilty as its primary goals, simplicity and user-friendliness being a secondary concern. Therefore, the core of parallelism in \CFA should prioritize power and efficiency. With this said, it is possible to deconstruct the three paradigms details aboved in order to get simple building blocks. Here is a table showing the core caracteristics of the mentionned paradigms :
-\begin{center}
-\begin{tabular}[t]{| r | c | c |}
-\cline{2-3}
-\multicolumn{1}{ c| }{} & Has a stack & Preemptive \\
-\hline
-\Glspl{pool} & X & X \\
-\hline
-\Glspl{fiber} & \checkmark & X \\
-\hline
-\Glspl{uthread} & \checkmark & \checkmark \\
-\hline
-\end{tabular}
-\end{center}
-
-This table is missing several variations (for example jobs on \glspl{uthread} or \glspl{fiber}), but these variation affect mostly performance and do not effect the guarantees as the presented paradigm do.
-
-As shown in section \ref{cfaparadigms} these different blocks being available in \CFA it is trivial to reproduce any of these paradigm.
+As a system-level language, \CFA should offer both performance and flexibilty as its primary goals, simplicity and user-friendliness being a secondary concern. Therefore, the core of parallelism in \CFA should prioritize power and efficiency. With this said, deconstructing popular paradigms in order to get simple building blocks yields \glspl{uthread} as the core parallelism block. \Glspl{pool} and other parallelism paradigms can then be built on top of the underlying threading model.
 
 % ####### #     # ######  #######    #    ######   #####
@@ -730,5 +816,5 @@
 
 \subsection{Thread Interface}
-The basic building blocks of \CFA are \glspl{cfathread}. By default these are implemented as \glspl{uthread} and as such offer a flexible and lightweight threading interface (lightweight comparatievely to \glspl{kthread}). A thread can be declared using a struct declaration with prefix \code{thread} as follows :
+The basic building blocks of \CFA are \glspl{cfathread}. By default these are implemented as \glspl{uthread}, and as such, offer a flexible and lightweight threading interface (lightweight compared to \glspl{kthread}). A thread can be declared using a struct declaration with prefix \code{thread} as follows :
 
 \begin{lstlisting}
@@ -736,14 +822,14 @@
 \end{lstlisting}
 
-Obviously, for this thread implementation to be usefull it must run some user code. Several other threading interfaces use some function pointer representation as the interface of threads (for example : \Csharp~\cite{Csharp} and Scala~\cite{Scala}). However, this proposal considers that statically tying a \code{main} routine to a thread superseeds this approach. Since the \code{main} routine is definitely a special routine in \CFA, the existing syntax for declaring routines with unordinary name can be extended, i.e. operator overloading. As such the \code{main} routine of a thread can be defined as :
+Obviously, for this thread implementation to be usefull it must run some user code. Several other threading interfaces use a function-pointer representation as the interface of threads (for example : \Csharp~\cite{Csharp} and Scala~\cite{Scala}). However, this proposal considers that statically tying a \code{main} routine to a thread superseeds this approach. Since the \code{main} routine is already a special routine in \CFA (where the program begins), the existing syntax for declaring routines names with special semantics can be extended, i.e. operator overloading. As such the \code{main} routine of a thread can be defined as :
 \begin{lstlisting}
 	thread struct foo {};
 
-	void ?main(thread foo* this) {
-		/*... Some useful code ...*/
-	}
-\end{lstlisting}
-
-With these semantics it is trivial to write a thread type that takes a function pointer as parameter and executes it on its stack asynchronously :
+	void ?main(foo* this) {
+		sout | "Hello World!" | endl;
+	}
+\end{lstlisting}
+
+In this example, threads of type \code{foo} will start there execution in the \code{void ?main(foo*)} routine which in this case prints \code{"Hello World!"}. While this proposoal encourages this approach which is enforces strongly type programming. Users may prefer to use the routine based thread semantics for the sake of simplicity. With these semantics it is trivial to write a thread type that takes a function pointer as parameter and executes it on its stack asynchronously :
 \begin{lstlisting}
 	typedef void (*voidFunc)(void);
@@ -754,26 +840,24 @@
 
 	//ctor
-	void ?{}(thread FuncRunner* this, voidFunc inFunc) {
+	void ?{}(FuncRunner* this, voidFunc inFunc) {
 		func = inFunc;
 	}
 
 	//main
-	void ?main(thread FuncRunner* this) {
+	void ?main(FuncRunner* this) {
 		this->func();
 	}
 \end{lstlisting}
 
-% In this example \code{func} is a function pointer stored in \acrfull{tls}, which is \CFA is both easy to use and completly typesafe.
-
-Of course for threads to be useful, it must be possible to start and stop threads and wait for them to complete execution. While using an \acrshort{api} such as \code{fork} and \code{join} is relatively common in the literature, such an interface is not needed. Indeed, the simplest approach is to use \acrshort{raii} principles and have threads \code{fork} once the constructor has completed and \code{join} before the destructor runs.
-\begin{lstlisting}
-thread struct FuncRunner; //FuncRunner declared above
-
-void world() {
+Of course for threads to be useful, it must be possible to start and stop threads and wait for them to complete execution. While using an \acrshort{api} such as \code{fork} and \code{join} is relatively common in the literature, such an interface is unnecessary. Indeed, the simplest approach is to use \acrshort{raii} principles and have threads \code{fork} once the constructor has completed and \code{join} before the destructor runs.
+\begin{lstlisting}
+thread struct World; //FuncRunner declared above
+
+void ?main(thread World* this) {
 	sout | "World!" | endl;
 }
 
 void main() {
-	FuncRunner run = {world};
+	World w;
 	//Thread run forks here
 
@@ -784,7 +868,6 @@
 }
 \end{lstlisting}
-This semantic has several advantages over explicit semantics : typesafety is guaranteed, a thread is always started and stopped exaclty once and users cannot make any progamming errors. Furthermore it naturally follows the memory allocation semantics, which means users do not need to learn multiple semantics.
-
-These semantics also naturally scale to multiple threads meaning basic synchronisation is very simple :
+This semantic has several advantages over explicit semantics : typesafety is guaranteed, a thread is always started and stopped exaclty once and users cannot make any progamming errors. However, one of the apparent drawbacks of this system is that threads now always form a lattice, that is they are always destroyed in opposite order of construction. While this seems like a significant limitation, existing \CFA semantics can solve this problem. Indeed, by using dynamic allocation to create threads will naturally let threads outlive the scope in which the thread was created much like dynamically allocating memory will let objects outlive the scope in which thy were created :
+
 \begin{lstlisting}
 	thread struct MyThread {
@@ -793,8 +876,45 @@
 
 	//ctor
-	void ?{}(thread MyThread* this) {}
+	void ?{}(MyThread* this,
+		     bool is_special = false) {
+		//...
+	}
 
 	//main
-	void ?main(thread MyThread* this) {
+	void ?main(MyThread* this) {
+		//...
+	}
+
+	void foo() {
+		MyThread* special_thread;
+		{
+			MyThread thrds = {false};
+			//Start a thread at the beginning of the scope
+
+			DoStuff();
+
+			//create a other thread that will outlive the thread in this scope
+			special_thread = new MyThread{true};
+
+			//Wait for the thread to finish
+		}
+		DoMoreStuff();
+
+		//Now wait for the special
+	}
+\end{lstlisting}
+
+Another advantage of this semantic is that it naturally scale to multiple threads meaning basic synchronisation is very simple :
+
+\begin{lstlisting}
+	thread struct MyThread {
+		//...
+	};
+
+	//ctor
+	void ?{}(MyThread* this) {}
+
+	//main
+	void ?main(MyThread* this) {
 		//...
 	}
@@ -808,18 +928,66 @@
 		//Wait for the 10 threads to finish
 	}
-
-	void bar() {
-		MyThread* thrds = new MyThread[10];
-		//Start 10 threads at the beginning of the scope
-
-		DoStuff();
-
-		//Wait for the 10 threads to finish
-		delete MyThread;
+\end{lstlisting}
+
+\subsection{Coroutines : A stepping stone}\label{coroutine}
+While the main focus of this proposal is concurrency and paralellism, it is important to adress coroutines which are actually a significant underlying aspect of the concurrency system. Indeed, while having nothing todo with parallelism and arguably very little to do with concurrency, coroutines need to deal with context-switchs and and other context management operations. Therefore, this proposal includes coroutines both as an intermediate step for the implementation of threads and a first class feature of \CFA.
+
+The core API of coroutines revolve around two features : independent stacks and suspedn/resume. Much like threads the syntax for declaring a coroutine is declaring a type and a main routine for it to start :
+\begin{lstlisting}
+	coroutine struct MyCoroutine {
+		//...
+	};
+
+	//ctor
+	void ?{}(MyCoroutine* this) {
+
+	}
+
+	//main
+	void ?main(MyCoroutine* this) {
+		sout | "Hello World!" | endl;
+	}
+\end{lstlisting}
+
+One a coroutine is created, users can context switch to it using \code{suspend} and come back using \code{resume}. Here is an example of a solution to the fibonnaci problem using coroutines :
+\begin{lstlisting}
+	coroutine struct Fibonacci {
+		int fn; // used for communication
+	};
+
+	void ?main(Fibonacci* this) {
+		int fn1, fn2; 		// retained between resumes
+		this->fn = 0;
+		fn1 = this->fn;
+		suspend(this); 		// return to last resume
+
+		this->fn = 1;
+		fn2 = fn1;
+		fn1 = this->fn;
+		suspend(this); 		// return to last resume
+
+		for ( ;; ) {
+			this->fn = fn1 + fn2;
+			fn2 = fn1;
+			fn1 = this->fn;
+			suspend(this); 	// return to last resume
+		}
+	}
+
+	int next(Fibonacci& this) {
+		resume(&this); // transfer to last suspend
+		return this.fn;
+	}
+
+	void main() {
+		Fibonacci f1, f2;
+		for ( int i = 1; i <= 10; i += 1 ) {
+			sout | next(f1) | '§\verb+ +§' | next(f2) | endl;
+		}
 	}
 \end{lstlisting}
 
 \newpage
-\large{\textbf{WORK IN PROGRESS}}
+\bf{WORK IN PROGRESS}
 \subsection{The \CFA Kernel : Processors, Clusters and Threads}\label{kernel}
 
Index: doc/proposals/concurrency/glossary.tex
===================================================================
--- doc/proposals/concurrency/glossary.tex	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ doc/proposals/concurrency/glossary.tex	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -14,5 +14,5 @@
 
 \longnewglossaryentry{group-acquire}
-{name={grouped acquiring}}
+{name={bulked acquiring}}
 {
 Implicitly acquiring several monitors when entering a monitor.
Index: doc/proposals/concurrency/style.tex
===================================================================
--- doc/proposals/concurrency/style.tex	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ doc/proposals/concurrency/style.tex	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -2,5 +2,5 @@
 
 \lstset{
-morekeywords=[2]{nomutex,mutex,thread,wait,wait_release,signal,signal_block,accept,monitor},
+morekeywords=[2]{nomutex,mutex,thread,wait,wait_release,signal,signal_block,accept,monitor,suspend,resume,coroutine},
 keywordstyle=[2]\color{blue},				% second set of keywords for concurency
 basicstyle=\linespread{0.9}\tt\small,		% reduce line spacing and use typewriter font
Index: doc/proposals/concurrency/version
===================================================================
--- doc/proposals/concurrency/version	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ doc/proposals/concurrency/version	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,1 +1,1 @@
-0.5.150
+0.7.48
Index: doc/proposals/references.md
===================================================================
--- doc/proposals/references.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ doc/proposals/references.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,208 @@
+## Lvalues and References ##
+C defines the notion of a _lvalue_, essentially an addressable object, as well 
+as a number of type _qualifiers_, `const`, `volatile`, and `restrict`. 
+As these type qualifiers are generally only meaningful to the type system as 
+applied to lvalues, the two concepts are closely related. 
+A const lvalue cannot be modified, the compiler cannot assume that a volatile 
+lvalue will not be concurrently modified by some other part of the system, and 
+a restrict lvalue must have pointer type, and the compiler may assume that no 
+other pointer in scope aliases that pointer (this is solely a performance 
+optimization, and may be ignored by implementers).
+_Lvalue-to-rvalue conversion_, which takes an lvalue of type `T` and converts 
+it to an expression result of type `T` (commonly called an _rvalue_ of type 
+`T`) also strips all the qualifiers from the lvalue, as an expression result 
+is a value, not an addressable object that can have properties like 
+immutability. 
+Though lvalue-to-rvalue conversion strips the qualifiers from lvalues, 
+derived rvalue types such as pointer types may include qualifiers; 
+`const int *` is a distinct type from `int *`, though the latter is safely 
+convertable to the former. 
+In general, any number of qualifiers can be safely added to the 
+pointed-to-type of a pointer type, e.g. `int *` converts safely to 
+`const int *` and `volatile int *`, both of which convert safely to 
+`const volatile int *`.
+
+Since lvalues are precicely "addressable objects", in C, only lvalues can be 
+used as the operand of the `&` address-of operator. 
+Similarly, only modifiable lvalues may be used as the assigned-to 
+operand of the mutating operators: assignment, compound assignment 
+(e.g. `+=`), and increment and decrement; roughly speaking, lvalues without 
+the `const` qualifier are modifiable, but lvalues of incomplete types, array 
+types, and struct or union types with const members are also not modifiable. 
+Lvalues are produced by the following expressions: object identifiers 
+(function identifiers are not considered to be lvalues), the result of the `*` 
+dereference operator applied to an object pointer, the result of a member 
+expression `s.f` if the left argument `s` is an lvalue (note that the 
+preceding two rules imply that the result of indirect member expressions 
+`s->f` are always lvalues, by desugaring to `(*s).f`), and the result of the 
+indexing operator `a[i]` (similarly by its desugaring to `*((a)+(i))`). 
+Somewhat less obviously, parenthesized lvalue expressions, string literals, 
+and compound literals (e.g. `(struct foo){ 'x', 3.14, 42 }`) are also lvalues.
+
+All of the conversions described above are defined in standard C, but Cforall 
+requires further features from its type system. 
+In particular, to allow overloading of the `*?` and `?[?]` dereferencing and 
+indexing operators, Cforall requires a way to declare that the functions 
+defining these operators return lvalues, and since C functions never return 
+lvalues and for syntactic reasons we wish to distinguish functions which 
+return lvalues from functions which return pointers, this is of necessity an 
+extension to standard C. 
+In the current design, an `lvalue` qualifier can be added to function return 
+types (and only to function return types), the effect of which is to return a 
+pointer which is implicitly dereferenced by the caller.
+C++ includes the more general concept of _references_, which are typically 
+implemented as implicitly dereferenced pointers as well. 
+Another use case which C++ references support is providing a way to pass 
+function parameters by reference (rather than by value) with a natural 
+syntax; Cforall in its current state has no such mechanism. 
+As an example, consider the following (currently typical) copy-constructor 
+signature and call:
+
+	void ?{}(T *lhs, T rhs);
+	
+	T x;
+	T y = { x };
+
+Note that the right-hand argument is passed by value, and would in fact be 
+copied twice in the course of the constructor call `T y = { x };` (once into 
+the parameter by C's standard `memcpy` semantics, once again in the body of 
+the copy constructor, though it is possible that return value optimization 
+will elide the `memcpy`-style copy).
+However, to pass by reference using the existing pointer syntax, the example 
+above would look like this:
+
+	void ?{}(T *lhs, const T *rhs);
+	
+	T x;
+	T y = { &x };
+
+This example is not even as bad as it could be; assuming pass-by-reference is 
+the desired semantics for the `?+?` operator, that implies the following 
+design today:
+
+	T ?+?(const T *lhs, const T *rhs);
+	
+	T a, b;
+	T c = &a + &b,
+
+In addition to `&a + &b` being unsightly and confusing syntax to add `a` and 
+`b`, it also introduces a possible ambiguity with pointer arithmetic on `T*` 
+which can only be resolved by return-type inference.
+
+Pass-by-reference and marking functions as returning lvalues instead of the 
+usual rvalues are actually closely related concepts, as obtaining a reference 
+to pass depends on the referenced object being addressable, i.e. an lvalue, 
+and lvalue return types are effectively return-by-reference. 
+Cforall should also unify the concepts, with a parameterized type for 
+"reference to `T`", which I will write `T&`. 
+
+Firstly, assignment to a function parameter as part of a function call and 
+local variable initialization have almost identical semantics, so should be 
+treated similarly for the reference type too; this implies we should be able 
+to declare local variables of reference type, as in the following:
+
+	int x = 42;
+	int& r = x; // r is now an alias for x
+
+Unlike in C++, we would like to have the capability to re-bind references 
+after initialization, as this allows the attractive syntax of references to 
+support some further useful code patterns, such as first initializing a 
+reference after its declaration. 
+Constant references to `T` (`T& const`) should not be re-bindable. 
+
+One option for re-binding references is to use a dedicated operator, as in the 
+code example below:
+
+	int i = 42, j = 7;
+	int& r = i;  // bind r to i
+	r = j;       // set i (== r) to 7
+	r := j;      // rebind r to j using the new := rebind operator
+	i = 42;      // reset i (!= r) to 42
+	assert( r == 7 );
+
+Another option for reference rebind is to modify the semantics of the `&` 
+address-of operator. 
+In standard C, the address-of operator never returns an lvalue, but for an 
+object of type `T`, returns a `T*`. 
+If the address-of operator returned an lvalue for references, this would 
+allow reference rebinding using the usual pointer assignment syntax; 
+that is, if address-of a `T&` returned a `T*&` then the following works:
+
+    int i = 42; j = 7;
+    int& r = i;  // bind r to i
+    r = j;       // set i (== r) to 7
+    &r = &j;     // rebind r to j using the newly mutable "address-of reference"
+    i = 42;      // reset i (!= r) to 42
+    assert( r == 7 );
+
+This change (making addresses of references mutable) allows use of existing 
+operators defined over pointers, as well as elegant handling of nested 
+references-to-references.
+
+The semantics and restrictions of `T&` are effectively the semantics of an 
+lvalue of type `T`, and by this analogy there should be a safe, qualifier 
+dropping conversion from `const volatile restrict T&` (and every other 
+qualifier combination on the `T` in `T&`) to `T`. 
+With this conversion, the resolver may type most expressions that C would 
+call "lvalue of type `T`" as `T&`. 
+There's also an obvious argument that lvalues of a (possibly-qualified) type 
+`T` should be convertable to references of type `T`, where `T` is also 
+so-qualified (e.g. lvalue `int` to `int&`, lvalue `const char` to 
+`const char&`). 
+By similar arguments to pointer types, qualifiers should be addable to the 
+referred-to type of a reference (e.g. `int&` to `const int&`). 
+As a note, since pointer arithmetic is explictly not defined on `T&`, 
+`restrict T&` should be allowable and would have alias-analysis rules that 
+are actually comprehensible to mere mortals.
+
+Using pass-by-reference semantics for function calls should not put syntactic 
+constraints on how the function is called; particularly, temporary values 
+should be able to be passed by reference. 
+The mechanism for this pass-by-reference would be to store the value of the 
+temporary expression into a new unnamed temporary, and pass the reference of 
+that temporary to the function.
+As an example, the following code should all compile and run:
+
+	void f(int& x) { printf("%d\n", x++); }
+	
+	int i = 7, j = 11;
+	const int answer = 42;
+	
+	f(i);      // (1)
+	f(42);     // (2)
+	f(i + j);  // (3)
+	f(answer); // (4)
+
+The semantics of (1) are just like C++'s, "7" is printed, and `i` has the 
+value 8 afterward. 
+For (2), "42" is printed, and the increment of the unnamed temporary to 43 is 
+not visible to the caller; (3) behaves similarly, printing "19", but not 
+changing `i` or `j`. 
+(4) is a bit of an interesting case; we want to be able to support named 
+constants like `answer` that can be used anywhere the constant expression 
+they're replacing (like `42`) could go; in this sense, (4) and (2) should have 
+the same semantics. 
+However, we don't want the mutation to the `x` parameter to be visible in 
+`answer` afterward, because `answer` is a constant, and thus shouldn't change. 
+The solution to this is to allow chaining of the two lvalue conversions; 
+`answer` has the type `const int&`, which can be converted to `int` by the 
+lvalue-to-rvalue conversion (which drops the qualifiers), then up to `int&` 
+by the temporary-producing rvalue-to-lvalue conversion. 
+Thus, an unnamed temporary is inserted, initialized to `answer` (i.e. 42), 
+mutated by `f`, then discarded; "42" is printed, just as in case (2), and 
+`answer` still equals 42 after the call, because it was the temporary that was 
+mutated, not `answer`.
+It may be somewhat surprising to C++ programmers that `f(i)` mutates `i` while 
+`f(answer)` does not mutate `answer` (though `f(answer)` would be illegal in 
+C++, leading to the dreaded "const hell"), but the behaviour of this rule can 
+be determined by examining local scope with the simple rule "non-`const` 
+references to `const` variables produce temporaries", which aligns with 
+programmer intuition that `const` variables cannot be mutated.
+
+To bikeshed syntax for `T&`, there are three basic options: language 
+keywords (`lvalue T` is already in Cforall), compiler-supported "special" 
+generic types (e.g. `ref(T)`), or sigils (`T&` is familiar to C++ 
+programmers). 
+Keyword or generic based approaches run the risk of name conflicts with 
+existing code, while any sigil used would have to be carefully chosen to not 
+create parsing conflicts.
Index: doc/proposals/virtual.txt
===================================================================
--- doc/proposals/virtual.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ doc/proposals/virtual.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,163 @@
+Proposal for virtual functionality
+
+Imagine the following code :
+
+trait drawable(otype T) {
+      void draw(T* );
+};
+
+struct text {
+      char* text;
+};
+
+void draw(text*);
+
+struct line{
+      vec2 start;
+      vec2 end;
+};
+
+void draw(line*);
+
+While all the members of this simple UI support drawing creating a UI that easily
+supports both these UI requires some tedious boiler-plate code :
+
+enum type_t { text, line };
+
+struct widget {
+      type_t type;
+      union {
+            text t;
+            line l;
+      };
+};
+
+void draw(widget* w) {
+      switch(w->type) {
+            case text : draw(&w->text); break;
+            case line : draw(&w->line); break;
+            default : handle_error(); break;
+      }
+}
+
+While this code will work as indented, adding any new widgets or any new widget behaviors
+requires changing existing code to add the desired functionality. To ease this maintenance
+effort required CFA introduces the concept of dynamic types, in a manner similar to C++.
+
+A simple usage of dynamic type with the previous example would look like :
+
+drawable* objects[10];
+fill_objects(objects);
+
+while(running) {
+      for(drawable* object : objects) {
+            draw(object);
+      }
+}
+
+However, this is not currently do-able in the current CFA and furthermore is not
+possible to implement statically. Therefore we need to add a new feature to handle
+having dynamic types like this (That is types that are found dynamically not types
+that change dynamically).
+
+C++ uses inheritance and virtual functions to find the
+desired type dynamically. CFA takes inspiration from this solution.
+
+What we really want to do is express the fact that calling draw() on a object
+should find the dynamic type of the parameter before calling the routine, much like the
+hand written example given above. We can express this by adding the virtual keyword on
+the parameter of the constraints on our trait:
+
+trait drawable(otype T) {
+      void draw(virtual T* );
+};
+
+This expresses the idea that drawable is similar to an abstract base class in C++ and
+also gives meaning to trying to take a pointer of drawable. That is anything that can
+be cast to a drawable pointer has the necessary information to call the draw routine on
+that type. Before that drawable was only a abstract type while now it also points to a
+piece of storage which specify which behavior the object will have at run time.
+
+This storage needs to be allocate somewhere. C++ just adds an invisible pointer at
+the beginning of the struct but we can do something more explicit for users, actually
+have a visible special field :
+
+struct text {
+      char* text;
+      vtable drawable;
+};
+
+struct line{
+      vtable drawable;
+      vec2 start;
+      vec2 end;
+};
+
+With these semantics, adding a "vtable drawable" means that text pointers and line pointers are now
+convertible to drawable pointers. This conversion will not necessarily be a type only change however, indeed,
+the drawable pointer will point to the field "vtable drawable" not the head of the struct. However, since all
+the types are known at compile time, converting pointers becomes a simple offset operations.
+
+The vtable field contains a pointer to a vtable which contains all the information needed for the caller
+to find the function pointer of the desired behavior.
+
+One of the limitations of this design is that it does not support double dispatching, which
+concretely means traits cannot have routines with more than one virtual parameter. This design
+would have many ambiguities if it did support multiple virtual parameter. A futher limitation is 
+that traits over more than one type cannot have vtables meaningfully defined for them, as the 
+particular vtable to use would be a function of the other type(s) the trait is defined over.
+
+It is worth noting that the function pointers in these vtables are bound at object construction, rather than 
+function call-site, as in Cforall's existing polymorphic functions. As such, it is possible that two objects 
+with the same static type would have a different vtable (consider what happens if draw(line*) is overridden 
+between the definitions of two line objects). Given that the virtual drawable* erases static types though, 
+this should not be confusing in practice. A more distressing possibility is that of creating an object that 
+outlives the scope of one of the functions in its vtable. This is certainly a possible bug, but it is of a 
+type that C programmers are familiar with, and should be able to avoid by the usual methods.
+
+Extensibility.
+
+One of the obvious critics of this implementation is that it lacks extensibility for classes
+that cannot be modified (ex: Linux C headers). However this solution can be extended to
+allow more extensibility by adding "Fat pointers".
+
+Indeed, users could already "solve" this issue by writing their own fat pointers as such:
+
+trait MyContext(otype T) {
+      void* get_stack(virtual T*)
+};
+
+void* get_stack(ucontext_t *context);
+
+struct fat_ucontext_t {
+      vtable MyContext;
+      ucontext_t *context;
+}
+
+//Tedious forwarding routine
+void* get_stack(fat_ucontext_t *ptr) {
+      return get_stack(ptr->context);
+}
+
+However, users would have to write all the virtual methods they want to override and make
+them all simply forward to the existing method that takes the corresponding POCO(Plain Old C Object).
+
+The alternative we propose is to use language level fat pointers :
+
+trait MyContext(otype T) {
+      void* get_stack(virtual T*)
+};
+
+void* get_stack(ucontext_t *context);
+
+//The type vptr(ucontext_t) all
+vptr(ucontext_t) context;
+
+These behave exactly as the previous example but all the forwarding routines are automatically generated.
+
+Bikeshedding.
+
+It may be desirable to add fewer new keywords than discussed in this proposal; it is possible that "virtual" 
+could replace both "vtable" and "vptr" above with unambiguous contextual meaning. However, for purposes of 
+clarity in the design discussion it is beneficial to keep the keywords for separate concepts distinct.
+
Index: doc/proposals/void_ptr.md
===================================================================
--- doc/proposals/void_ptr.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ doc/proposals/void_ptr.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,44 @@
+## Options for safer void* handling #
+C allows implicit conversions between `void*` and other pointer types, as per 
+section 6.3.2.3.1 of the standard. 
+Making these implicit conversions explicit in Cforall would provide 
+significant type-safety benefits, and is precedented in C++. 
+A weaker version of this proposal would be to allow implicit conversions to 
+`void*` (as a sort of "top type" for all pointer types), but to make the 
+unsafe conversion from `void*` back to a concrete pointer type an explicit 
+conversion. 
+However, `int *p = malloc( sizeof(int) );` and friends are hugely common 
+in C code, and rely on the unsafe implicit conversion from the `void*` return 
+type of `malloc` to the `int*` type of the variable - obviously it would be 
+too much of a source-compatibility break to disallow this for C code. 
+We do already need to wrap C code in an `extern "C"` block, though, so it is 
+technically feasible to make the `void*` conversions implicit in C but 
+explicit in Cforall. 
+
+As a possible mitigation for calling C code with `void*`-based APIs, pointers-to-dtype are 
+calling-convention compatible with `void*`; we could read `void*` in function 
+signatures as essentially a fresh dtype type variable, e.g:
+
+	void* malloc( size_t )
+		=> forall(dtype T0) T0* malloc( size_t )
+	void qsort( void*, size_t, size_t, int (*)( const void*, const void* ) )
+		=> forall(dtype T0, dtype T1, dtype T2)
+		   void qsort( T0*, size_t, size_t, int (*)( const T1*, const T2* ) )
+
+In this case, there would be no conversion needed to call `malloc`, just the 
+polymorphic type binding.
+This should handle many of the uses of `void*` in C.
+
+This feature would even allow us to leverage some of Cforall's type safety to write 
+better declarations for legacy C API functions, like the following wrapper for 
+`qsort`:
+
+	extern "C" { // turns off name-mangling so that this calls the C library
+		// call-compatible type-safe qsort signature
+		forall(dtype T)
+		void qsort( T*, size_t, size_t, int (*)( const T*, const T* ) );
+		
+		// forbid type-unsafe C signature from resolving
+		void qsort( void*, size_t, size_t, int (*)( const void*, const void* ) )
+			= delete;
+	}
Index: doc/proposals/zero_one.md
===================================================================
--- doc/proposals/zero_one.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ doc/proposals/zero_one.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,182 @@
+## Types for 0 and 1 literals ##
+The literals `0` and `1` are treated specially by Cforall, due to their 
+potential uses in operator overloading. 
+Earlier versions of Cforall allowed `0` and `1` to be variable names, allowing 
+multiple interpretations of them according to the existing variable 
+overloading rules, with the following declarations in the prelude:
+
+	const int 0, 1;
+	forall ( dtype DT ) const DT * const    0;
+	forall ( ftype FT ) FT * const          0;
+
+This did, however, create some backward-compatibility problems and potential 
+performance issues, and works poorly for generic types. To start with, this 
+(entirely legal C) code snippet doesn't compile in Cforall:
+
+	if ( 0 ) {}
+
+It desugars to `if ( (int)(0 != 0) ) {}`, and since both `int` and 
+`forall(dtype DT) DT*` have a != operator which returns `int` the resolver can 
+not choose which `0` variable to take, because they're both exact matches.
+
+The general `!=` computation may also be less efficient than a check for a zero 
+value; take the following example of a rational type:
+
+	struct rational { int32_t num, int32_t den };
+	rational 0 = { 0, 1 };
+	
+	int ?!=? (rational a, rational b) {
+		return ((int64_t)a.num)*b.den != ((int64_t)b.num)*a.den;
+	}
+	
+	int not_zero (rational a) { return a.num != 0; }
+
+To check if two rationals are equal we need to do a pair of multiplications to 
+normalize them (the casts in the example are to prevent overflow), but to 
+check if a rational is non-zero we just need to check its numerator, a more 
+efficient operation.
+
+Finally, though polymorphic null-pointer variables can be meaningfully 
+defined, most other polymorphic variables cannot be, which makes it difficult 
+to make generic types "truthy" using the existing system:
+
+	forall(otype T) struct pair { T x; T y; };
+	forall(otype T | { T 0; }) pair(T) 0 = { 0, 0 };
+
+Now, it seems natural enough to want to define the zero for this pair type as 
+a pair of the zero values of its element type (if they're defined). 
+The declaration of `pair(T) 0` above is actually illegal though, as there is 
+no way to represent the zero values of an infinite number of types in the 
+single memory location available for this polymorphic variable - the 
+polymorphic null-pointer variables defined in the prelude are legal, but that 
+is only because all pointers are the same size and the single zero value is a 
+legal value of all pointer types simultaneously; null pointer is, however, 
+somewhat unique in this respect.
+
+The technical explanation for the problems with polymorphic zero is that `0` 
+is really a rvalue, not a lvalue - an expression, not an object. 
+Drawing from this, the solution we propose is to give `0` a new built-in type, 
+`zero_t`, and similarly give `1` the new built-in type `one_t`. 
+If the prelude defines `!=` over `zero_t` this solves the `if ( 0 )` problem, 
+because now the unambiguous best interpretation of `0 != 0` is to read them 
+both as `zero_t` (and say that this expression is false). 
+Backwards compatibility with C can be served by defining conversions in the 
+prelude from `zero_t` and `one_t` to `int` and the appropriate pointer 
+types, as below:
+
+	// int 0;
+	forall(otype T | { void ?{safe}(T*, int); }) void ?{safe} (T*, zero_t);
+	forall(otype T | { void ?{unsafe}(T*, int); }) void ?{unsafe} (T*, zero_t);
+	
+	// int 1;
+	forall(otype T | { void ?{safe}(T*, int); }) void ?{safe} (T*, one_t);
+	forall(otype T | { void ?{unsafe}(T*, int); }) void ?{unsafe} (T*, one_t);
+	
+	// forall(dtype DT) const DT* 0;
+	forall(dtype DT) void ?{safe}(const DT**, zero_t);
+	// forall(ftype FT) FT* 0;
+	forall(ftype FT) void ?{safe}(FT**, zero_t);
+
+Further, with this change, instead of making `0` and `1` overloadable 
+variables, we can instead allow user-defined constructors (or, more flexibly, 
+safe conversions) from `zero_t`, as below:
+
+	// rational 0 = { 0, 1 };
+	void ?{safe} (rational *this, zero_t) { this->num = 0; this->den = 1; }
+
+Note that we don't need to name the `zero_t` parameter to this constructor, 
+because its only possible value is a literal zero. 
+This one line allows `0` to be used anywhere a `rational` is required, as well 
+as enabling the same use of rationals in boolean contexts as above (by 
+interpreting the `0` in the desguraring to be a rational by this conversion). 
+Furthermore, while defining a conversion function from literal zero to 
+`rational` makes rational a "truthy" type able to be used in a boolean 
+context, we can optionally further optimize the truth decision on rationals as 
+follows:
+
+	int ?!=? (rational a, zero_t) { return a.num != 0; }
+
+This comparison function will be chosen in preference to the more general 
+rational comparison function for comparisons against literal zero (like in 
+boolean contexts) because it doesn't require a conversion on the `0` argument. 
+Functions of the form `int ?!=? (T, zero_t)` can acutally be used in general 
+to make a type `T` truthy without making `0` a value which can convert to that 
+type, a capability not available in the current design.
+
+This design also solves the problem of polymorphic zero for generic types, as 
+in the following example:
+
+	// ERROR: forall(otype T | { T 0; }) pair(T) 0 = { 0, 0 };
+	forall(otype T | { T 0; }) void ?{safe} (pair(T) *this, zero_t) {
+		this->x = 0; this->y = 0;
+	}
+
+The polymorphic variable declaration didn't work, but this constructor is 
+perfectly legal and has the desired semantics.
+
+We can assert that `T` can be used in a boolean context as follows: 
+
+	`forall(otype T | { int ?!=?(T, zero_t); })`
+ 
+Since the C standard (6.5.16.1.1) specifically states that pointers can be 
+assigned into `_Bool` variables (and implies that other artithmetic types can 
+be assigned into `_Bool` variables), it seems natural to say that assignment 
+into a `_Bool` variable effectively constitutes a boolean context. 
+To allow this interpretation, I propose including the following function (or 
+its effective equivalent) in the prelude:
+
+	forall(otype T | { int ?!=?(T, zero_t); })
+	void ?{safe}( _Bool *this, T that ) { *this = that != 0; }
+
+Note that this conversion is not transitive; that is, for `t` a variable of 
+some "truthy" type `T`, `(_Bool)t;` would use this conversion (in the absence 
+of a lower-cost one), `(int)t;` would not use this conversion (and in fact 
+would not be legal in the absence of another valid way to convert a `T` to an 
+`int`), but `(int)(_Bool)t;` could legally use this conversion.
+
+Similarly giving literal `1` the special type `one_t` allows for more 
+concise and consistent specification of the increment and decrement operators, 
+using the following de-sugaring:
+
+	++i => i += 1
+	i++ => (tmp = i, i += 1, tmp)
+	--i => i -= 1
+	i-- => (tmp = i, i -= 1, tmp)
+
+In the examples above, `tmp` is a fresh temporary with its type inferred from 
+the return type of `i += 1`. 
+Under this proposal, defining a conversion from `one_t` to `T` and a 
+`lvalue T ?+=? (T*, T)` provides both the pre- and post-increment operators 
+for free in a consistent fashion (similarly for -= and the decrement 
+operators).
+If a meaningful `1` cannot be defined for a type, both increment operators can 
+still be defined with the signature `lvalue T ?+=? (T*, one_t)`. 
+Similarly, if scalar addition can be performed on a type more efficiently than 
+by repeated increment, `lvalue T ?+=? (T*, int)` will not only define the 
+addition operator, it will simultaneously define consistent implementations of 
+both increment operators (this can also be accomplished by defining a 
+conversion from `int` to `T` and an addition operator `lvalue T ?+=?(T*, T)`).
+
+To allow functions of the form `lvalue T ?+=? (T*, int)` to satisfy "has an 
+increment operator" assertions of the form `lvalue T ?+=? (T*, one_t)`, 
+we also define a non-transitive unsafe conversion from `_Bool` (allowable 
+values `0` and `1`) to `one_t` (and `zero_t`) as follows:
+
+	void ?{unsafe} (one_t*, _Bool) {}
+
+As a note, the desugaring of post-increment above is possibly even more 
+efficient than that of C++ - in C++, the copy to the temporary may be hidden 
+in a separately-compiled module where it can't be elided in cases where it is 
+not used, whereas this approach for Cforall always gives the compiler the 
+opportunity to optimize out the temporary when it is not needed. 
+Furthermore, one could imagine a post-increment operator that returned some 
+type `T2` that was implicitly convertable to `T` but less work than a full 
+copy of `T` to create (this seems like an absurdly niche case) - since the 
+type of `tmp` is inferred from the return type of `i += 1`, you could set up 
+functions with the following signatures to enable an equivalent pattern in 
+Cforall:
+
+	lvalue T2 ?+=? (T*, one_t);   // increment operator returns T2
+	void ?{} (T2*, T);            // initialize T2 from T for use in `tmp = i`
+	void ?{safe} (T*, T2);        // allow T2 to be used as a T when needed to 
+	                              // preserve expected semantics of T x = y++;
Index: doc/working/resolver_design.md
===================================================================
--- doc/working/resolver_design.md	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ doc/working/resolver_design.md	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1382,4 +1382,12 @@
 hypothesis needs to be empirically validated.
 
+Another approach would be to abandon expression-tree ordering for 
+subexpression matching, and order by "most constrained symbol"; symbols would  
+be more constrained if there were fewer matching declarations, fewer 
+subexpressions yet to resolve, or possibly fewer possible types the expression 
+could resolve to. Ordering the expressions in a priority-queue by this metric 
+would not necessarily produce a top-down or a bottom-up order, but would add 
+opportunities for pruning based on memoized upper and lower bounds.
+
 Both Baker and Cormack explicitly generate all possible interpretations of a 
 given expression; thinking of the set of interpretations of an expression as a 
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/CodeGen/CodeGenerator.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 13:35:30 2016
-// Update Count     : 352
+// Last Modified On : Tue Dec 13 14:51:27 2016
+// Update Count     : 362
 //
 
@@ -57,4 +57,10 @@
 		if ( decl->get_extension() ) {
 			output << "__extension__ ";
+		} // if
+	} // extension
+
+	void CodeGenerator::asmName( DeclarationWithType * decl ) {
+		if ( ConstantExpr * asmName = decl->get_asmName() ) {
+			output << " asm ( " << asmName->get_constant()->get_value() << " )";
 		} // if
 	} // extension
@@ -141,4 +147,6 @@
 		} // if
 
+		asmName( functionDecl );
+
 		// acceptAll( functionDecl->get_oldDecls(), *this );
 		if ( functionDecl->get_statements() ) {
@@ -153,4 +161,6 @@
 		handleStorageClass( objectDecl );
 		output << genType( objectDecl->get_type(), mangleName( objectDecl ) );
+
+		asmName( objectDecl );
 
 		if ( objectDecl->get_init() ) {
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/CodeGen/CodeGenerator.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 13:37:07 2016
-// Update Count     : 38
+// Last Modified On : Tue Dec 13 13:51:53 2016
+// Update Count     : 39
 //
 
@@ -108,4 +108,6 @@
 		};
 
+		void asmName( DeclarationWithType *decl );
+
 		void extension( Expression *expr );
 		void extension( Declaration *decl );
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/CodeGen/GenType.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -204,5 +204,5 @@
 	void GenType::visit( ZeroType *zeroType ) {
 		// ideally these wouldn't hit codegen at all, but should be safe to make them ints
-		typeString = "int " + typeString;
+		typeString = "long int " + typeString;
 		handleQualifiers( zeroType );
 	}
@@ -210,5 +210,5 @@
 	void GenType::visit( OneType *oneType ) {
 		// ideally these wouldn't hit codegen at all, but should be safe to make them ints
-		typeString = "int " + typeString;
+		typeString = "long int " + typeString;
 		handleQualifiers( oneType );
 	}
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/CodeGen/OperatorTable.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 14 16:48:27 2016
-// Update Count     : 9
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Dec 13 14:33:05 2016
+// Update Count     : 10
 //
 
@@ -21,5 +21,5 @@
 		const OperatorInfo tableValues[] = {
 			{	"?[?]",		"",		"_operator_index",				OT_INDEX			},
-			{	"?{}",		"=",		"_constructor",					OT_CTOR				},
+			{	"?{}",		"=",	"_constructor",					OT_CTOR				},
 			{	"^?{}",		"",		"_destructor",					OT_DTOR				},
 			{	"?()",		"",		"_operator_call",				OT_CALL				},
Index: src/Common/Assert.cc
===================================================================
--- src/Common/Assert.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Common/Assert.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,10 +1,10 @@
-// 
+//
 // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
 //
 // The contents of this file are covered under the licence agreement in the
 // file "LICENCE" distributed with Cforall.
-// 
-// Assert.cc -- 
-// 
+//
+// Assert.cc --
+//
 // Author           : Peter A. Buhr
 // Created On       : Thu Aug 18 13:26:59 2016
@@ -12,5 +12,5 @@
 // Last Modified On : Fri Aug 19 17:07:08 2016
 // Update Count     : 10
-// 
+//
 
 #include <assert.h>
@@ -35,4 +35,6 @@
 	va_start( args, fmt );
 	vfprintf( stderr, fmt, args );
+	va_end( args );
+	fprintf( stderr, "\n" );
 	abort();
 }
@@ -43,3 +45,2 @@
 // compile-command: "make install" //
 // End:  //
-
Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Common/utility.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Sep 23 11:46:47 2016
-// Update Count     : 28
+// Last Modified On : Wed Dec 14 21:25:25 2016
+// Update Count     : 31
 //
 
@@ -36,5 +36,5 @@
 }
 
-template<typename T, typename U>
+template< typename T, typename U >
 struct maybeBuild_t {
 	static T * doit( const U *orig ) {
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/InitTweak/FixInit.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -346,5 +346,5 @@
 
 			if ( VariableExpr * function = dynamic_cast< VariableExpr * > ( appExpr->get_function() ) ) {
-				if ( function->get_var()->get_linkage() == LinkageSpec::Intrinsic ) {
+				if ( LinkageSpec::isBuiltin( function->get_var()->get_linkage() ) ) {
 					// optimization: don't need to copy construct in order to call intrinsic functions
 					return appExpr;
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/InitTweak/InitTweak.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -304,4 +304,15 @@
 
 	namespace {
+		DeclarationWithType * getCalledFunction( Expression * expr );
+
+		template<typename CallExpr>
+		DeclarationWithType * handleDerefCalledFunction( CallExpr * expr ) {
+			// (*f)(x) => should get "f"
+			std::string name = getFunctionName( expr );
+			assertf( name == "*?", "Unexpected untyped expression: %s", name.c_str() );
+			assertf( ! expr->get_args().empty(), "Can't get called function from dereference with no arguments" );
+			return getCalledFunction( expr->get_args().front() );
+		}
+
 		DeclarationWithType * getCalledFunction( Expression * expr ) {
 			assert( expr );
@@ -312,4 +323,8 @@
 			} else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
 				return getCalledFunction( castExpr->get_arg() );
+			} else if ( UntypedExpr * untypedExpr = dynamic_cast< UntypedExpr * >( expr ) ) {
+				return handleDerefCalledFunction( untypedExpr );
+			} else if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * > ( expr ) ) {
+				return handleDerefCalledFunction( appExpr );
 			}
 			return nullptr;
@@ -377,4 +392,15 @@
 
 	namespace {
+		std::string funcName( Expression * func );
+
+		template<typename CallExpr>
+		std::string handleDerefName( CallExpr * expr ) {
+			// (*f)(x) => should get name "f"
+			std::string name = getFunctionName( expr );
+			assertf( name == "*?", "Unexpected untyped expression: %s", name.c_str() );
+			assertf( ! expr->get_args().empty(), "Can't get function name from dereference with no arguments" );
+			return funcName( expr->get_args().front() );
+		}
+
 		std::string funcName( Expression * func ) {
 			if ( NameExpr * nameExpr = dynamic_cast< NameExpr * >( func ) ) {
@@ -388,4 +414,8 @@
 			} else if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * > ( func ) ) {
 				return funcName( memberExpr->get_member() );
+			} else if ( UntypedExpr * untypedExpr = dynamic_cast< UntypedExpr * >( func ) ) {
+				return handleDerefName( untypedExpr );
+			} else if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( func ) ) {
+				return handleDerefName( appExpr );
 			} else {
 				assertf( false, "Unexpected expression type being called as a function in call expression" );
@@ -395,4 +425,7 @@
 
 	std::string getFunctionName( Expression * expr ) {
+		// there's some unforunate overlap here with getCalledFunction. Ideally this would be able to use getCalledFunction and
+		// return the name of the DeclarationWithType, but this needs to work for NameExpr and UntypedMemberExpr, where getCalledFunction
+		// can't possibly do anything reasonable.
 		if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr ) ) {
 			return funcName( appExpr->get_function() );
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -41,5 +41,5 @@
 driver_cfa_cpp_SOURCES = ${SRC}
 driver_cfa_cpp_LDADD = ${LEXLIB} -ldl			# yywrap
-driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT
+driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2
 driver_cfa_cpp_LDFLAGS = -Xlinker -export-dynamic
 
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -69,4 +69,6 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
 DIST_COMMON = $(srcdir)/CodeGen/module.mk $(srcdir)/Common/module.mk \
 	$(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \
@@ -259,4 +261,7 @@
 BACKEND_CC = @BACKEND_CC@
 CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
 CCDEPMODE = @CCDEPMODE@
 CFA_BACKEND_CC = @CFA_BACKEND_CC@
@@ -293,4 +298,5 @@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -324,5 +330,9 @@
 am__untar = @am__untar@
 bindir = @bindir@
+build = @build@
 build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
 builddir = @builddir@
 datadir = @datadir@
@@ -331,5 +341,9 @@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+host = @host@
 host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
 htmldir = @htmldir@
 includedir = @includedir@
@@ -418,5 +432,5 @@
 driver_cfa_cpp_SOURCES = ${SRC}
 driver_cfa_cpp_LDADD = ${LEXLIB} -ldl			# yywrap
-driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT
+driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2
 driver_cfa_cpp_LDFLAGS = -Xlinker -export-dynamic
 all: $(BUILT_SOURCES)
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/DeclarationNode.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Oct  3 18:03:08 2016
-// Update Count     : 651
+// Last Modified On : Tue Dec 13 14:43:38 2016
+// Update Count     : 660
 //
 
@@ -48,10 +48,11 @@
 		type( nullptr ),
 		storageClass( NoStorageClass ),
+		bitfieldWidth( nullptr ),
 		isInline( false ),
 		isNoreturn( false ),
-		bitfieldWidth( nullptr ),
-		initializer( nullptr ),
 		hasEllipsis( false ),
 		linkage( ::linkage ),
+		asmName( nullptr ),
+		initializer( nullptr ),
 		extension( false ) {
 
@@ -75,4 +76,5 @@
 	delete type;
 	delete bitfieldWidth;
+	// asmName, no delete, passed to next stage
 	delete initializer;
 }
@@ -90,4 +92,5 @@
 	newnode->set_next( maybeClone( get_next() ) );
 	newnode->linkage = linkage;
+	newnode->asmName = maybeClone( asmName );
 
 //	newnode->variable.name = variable.name ? new string( *variable.name ) : nullptr;
@@ -283,5 +286,5 @@
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = nullptr;
-	assert( ! newnode->name ); 
+	assert( ! newnode->name );
 //	newnode->variable.name = name;
 	newnode->name = name;
@@ -372,4 +375,5 @@
 	newnode->type = new TypeData( TypeData::Builtin );
 	newnode->builtin = bt;
+	newnode->type->builtintype = newnode->builtin;
 	return newnode;
 } // DeclarationNode::newBuiltinType
@@ -640,4 +644,10 @@
 }
 
+DeclarationNode * DeclarationNode::addAsmName( ConstantExpr * newname ) {
+	assert( ! asmName );
+	asmName = newname;
+	return this;
+}
+
 DeclarationNode * DeclarationNode::addBitfield( ExpressionNode * size ) {
 	bitfieldWidth = size;
@@ -946,10 +956,10 @@
 
 	if ( type ) {
-		return buildDecl( type, name ? *name : string( "" ), storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
+		return buildDecl( type, name ? *name : string( "" ), storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, asmName, maybeBuild< Initializer >(initializer) )->set_extension( extension );
 	} // if
 
 	if ( ! isInline && ! isNoreturn ) {
 		assertf( name, "ObjectDecl are assumed to have names\n" );
-		return (new ObjectDecl( *name, storageClass, linkage, maybeBuild< Expression >( bitfieldWidth ), nullptr, maybeBuild< Initializer >( initializer ) ))->set_extension( extension );
+		return (new ObjectDecl( *name, storageClass, linkage, maybeBuild< Expression >( bitfieldWidth ), nullptr, maybeBuild< Initializer >( initializer ) ))->set_asmName( asmName )->set_extension( extension );
 	} // if
 
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/ExpressionNode.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -46,5 +46,5 @@
 // type.
 
-static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
+Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
 
 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
@@ -172,4 +172,10 @@
 } // build_constantStr
 
+Expression *build_constantZeroOne( const std::string & str ) {
+	Expression * ret = new ConstantExpr( Constant( str == "0" ? (Type*)new ZeroType( emptyQualifiers ) : (Type*)new OneType( emptyQualifiers ), str ) );
+	delete &str;										// created by lex
+	return ret;
+} // build_constantChar
+
 Expression * build_field_name_FLOATINGconstant( const std::string & str ) {
 	// str is of the form A.B -> separate at the . and return member expression
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/ParseNode.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Oct  3 18:03:08 2016
-// Update Count     : 636
+// Last Modified On : Tue Dec 13 15:37:33 2016
+// Update Count     : 643
 //
 
@@ -154,4 +154,5 @@
 Expression * build_constantFloat( const std::string &str );
 Expression * build_constantChar( const std::string &str );
+Expression * build_constantZeroOne( const std::string &str );
 ConstantExpr * build_constantStr( const std::string &str );
 Expression * build_field_name_FLOATINGconstant( const std::string & str );
@@ -204,5 +205,5 @@
 	enum Aggregate { Struct, Union, Trait, NoAggregate };
 	enum TypeClass { Otype, Dtype, Ftype, NoTypeClass };
-	enum BuiltinType { Valist };
+	enum BuiltinType { Valist, Zero, One, NoBuiltinType };
 
 	static const char * storageName[];
@@ -256,4 +257,5 @@
 	DeclarationNode * addAssertions( DeclarationNode * );
 	DeclarationNode * addName( std::string * );
+	DeclarationNode * addAsmName( ConstantExpr * );
 	DeclarationNode * addBitfield( ExpressionNode * size );
 	DeclarationNode * addVarArgs();
@@ -308,11 +310,12 @@
 	TypeData * type;
 	StorageClass storageClass;
+	ExpressionNode * bitfieldWidth;
 	bool isInline, isNoreturn;
-	std::list< std::string > attributes;
-	ExpressionNode * bitfieldWidth;
 	std::unique_ptr<ExpressionNode> enumeratorValue;
-	InitializerNode * initializer;
 	bool hasEllipsis;
 	LinkageSpec::Spec linkage;
+	ConstantExpr *asmName;
+	std::list< std::string > attributes;
+	InitializerNode * initializer;
 	bool extension = false;
 	std::string error;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/TypeData.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Sep 24 11:14:26 2016
-// Update Count     : 415
+// Last Modified On : Tue Dec 13 13:40:33 2016
+// Update Count     : 420
 //
 
@@ -215,6 +215,6 @@
 		break;
 	  case Builtin:
-		assert( false );
-		// newtype->builtin = builtin;
+		assert( builtintype == DeclarationNode::Zero || builtintype == DeclarationNode::One );
+		newtype->builtintype = builtintype;
 		break;
 	} // switch
@@ -444,5 +444,13 @@
 		return buildTypeof( td );
 	  case TypeData::Builtin:
-		return new VarArgsType( buildQualifiers( td ) );
+		if(td->builtintype == DeclarationNode::Zero) {
+			return new ZeroType( emptyQualifiers );
+		}
+		else if(td->builtintype == DeclarationNode::One) {
+			return new OneType( emptyQualifiers );
+		}
+		else {
+			return new VarArgsType( buildQualifiers( td ) );
+		}
 	  case TypeData::Symbolic:
 	  case TypeData::Enum:
@@ -574,4 +582,7 @@
 		const_cast<TypeData *>(td)->basictype = DeclarationNode::Int;
 		goto Integral;
+	  default:
+	  	assert(false);
+		return nullptr;
 	} // switch
 
@@ -710,5 +721,5 @@
 } // buildTypeof
 
-Declaration * buildDecl( const TypeData * td, const string &name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, Initializer * init ) {
+Declaration * buildDecl( const TypeData * td, const string &name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init ) {
 	if ( td->kind == TypeData::Function ) {
 		FunctionDecl * decl;
@@ -732,5 +743,5 @@
 		} // for
 		buildList( td->function.oldDeclList, decl->get_oldDecls() );
-		return decl;
+		return decl->set_asmName( asmName );
 	} else if ( td->kind == TypeData::Aggregate ) {
 		return buildAggregate( td );
@@ -740,5 +751,5 @@
 		return buildSymbolic( td, name, sc );
 	} else {
-		return new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, list< Attribute * >(), isInline, isNoreturn );
+		return (new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, list< Attribute * >(), isInline, isNoreturn ))->set_asmName( asmName );
 	} // if
 	return nullptr;
@@ -758,5 +769,5 @@
 			break;
 		  default:
-			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( buildDecl( td->base,  "", DeclarationNode::NoStorageClass, nullptr, false, false, LinkageSpec::Cforall ) ) );
+			ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType* >( buildDecl( td->base,  "", DeclarationNode::NoStorageClass, nullptr, false, false, LinkageSpec::Cforall, nullptr ) ) );
 		} // switch
 	} else {
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/TypeData.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeData.h -- 
+// TypeData.h --
 //
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Oct  3 12:34:08 2016
-// Update Count     : 142
+// Last Modified On : Tue Dec 13 13:39:39 2016
+// Update Count     : 143
 //
 
@@ -74,4 +74,5 @@
 	DeclarationNode::Signedness signedness = DeclarationNode::NoSignedness;
 	DeclarationNode::Length length = DeclarationNode::NoLength;
+	DeclarationNode::BuiltinType builtintype = DeclarationNode::NoBuiltinType;
 	typedef std::bitset< DeclarationNode::NoQualifier > Qualifiers;
 	Qualifiers qualifiers;
@@ -110,5 +111,5 @@
 TupleType * buildTuple( const TypeData * );
 TypeofType * buildTypeof( const TypeData * );
-Declaration * buildDecl( const TypeData *, const std::string &, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, Initializer * init = nullptr );
+Declaration * buildDecl( const TypeData *, const std::string &, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr );
 FunctionType * buildFunction( const TypeData * );
 
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/lex.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -382,6 +382,6 @@
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 183
-#define YY_END_OF_BUFFER 184
+#define YY_NUM_RULES 185
+#define YY_END_OF_BUFFER 186
 /* This struct is not used in this scanner,
    but its presence is necessary. */
@@ -391,105 +391,106 @@
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[895] =
+static yyconst flex_int16_t yy_accept[905] =
     {   0,
-        0,    0,    0,    0,    0,    0,  118,  118,  121,  121,
-      184,  182,    7,    9,    8,  141,  120,  103,  146,  149,
-      117,  128,  129,  144,  142,  132,  143,  135,  145,  108,
-      109,  110,  133,  134,  151,  153,  152,  154,  182,  103,
-      126,  182,  127,  147,  103,  105,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  130,  150,  131,  148,    7,  182,    4,    4,
-      183,  106,  183,  107,  118,  119,  125,  121,  122,    7,
-        9,    0,    8,  158,  177,  103,    0,  170,  140,  163,
-      171,  168,  155,  166,  156,  167,  165,    0,  114,    3,
-
-        0,  169,  113,  111,    0,    0,  111,  111,    0,    0,
-      111,  110,  110,  110,    0,  110,  138,  139,  137,  159,
-      161,  157,  162,  160,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  104,
-      176,    0,  120,  117,  103,    0,    0,  173,    0,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,   38,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,   57,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  172,  164,    7,    0,    0,    0,
-
-        2,    0,    5,  106,    0,    0,    0,  118,    0,  124,
-      123,  123,    0,    0,    0,  121,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  120,  120,  123,  123,
+      186,  184,    7,    9,    8,  143,  122,  105,  148,  151,
+      119,  130,  131,  146,  144,  134,  145,  137,  147,  110,
+      111,  112,  135,  136,  153,  155,  154,  156,  184,  105,
+      128,  184,  129,  149,  105,  107,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  132,  152,  133,  150,    7,  184,    4,
+        4,  185,  108,  185,  109,  120,  121,  127,  123,  124,
+        7,    9,    0,    8,  160,  179,  105,    0,  172,  142,
+      165,  173,  170,  157,  168,  158,  169,  167,    0,  116,
+
+        3,    0,  171,  115,  113,    0,    0,  113,  113,    0,
+        0,  113,  112,  112,  112,    0,  112,  140,  141,  139,
+      161,  163,  159,  164,  162,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  136,  114,  115,    0,  115,  115,    0,    0,    6,
-      115,  111,    0,    0,    0,  115,    0,  111,  111,  111,
-      111,    0,  112,    0,    0,  110,  110,  110,  110,    0,
-      174,  175,    0,  180,  178,    0,    0,    0,  104,    0,
-        0,    0,    0,    0,    0,    0,    0,  103,   17,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,   14,  103,  103,
-
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,   51,  103,  103,  103,
-       64,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,   90,  103,  103,  103,  103,
-      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
-        0,  123,    0,    0,    0,    0,    0,  123,    0,    0,
-      181,    0,    0,    0,    0,    0,    0,    0,  115,    0,
-      115,    0,  115,    0,  115,    0,    0,  115,    0,  111,
-      111,    0,    0,  112,  112,    0,  112,    0,  112,  110,
-      110,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,  179,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,   21,  103,   24,  103,   27,
-      103,  103,  103,  103,  103,  103,  103,   41,  103,   43,
-      103,  103,  103,  103,  103,  103,  103,   56,  103,   67,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,   98,  103,  103,    0,
+      106,  178,    0,  122,  119,  105,    0,    0,  175,    0,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,   38,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,   57,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  174,  166,    7,
+
+        0,    0,    0,    2,    0,    5,  108,    0,    0,    0,
+      120,    0,  126,  125,  125,    0,    0,    0,  123,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  123,    0,    0,    0,    0,    0,  115,
-        0,    0,    0,    0,    0,    0,    0,  112,  112,    0,
-
-      116,    0,  112,  112,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  103,  103,   22,
-      103,  103,  103,  103,  103,  103,  103,   15,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,   23,   25,  103,   32,  103,  103,  103,  103,
-       40,  103,  103,  103,  103,   49,  103,  103,   54,  103,
-      103,   71,  103,  103,  103,   77,  103,  103,  103,  103,
-      103,   87,   89,  103,  103,   95,  103,  103,  102,    0,
+        0,    0,    0,    0,  138,  116,  117,    0,  117,  117,
+        0,    0,    6,  117,  113,    0,    0,    0,  117,    0,
+      113,  113,  113,  113,    0,  114,    0,    0,  112,  112,
+      112,  112,    0,  176,  177,    0,  182,  180,    0,    0,
+        0,  106,    0,    0,    0,    0,    0,    0,    0,    0,
+      105,   17,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+
+       14,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,   51,
+      105,  105,  105,   64,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,   91,
+      105,  105,  105,  105,  105,  105,  105,  105,    0,    0,
+        0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
+        0,    0,  125,    0,    0,  183,    0,    0,    0,    0,
+        0,    0,    0,  117,    0,  117,    0,  117,    0,  117,
+        0,    0,  117,    0,  113,  113,    0,    0,  114,  114,
+        0,  114,    0,  114,  112,  112,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  181,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+       21,  105,   24,  105,   27,  105,  105,  105,  105,  105,
+      105,  105,   41,  105,   43,  105,  105,  105,  105,  105,
+      105,  105,   56,  105,   67,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,   99,  105,  105,  105,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  116,    0,
-
-        0,  112,  116,  116,  116,  116,    0,  112,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  103,    0,
-      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,   59,  103,  103,  103,
-      103,  103,  103,  103,  103,   28,  103,  103,  103,   39,
-       42,   45,  103,  103,   52,  103,   61,   68,  103,  103,
-       76,   78,   81,   82,   84,   85,  103,  103,   92,  103,
-      103,    0,    1,    0,    0,    0,    0,    0,    0,  106,
-        0,    0,    0,  123,    0,    0,    0,    0,  116,    0,
-      116,  116,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,  103,  103,   18,  103,  103,  103,  103,  103,  103,
-      103,   16,  103,  103,  103,   33,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,  103,   36,   37,
-      103,   48,   53,  103,  103,  103,   91,  103,  103,    0,
+      125,    0,    0,    0,    0,    0,  117,    0,    0,    0,
+
+        0,    0,    0,    0,  114,  114,    0,  118,    0,  114,
+      114,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  105,  105,   22,  105,  105,  105,
+      105,  105,  105,  105,   15,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,   23,
+       25,  105,   32,  105,  105,  105,  105,   40,  105,  105,
+      105,  105,   49,  105,  105,   54,  105,  105,   71,   72,
+      105,  105,  105,   78,  105,  105,  105,  105,  105,   88,
+       90,  105,  105,   96,  105,  105,  103,  105,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   10,   11,   29,   55,  103,  103,  103,  103,
-      103,  103,  103,  103,  103,  103,  103,   60,   62,   65,
-      103,  103,   79,   93,  103,  103,   35,  103,   47,   72,
-       73,  103,   96,   99,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  103,   69,  103,  103,
-
-       12,  103,  103,   30,   34,  103,  103,  103,   66,  103,
-      103,  103,  103,  103,  103,  103,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,  118,    0,    0,
+      114,  118,  118,  118,  118,    0,  114,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  105,    0,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,   59,  105,  105,  105,  105,
+      105,  105,  105,  105,   28,  105,  105,  105,   39,   42,
+       45,  105,  105,   52,  105,   61,   68,  105,  105,   77,
+       79,   82,   83,   85,   86,  105,  105,   93,  105,  105,
+      104,    0,    1,    0,    0,    0,    0,    0,    0,  108,
+        0,    0,    0,  125,    0,    0,    0,    0,  118,    0,
+
+      118,  118,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  105,  105,   18,  105,  105,  105,  105,  105,  105,
+      105,   16,  105,  105,  105,   33,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,   36,   37,
+      105,   48,   53,  105,  105,  105,   92,  105,  105,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   10,   11,   29,   55,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,   60,   62,   65,
+      105,  105,   80,   94,  105,  105,   35,  105,   47,   73,
+       74,  105,   97,  100,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  105,   69,  105,  105,
+       12,  105,  105,   30,   34,  105,  105,  105,   66,  105,
+      105,  105,  105,  105,  105,  105,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
-      103,  103,  103,  103,  103,  103,  103,   50,   63,   74,
-       80,   94,  100,  103,  103,  103,    0,    0,    0,    0,
-        0,    0,    0,    0,  103,  103,   13,   19,  103,  103,
-       31,  103,  103,  103,   26,   46,   88,    0,    0,  103,
-      103,  103,  103,  103,  103,   75,  101,  103,   86,   20,
-      103,  103,   44,   83,  103,  103,  103,  103,  103,  103,
-      103,   97,   70,    0
-
+      105,  105,  105,  105,  105,  105,  105,   50,   63,   75,
+       81,   95,  101,  105,  105,  105,    0,    0,    0,    0,
+        0,    0,    0,    0,  105,  105,   13,   19,  105,  105,
+       31,  105,  105,  105,   26,   46,   89,    0,    0,  105,
+      105,  105,  105,  105,  105,   76,  102,  105,   87,   20,
+      105,  105,   44,   84,  105,  105,  105,  105,  105,  105,
+
+      105,   98,   70,    0
     } ;
 
@@ -539,247 +540,249 @@
     } ;
 
-static yyconst flex_int16_t yy_base[1069] =
+static yyconst flex_int16_t yy_base[1079] =
     {   0,
-        0,   84, 2307, 2305,   94,    0,  177,  178,  179,  180,
-     2319, 2845,  191, 2845,  197,   55, 2845, 2265,   60,  173,
-     2845, 2845, 2845,   56,  188, 2845,  191,  189,  204,  216,
-      275,    0, 2284, 2845,  216, 2283,  152,  344,  155,  220,
-     2845,  159, 2845,  217,  226, 2845,  185,  154,  212,  251,
-      237,  270,  235,  257,  241,  205,  193,  305,  314,  333,
-      238,  228, 2845,  225, 2845, 2278,  402,  390, 2845, 2287,
-     2845, 2255,  235, 2845,    0, 2845,  426,    0, 2845,  417,
-     2845,  439,  451, 2845,  498, 2254,  264, 2845, 2845, 2845,
-     2845, 2845, 2271, 2845, 2268, 2845, 2845, 2278,  559, 2845,
-
-     2295, 2845,  438,  444,  511,  534,  289,  253,  197,  380,
-      305,    0,  319,  280,  198,  322, 2845, 2845, 2845, 2265,
-     2845, 2845, 2845, 2263, 2260,  218,  255, 2273,  298,  350,
-      368,  312,  440,  398,  405, 2254,  441, 2203,  446, 2232,
-     2845,  335, 2845, 2845,  468, 2226, 2223, 2845, 2196,  439,
-      282,  433,  372,  281,  437,  434,  428,  570,  444,  466,
-      464,  469,  475,  321,  492,  438,  471,  445,  474,  512,
-      489,  503,  496,  521,  276,  515,  516, 2224,  526,  510,
-      519,  525,  543,  522,  560,  553,  523,  561,  551,  544,
-      599,  582,  593,  584, 2845, 2845,  660,  651, 2272,  666,
-
-     2845,  678, 2845, 2219,  607, 2213, 2212,    0,  693, 2845,
-     2845,  684, 2211, 2209, 2206,    0, 2227,  578,  608,  617,
-      654,  679,  650,  683,  684,  687, 2224,  690,  691, 2201,
-     2199, 2845,    0,  683,  710,  686,  700, 2179, 2230, 2845,
-      730,  722,  427,  747,  756,  787,  770,  621, 2845, 2188,
-     2161,    0,  795, 2205,  796,  700, 2845, 2181, 2156,  809,
-     2845, 2845, 2188, 2845, 2845,  728,  733, 2165, 2163,  701,
-     2159, 2158, 2156,    0, 2153,    0, 2122,  736,  746,  747,
-      716,  689,  748,  566,  789,  659,  801,  751,  754,  785,
-      776,  787,  808,  796,  739,  711,  806, 2152,  807,  815,
-
-      817,  821,  809,  819,  827,  830,  831,  832,  833,  834,
-      839,  840,  841,  842,  846,  853,  854,  844,  847,  855,
-     2151,  860,  862,  861,  866,  864,  867,  869,  870,  872,
-      873,  874,  878,  875,  883, 2149,  882,  928,  885,  888,
-      894,  899,  892,  956,  958, 2143, 2140, 2139,    0, 2138,
-        0,  945,  949, 2136,    0, 2133,    0, 2132,    0, 2153,
-     2845,  930,  944, 2131, 2126,    0, 2125,    0, 2845,  959,
-      979,  970, 2845,  985, 1025, 2124, 1001, 1047, 2122, 2845,
-     2845,  943,  987, 1033,  986, 1072,  310, 1064,  987, 2845,
-     2845, 2119, 2115, 2111,    0, 2109,    0, 2107,    0, 2104,
-
-        0, 2845,  913,  947,  964,  966, 1005,  927, 1049,  939,
-     1051,  968,  991,  986, 1041, 1053, 1003, 1059, 1063, 1066,
-     1023, 1064, 1062, 1065,  978, 2105, 1072, 2103, 1078, 2100,
-     1071, 1074, 1076, 1080, 1091, 1093, 1095, 2097, 1094, 2096,
-     1082, 1098, 1099, 1100, 1101, 1105, 1106, 2095, 1107, 2093,
-     1110, 1112, 1111, 1117, 1118, 1113, 1119, 1123, 1126, 1127,
-     1129, 1130, 1131, 1140, 1142, 1143, 2090, 1144, 1147, 1195,
-     2084,    0, 2083,    0, 2082,    0, 2080,    0, 1190, 2077,
-        0, 2074,    0, 2073, 2072, 2070,    0, 2067,    0, 1197,
-     2064, 1203, 1219, 1205, 1244, 1210, 1202, 1200, 2845, 1260,
-
-     1278, 1271, 2075, 2050, 2060, 2057,    0, 2054,    0, 2053,
-        0, 2052,    0, 2050,    0, 2047,    0, 1164, 1152, 2047,
-     1184, 1182, 1226, 1157, 1227, 1196, 1254, 1146, 1237, 1255,
-     1256, 1204, 1258, 1271, 1261, 1260, 1292, 1274, 1262, 1277,
-     1278, 1280, 2046, 1186, 1289, 2045, 1279, 1282, 1290, 1295,
-     2043, 1299, 1300, 1301, 1303, 2040, 1306, 1302, 2037, 1310,
-     1311, 2036, 1309, 1312, 1315, 2035, 1220, 1314, 1316, 1322,
-     1326, 1333, 2033, 1328, 1329, 2030, 1330, 1335, 2029, 2078,
-     2023,    0, 2020,    0, 2019,    0, 2018,    0, 2016,    0,
-     1983,    0, 1981,    0, 1980,    0, 1379, 1385, 1413, 1396,
-
-     1977, 2845, 1402, 1351, 1389, 1403, 1974, 2845, 1973,    0,
-     1972,    0, 1970,    0, 1967,    0,    0,    0, 1967,    0,
-     1390, 1336, 1397, 1365, 1345, 1392, 1393, 1409, 1381, 1407,
-     1412, 1414, 1419, 1420, 1422, 1424, 1427, 1431,  926, 1429,
-     1432, 1438, 1433, 1435, 1440, 1966, 1437, 1441, 1445, 1965,
-     1963, 1960, 1450, 1453, 1959, 1455, 1958, 1956, 1456, 1459,
-     1953, 1952, 1951, 1949, 1942, 1940, 1458, 1461, 1939, 1464,
-     1462, 1986, 2845, 1929,    0, 1925,    0,    0,    0, 1924,
-        0,    0,    0, 2845,    0,    0,    0,    0, 1511, 1918,
-     2845, 2845, 1517, 1917,    0, 1916,    0,    0,    0,    0,
-
-     1914, 1474, 1468, 1914, 1443, 1493, 1498, 1476, 1504, 1505,
-     1494, 1913, 1334, 1509, 1506, 1510, 1511, 1545, 1525, 1518,
-     1543, 1530, 1523, 1529, 1531, 1534, 1535, 1539, 1912, 1910,
-     1540, 1907, 1906, 1542, 1538, 1544, 1905, 1546, 1550,    0,
-        0,    0, 1900, 1897, 1896, 1596,    0, 1895, 1893, 1890,
-     1889, 1888, 1889, 1886, 1885, 1884, 1552, 1557, 1573, 1549,
-     1551, 1553, 1575, 1555, 1577, 1582, 1607, 1882, 1583, 1879,
-     1584, 1589, 1585, 1590, 1591, 1594, 1878, 1597, 1877, 1875,
-     1872, 1598, 1871, 1870, 1865, 1862, 1861, 1860, 1858, 1851,
-     1849, 1848, 1845, 1844, 1843, 1841, 1600, 1827, 1601, 1605,
-
-     1608, 1602, 1609, 1610, 1818, 1614, 1629, 1615, 1817, 1604,
-     1616, 1625, 1630, 1380, 1631, 1633, 1811, 1804, 1801, 1794,
-     1792, 1791, 1770, 1769, 1768, 1761, 1759, 1758, 1716, 1716,
-     1634, 1636, 1635, 1637, 1640, 1641, 1645, 1715, 1713, 1647,
-     1712, 1711, 1648, 1652, 1653, 1654, 1703, 1701, 1700, 1698,
-     1696, 1476, 1472, 1343, 1657, 1667, 1259, 1656, 1660, 1668,
-     1150, 1671, 1675, 1676, 1031, 1027,  793,  752,  675, 1669,
-     1677, 1680, 1681, 1682, 1684,  645,  607, 1686,  487,  441,
-     1688, 1690,  394,  357, 1693, 1694, 1695, 1697, 1696, 1698,
-     1700,  233,  137, 2845, 1773, 1786, 1799, 1809, 1819, 1832,
-
-     1842, 1855, 1868, 1881, 1889, 1899, 1906, 1913, 1920, 1927,
-     1934, 1941, 1948, 1955, 1962, 1969, 1973, 1981, 1987, 1994,
-     2001, 2008, 2015, 2018, 2025, 2031, 2044, 2057, 2064, 2071,
-     2078, 2085, 2088, 2095, 2098, 2105, 2108, 2115, 2118, 2125,
-     2128, 2135, 2138, 2145, 2148, 2155, 2163, 2170, 2177, 2184,
-     2191, 2194, 2201, 2204, 2211, 2214, 2221, 2227, 2240, 2247,
-     2254, 2257, 2264, 2267, 2274, 2277, 2284, 2287, 2294, 2297,
-     2304, 2307, 2314, 2321, 2324, 2331, 2334, 2341, 2348, 2355,
-     2358, 2365, 2368, 2375, 2378, 2385, 2388, 2395, 2398, 2405,
-     2411, 2424, 2431, 2438, 2441, 2448, 2451, 2458, 2461, 2468,
-
-     2471, 2478, 2481, 2488, 2491, 2498, 2501, 2508, 2511, 2518,
-     2525, 2528, 2535, 2538, 2545, 2548, 2555, 2558, 2561, 2567,
-     2574, 2583, 2590, 2597, 2600, 2607, 2610, 2613, 2619, 2626,
-     2629, 2632, 2635, 2638, 2641, 2644, 2647, 2654, 2657, 2664,
-     2667, 2670, 2673, 2676, 2686, 2693, 2696, 2699, 2702, 2709,
-     2716, 2723, 2726, 2733, 2740, 2747, 2754, 2761, 2768, 2775,
-     2782, 2789, 2796, 2803, 2810, 2817, 2824, 2831
+        0,   84, 2323, 2322,   94,    0,  177,  178,  179,  180,
+     2338, 2866,  191, 2866,  197,   55, 2866, 2283,   60,  173,
+     2866, 2866, 2866,   56,  188, 2866,  191,  189,  204,  216,
+      275,    0, 2300, 2866,  216, 2298,  152,  344,  155,  220,
+     2866,  159, 2866,  217,  226, 2866,  185,  154,  212,  251,
+      237,  270,  235,  257,  241,  279,  193,  305,  314,  333,
+      238,  228,  227, 2866,  225, 2866, 2295,  402,  390, 2866,
+     2306, 2866, 2273,  235, 2866,    0, 2866,  426,    0, 2866,
+      417, 2866,  439,  451, 2866,  498, 2270,  264, 2866, 2866,
+     2866, 2866, 2866, 2286, 2866, 2285, 2866, 2866, 2297,  559,
+
+     2866, 2313, 2866,  438,  444,  511,  534,  289,  253,  197,
+      380,  305,    0,  319,  280,  198,  322, 2866, 2866, 2866,
+     2281, 2866, 2866, 2866, 2278, 2277,  218,  312, 2292,  350,
+      459,  368,  398,  440,  405,  448, 2272,  441, 2219,  458,
+     2247, 2866,  335, 2866, 2866,  321, 2243, 2242, 2866, 2214,
+      444,  297,  433,  372,  425,  454,  434,  461,  570,  455,
+      468,  385,  474,  475,  494,  492,  489,  464,  488,  491,
+      513,  503,  430,  521,  517,  519,  516,  522, 2240,  526,
+      523,  276,  460,  524,  542,  555,  554,  561,  325,  558,
+      584,  552,  600,  586,  593,  588,  595, 2866, 2866,  667,
+
+      655, 2287,  682, 2866,  688, 2866, 2236,  590, 2232, 2230,
+        0,  648, 2866, 2866,  675, 2227, 2224, 2223,    0, 2246,
+      578,  631,  654,  685,  698,  660,  689,  670,  692, 2242,
+      695,  701, 2200, 2198, 2866,    0,  693,  720,  685,  711,
+     2197, 2247, 2866,  737,  745,  666,  757,  763,  797,  780,
+      599, 2866, 2203, 2178,    0,  805, 2224,  806,  617, 2866,
+     2199, 2172,  819, 2866, 2866, 2203, 2866, 2866,  707,  722,
+     2182, 2182,  699, 2177, 2174, 2171,    0, 2170,    0, 2141,
+      743,  724,  739,  689,  741,  720,  623,  759,  762,  804,
+      681,  795,  749,  746,  799,  801,  765,  784,  803,  811,
+
+     2170,  814,  818,  827,  831,  817,  821,  833,  835,  841,
+      842,  834,  843,  844,  845,  847,  849,  857,  858,  860,
+      851,  859,  866, 2167,  867,  868,  869,  871,  873,  874,
+      763,  875,  876,  880,  881,  884,  887,  888,  885, 2164,
+      891,  936,  894,  897,  905,  899,  901,  902,  965,  961,
+     2160, 2159, 2157,    0, 2154,    0,  952,  956, 2153,    0,
+     2152,    0, 2150,    0, 2169, 2866,  951,  952, 2148, 2145,
+        0, 2143,    0, 2866,  967,  986,  978, 2866,  992, 1032,
+     2140, 1008, 1054, 2136, 2866, 2866,  915,  951, 1040,  993,
+     1079,  956, 1071,  994, 2866, 2866, 2132, 2130, 2128,    0,
+
+     2125,    0, 2123,    0, 2121,    0, 2866,  935,  969,  973,
+      968, 1012,  975, 1056,  992, 1058,  997, 1032,  993, 1000,
+     1060, 1061, 1066, 1070, 1073, 1030, 1071, 1069, 1072, 1078,
+     2121,  700, 2118, 1085, 2117, 1079, 1081, 1089, 1087, 1098,
+     1096, 1099, 2116, 1101, 2114, 1105, 1106, 1107, 1109, 1112,
+     1113, 1114, 2111, 1115, 2108, 1117, 1119, 1120, 1118, 1124,
+     1126, 1121, 1136, 1130, 1134, 1135, 1149, 1137, 1138, 1150,
+     1152, 1153, 2107, 1151, 1154, 1167, 1205, 2103,    0, 2101,
+        0, 2098,    0, 2095,    0, 1204, 2094,    0, 2093,    0,
+     2091, 2088, 2085,    0, 2084,    0, 1208, 2083, 1214, 1230,
+
+     1216, 1255, 1221, 1172, 1169, 2866, 1271, 1289, 1282, 2093,
+     2066, 2075, 2074,    0, 2073,    0, 2071,    0, 2068,    0,
+     2065,    0, 2064,    0, 1190, 1159, 2066, 1193, 1195, 1197,
+     1212, 1237, 1231, 1265, 1248, 1266, 1267, 1213, 1268, 1269,
+     1283, 1270, 1271,  234, 1285, 1273, 1274, 1287, 1293, 2064,
+     1306, 1301, 2061, 1290, 1303, 1305, 1308, 2058, 1312, 1309,
+     1311, 1313, 2057, 1314, 1319, 2056, 1316, 1322, 2054, 2051,
+     1315, 1327, 1330, 2050, 1333, 1332, 1336, 1334, 1338, 1345,
+     2049, 1335, 1348, 2047, 1346, 1349, 2044, 1351, 2093, 2039,
+        0, 2037,    0, 2004,    0, 2002,    0, 2001,    0, 1998,
+
+        0, 1995,    0, 1994,    0, 1394, 1404, 1428, 1415, 1993,
+     2866, 1421, 1370, 1391, 1419, 1991, 2866, 1988,    0, 1985,
+        0, 1984,    0, 1983,    0,    0,    0, 1984,    0, 1352,
+     1406, 1408, 1359, 1354, 1409, 1415, 1412, 1411, 1423, 1433,
+     1425, 1430, 1435, 1437, 1439, 1448, 1442, 1449, 1440, 1444,
+     1453, 1450, 1452, 1456, 1981, 1458, 1460, 1463, 1980, 1979,
+     1977, 1466, 1467, 1974, 1470, 1973, 1972, 1469, 1473, 1970,
+     1963, 1961, 1960, 1957, 1953, 1475, 1479, 1949, 1476, 1477,
+     1945, 1992, 2866, 1938,    0, 1937,    0,    0,    0, 1938,
+        0,    0,    0, 2866,    0,    0,    0,    0, 1525, 1932,
+
+     2866, 2866, 1531, 1931,    0, 1930,    0,    0,    0,    0,
+     1928, 1488, 1483, 1928, 1491, 1507, 1518, 1490, 1519, 1521,
+     1508, 1927, 1525, 1529, 1527, 1541, 1530, 1384, 1543, 1539,
+     1558, 1547, 1549, 1512, 1545, 1552, 1553, 1554, 1926, 1924,
+     1557, 1921, 1920, 1556, 1537, 1560, 1919, 1561, 1564,    0,
+        0,    0, 1914, 1911, 1910, 1612,    0, 1909, 1907, 1904,
+     1903, 1902, 1903, 1900, 1899, 1898, 1568, 1572, 1566, 1577,
+     1590, 1570, 1578, 1579, 1591, 1596, 1625, 1896, 1598, 1893,
+     1599, 1603, 1604, 1608, 1606, 1612, 1892, 1613, 1891, 1889,
+     1886, 1614, 1885, 1884, 1879, 1872, 1870, 1869, 1866, 1865,
+
+     1864, 1862, 1845, 1836, 1835, 1832, 1616, 1828, 1617, 1622,
+     1620, 1619, 1624, 1626, 1825, 1628, 1644, 1630, 1818, 1631,
+     1639, 1645, 1647, 1634, 1649, 1651, 1813, 1812, 1791, 1790,
+     1789, 1782, 1780, 1779, 1737, 1735, 1733, 1732, 1730, 1732,
+     1652, 1654, 1655, 1657, 1659, 1662, 1663, 1731, 1729, 1668,
+     1727, 1724, 1669, 1670, 1664, 1675, 1719, 1718, 1671, 1629,
+     1564, 1468, 1350, 1269, 1678, 1681, 1239, 1682, 1688, 1689,
+     1238, 1690, 1692, 1696, 1206, 1171, 1157, 1035, 1031, 1691,
+     1697, 1700, 1704, 1702, 1706,  998,  560, 1701,  527,  395,
+     1707, 1710,  357,  300, 1708, 1713, 1715, 1718, 1716, 1719,
+
+     1720,  233,  137, 2866, 1794, 1807, 1820, 1830, 1840, 1853,
+     1863, 1876, 1889, 1902, 1910, 1920, 1927, 1934, 1941, 1948,
+     1955, 1962, 1969, 1976, 1983, 1990, 1994, 2002, 2008, 2015,
+     2022, 2029, 2036, 2039, 2046, 2052, 2065, 2078, 2085, 2092,
+     2099, 2106, 2109, 2116, 2119, 2126, 2129, 2136, 2139, 2146,
+     2149, 2156, 2159, 2166, 2169, 2176, 2184, 2191, 2198, 2205,
+     2212, 2215, 2222, 2225, 2232, 2235, 2242, 2248, 2261, 2268,
+     2275, 2278, 2285, 2288, 2295, 2298, 2305, 2308, 2315, 2318,
+     2325, 2328, 2335, 2342, 2345, 2352, 2355, 2362, 2369, 2376,
+     2379, 2386, 2389, 2396, 2399, 2406, 2409, 2416, 2419, 2426,
+
+     2432, 2445, 2452, 2459, 2462, 2469, 2472, 2479, 2482, 2489,
+     2492, 2499, 2502, 2509, 2512, 2519, 2522, 2529, 2532, 2539,
+     2546, 2549, 2556, 2559, 2566, 2569, 2576, 2579, 2582, 2588,
+     2595, 2604, 2611, 2618, 2621, 2628, 2631, 2634, 2640, 2647,
+     2650, 2653, 2656, 2659, 2662, 2665, 2668, 2675, 2678, 2685,
+     2688, 2691, 2694, 2697, 2707, 2714, 2717, 2720, 2723, 2730,
+     2737, 2744, 2747, 2754, 2761, 2768, 2775, 2782, 2789, 2796,
+     2803, 2810, 2817, 2824, 2831, 2838, 2845, 2852
     } ;
 
-static yyconst flex_int16_t yy_def[1069] =
+static yyconst flex_int16_t yy_def[1079] =
     {   0,
-      894,    1,  895,  895,  894,    5,  896,  896,  897,  897,
-      894,  894,  894,  894,  894,  894,  894,  898,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,   31,  894,  894,  894,  894,  894,  894,  899,  898,
-      894,  894,  894,  894,  898,  894,  898,  898,  898,  898,
-      898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
-      898,  898,  894,  894,  894,  894,  894,  900,  894,  894,
-      894,  901,  894,  894,  902,  894,  894,  903,  894,  894,
-      894,  894,  894,  894,  894,  898,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-
-      904,  894,  894,   30,  894,  894,  894,  894,  905,   30,
-      894,   31,  894,  894,   31,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  906,
-      894,  894,  894,  894,  898,  907,  908,  894,  894,  898,
-      898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
-      898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
-      898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
-      898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
-      898,  898,  898,  898,  894,  894,  894,  900,  900,  900,
-
-      894,  900,  894,  901,  894,  909,  910,  902,  894,  894,
-      894,  894,  911,  912,  913,  903,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  914,
-      915,  894,   99,  894,  894,  894,  894,   99,  904,  894,
-       99,  110,  242,  894,  894,  894,  894,  894,  894,  894,
-      894,  916,  917,  918,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  919,  894,
-      920,  921,  922,  923,  924,  925,  894,  926,  926,  926,
-      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
-      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
-
-      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
-      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
-      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
-      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
-      926,  926,  926,  927,  928,  929,  930,  931,  932,  933,
-      934,  894,  894,  935,  936,  937,  938,  939,  940,  894,
-      894,  894,  894,  894,  941,  942,  943,  944,  894,  894,
-      894,  894,  894,  894,  894,  375,  894,  371,  378,  894,
-      894,  945,  946,  947,  894,  894,  894,  947,  894,  894,
-      894,  948,  949,  950,  951,  952,  953,  954,  955,  956,
-
-      957,  894,  958,  958,  958,  958,  958,  958,  958,  958,
-      958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
-      958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
-      958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
-      958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
-      958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
-      958,  958,  958,  958,  958,  958,  958,  958,  958,  959,
-      960,  961,  962,  963,  964,  965,  966,  967,  894,  968,
-      969,  970,  971,  972,  972,  973,  974,  975,  976,  894,
-      490,  894,  894,  977,  894,  977,  894,  894,  894,  894,
-
-      894,  894,  894,  894,  978,  979,  980,  981,  982,  983,
-      984,  985,  986,  987,  988,  989,  990,  991,  991,  991,
-      991,  991,  991,  991,  991,  991,  991,  991,  991,  991,
-      991,  991,  991,  991,  991,  991,  991,  991,  991,  991,
-      991,  991,  991,  991,  991,  991,  991,  991,  991,  991,
-      991,  991,  991,  991,  991,  991,  991,  991,  991,  991,
-      991,  991,  991,  991,  991,  991,  991,  991,  991,  991,
-      991,  991,  991,  991,  991,  991,  991,  991,  991,  992,
-      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
-     1003, 1004, 1005, 1006, 1007, 1008,  894,  894,  894,  894,
-
-     1009,  894,  599,  894,  894,  894,  603,  894, 1010, 1011,
-     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
-     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
-     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
-     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
-     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
-     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
-     1020, 1022,  894, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
-     1030, 1031, 1032,  894, 1033, 1034, 1035, 1036,  894,  689,
-      894,  894,  894, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
-
-     1044, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1046,
-     1047, 1048, 1049, 1050, 1051,  894, 1052, 1037, 1039, 1053,
-     1054, 1044, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1055, 1056, 1049, 1057, 1050, 1058,
-     1051, 1059, 1060, 1053, 1061, 1054, 1045, 1045, 1045, 1045,
-
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1062, 1055, 1063, 1056,
-     1064, 1057, 1065, 1058, 1066, 1059, 1067, 1060, 1061, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1068, 1062, 1063, 1064,
-     1065, 1039, 1066, 1067, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1068, 1039, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045,    0,  894,  894,  894,  894,  894,  894,
-
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894
+      904,    1,  905,  905,  904,    5,  906,  906,  907,  907,
+      904,  904,  904,  904,  904,  904,  904,  908,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,   31,  904,  904,  904,  904,  904,  904,  909,  908,
+      904,  904,  904,  904,  908,  904,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  904,  904,  904,  904,  904,  910,  904,
+      904,  904,  911,  904,  904,  912,  904,  904,  913,  904,
+      904,  904,  904,  904,  904,  904,  908,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+
+      904,  914,  904,  904,   30,  904,  904,  904,  904,  915,
+       30,  904,   31,  904,  904,   31,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      916,  904,  904,  904,  904,  908,  917,  918,  904,  904,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  904,  904,  904,
+
+      910,  910,  910,  904,  910,  904,  911,  904,  919,  920,
+      912,  904,  904,  904,  904,  921,  922,  923,  913,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  924,  925,  904,  100,  904,  904,  904,  904,
+      100,  914,  904,  100,  111,  245,  904,  904,  904,  904,
+      904,  904,  904,  904,  926,  927,  928,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  929,  904,  930,  931,  932,  933,  934,  935,  904,
+      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
+      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
+
+      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
+      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
+      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
+      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
+      936,  936,  936,  936,  936,  936,  936,  936,  937,  938,
+      939,  940,  941,  942,  943,  944,  904,  904,  945,  946,
+      947,  948,  949,  950,  904,  904,  904,  904,  904,  951,
+      952,  953,  954,  904,  904,  904,  904,  904,  904,  904,
+      380,  904,  376,  383,  904,  904,  955,  956,  957,  904,
+      904,  904,  957,  904,  904,  904,  958,  959,  960,  961,
+
+      962,  963,  964,  965,  966,  967,  904,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  969,  970,  971,  972,
+      973,  974,  975,  976,  977,  904,  978,  979,  980,  981,
+      982,  982,  983,  984,  985,  986,  904,  497,  904,  904,
+
+      987,  904,  987,  904,  904,  904,  904,  904,  904,  904,
+      904,  988,  989,  990,  991,  992,  993,  994,  995,  996,
+      997,  998,  999, 1000, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002, 1003,
+     1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
+
+     1014, 1015, 1016, 1017, 1018,  904,  904,  904,  904, 1019,
+      904,  608,  904,  904,  904,  612,  904, 1020, 1021, 1022,
+     1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1030,
+     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
+     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
+     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
+     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
+     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
+     1030, 1032,  904, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+     1040, 1041, 1042,  904, 1043, 1044, 1045, 1046,  904,  699,
+
+      904,  904,  904, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
+     1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1056,
+     1057, 1058, 1059, 1060, 1061,  904, 1062, 1047, 1049, 1063,
+     1064, 1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1065, 1066, 1059, 1067, 1060, 1068,
+
+     1061, 1069, 1070, 1063, 1071, 1064, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1072, 1065, 1073, 1066,
+     1074, 1067, 1075, 1068, 1076, 1069, 1077, 1070, 1071, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1078, 1072, 1073, 1074,
+     1075, 1049, 1076, 1077, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1078, 1049, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
+
+     1055, 1055, 1055,    0,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904
     } ;
 
-static yyconst flex_int16_t yy_nxt[2931] =
+static yyconst flex_int16_t yy_nxt[2952] =
     {   0,
        12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
@@ -791,321 +794,324 @@
        50,   51,   52,   53,   18,   54,   18,   55,   18,   18,
        56,   18,   57,   58,   59,   60,   61,   62,   18,   18,
-       18,   63,   64,   65,   66,   67,   84,   92,   85,   85,
-       67,   88,   89,   68,   71,   71,   71,   71,   71,   71,
-
-       71,   71,   71,   71,   72,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   72,
+       63,   64,   65,   66,   67,   68,   85,   93,   86,   86,
+       68,   89,   90,   69,   72,   72,   72,   72,   72,   72,
+
+       72,   72,   72,   72,   73,   72,   72,   72,   72,   72,
        72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   71,   73,   71,   71,   72,
-       74,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   72,   71,   71,   71,   71,   76,
-       76,   79,   79,  123,  124,   90,  141,   79,   79,   87,
-       76,   76,   80,   81,   82,   82,   82,   80,   82,   81,
-
-       83,   83,   83,   82,   91,   93,   87,  142,  146,   98,
-       95,   99,   99,   99,   99,   99,   99,  252,  894,   94,
-      100,   85,   96,   97,   85,  101,  161,  118,  143,   77,
-       77,   77,   77,  144,  147,  102,  103,   87,  104,  104,
-      104,  104,  105,  105,  119,   87,  120,  121,  148,  263,
-      149,  264,  254,  260,  183,  106,  195,   87,  159,  107,
-      160,  150,  151,  152,   87,  108,  109,  153,  154,  162,
-      155,  110,   87,  156,  157,  145,  163,  106,   87,  182,
-       87,  158,  164,  111,  206,   87,  263,   87,  264,   87,
-       87,  108,  194,   87,  109,  103,  250,  112,  112,  112,
-
-      112,  112,  112,   87,  169,  177,  170,  196,  193,   87,
-      207,  180,  165,  230,  106,  171,  166,  181,  113,  178,
-      251,  167,   87,  258,  114,  168,  179,  172,   87,  263,
-      115,  264,  248,   87,   87,  173,  106,  174,  249,  231,
-      175,  143,  116,  263,  176,  264,  144,  259,  317,  283,
-      114,  125,  280,  503,  249,  126,  127,   87,  128,  191,
-      129,  130,  256,  131,  249,  132,   87,  265,  257,  184,
-      185,  257,  248,   87,  133,  134,  135,  504,  188,  186,
-      249,  263,  187,  264,  271,   87,  189,  265,  145,  256,
-      305,  200,  201,  190,  257,  136,  200,  257,  137,  263,
-
-      894,  264,  192,  197,   81,   82,   82,   82,  197,   87,
-      272,  198,  202,  202,  202,  202,  202,  202,   80,   81,
-       82,   82,   82,   80,   87,  138,  139,  209,  210,  263,
-      894,  264,  209,  282,  211,  255,  263,  267,  264,  211,
-       82,   81,   82,   82,   82,   82,   87,  894,  212,  212,
-      212,  212,   82,   81,   83,   83,   83,   82,  894,  211,
-      241,  241,  241,  241,  241,  241,  242,  242,  242,  242,
-      266,  263,  263,  264,  264,  213,  143,  263,  211,  264,
-       87,  144,  377,  211,  211,   87,   87,  211,  211,   87,
-       87,   87,  286,   87,  894,  211,   87,   87,  211,  243,
-
-      211,  214,  211,  281,  215,  217,  278,  284,  285,  218,
-      219,  307,  298,  279,  220,  221,   87,  222,   87,  223,
-       87,   87,  894,   87,  309,  300,   87,   87,  224,  225,
-      226,  103,  303,  105,  105,  105,  105,  105,  105,   87,
-      299,   87,  301,  302,   87,  304,  308,  310,   87,  227,
-      106,  245,  228,  245,  306,   87,  246,  246,  246,  246,
-      246,  246,   87,  313,   87,  315,  244,   87,   87,  311,
-      314,   87,  106,   87,   87,   87,  323,   87,   87,  322,
-      229,  233,  233,  233,  233,  233,  233,  312,  333,  247,
-      319,  316,  328,  320,  318,   87,   87,  234,  235,  236,
-
-      321,  237,  236,   87,  324,   87,  325,  143,  335,  360,
-      331,  361,   87,   87,  238,  337,  326,  327,   87,  236,
-      235,  236,   87,  329,  237,  332,  236,  287,  288,  289,
-      336,  290,  291,  334,   87,  292,   87,  293,  409,  360,
-      330,  361,  294,  295,  296,   87,  297,  339,  360,  343,
-      361,   87,  200,  201,  338,  340,  346,  200,  341,   87,
-      342,  197,   81,   82,   82,   82,  197,  200,  201,  198,
-      380,  361,  200,  202,  202,  202,  202,  202,  202,  344,
-      201,  360,  347,  361,  344,  360,  345,  361,  202,  202,
-      202,  202,  202,  202,  209,  210,  380,   87,  361,  209,
-
-      202,  202,  202,  202,  202,  202,  352,  352,  352,  352,
-      360,   87,  361,  362,  360,  360,  361,  361,  360,  363,
-      361,  360,  360,  361,  361,  369,  369,  370,  369,  370,
-      894,  411,  371,  371,  371,  371,  371,  371,  373,  353,
-      373,   87,  103,  373,  242,  242,  242,  242,  369,  390,
-      392,  369,  375,  375,  375,  375,  375,  375,  407,  263,
-      373,  264,  373,   87,  263,  372,  264,  373,   87,  105,
-      105,  105,  105,  105,  105,  390,  393,  243,  246,  246,
-      246,  246,  246,  246,  406,  376,  106,  245,   87,  245,
-      424,   87,  246,  246,  246,  246,  246,  246,   87,   87,
-
-       87,  403,  255,   87,  423,  408,   87,  894,  106,  378,
-      378,  378,  378,  378,  378,  383,  404,  405,  105,  105,
-      105,  105,  105,  105,  416,  234,  415,  236,   87,  237,
-      236,  112,  112,  112,  112,  112,  112,   87,  385,   87,
-      386,   87,  379,  418,  387,   87,  410,  236,   87,  236,
-      388,  255,  237,   87,  236,  419,  420,  422,   87,   87,
-       87,   87,  389,  417,  260,  421,  386,   87,  412,   87,
-      387,   87,  427,   87,  413,  414,  425,  426,  428,   87,
-      429,  430,   87,   87,   87,   87,   87,  434,  435,  431,
-      436,   87,   87,   87,   87,  438,   87,  439,   87,   87,
-
-      432,  433,  441,  443,  437,   87,   87,   87,  440,  442,
-      444,  445,   87,   87,   87,  447,   87,  448,   87,   87,
-      449,   87,   87,  450,   87,   87,   87,   87,  446,  451,
-       87,  453,  452,  458,   87,   87,  143,   87,  454,  457,
-       87,  456,  455,  464,   87,  462,   87,  459,  463,  460,
-      721,   87,  461,  466,  467,  465,  468,  344,  201,  469,
-      201,  360,  344,  361,  345,   87,  199,  211,  211,  211,
-      211,  352,  352,  352,  352,  360,  518,  361,   87,   87,
-       87,  371,  371,  371,  371,  371,  371,  370,  495,  370,
-      523,   87,  371,  371,  371,  371,  371,  371,  496,   87,
-
-      479,  490,  490,  490,  490,  490,  490,  233,  233,  233,
-      233,  233,  233,  525,  495,  519,   87,  234,   87,  236,
-       87,  237,  236,  242,  242,  242,  242,  105,  105,  498,
-       87,  520,  495,  527,  491,  499,  499,  521,   87,  236,
-      374,  236,  497,   87,  237,  542,  236,  375,  375,  375,
-      375,  375,  375,  383,  498,   87,  377,   87,  495,  528,
-      529,  499,  499,  234,  235,  236,  522,  237,  236,  378,
-      378,  378,  378,  378,  378,   87,  385,  533,  386,   87,
-      376,  538,  387,   87,  894,  236,  235,  236,  388,  500,
-      237,  500,  236,   87,  501,  501,  501,  501,  501,  501,
-
-      389,   87,  379,   87,  386,   87,  530,  385,  387,  386,
-      524,   87,  526,  387,   87,   87,   87,   87,   87,  505,
-      535,  531,  532,   87,   87,  540,   87,  502,   87,  534,
-       87,  389,   87,  536,   87,  386,  541,  539,  543,  387,
-      537,  547,  544,   87,  545,   87,   87,   87,  546,  549,
-       87,   87,   87,   87,  553,  548,  551,   87,   87,   87,
-      550,  552,   87,   87,   87,   87,  555,  559,  557,   87,
-       87,   87,  554,  562,  556,   87,  560,  558,   87,   87,
-      567,   87,   87,   87,  563,  561,  570,  566,  571,  564,
-      565,  569,   87,  568,   87,   87,   87,  201,   87,   87,
-
-      574,  630,   87,  580,   87,  573,  577,  572,  579,   87,
-      575,  576,  211,  211,  211,  211,   87,  622,  578,  490,
-      490,  490,  490,  490,  490,  375,  375,  375,  375,  375,
-      375,  626,  645,  621,   87,  234,   87,  236,   87,  237,
-      236,  378,  378,  378,  378,  378,  378,  495,   87,  602,
-      495,  623,  491,  628,  624,  495,   87,  236,  492,  236,
-      496,  598,  237,  598,  236,  601,  599,  599,  599,  599,
-      599,  599,   87,  495,  493,  602,  495,  634,   87,   87,
-      662,  495,  501,  501,  501,  501,  501,  501,  500,   87,
-      500,  625,  627,  501,  501,  501,  501,  501,  501,  600,
-
-      603,  603,  603,  603,  603,  603,   87,   87,   87,  631,
-       87,   87,   87,   87,   87,  639,  604,  629,  605,  635,
-      606,  605,  632,   87,  637,  638,   87,  633,  636,   87,
-       87,   87,   87,  607,   87,  640,  641,  644,  605,  643,
-      605,   87,   87,  606,   87,  605,  642,   87,  647,  648,
-      646,   87,   87,   87,   87,   87,  650,  649,   87,  656,
-      651,   87,   87,   87,   87,  653,   87,   87,   87,  652,
-      654,  657,  658,  655,   87,  664,  663,  660,   87,  667,
-       87,   87,   87,  659,  661,   87,   87,   87,   87,  668,
-      666,  669,  762,  691,  691,  704,  665,   87,  894,  670,
-
-      671,  490,  490,  490,  490,  490,  490,  599,  599,  599,
-      599,  599,  599,  598,  707,  598,  691,   87,  599,  599,
-      599,  599,  599,  599,  603,  603,  603,  603,  603,  603,
-      706,  691,   87,   87,  597,  689,  689,  689,  689,  689,
-      689,  692,   87,  692,   87,   87,  692,  702,  844,   87,
-      711,  604,  709,  605,  691,  606,  605,  607,  705,   87,
-      703,   87,  712,  692,   87,  692,   87,  708,  690,  710,
-      692,   87,   87,  605,   87,  605,   87,  713,  606,   87,
-      605,   87,  719,   87,   87,   87,  715,   87,  714,   87,
-       87,  717,   87,   87,  716,   87,  722,   87,  718,  724,
-
-      720,  727,   87,  725,  723,   87,  730,   87,   87,  726,
-       87,   87,  728,   87,   87,  729,   87,  734,  735,  736,
-       87,  755,  731,  737,  733,  738,   87,  894,   87,  739,
-      754,  869,  732,  689,  689,  689,  689,  689,  689,  603,
-      603,  603,  603,  603,  603,   87,   87,  753,  758,  604,
-       87,  605,  756,  606,  605,  757,   87,   87,   87,  759,
-      760,   87,   87,   87,  761,  765,  690,  764,  767,  770,
-       87,  605,  693,  605,  763,   87,  606,   87,  605,  769,
-      768,   87,   87,   87,  766,  771,   87,   87,  772,  773,
-       87,   87,   87,  774,   87,   87,   87,   87,   87,  775,
-
-      777,   87,   87,   87,   87,   87,  783,   87,  776,   87,
-      778,  784,  781,  801,  780,  779,  800,  782,  689,  689,
-      689,  689,  689,  689,  797,   87,  798,   87,  802,   87,
-      799,  807,  805,  804,   87,   87,   87,   87,  808,  809,
-      811,   87,   87,   87,  803,  812,   87,  806,  810,   87,
-       87,  746,   87,   87,   87,  838,   87,   87,  813,   87,
-       87,   87,   87,  833,  835,  836,   87,   87,   87,  814,
-      839,  841,  815,  816,  831,  832,  834,   87,  840,  830,
-      842,   87,   87,   87,  837,   87,   87,   87,   87,   87,
-      857,  843,   87,   87,  845,  856,  861,   87,  858,   87,
-
-       87,  846,  863,  864,   87,   87,   87,  855,   87,   87,
-      859,  872,   87,  865,  862,  867,  860,  866,  870,   87,
-       87,   87,  873,   87,  871,  874,  875,   87,   87,   87,
-      876,  877,   87,   87,   87,  880,   87,  882,   87,  883,
-       87,  878,   87,  881,  879,   87,   87,   87,   87,   87,
-       87,  894,   87,  894,  887,  894,  894,  886,  868,  888,
-      884,  885,  893,   87,   87,   87,  891,   87,   87,  889,
-      890,  894,  892,   69,   69,   69,   69,   69,   69,   69,
-       69,   69,   69,   69,   69,   69,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   78,
-
-       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
-       78,   78,   86,  894,  854,   86,  894,   86,   86,   86,
-       86,   86,  140,  853,  894,  851,  140,  140,  140,  140,
-      140,  140,  199,  199,  199,  199,  199,  199,  199,  199,
-      199,  199,  199,  199,  199,  204,  894,  850,  204,  894,
-      204,  204,  204,  204,  204,  208,  849,  208,  208,  894,
-      208,  208,  208,  208,  208,  208,  848,  208,  216,   87,
-       87,  216,  216,  216,  216,  216,  216,  216,  216,   87,
-      216,  239,  239,  239,  239,  239,  239,  239,  239,  239,
-      239,  239,  239,  239,  253,  253,  894,  253,  829,  894,
-
-      828,  253,  269,  826,  894,  269,  824,  269,  269,  269,
-      269,  269,  273,  894,  273,  822,  894,  820,  273,  275,
-      818,  275,   87,   87,   87,  275,  348,   87,  348,   87,
-       87,   87,  348,  350,   87,  350,   87,   87,   87,  350,
-      354,   87,  354,  894,  796,  794,  354,  356,  894,  356,
-      894,  791,  789,  356,  358,  787,  358,   87,   87,   87,
-      358,  365,   87,  365,   87,   87,   87,  365,  367,  752,
-      367,  749,  748,  746,  367,  382,  205,  382,  384,  384,
-      742,  384,  384,  384,  741,  384,  253,  253,  673,  253,
-      269,   87,   87,  269,   87,  269,  269,  269,  269,  269,
-
-      394,   87,  394,   87,   87,   87,  394,  396,   87,  396,
-       87,   87,   87,  396,  398,   87,  398,   87,   87,   87,
-      398,  273,  700,  273,  400,  699,  400,  697,  695,  693,
-      400,  275,  601,  275,   86,  688,  687,   86,  685,   86,
-       86,   86,   86,   86,  199,  199,  199,  199,  199,  199,
-      199,  199,  199,  199,  199,  199,  199,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      471,  683,  471,  681,  679,  677,  471,  473,  675,  473,
-      673,   87,   87,  473,  475,   87,  475,   87,   87,   87,
-      475,  348,   87,  348,  477,   87,  477,   87,   87,   87,
-
-      477,  350,  620,  350,  480,  618,  480,  616,  614,  612,
-      480,  354,  610,  354,  482,  505,  482,  608,  608,  597,
-      482,  356,  596,  356,  484,  594,  484,  485,  485,  592,
-      484,  358,  590,  358,  486,  588,  486,  586,  584,  582,
-      486,  365,   87,  365,  488,   87,  488,   87,   87,   87,
-      488,  367,   87,  367,  494,   87,  494,   87,  494,  517,
-      494,  382,  515,  382,  513,  382,  511,  382,  384,  384,
-      509,  384,  384,  384,  507,  384,  506,  493,  506,  492,
-      489,  487,  506,  508,  361,  508,  361,  485,  483,  508,
-      510,  481,  510,  478,  476,  474,  510,  394,  472,  394,
-
-      512,   87,  512,   87,   87,  402,  512,  396,  401,  396,
-      514,  399,  514,  397,  395,  270,  514,  398,  265,  398,
-      516,  264,  516,  391,  391,  252,  516,  400,  381,  400,
-       86,  381,  240,   86,  374,   86,   86,   86,   86,   86,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  581,  368,  581,  366,  364,  360,  581,
-      471,  359,  471,  583,  357,  583,  355,  351,  349,  583,
-      473,  205,  473,  585,  201,  585,   87,  277,  276,  585,
-      475,  274,  475,  587,  270,  587,  265,  268,  265,  587,
-      477,  263,  477,  589,  262,  589,  261,  240,  232,  589,
-
-      480,   85,  480,  591,   85,  591,   87,  205,  203,  591,
-      482,   85,  482,  484,  122,  484,  117,   87,  894,  484,
-      593,   70,  593,   70,  894,  894,  593,  486,  894,  486,
-      595,  894,  595,  894,  894,  894,  595,  488,  894,  488,
-      494,  894,  494,  894,  494,  894,  494,  384,  894,  384,
-      894,  894,  894,  384,  609,  894,  609,  894,  894,  894,
-      609,  506,  894,  506,  611,  894,  611,  894,  894,  894,
-      611,  508,  894,  508,  613,  894,  613,  894,  894,  894,
-      613,  510,  894,  510,  615,  894,  615,  894,  894,  894,
-      615,  512,  894,  512,  617,  894,  617,  894,  894,  894,
-
-      617,  514,  894,  514,  619,  894,  619,  894,  894,  894,
-      619,  516,  894,  516,   86,  894,  894,   86,  894,   86,
-       86,   86,   86,   86,  672,  672,  672,  672,  672,  672,
-      672,  672,  672,  672,  672,  672,  672,  674,  894,  674,
-      894,  894,  894,  674,  581,  894,  581,  676,  894,  676,
-      894,  894,  894,  676,  583,  894,  583,  678,  894,  678,
-      894,  894,  894,  678,  585,  894,  585,  680,  894,  680,
-      894,  894,  894,  680,  587,  894,  587,  682,  894,  682,
-      894,  894,  894,  682,  589,  894,  589,  684,  894,  684,
-      894,  894,  894,  684,  591,  894,  591,  686,  894,  686,
-
-      894,  894,  894,  686,  593,  894,  593,   86,  894,   86,
-      894,  894,  894,   86,  595,  894,  595,  494,  894,  494,
-      894,  894,  894,  494,  694,  894,  694,  894,  894,  894,
-      694,  609,  894,  609,  696,  894,  696,  894,  894,  894,
-      696,  611,  894,  611,  698,  894,  698,  894,  894,  894,
-      698,  613,  894,  613,  140,  894,  140,  894,  894,  894,
-      140,  615,  894,  615,  701,  894,  701,  617,  894,  617,
-       86,  894,  894,   86,  894,   86,   86,   86,   86,   86,
-      619,  894,  619,  672,  672,  672,  672,  672,  672,  672,
-      672,  672,  672,  672,  672,  672,  740,  894,  740,  894,
-
-      894,  894,  740,  674,  894,  674,  204,  894,  204,  894,
-      894,  894,  204,  676,  894,  676,  743,  894,  743,  678,
-      894,  678,  204,  894,  894,  204,  894,  204,  204,  204,
-      204,  204,  680,  894,  680,  744,  894,  744,  682,  894,
-      682,  684,  894,  684,  745,  894,  745,  686,  894,  686,
-       86,  894,   86,  747,  894,  747,  894,  894,  894,  747,
-      694,  894,  694,  269,  894,  269,  894,  894,  894,  269,
-      696,  894,  696,  750,  894,  750,  698,  894,  698,  140,
-      894,  140,  751,  894,  751,  894,  894,  894,  751,   86,
-      894,  894,   86,  894,   86,   86,   86,   86,   86,  785,
-
-      894,  785,  740,  894,  740,  204,  894,  204,  786,  894,
-      786,  894,  894,  894,  786,  788,  894,  788,  894,  894,
-      894,  788,  790,  894,  790,  894,  894,  894,  790,  792,
-      894,  792,  793,  894,  793,  894,  894,  894,  793,  795,
-      894,  795,  894,  894,  894,  795,  817,  894,  817,  894,
-      894,  894,  817,  819,  894,  819,  894,  894,  894,  819,
-      821,  894,  821,  894,  894,  894,  821,  823,  894,  823,
-      894,  894,  894,  823,  825,  894,  825,  894,  894,  894,
-      825,  827,  894,  827,  894,  894,  894,  827,  619,  894,
-      619,  894,  894,  894,  619,  847,  894,  847,  894,  894,
-
-      894,  847,  680,  894,  680,  894,  894,  894,  680,  684,
-      894,  684,  894,  894,  894,  684,   86,  894,   86,  894,
-      894,  894,   86,  852,  894,  852,  894,  894,  894,  852,
-      140,  894,  140,  894,  894,  894,  140,  204,  894,  204,
-      894,  894,  894,  204,   11,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   73,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   72,   74,   72,   72,   73,
+       75,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   72,   72,   72,   72,   77,
+       77,   80,   80,  124,  125,   91,  142,   80,   80,   88,
+       77,   77,   81,   82,   83,   83,   83,   81,   83,   82,
+
+       84,   84,   84,   83,   92,   94,   88,  143,  147,   99,
+       96,  100,  100,  100,  100,  100,  100,  255,  904,   95,
+      101,   86,   97,   98,   86,  102,  162,  119,  144,   78,
+       78,   78,   78,  145,  148,  103,  104,   88,  105,  105,
+      105,  105,  106,  106,  120,   88,  121,  122,  149,  266,
+      150,  267,  257,  263,  185,  107,  198,  648,  160,  108,
+      161,  151,  152,  153,   88,  109,  110,  154,  155,  163,
+      156,  111,   88,  157,  158,  146,  164,  107,   88,   88,
+       88,  159,  165,  112,  209,   88,   88,   88,  197,   88,
+       88,  109,  196,   88,  110,  104,  253,  113,  113,  113,
+
+      113,  113,  113,   88,  170,  178,  171,  199,  195,   88,
+      210,  181,  166,  233,  107,  172,  167,  182,  114,  179,
+      254,  168,   88,  261,  115,  169,  180,  173,   88,  144,
+      116,   88,  251,  326,  145,  174,  107,  175,  252,  234,
+      176,  144,  117,  266,  177,  267,  145,  262,  183,   88,
+      115,  126,   88,  184,  252,  127,  128,   88,  129,  193,
+      130,  131,  259,  132,  252,  133,   88,  283,  260,  186,
+      187,  260,  251,   88,  134,  135,  136,   88,  190,  188,
+      252,  266,  189,  267,  274,   88,  191,  268,  146,  259,
+      337,  203,  204,  192,  260,  137,  203,  260,  138,  266,
+
+      904,  267,  194,  200,   82,   83,   83,   83,  200,   88,
+      275,  201,  205,  205,  205,  205,  205,  205,   81,   82,
+       83,   83,   83,   81,   88,  139,  140,  212,  213,  266,
+      904,  267,  212,  285,  214,  258,  266,   88,  267,  214,
+       83,   82,   83,   83,   83,   83,  303,   88,  215,  215,
+      215,  215,   83,   82,   84,   84,   84,   83,  904,  214,
+      244,  244,  244,  244,  244,  244,  245,  245,  245,  245,
+      269,  266,  266,  267,  267,  216,  268,   88,  214,  266,
+      270,  267,   88,  214,  214,   88,   88,  214,  214,  266,
+      266,  267,  267,  286,  904,  214,   88,  317,  214,  246,
+
+      214,  217,  214,  284,  218,  220,   88,   88,  288,  221,
+      222,  281,   88,   88,  223,  224,   88,  225,  282,  226,
+       88,  327,  904,  301,  287,  289,   88,   88,  227,  228,
+      229,  104,  306,  106,  106,  106,  106,  106,  106,  311,
+       88,   88,  302,   88,   88,  307,   88,  304,  305,  230,
+      107,  248,  231,  248,  309,   88,  249,  249,  249,  249,
+      249,  249,  310,  308,  313,   88,  247,  312,   88,   88,
+      314,   88,  107,   88,   88,   88,   88,  316,   88,   88,
+      232,  236,  236,  236,  236,  236,  236,  319,  315,  250,
+      318,  320,  325,  323,   88,  321,  322,  237,  238,  239,
+
+      324,  240,  239,  328,   88,  329,   88,   88,  144,  365,
+       88,  366,   88,   88,  241,  330,  331,  333,  335,  239,
+      238,  239,   88,  341,  240,  332,  239,  290,  291,  292,
+      338,  293,  294,  336,  334,  295,   88,  296,   88,  351,
+       88,  339,  297,  298,  299,   88,  300,   88,  385,  212,
+      213,  343,   88,  347,  212,  342,  203,  204,  345,  344,
+      346,  203,  365,  340,  366,  352,  395,  348,  200,   82,
+       83,   83,   83,  200,  385,   88,  201,  205,  205,  205,
+      205,  205,  205,  203,  204,  365,  904,  366,  203,  349,
+      204,  365,  395,  366,  349,  414,  350,  357,  357,  357,
+
+      357,  365,  366,  366,  205,  205,  205,  205,  205,  205,
+      205,  205,  205,  205,  205,  205,  365,  366,  366,  367,
+      365,  382,  366,  365,  368,  366,  365,  374,  366,  365,
+      358,  366,  365,   88,  366,  374,  374,  375,  266,  375,
+      267,   88,  376,  376,  376,  376,  376,  376,  397,  378,
+      374,  378,   88,  266,  378,  267,  420,  411,  374,  380,
+      380,  380,  380,  380,  380,  104,  550,  245,  245,  245,
+      245,  378,   88,  378,  398,  377,   88,  413,  378,  106,
+      106,  106,  106,  106,  106,  249,  249,  249,  249,  249,
+      249,   88,  381,   88,  409,   88,  107,  248,   88,  248,
+
+      246,   88,  249,  249,  249,  249,  249,  249,  408,  410,
+      412,   88,  258,  423,   88,   88,  415,   88,  107,  383,
+      383,  383,  383,  383,  383,  388,  427,  422,  106,  106,
+      106,  106,  106,  106,  416,  237,   88,  239,  461,  240,
+      239,  113,  113,  113,  113,  113,  113,   88,  390,  428,
+      391,   88,  384,   88,  392,   88,   88,  239,  426,  239,
+      393,  258,  240,   88,  239,  421,   88,  424,  425,   88,
+       88,  417,  394,   88,  263,  432,  391,  418,  419,   88,
+      392,  430,  429,   88,  431,   88,   88,   88,  433,  435,
+      434,  436,  439,   88,   88,   88,   88,   88,  440,   88,
+
+      441,   88,  444,   88,  443,  442,  437,  438,  446,   88,
+       88,   88,   88,  445,  448,  449,  447,  450,   88,   88,
+       88,   88,  452,   88,  457,   88,   88,   88,   88,  453,
+      455,  454,   88,   88,  451,  456,   88,   88,  459,   88,
+       88,  464,  458,   88,  144,  463,   88,  462,  460,   88,
+      469,   88,  470,   88,   88,  465,  474,   88,  468,  466,
+      502,  467,  472,  204,  471,  473,  349,  204,  475,  202,
+      503,  349,  476,  350,  214,  214,  214,  214,  357,  357,
+      357,  357,  365,  365,  366,  366,  502,   88,   88,  376,
+      376,  376,  376,  376,  376,  375,  502,  375,  525,  510,
+
+      376,  376,  376,  376,  376,  376,  504,  486,  497,  497,
+      497,  497,  497,  497,  236,  236,  236,  236,  236,  236,
+       88,   88,  502,  511,  237,   88,  239,   88,  240,  239,
+      245,  245,  245,  245,  106,  106,  505,  526,  530,  528,
+      527,  498,  506,  506,   88,   88,  239,  379,  239,   88,
+       88,  240,   88,  239,  380,  380,  380,  380,  380,  380,
+      388,  505,  534,  382,   88,  537,  532,  536,  506,  506,
+      237,  238,  239,  529,  240,  239,  383,  383,  383,  383,
+      383,  383,   88,  390,   88,  391,  904,  381,  545,  392,
+      904,  904,  239,  238,  239,  393,  507,  240,  507,  239,
+
+      535,  508,  508,  508,  508,  508,  508,  394,   88,  384,
+       88,  391,   88,   88,  390,  392,  391,  531,   88,  533,
+      392,   88,   88,   88,   88,   88,  512,  542,  538,  539,
+       88,   88,  547,   88,  509,  540,  541,   88,  394,   88,
+      543,   88,  391,  548,  546,  549,  392,  544,   88,  551,
+       88,   88,  552,   88,  554,  553,  556,   88,   88,   88,
+      558,   88,  555,  557,   88,   88,   88,   88,  559,   88,
+       88,   88,   88,   88,  562,  566,   88,  560,   88,  564,
+      561,  570,   88,  563,  567,  565,   88,   88,   88,   88,
+       88,  571,  568,  569,  578,  574,  572,  575,  573,  577,
+
+      576,   88,   88,   88,   88,   88,   88,  204,  579,   88,
+      582,   88,  581,  589,  580,  587,  585,  502,  611,   88,
+      583,  584,  588,   88,  631,  586,  214,  214,  214,  214,
+      497,  497,  497,  497,  497,  497,  380,  380,  380,  380,
+      380,  380,   88,  502,  611,   88,  237,   88,  239,   88,
+      240,  239,  383,  383,  383,  383,  383,  383,   88,  630,
+      632,  502,  634,  498,   88,   88,  502,  633,  239,  499,
+      239,  503,  607,  240,  607,  239,  610,  608,  608,  608,
+      608,  608,  608,   88,  642,  500,  635,  502,  637,   88,
+       88,   88,  502,  508,  508,  508,  508,  508,  508,  507,
+
+       88,  507,  636,  639,  508,  508,  508,  508,  508,  508,
+      609,  612,  612,  612,  612,  612,  612,   88,   88,   88,
+       88,   88,   88,   88,  904,   88,   88,  613,  638,  614,
+      644,  615,  614,  646,  641,   88,  647,   88,  640,   88,
+      645,  643,   88,  651,  616,   88,  649,  650,  652,  614,
+      653,  614,  654,   88,  615,   88,  614,   88,   88,  656,
+       88,   88,  655,   88,   88,   88,   88,   88,   88,  659,
+      657,   88,  658,  660,   88,  662,  665,  666,  661,   88,
+      663,  664,   88,  667,   88,   88,   88,   88,   88,  668,
+       88,  676,  669,  671,  672,  673,  677,   88,   88,  670,
+
+       88,   88,  675,   88,   88,  904,   88,  777,  674,  712,
+      678,   88,  701,  701,  680,  679,  497,  497,  497,  497,
+      497,  497,  713,  717,  716,  681,  608,  608,  608,  608,
+      608,  608,  607,  701,  607,  701,   88,  608,  608,  608,
+      608,  608,  608,  612,  612,  612,  612,  612,  612,  606,
+      699,  699,  699,  699,  699,  699,  701,  702,   88,  702,
+       88,   88,  702,   88,   88,  714,  613,   88,  614,  715,
+      615,  614,  720,  731,  719,   88,  616,   88,  722,  702,
+      721,  702,   88,  700,  718,   88,  702,   88,  614,   88,
+      614,   88,   88,  615,   88,  614,   88,  725,  723,  724,
+
+       88,   88,   88,  729,   88,   88,  727,  732,   88,  726,
+       88,  730,   88,  728,  734,   88,  733,  737,   88,   88,
+      735,   88,   88,  879,  740,   88,  736,   88,   88,   88,
+      744,   88,  745,  738,  739,   88,  746,  748,  741,  743,
+       88,  747,   88,   88,  749,  764,  742,  699,  699,  699,
+      699,  699,  699,  612,  612,  612,  612,  612,  612,   88,
+       88,  763,  768,  613,   88,  614,  766,  615,  614,  765,
+       88,   88,  783,   88,  769,  767,  770,   88,  771,   88,
+      700,   88,   88,  772,  780,  614,  703,  614,  774,   88,
+      615,   88,  614,   88,  773,   88,  775,   88,  778,   88,
+
+      779,   88,  781,  776,   88,   88,   88,  784,   88,   88,
+       88,  791,   88,   88,  782,  787,   88,  785,   88,  904,
+       88,  793,   88,  809,   88,  794,  786,  788,  790,   88,
+       88,   88,  789,  792,  699,  699,  699,  699,  699,  699,
+      807,  808,   88,   88,  810,  812,  815,  813,   88,  817,
+       88,   88,  811,  818,  819,   88,   88,  814,   88,  821,
+       88,  816,  820,  822,   88,   88,   88,  756,   88,   88,
+      848,   88,   88,  823,   88,  843,   88,   88,   88,  845,
+       88,  846,   88,   88,  904,  849,   88,  824,  825,  826,
+      841,   88,  842,  844,  851,  840,   88,   88,  847,   88,
+
+      852,   88,  854,   88,   88,  850,   88,   88,  853,   88,
+      867,   88,  855,  866,   88,   88,   88,  871,  868,  856,
+       88,   88,   88,  873,  874,  865,  904,   88,  876,  869,
+       88,  875,  872,   88,   88,  870,  877,  882,  881,  880,
+       88,   88,   88,   88,   88,  885,  884,  886,   88,   88,
+      883,  887,   88,   88,   88,  890,   88,  892,   88,   88,
+       88,  893,   88,  888,  889,   88,  891,   88,   88,  897,
+       88,   88,   88,  904,  878,  894,   88,  896,  898,   88,
+      895,   88,  903,   88,   88,  904,  901,  904,  864,  899,
+      904,  900,  863,  902,   70,   70,   70,   70,   70,   70,
+
+       70,   70,   70,   70,   70,   70,   70,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   87,  904,  861,   87,  904,   87,   87,
+       87,   87,   87,  141,  860,  904,  859,  141,  141,  141,
+      141,  141,  141,  202,  202,  202,  202,  202,  202,  202,
+      202,  202,  202,  202,  202,  202,  207,  904,  858,  207,
+       88,  207,  207,  207,  207,  207,  211,   88,  211,  211,
+       88,  211,  211,  211,  211,  211,  211,  904,  211,  219,
+      839,  904,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      838,  219,  242,  242,  242,  242,  242,  242,  242,  242,
+      242,  242,  242,  242,  242,  256,  256,  836,  256,  904,
+      834,  904,  256,  272,  832,  904,  272,  830,  272,  272,
+      272,  272,  272,  276,  828,  276,   88,   88,   88,  276,
+      278,   88,  278,   88,   88,   88,  278,  353,   88,  353,
+       88,   88,   88,  353,  355,   88,  355,  904,  806,  804,
+      355,  359,  904,  359,  904,  801,  799,  359,  361,  797,
+      361,   88,   88,   88,  361,  363,   88,  363,   88,   88,
+       88,  363,  370,  762,  370,  759,  758,  756,  370,  372,
+      208,  372,  752,  751,  683,  372,  387,   88,  387,  389,
+
+      389,   88,  389,  389,  389,   88,  389,  256,  256,   88,
+      256,  272,   88,   88,  272,   88,  272,  272,  272,  272,
+      272,  399,   88,  399,   88,   88,   88,  399,  401,   88,
+      401,   88,   88,   88,  401,  403,   88,  403,  710,  709,
+      707,  403,  276,  705,  276,  405,  703,  405,  610,  698,
+      697,  405,  278,  695,  278,   87,  693,  691,   87,  689,
+       87,   87,   87,   87,   87,  202,  202,  202,  202,  202,
+      202,  202,  202,  202,  202,  202,  202,  202,  477,  477,
+      477,  477,  477,  477,  477,  477,  477,  477,  477,  477,
+      477,  478,  687,  478,  685,  683,   88,  478,  480,   88,
+
+      480,   88,   88,   88,  480,  482,   88,  482,   88,   88,
+       88,  482,  353,   88,  353,  484,   88,  484,   88,  629,
+      627,  484,  355,  625,  355,  487,  623,  487,  621,  619,
+      512,  487,  359,  617,  359,  489,  617,  489,  606,  605,
+      603,  489,  361,  492,  361,  491,  492,  491,  601,  599,
+      597,  491,  363,  595,  363,  493,  593,  493,  591,   88,
+       88,  493,  370,   88,  370,  495,   88,  495,   88,   88,
+       88,  495,  372,   88,  372,  501,  524,  501,  522,  501,
+      520,  501,  387,  518,  387,  516,  387,  514,  387,  389,
+      389,  500,  389,  389,  389,  499,  389,  513,  496,  513,
+
+      494,  366,  366,  513,  515,  492,  515,  490,  488,  485,
+      515,  517,  483,  517,  481,  479,   88,  517,  399,   88,
+      399,  519,   88,  519,  407,  406,  404,  519,  401,  402,
+      401,  521,  400,  521,  273,  268,  267,  521,  403,  396,
+      403,  523,  396,  523,  255,  386,  386,  523,  405,  243,
+      405,   87,  379,  373,   87,  371,   87,   87,   87,   87,
+       87,  477,  477,  477,  477,  477,  477,  477,  477,  477,
+      477,  477,  477,  477,  590,  369,  590,  365,  364,  362,
+      590,  478,  360,  478,  592,  356,  592,  354,  208,  204,
+      592,  480,   88,  480,  594,  280,  594,  279,  277,  273,
+
+      594,  482,  268,  482,  596,  271,  596,  268,  266,  265,
+      596,  484,  264,  484,  598,  243,  598,  235,   86,   86,
+      598,  487,   88,  487,  600,  208,  600,  206,   86,  123,
+      600,  489,  118,  489,  491,   88,  491,  904,   71,   71,
+      491,  602,  904,  602,  904,  904,  904,  602,  493,  904,
+      493,  604,  904,  604,  904,  904,  904,  604,  495,  904,
+      495,  501,  904,  501,  904,  501,  904,  501,  389,  904,
+      389,  904,  904,  904,  389,  618,  904,  618,  904,  904,
+      904,  618,  513,  904,  513,  620,  904,  620,  904,  904,
+      904,  620,  515,  904,  515,  622,  904,  622,  904,  904,
+
+      904,  622,  517,  904,  517,  624,  904,  624,  904,  904,
+      904,  624,  519,  904,  519,  626,  904,  626,  904,  904,
+      904,  626,  521,  904,  521,  628,  904,  628,  904,  904,
+      904,  628,  523,  904,  523,   87,  904,  904,   87,  904,
+       87,   87,   87,   87,   87,  682,  682,  682,  682,  682,
+      682,  682,  682,  682,  682,  682,  682,  682,  684,  904,
+      684,  904,  904,  904,  684,  590,  904,  590,  686,  904,
+      686,  904,  904,  904,  686,  592,  904,  592,  688,  904,
+      688,  904,  904,  904,  688,  594,  904,  594,  690,  904,
+      690,  904,  904,  904,  690,  596,  904,  596,  692,  904,
+
+      692,  904,  904,  904,  692,  598,  904,  598,  694,  904,
+      694,  904,  904,  904,  694,  600,  904,  600,  696,  904,
+      696,  904,  904,  904,  696,  602,  904,  602,   87,  904,
+       87,  904,  904,  904,   87,  604,  904,  604,  501,  904,
+      501,  904,  904,  904,  501,  704,  904,  704,  904,  904,
+      904,  704,  618,  904,  618,  706,  904,  706,  904,  904,
+      904,  706,  620,  904,  620,  708,  904,  708,  904,  904,
+      904,  708,  622,  904,  622,  141,  904,  141,  904,  904,
+      904,  141,  624,  904,  624,  711,  904,  711,  626,  904,
+      626,   87,  904,  904,   87,  904,   87,   87,   87,   87,
+
+       87,  628,  904,  628,  682,  682,  682,  682,  682,  682,
+      682,  682,  682,  682,  682,  682,  682,  750,  904,  750,
+      904,  904,  904,  750,  684,  904,  684,  207,  904,  207,
+      904,  904,  904,  207,  686,  904,  686,  753,  904,  753,
+      688,  904,  688,  207,  904,  904,  207,  904,  207,  207,
+      207,  207,  207,  690,  904,  690,  754,  904,  754,  692,
+      904,  692,  694,  904,  694,  755,  904,  755,  696,  904,
+      696,   87,  904,   87,  757,  904,  757,  904,  904,  904,
+      757,  704,  904,  704,  272,  904,  272,  904,  904,  904,
+      272,  706,  904,  706,  760,  904,  760,  708,  904,  708,
+
+      141,  904,  141,  761,  904,  761,  904,  904,  904,  761,
+       87,  904,  904,   87,  904,   87,   87,   87,   87,   87,
+      795,  904,  795,  750,  904,  750,  207,  904,  207,  796,
+      904,  796,  904,  904,  904,  796,  798,  904,  798,  904,
+      904,  904,  798,  800,  904,  800,  904,  904,  904,  800,
+      802,  904,  802,  803,  904,  803,  904,  904,  904,  803,
+      805,  904,  805,  904,  904,  904,  805,  827,  904,  827,
+      904,  904,  904,  827,  829,  904,  829,  904,  904,  904,
+      829,  831,  904,  831,  904,  904,  904,  831,  833,  904,
+      833,  904,  904,  904,  833,  835,  904,  835,  904,  904,
+
+      904,  835,  837,  904,  837,  904,  904,  904,  837,  628,
+      904,  628,  904,  904,  904,  628,  857,  904,  857,  904,
+      904,  904,  857,  690,  904,  690,  904,  904,  904,  690,
+      694,  904,  694,  904,  904,  904,  694,   87,  904,   87,
+      904,  904,  904,   87,  862,  904,  862,  904,  904,  904,
+      862,  141,  904,  141,  904,  904,  904,  141,  207,  904,
+      207,  904,  904,  904,  207,   11,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904
     } ;
 
-static yyconst flex_int16_t yy_chk[2931] =
+static yyconst flex_int16_t yy_chk[2952] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1128,311 +1134,314 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
-        8,    9,   10,   37,   37,   20,   39,    9,   10,  893,
+        8,    9,   10,   37,   37,   20,   39,    9,   10,  903,
         7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
 
        15,   15,   15,   15,   20,   25,   48,   39,   42,   28,
-       27,   28,   28,   28,   28,   28,   28,  109,  115,   25,
+       27,   28,   28,   28,   28,   28,   28,  110,  116,   25,
        29,   25,   27,   27,   27,   29,   48,   35,   40,    7,
         8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
-       30,   30,   30,   30,   35,   57,   35,   35,   44,  126,
-       44,  126,  109,  115,   57,   30,   64,   56,   47,   30,
+       30,   30,   30,   30,   35,   57,   35,   35,   44,  127,
+       44,  127,  110,  116,   57,   30,   65,  544,   47,   30,
        47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
-       45,   30,   40,   45,   45,   40,   49,   30,   45,   56,
-       62,   45,   49,   30,   73,  892,  127,   53,  127,   51,
-       61,   30,   62,   55,   30,   31,  108,   31,   31,   31,
-
-       31,   31,   31,   50,   51,   53,   51,   64,   61,   54,
-       73,   55,   50,   87,   31,   51,   50,   55,   31,   54,
-      108,   50,   52,  114,   31,   50,   54,   52,  175,  129,
-       31,  129,  107,  154,  151,   52,   31,   52,  107,   87,
-       52,   60,   31,  132,   52,  132,   60,  114,  175,  154,
-       31,   38,  151,  387,  111,   38,   38,   58,   38,   60,
-       38,   38,  113,   38,  107,   38,   59,  130,  113,   58,
-       58,  116,  111,  164,   38,   38,   38,  387,   59,   58,
-      111,  130,   58,  130,  142,   60,   59,  131,   60,  116,
-      164,   68,   68,   59,  113,   38,   68,  116,   38,  131,
-
-      110,  131,   60,   67,   67,   67,   67,   67,   67,  884,
-      142,   67,   68,   68,   68,   68,   68,   68,   80,   80,
-       80,   80,   80,   80,  153,   38,   38,   77,   77,  134,
-      110,  134,   77,  153,   77,  110,  135,  135,  135,   77,
-       82,   82,   82,   82,   82,   82,  883,  243,   77,   77,
-       77,   77,   83,   83,   83,   83,   83,   83,  110,   77,
-      103,  103,  103,  103,  103,  103,  104,  104,  104,  104,
-      133,  133,  137,  133,  137,   77,  145,  139,   77,  139,
-      157,  145,  243,   77,   77,  152,  156,   77,   77,  155,
-      166,  150,  157,  880,  104,   77,  159,  168,   77,  104,
-
-       77,   77,   77,  152,   77,   85,  150,  155,  156,   85,
-       85,  166,  159,  150,   85,   85,  161,   85,  160,   85,
-      145,  162,  104,  167,  168,  161,  169,  163,   85,   85,
-       85,  105,  163,  105,  105,  105,  105,  105,  105,  879,
-      160,  171,  162,  162,  165,  163,  167,  169,  173,   85,
-      105,  106,   85,  106,  165,  172,  106,  106,  106,  106,
-      106,  106,  180,  171,  170,  173,  105,  176,  177,  170,
-      172,  181,  105,  174,  184,  187,  181,  182,  179,  180,
-       85,   99,   99,   99,   99,   99,   99,  170,  187,  106,
-      177,  174,  184,  179,  176,  183,  190,   99,   99,   99,
-
-      179,   99,   99,  189,  182,  186,  183,  191,  189,  218,
-      186,  218,  185,  188,   99,  190,  183,  183,  284,   99,
-       99,   99,  158,  185,   99,  186,   99,  158,  158,  158,
-      189,  158,  158,  188,  192,  158,  194,  158,  284,  219,
-      185,  219,  158,  158,  158,  193,  158,  192,  220,  194,
-      220,  191,  198,  198,  191,  192,  205,  198,  193,  877,
-      193,  197,  197,  197,  197,  197,  197,  200,  200,  197,
-      248,  221,  200,  198,  198,  198,  198,  198,  198,  202,
-      202,  223,  205,  223,  202,  221,  202,  221,  200,  200,
-      200,  200,  200,  200,  209,  209,  248,  876,  222,  209,
-
-      202,  202,  202,  202,  202,  202,  212,  212,  212,  212,
-      222,  286,  222,  224,  224,  225,  224,  225,  226,  226,
-      226,  228,  229,  228,  229,  234,  234,  235,  236,  235,
-      869,  286,  235,  235,  235,  235,  235,  235,  237,  212,
-      237,  282,  242,  237,  242,  242,  242,  242,  234,  256,
-      270,  236,  241,  241,  241,  241,  241,  241,  282,  266,
-      237,  266,  237,  296,  267,  235,  267,  237,  281,  244,
-      244,  244,  244,  244,  244,  256,  270,  242,  245,  245,
-      245,  245,  245,  245,  281,  241,  244,  247,  278,  247,
-      296,  295,  247,  247,  247,  247,  247,  247,  279,  280,
-
-      283,  278,  244,  288,  295,  283,  289,  868,  244,  246,
-      246,  246,  246,  246,  246,  253,  279,  280,  255,  255,
-      255,  255,  255,  255,  289,  246,  288,  246,  291,  246,
-      246,  260,  260,  260,  260,  260,  260,  290,  253,  292,
-      253,  285,  246,  291,  253,  867,  285,  246,  294,  246,
-      253,  255,  246,  287,  246,  292,  292,  294,  297,  299,
-      293,  303,  253,  290,  260,  293,  253,  300,  287,  301,
-      253,  304,  300,  302,  287,  287,  297,  299,  301,  305,
-      302,  303,  306,  307,  308,  309,  310,  306,  307,  304,
-      308,  311,  312,  313,  314,  310,  318,  311,  315,  319,
-
-      305,  305,  313,  315,  309,  316,  317,  320,  312,  314,
-      316,  317,  322,  324,  323,  318,  326,  319,  325,  327,
-      320,  328,  329,  322,  330,  331,  332,  334,  317,  323,
-      333,  325,  324,  330,  337,  335,  338,  339,  326,  329,
-      340,  328,  327,  337,  343,  334,  341,  331,  335,  332,
-      639,  342,  333,  340,  341,  339,  342,  344,  344,  343,
-      345,  362,  344,  362,  344,  403,  345,  352,  352,  352,
-      352,  353,  353,  353,  353,  363,  403,  363,  639,  408,
-      338,  370,  370,  370,  370,  370,  370,  372,  382,  372,
-      408,  410,  372,  372,  372,  372,  372,  372,  382,  404,
-
-      352,  371,  371,  371,  371,  371,  371,  374,  374,  374,
-      374,  374,  374,  410,  382,  404,  405,  371,  406,  371,
-      412,  371,  371,  377,  377,  377,  377,  377,  377,  385,
-      425,  405,  383,  412,  371,  385,  389,  406,  414,  371,
-      374,  371,  383,  413,  371,  425,  371,  375,  375,  375,
-      375,  375,  375,  384,  389,  417,  377,  407,  383,  413,
-      414,  385,  389,  375,  375,  375,  407,  375,  375,  378,
-      378,  378,  378,  378,  378,  421,  384,  417,  384,  866,
-      375,  421,  384,  865,  388,  375,  375,  375,  384,  386,
-      375,  386,  375,  415,  386,  386,  386,  386,  386,  386,
-
-      384,  409,  378,  411,  384,  416,  415,  388,  384,  388,
-      409,  418,  411,  388,  423,  419,  422,  424,  420,  388,
-      419,  416,  416,  431,  427,  423,  432,  386,  433,  418,
-      429,  388,  434,  420,  441,  388,  424,  422,  427,  388,
-      420,  433,  429,  435,  431,  436,  439,  437,  432,  435,
-      442,  443,  444,  445,  441,  434,  437,  446,  447,  449,
-      436,  439,  451,  453,  452,  456,  443,  447,  445,  454,
-      455,  457,  442,  452,  444,  458,  449,  446,  459,  460,
-      457,  461,  462,  463,  453,  451,  460,  456,  461,  454,
-      455,  459,  464,  458,  465,  466,  468,  470,  528,  469,
-
-      464,  528,  861,  470,  519,  463,  466,  462,  469,  524,
-      464,  465,  479,  479,  479,  479,  518,  519,  468,  490,
-      490,  490,  490,  490,  490,  492,  492,  492,  492,  492,
-      492,  524,  544,  518,  522,  490,  521,  490,  544,  490,
-      490,  493,  493,  493,  493,  493,  493,  497,  526,  498,
-      494,  521,  490,  526,  522,  496,  532,  490,  492,  490,
-      494,  495,  490,  495,  490,  496,  495,  495,  495,  495,
-      495,  495,  567,  497,  493,  498,  494,  532,  523,  525,
-      567,  496,  500,  500,  500,  500,  500,  500,  502,  529,
-      502,  523,  525,  502,  502,  502,  502,  502,  502,  495,
-
-      501,  501,  501,  501,  501,  501,  527,  530,  531,  529,
-      533,  857,  536,  535,  539,  537,  501,  527,  501,  533,
-      501,  501,  530,  534,  535,  536,  538,  531,  534,  540,
-      541,  547,  542,  501,  548,  538,  539,  542,  501,  541,
-      501,  545,  549,  501,  537,  501,  540,  550,  547,  548,
-      545,  552,  553,  554,  558,  555,  550,  549,  557,  558,
-      552,  563,  560,  561,  564,  554,  568,  565,  569,  553,
-      555,  560,  561,  557,  570,  569,  568,  564,  571,  572,
-      574,  575,  577,  563,  565,  572,  713,  578,  622,  574,
-      571,  575,  713,  604,  604,  622,  570,  625,  854,  577,
-
-      578,  597,  597,  597,  597,  597,  597,  598,  598,  598,
-      598,  598,  598,  600,  625,  600,  604,  624,  600,  600,
-      600,  600,  600,  600,  603,  603,  603,  603,  603,  603,
-      624,  605,  814,  629,  597,  599,  599,  599,  599,  599,
-      599,  606,  621,  606,  626,  627,  606,  621,  814,  623,
-      629,  599,  627,  599,  605,  599,  599,  603,  623,  630,
-      621,  628,  630,  606,  631,  606,  632,  626,  599,  628,
-      606,  633,  634,  599,  635,  599,  636,  631,  599,  637,
-      599,  640,  637,  638,  641,  643,  633,  644,  632,  647,
-      642,  635,  645,  648,  634,  705,  640,  649,  636,  642,
-
-      638,  645,  653,  643,  641,  654,  649,  656,  659,  644,
-      667,  660,  647,  668,  671,  648,  670,  659,  660,  667,
-      703,  705,  653,  668,  656,  670,  702,  853,  708,  671,
-      703,  852,  654,  689,  689,  689,  689,  689,  689,  693,
-      693,  693,  693,  693,  693,  706,  711,  702,  708,  689,
-      707,  689,  706,  689,  689,  707,  709,  710,  715,  709,
-      710,  714,  716,  717,  711,  716,  689,  715,  718,  721,
-      720,  689,  693,  689,  714,  723,  689,  719,  689,  720,
-      719,  724,  722,  725,  717,  722,  726,  727,  723,  724,
-      735,  728,  731,  725,  734,  721,  736,  718,  738,  726,
-
-      728,  760,  739,  761,  757,  762,  738,  764,  727,  758,
-      731,  739,  735,  761,  734,  731,  760,  736,  746,  746,
-      746,  746,  746,  746,  757,  759,  758,  763,  762,  765,
-      759,  767,  765,  764,  766,  769,  771,  773,  769,  771,
-      773,  772,  774,  775,  763,  774,  776,  766,  772,  778,
-      782,  746,  797,  799,  802,  807,  810,  800,  775,  767,
-      801,  803,  804,  801,  803,  804,  806,  808,  811,  776,
-      808,  811,  778,  782,  799,  800,  802,  812,  810,  797,
-      812,  807,  813,  815,  806,  816,  831,  833,  832,  834,
-      833,  813,  835,  836,  815,  832,  836,  837,  834,  840,
-
-      843,  816,  840,  843,  844,  845,  846,  831,  858,  855,
-      835,  858,  859,  844,  837,  846,  835,  845,  855,  856,
-      860,  870,  859,  862,  856,  860,  862,  863,  864,  871,
-      863,  864,  872,  873,  874,  872,  875,  874,  878,  875,
-      881,  870,  882,  873,  871,  885,  886,  887,  889,  888,
-      890,  851,  891,  850,  885,  849,  848,  882,  847,  886,
-      878,  881,  891,  842,  841,  839,  889,  838,  830,  887,
-      888,  829,  890,  895,  895,  895,  895,  895,  895,  895,
-      895,  895,  895,  895,  895,  895,  896,  896,  896,  896,
-      896,  896,  896,  896,  896,  896,  896,  896,  896,  897,
-
-      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
-      897,  897,  898,  828,  827,  898,  826,  898,  898,  898,
-      898,  898,  899,  825,  824,  823,  899,  899,  899,  899,
-      899,  899,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  901,  822,  821,  901,  820,
-      901,  901,  901,  901,  901,  902,  819,  902,  902,  818,
-      902,  902,  902,  902,  902,  902,  817,  902,  903,  809,
-      805,  903,  903,  903,  903,  903,  903,  903,  903,  798,
-      903,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  905,  905,  796,  905,  795,  794,
-
-      793,  905,  906,  792,  791,  906,  790,  906,  906,  906,
-      906,  906,  907,  789,  907,  788,  787,  786,  907,  908,
-      785,  908,  784,  783,  781,  908,  909,  780,  909,  779,
-      777,  770,  909,  910,  768,  910,  756,  755,  754,  910,
-      911,  753,  911,  752,  751,  750,  911,  912,  749,  912,
-      748,  745,  744,  912,  913,  743,  913,  737,  733,  732,
-      913,  914,  730,  914,  729,  712,  704,  914,  915,  701,
-      915,  696,  694,  690,  915,  916,  680,  916,  917,  917,
-      676,  917,  917,  917,  674,  917,  918,  918,  672,  918,
-      919,  669,  666,  919,  665,  919,  919,  919,  919,  919,
-
-      920,  664,  920,  663,  662,  661,  920,  921,  658,  921,
-      657,  655,  652,  921,  922,  651,  922,  650,  646,  619,
-      922,  923,  615,  923,  924,  613,  924,  611,  609,  607,
-      924,  925,  601,  925,  926,  595,  593,  926,  591,  926,
-      926,  926,  926,  926,  927,  927,  927,  927,  927,  927,
-      927,  927,  927,  927,  927,  927,  927,  928,  928,  928,
-      928,  928,  928,  928,  928,  928,  928,  928,  928,  928,
-      929,  589,  929,  587,  585,  583,  929,  930,  581,  930,
-      580,  579,  576,  930,  931,  573,  931,  566,  562,  559,
-      931,  932,  556,  932,  933,  551,  933,  546,  543,  520,
-
-      933,  934,  516,  934,  935,  514,  935,  512,  510,  508,
-      935,  936,  506,  936,  937,  505,  937,  504,  503,  491,
-      937,  938,  488,  938,  939,  486,  939,  485,  484,  482,
-      939,  940,  480,  940,  941,  477,  941,  475,  473,  471,
-      941,  942,  467,  942,  943,  450,  943,  448,  440,  438,
-      943,  944,  430,  944,  945,  428,  945,  426,  945,  400,
-      945,  946,  398,  946,  396,  946,  394,  946,  947,  947,
-      393,  947,  947,  947,  392,  947,  948,  379,  948,  376,
-      367,  365,  948,  949,  364,  949,  360,  358,  356,  949,
-      950,  354,  950,  350,  348,  347,  950,  951,  346,  951,
-
-      952,  336,  952,  321,  298,  277,  952,  953,  275,  953,
-      954,  273,  954,  272,  271,  269,  954,  955,  268,  955,
-      956,  263,  956,  259,  258,  254,  956,  957,  251,  957,
-      958,  250,  239,  958,  238,  958,  958,  958,  958,  958,
-      959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
-      959,  959,  959,  960,  231,  960,  230,  227,  217,  960,
-      961,  215,  961,  962,  214,  962,  213,  207,  206,  962,
-      963,  204,  963,  964,  199,  964,  178,  149,  147,  964,
-      965,  146,  965,  966,  140,  966,  138,  136,  128,  966,
-      967,  125,  967,  968,  124,  968,  120,  101,   98,  968,
-
-      969,   95,  969,  970,   93,  970,   86,   72,   70,  970,
-      971,   66,  971,  972,   36,  972,   33,   18,   11,  972,
-      973,    4,  973,    3,    0,    0,  973,  974,    0,  974,
-      975,    0,  975,    0,    0,    0,  975,  976,    0,  976,
-      977,    0,  977,    0,  977,    0,  977,  978,    0,  978,
-        0,    0,    0,  978,  979,    0,  979,    0,    0,    0,
-      979,  980,    0,  980,  981,    0,  981,    0,    0,    0,
-      981,  982,    0,  982,  983,    0,  983,    0,    0,    0,
-      983,  984,    0,  984,  985,    0,  985,    0,    0,    0,
-      985,  986,    0,  986,  987,    0,  987,    0,    0,    0,
-
-      987,  988,    0,  988,  989,    0,  989,    0,    0,    0,
-      989,  990,    0,  990,  991,    0,    0,  991,    0,  991,
-      991,  991,  991,  991,  992,  992,  992,  992,  992,  992,
-      992,  992,  992,  992,  992,  992,  992,  993,    0,  993,
-        0,    0,    0,  993,  994,    0,  994,  995,    0,  995,
-        0,    0,    0,  995,  996,    0,  996,  997,    0,  997,
-        0,    0,    0,  997,  998,    0,  998,  999,    0,  999,
-        0,    0,    0,  999, 1000,    0, 1000, 1001,    0, 1001,
-        0,    0,    0, 1001, 1002,    0, 1002, 1003,    0, 1003,
-        0,    0,    0, 1003, 1004,    0, 1004, 1005,    0, 1005,
-
-        0,    0,    0, 1005, 1006,    0, 1006, 1007,    0, 1007,
-        0,    0,    0, 1007, 1008,    0, 1008, 1009,    0, 1009,
-        0,    0,    0, 1009, 1010,    0, 1010,    0,    0,    0,
-     1010, 1011,    0, 1011, 1012,    0, 1012,    0,    0,    0,
-     1012, 1013,    0, 1013, 1014,    0, 1014,    0,    0,    0,
-     1014, 1015,    0, 1015, 1016,    0, 1016,    0,    0,    0,
-     1016, 1017,    0, 1017, 1018,    0, 1018, 1019,    0, 1019,
-     1020,    0,    0, 1020,    0, 1020, 1020, 1020, 1020, 1020,
-     1021,    0, 1021, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
-     1022, 1022, 1022, 1022, 1022, 1022, 1023,    0, 1023,    0,
-
-        0,    0, 1023, 1024,    0, 1024, 1025,    0, 1025,    0,
-        0,    0, 1025, 1026,    0, 1026, 1027,    0, 1027, 1028,
-        0, 1028, 1029,    0,    0, 1029,    0, 1029, 1029, 1029,
-     1029, 1029, 1030,    0, 1030, 1031,    0, 1031, 1032,    0,
-     1032, 1033,    0, 1033, 1034,    0, 1034, 1035,    0, 1035,
-     1036,    0, 1036, 1037,    0, 1037,    0,    0,    0, 1037,
-     1038,    0, 1038, 1039,    0, 1039,    0,    0,    0, 1039,
-     1040,    0, 1040, 1041,    0, 1041, 1042,    0, 1042, 1043,
-        0, 1043, 1044,    0, 1044,    0,    0,    0, 1044, 1045,
-        0,    0, 1045,    0, 1045, 1045, 1045, 1045, 1045, 1046,
-
-        0, 1046, 1047,    0, 1047, 1048,    0, 1048, 1049,    0,
-     1049,    0,    0,    0, 1049, 1050,    0, 1050,    0,    0,
-        0, 1050, 1051,    0, 1051,    0,    0,    0, 1051, 1052,
-        0, 1052, 1053,    0, 1053,    0,    0,    0, 1053, 1054,
-        0, 1054,    0,    0,    0, 1054, 1055,    0, 1055,    0,
-        0,    0, 1055, 1056,    0, 1056,    0,    0,    0, 1056,
-     1057,    0, 1057,    0,    0,    0, 1057, 1058,    0, 1058,
-        0,    0,    0, 1058, 1059,    0, 1059,    0,    0,    0,
-     1059, 1060,    0, 1060,    0,    0,    0, 1060, 1061,    0,
-     1061,    0,    0,    0, 1061, 1062,    0, 1062,    0,    0,
-
-        0, 1062, 1063,    0, 1063,    0,    0,    0, 1063, 1064,
-        0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,    0,
-        0,    0, 1065, 1066,    0, 1066,    0,    0,    0, 1066,
-     1067,    0, 1067,    0,    0,    0, 1067, 1068,    0, 1068,
-        0,    0,    0, 1068,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894,
-      894,  894,  894,  894,  894,  894,  894,  894,  894,  894
+       45,   30,   40,   45,   45,   40,   49,   30,   45,   63,
+       62,   45,   49,   30,   74,  902,  544,   53,   63,   51,
+       61,   30,   62,   55,   30,   31,  109,   31,   31,   31,
+
+       31,   31,   31,   50,   51,   53,   51,   65,   61,   54,
+       74,   55,   50,   88,   31,   51,   50,   55,   31,   54,
+      109,   50,   52,  115,   31,   50,   54,   52,  182,  146,
+       31,   56,  108,  182,  146,   52,   31,   52,  108,   88,
+       52,   60,   31,  128,   52,  128,   60,  115,   56,  152,
+       31,   38,  894,   56,  112,   38,   38,   58,   38,   60,
+       38,   38,  114,   38,  108,   38,   59,  152,  114,   58,
+       58,  117,  112,  146,   38,   38,   38,  189,   59,   58,
+      112,  130,   58,  130,  143,   60,   59,  132,   60,  117,
+      189,   69,   69,   59,  114,   38,   69,  117,   38,  132,
+
+      111,  132,   60,   68,   68,   68,   68,   68,   68,  893,
+      143,   68,   69,   69,   69,   69,   69,   69,   81,   81,
+       81,   81,   81,   81,  154,   38,   38,   78,   78,  133,
+      111,  133,   78,  154,   78,  111,  135,  162,  135,   78,
+       83,   83,   83,   83,   83,   83,  162,  890,   78,   78,
+       78,   78,   84,   84,   84,   84,   84,   84,  111,   78,
+      104,  104,  104,  104,  104,  104,  105,  105,  105,  105,
+      134,  134,  138,  134,  138,   78,  131,  155,   78,  136,
+      136,  136,  173,   78,   78,  153,  157,   78,   78,  140,
+      131,  140,  131,  155,  105,   78,  151,  173,   78,  105,
+
+       78,   78,   78,  153,   78,   86,  156,  160,  157,   86,
+       86,  151,  183,  158,   86,   86,  168,   86,  151,   86,
+      161,  183,  105,  160,  156,  158,  163,  164,   86,   86,
+       86,  106,  164,  106,  106,  106,  106,  106,  106,  168,
+      169,  167,  161,  170,  166,  164,  165,  163,  163,   86,
+      106,  107,   86,  107,  166,  172,  107,  107,  107,  107,
+      107,  107,  167,  165,  170,  171,  106,  169,  177,  175,
+      171,  176,  106,  174,  178,  181,  184,  172,  180,  889,
+       86,  100,  100,  100,  100,  100,  100,  175,  171,  107,
+      174,  176,  181,  180,  185,  177,  178,  100,  100,  100,
+
+      180,  100,  100,  184,  192,  185,  187,  186,  193,  221,
+      190,  221,  887,  188,  100,  185,  185,  187,  188,  100,
+      100,  100,  159,  192,  100,  186,  100,  159,  159,  159,
+      190,  159,  159,  188,  187,  159,  191,  159,  194,  208,
+      196,  191,  159,  159,  159,  195,  159,  197,  251,  212,
+      212,  194,  193,  196,  212,  193,  201,  201,  195,  194,
+      195,  201,  222,  191,  222,  208,  259,  197,  200,  200,
+      200,  200,  200,  200,  251,  287,  200,  201,  201,  201,
+      201,  201,  201,  203,  203,  223,  246,  223,  203,  205,
+      205,  226,  259,  226,  205,  287,  205,  215,  215,  215,
+
+      215,  228,  224,  228,  203,  203,  203,  203,  203,  203,
+      205,  205,  205,  205,  205,  205,  224,  225,  224,  227,
+      227,  246,  227,  229,  229,  229,  231,  239,  231,  225,
+      215,  225,  232,  291,  232,  237,  237,  238,  269,  238,
+      269,  284,  238,  238,  238,  238,  238,  238,  273,  240,
+      239,  240,  432,  270,  240,  270,  291,  284,  237,  244,
+      244,  244,  244,  244,  244,  245,  432,  245,  245,  245,
+      245,  240,  286,  240,  273,  238,  282,  286,  240,  247,
+      247,  247,  247,  247,  247,  248,  248,  248,  248,  248,
+      248,  283,  244,  285,  282,  281,  247,  250,  294,  250,
+
+      245,  293,  250,  250,  250,  250,  250,  250,  281,  283,
+      285,  288,  247,  294,  289,  331,  288,  297,  247,  249,
+      249,  249,  249,  249,  249,  256,  297,  293,  258,  258,
+      258,  258,  258,  258,  289,  249,  298,  249,  331,  249,
+      249,  263,  263,  263,  263,  263,  263,  292,  256,  298,
+      256,  295,  249,  296,  256,  299,  290,  249,  296,  249,
+      256,  258,  249,  300,  249,  292,  302,  295,  295,  306,
+      303,  290,  256,  307,  263,  303,  256,  290,  290,  304,
+      256,  300,  299,  305,  302,  308,  312,  309,  304,  306,
+      305,  307,  309,  310,  311,  313,  314,  315,  310,  316,
+
+      311,  317,  314,  321,  313,  312,  308,  308,  316,  318,
+      319,  322,  320,  315,  318,  319,  317,  320,  323,  325,
+      326,  327,  321,  328,  327,  329,  330,  332,  333,  322,
+      325,  323,  334,  335,  320,  326,  336,  339,  329,  337,
+      338,  334,  328,  341,  342,  333,  343,  332,  330,  344,
+      339,  346,  341,  347,  348,  335,  346,  345,  338,  336,
+      387,  337,  344,  350,  343,  345,  349,  349,  347,  350,
+      387,  349,  348,  349,  357,  357,  357,  357,  358,  358,
+      358,  358,  367,  368,  367,  368,  387,  408,  342,  375,
+      375,  375,  375,  375,  375,  377,  388,  377,  408,  392,
+
+      377,  377,  377,  377,  377,  377,  388,  357,  376,  376,
+      376,  376,  376,  376,  379,  379,  379,  379,  379,  379,
+      411,  409,  388,  392,  376,  410,  376,  413,  376,  376,
+      382,  382,  382,  382,  382,  382,  390,  409,  413,  411,
+      410,  376,  390,  394,  415,  419,  376,  379,  376,  417,
+      886,  376,  420,  376,  380,  380,  380,  380,  380,  380,
+      389,  394,  417,  382,  412,  420,  415,  419,  390,  394,
+      380,  380,  380,  412,  380,  380,  383,  383,  383,  383,
+      383,  383,  426,  389,  418,  389,  879,  380,  426,  389,
+      878,  393,  380,  380,  380,  389,  391,  380,  391,  380,
+
+      418,  391,  391,  391,  391,  391,  391,  389,  414,  383,
+      416,  389,  421,  422,  393,  389,  393,  414,  423,  416,
+      393,  428,  424,  427,  429,  425,  393,  424,  421,  421,
+      430,  436,  428,  437,  391,  422,  423,  434,  393,  439,
+      425,  438,  393,  429,  427,  430,  393,  425,  441,  434,
+      440,  442,  436,  444,  438,  437,  440,  446,  447,  448,
+      442,  449,  439,  441,  450,  451,  452,  454,  444,  456,
+      459,  457,  458,  462,  448,  452,  460,  446,  461,  450,
+      447,  458,  464,  449,  454,  451,  465,  466,  463,  468,
+      469,  459,  456,  457,  466,  462,  460,  463,  461,  465,
+
+      464,  467,  470,  474,  471,  472,  475,  477,  467,  877,
+      470,  526,  469,  477,  468,  475,  472,  504,  505,  476,
+      470,  471,  476,  876,  526,  474,  486,  486,  486,  486,
+      497,  497,  497,  497,  497,  497,  499,  499,  499,  499,
+      499,  499,  525,  504,  505,  528,  497,  529,  497,  530,
+      497,  497,  500,  500,  500,  500,  500,  500,  875,  525,
+      528,  501,  530,  497,  531,  538,  503,  529,  497,  499,
+      497,  501,  502,  497,  502,  497,  503,  502,  502,  502,
+      502,  502,  502,  533,  538,  500,  531,  501,  533,  532,
+      871,  867,  503,  507,  507,  507,  507,  507,  507,  509,
+
+      535,  509,  532,  535,  509,  509,  509,  509,  509,  509,
+      502,  508,  508,  508,  508,  508,  508,  534,  536,  537,
+      539,  540,  542,  543,  864,  546,  547,  508,  534,  508,
+      540,  508,  508,  542,  537,  541,  543,  545,  536,  548,
+      541,  539,  554,  547,  508,  549,  545,  546,  548,  508,
+      549,  508,  551,  552,  508,  555,  508,  556,  551,  554,
+      557,  560,  552,  561,  559,  562,  564,  571,  567,  557,
+      555,  565,  556,  559,  568,  561,  565,  567,  560,  572,
+      562,  564,  573,  568,  576,  575,  578,  582,  577,  571,
+      579,  580,  572,  575,  576,  577,  582,  580,  585,  573,
+
+      583,  586,  579,  588,  630,  863,  634,  728,  578,  630,
+      583,  633,  613,  613,  586,  585,  606,  606,  606,  606,
+      606,  606,  630,  634,  633,  588,  607,  607,  607,  607,
+      607,  607,  609,  614,  609,  613,  728,  609,  609,  609,
+      609,  609,  609,  612,  612,  612,  612,  612,  612,  606,
+      608,  608,  608,  608,  608,  608,  614,  615,  631,  615,
+      632,  635,  615,  638,  637,  631,  608,  636,  608,  632,
+      608,  608,  637,  648,  636,  639,  612,  641,  639,  615,
+      638,  615,  642,  608,  635,  640,  615,  643,  608,  644,
+      608,  645,  649,  608,  647,  608,  650,  642,  640,  641,
+
+      646,  648,  652,  646,  653,  651,  644,  649,  654,  643,
+      656,  647,  657,  645,  651,  658,  650,  654,  662,  663,
+      652,  668,  665,  862,  658,  669,  653,  676,  679,  680,
+      668,  677,  669,  656,  657,  713,  676,  679,  662,  665,
+      712,  677,  718,  715,  680,  713,  663,  699,  699,  699,
+      699,  699,  699,  703,  703,  703,  703,  703,  703,  716,
+      721,  712,  718,  699,  734,  699,  716,  699,  699,  715,
+      717,  719,  734,  720,  719,  717,  720,  723,  721,  725,
+      699,  724,  727,  723,  731,  699,  703,  699,  725,  745,
+      699,  730,  699,  726,  724,  729,  726,  735,  729,  732,
+
+      730,  733,  732,  727,  736,  737,  738,  735,  744,  741,
+      731,  745,  746,  748,  733,  738,  749,  736,  769,  861,
+      767,  748,  772,  769,  768,  749,  737,  741,  744,  770,
+      773,  774,  741,  746,  756,  756,  756,  756,  756,  756,
+      767,  768,  771,  775,  770,  772,  775,  773,  776,  777,
+      779,  781,  771,  779,  781,  782,  783,  774,  785,  783,
+      784,  776,  782,  784,  786,  788,  792,  756,  807,  809,
+      817,  812,  811,  785,  810,  811,  813,  777,  814,  813,
+      816,  814,  818,  820,  860,  818,  824,  786,  788,  792,
+      809,  821,  810,  812,  821,  807,  817,  822,  816,  823,
+
+      822,  825,  824,  826,  841,  820,  842,  843,  823,  844,
+      843,  845,  825,  842,  846,  847,  855,  846,  844,  826,
+      850,  853,  854,  850,  853,  841,  859,  856,  855,  845,
+      865,  854,  847,  866,  868,  845,  856,  868,  866,  865,
+      869,  870,  872,  880,  873,  872,  870,  873,  874,  881,
+      869,  874,  882,  888,  884,  882,  883,  884,  885,  891,
+      895,  885,  892,  880,  881,  896,  883,  897,  899,  895,
+      898,  900,  901,  858,  857,  888,  852,  892,  896,  851,
+      891,  849,  901,  848,  840,  839,  899,  838,  837,  897,
+      836,  898,  835,  900,  905,  905,  905,  905,  905,  905,
+
+      905,  905,  905,  905,  905,  905,  905,  906,  906,  906,
+      906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
+      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
+      907,  907,  907,  908,  834,  833,  908,  832,  908,  908,
+      908,  908,  908,  909,  831,  830,  829,  909,  909,  909,
+      909,  909,  909,  910,  910,  910,  910,  910,  910,  910,
+      910,  910,  910,  910,  910,  910,  911,  828,  827,  911,
+      819,  911,  911,  911,  911,  911,  912,  815,  912,  912,
+      808,  912,  912,  912,  912,  912,  912,  806,  912,  913,
+      805,  804,  913,  913,  913,  913,  913,  913,  913,  913,
+
+      803,  913,  914,  914,  914,  914,  914,  914,  914,  914,
+      914,  914,  914,  914,  914,  915,  915,  802,  915,  801,
+      800,  799,  915,  916,  798,  797,  916,  796,  916,  916,
+      916,  916,  916,  917,  795,  917,  794,  793,  791,  917,
+      918,  790,  918,  789,  787,  780,  918,  919,  778,  919,
+      766,  765,  764,  919,  920,  763,  920,  762,  761,  760,
+      920,  921,  759,  921,  758,  755,  754,  921,  922,  753,
+      922,  747,  743,  742,  922,  923,  740,  923,  739,  722,
+      714,  923,  924,  711,  924,  706,  704,  700,  924,  925,
+      690,  925,  686,  684,  682,  925,  926,  681,  926,  927,
+
+      927,  678,  927,  927,  927,  675,  927,  928,  928,  674,
+      928,  929,  673,  672,  929,  671,  929,  929,  929,  929,
+      929,  930,  670,  930,  667,  666,  664,  930,  931,  661,
+      931,  660,  659,  655,  931,  932,  628,  932,  624,  622,
+      620,  932,  933,  618,  933,  934,  616,  934,  610,  604,
+      602,  934,  935,  600,  935,  936,  598,  596,  936,  594,
+      936,  936,  936,  936,  936,  937,  937,  937,  937,  937,
+      937,  937,  937,  937,  937,  937,  937,  937,  938,  938,
+      938,  938,  938,  938,  938,  938,  938,  938,  938,  938,
+      938,  939,  592,  939,  590,  589,  587,  939,  940,  584,
+
+      940,  581,  574,  570,  940,  941,  569,  941,  566,  563,
+      558,  941,  942,  553,  942,  943,  550,  943,  527,  523,
+      521,  943,  944,  519,  944,  945,  517,  945,  515,  513,
+      512,  945,  946,  511,  946,  947,  510,  947,  498,  495,
+      493,  947,  948,  492,  948,  949,  491,  949,  489,  487,
+      484,  949,  950,  482,  950,  951,  480,  951,  478,  473,
+      455,  951,  952,  453,  952,  953,  445,  953,  443,  435,
+      433,  953,  954,  431,  954,  955,  405,  955,  403,  955,
+      401,  955,  956,  399,  956,  398,  956,  397,  956,  957,
+      957,  384,  957,  957,  957,  381,  957,  958,  372,  958,
+
+      370,  369,  365,  958,  959,  363,  959,  361,  359,  355,
+      959,  960,  353,  960,  352,  351,  340,  960,  961,  324,
+      961,  962,  301,  962,  280,  278,  276,  962,  963,  275,
+      963,  964,  274,  964,  272,  271,  266,  964,  965,  262,
+      965,  966,  261,  966,  257,  254,  253,  966,  967,  242,
+      967,  968,  241,  234,  968,  233,  968,  968,  968,  968,
+      968,  969,  969,  969,  969,  969,  969,  969,  969,  969,
+      969,  969,  969,  969,  970,  230,  970,  220,  218,  217,
+      970,  971,  216,  971,  972,  210,  972,  209,  207,  202,
+      972,  973,  179,  973,  974,  150,  974,  148,  147,  141,
+
+      974,  975,  139,  975,  976,  137,  976,  129,  126,  125,
+      976,  977,  121,  977,  978,  102,  978,   99,   96,   94,
+      978,  979,   87,  979,  980,   73,  980,   71,   67,   36,
+      980,  981,   33,  981,  982,   18,  982,   11,    4,    3,
+      982,  983,    0,  983,    0,    0,    0,  983,  984,    0,
+      984,  985,    0,  985,    0,    0,    0,  985,  986,    0,
+      986,  987,    0,  987,    0,  987,    0,  987,  988,    0,
+      988,    0,    0,    0,  988,  989,    0,  989,    0,    0,
+        0,  989,  990,    0,  990,  991,    0,  991,    0,    0,
+        0,  991,  992,    0,  992,  993,    0,  993,    0,    0,
+
+        0,  993,  994,    0,  994,  995,    0,  995,    0,    0,
+        0,  995,  996,    0,  996,  997,    0,  997,    0,    0,
+        0,  997,  998,    0,  998,  999,    0,  999,    0,    0,
+        0,  999, 1000,    0, 1000, 1001,    0,    0, 1001,    0,
+     1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002,
+     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003,    0,
+     1003,    0,    0,    0, 1003, 1004,    0, 1004, 1005,    0,
+     1005,    0,    0,    0, 1005, 1006,    0, 1006, 1007,    0,
+     1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,    0,
+     1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,    0,
+
+     1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,    0,
+     1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,    0,
+     1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,    0,
+     1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,    0,
+     1019,    0,    0,    0, 1019, 1020,    0, 1020,    0,    0,
+        0, 1020, 1021,    0, 1021, 1022,    0, 1022,    0,    0,
+        0, 1022, 1023,    0, 1023, 1024,    0, 1024,    0,    0,
+        0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,    0,
+        0, 1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0,
+     1029, 1030,    0,    0, 1030,    0, 1030, 1030, 1030, 1030,
+
+     1030, 1031,    0, 1031, 1032, 1032, 1032, 1032, 1032, 1032,
+     1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033,    0, 1033,
+        0,    0,    0, 1033, 1034,    0, 1034, 1035,    0, 1035,
+        0,    0,    0, 1035, 1036,    0, 1036, 1037,    0, 1037,
+     1038,    0, 1038, 1039,    0,    0, 1039,    0, 1039, 1039,
+     1039, 1039, 1039, 1040,    0, 1040, 1041,    0, 1041, 1042,
+        0, 1042, 1043,    0, 1043, 1044,    0, 1044, 1045,    0,
+     1045, 1046,    0, 1046, 1047,    0, 1047,    0,    0,    0,
+     1047, 1048,    0, 1048, 1049,    0, 1049,    0,    0,    0,
+     1049, 1050,    0, 1050, 1051,    0, 1051, 1052,    0, 1052,
+
+     1053,    0, 1053, 1054,    0, 1054,    0,    0,    0, 1054,
+     1055,    0,    0, 1055,    0, 1055, 1055, 1055, 1055, 1055,
+     1056,    0, 1056, 1057,    0, 1057, 1058,    0, 1058, 1059,
+        0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,    0,
+        0,    0, 1060, 1061,    0, 1061,    0,    0,    0, 1061,
+     1062,    0, 1062, 1063,    0, 1063,    0,    0,    0, 1063,
+     1064,    0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,
+        0,    0,    0, 1065, 1066,    0, 1066,    0,    0,    0,
+     1066, 1067,    0, 1067,    0,    0,    0, 1067, 1068,    0,
+     1068,    0,    0,    0, 1068, 1069,    0, 1069,    0,    0,
+
+        0, 1069, 1070,    0, 1070,    0,    0,    0, 1070, 1071,
+        0, 1071,    0,    0,    0, 1071, 1072,    0, 1072,    0,
+        0,    0, 1072, 1073,    0, 1073,    0,    0,    0, 1073,
+     1074,    0, 1074,    0,    0,    0, 1074, 1075,    0, 1075,
+        0,    0,    0, 1075, 1076,    0, 1076,    0,    0,    0,
+     1076, 1077,    0, 1077,    0,    0,    0, 1077, 1078,    0,
+     1078,    0,    0,    0, 1078,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[184] =
+static yyconst flex_int32_t yy_rule_can_match_eol[186] =
     {   0,
 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1441,9 +1450,9 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-    0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
@@ -1473,6 +1482,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Wed Oct 26 17:32:30 2016
- * Update Count     : 499
+ * Last Modified On : Tue Nov 29 11:32:00 2016
+ * Update Count     : 501
  */
 #line 20 "lex.ll"
@@ -1535,5 +1544,5 @@
 
 
-#line 1538 "Parser/lex.cc"
+#line 1547 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1730,5 +1739,5 @@
 
 				   /* line directives */
-#line 1733 "Parser/lex.cc"
+#line 1742 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1784,5 +1793,5 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 895 )
+				if ( yy_current_state >= 905 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
@@ -1790,5 +1799,5 @@
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 2845 );
+		while ( yy_base[yy_current_state] != 2866 );
 
 yy_find_action:
@@ -2206,20 +2215,20 @@
 YY_RULE_SETUP
 #line 239 "lex.ll"
+{ NUMERIC_RETURN(ONE_T); }				// CFA
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 240 "lex.ll"
 { KEYWORD_RETURN(OTYPE); }				// CFA
 	YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 240 "lex.ll"
+case 73:
+YY_RULE_SETUP
+#line 241 "lex.ll"
 { KEYWORD_RETURN(REGISTER); }
 	YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 241 "lex.ll"
+case 74:
+YY_RULE_SETUP
+#line 242 "lex.ll"
 { KEYWORD_RETURN(RESTRICT); }			// C99
-	YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 242 "lex.ll"
-{ KEYWORD_RETURN(RESTRICT); }			// GCC
 	YY_BREAK
 case 75:
@@ -2231,20 +2240,20 @@
 YY_RULE_SETUP
 #line 244 "lex.ll"
+{ KEYWORD_RETURN(RESTRICT); }			// GCC
+	YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 245 "lex.ll"
 { KEYWORD_RETURN(RETURN); }
 	YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 245 "lex.ll"
+case 78:
+YY_RULE_SETUP
+#line 246 "lex.ll"
 { KEYWORD_RETURN(SHORT); }
 	YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 246 "lex.ll"
+case 79:
+YY_RULE_SETUP
+#line 247 "lex.ll"
 { KEYWORD_RETURN(SIGNED); }
-	YY_BREAK
-case 79:
-YY_RULE_SETUP
-#line 247 "lex.ll"
-{ KEYWORD_RETURN(SIGNED); }				// GCC
 	YY_BREAK
 case 80:
@@ -2256,60 +2265,60 @@
 YY_RULE_SETUP
 #line 249 "lex.ll"
+{ KEYWORD_RETURN(SIGNED); }				// GCC
+	YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 250 "lex.ll"
 { KEYWORD_RETURN(SIZEOF); }
 	YY_BREAK
-case 82:
-YY_RULE_SETUP
-#line 250 "lex.ll"
+case 83:
+YY_RULE_SETUP
+#line 251 "lex.ll"
 { KEYWORD_RETURN(STATIC); }
 	YY_BREAK
-case 83:
-YY_RULE_SETUP
-#line 251 "lex.ll"
+case 84:
+YY_RULE_SETUP
+#line 252 "lex.ll"
 { KEYWORD_RETURN(STATICASSERT); }		// C11
 	YY_BREAK
-case 84:
-YY_RULE_SETUP
-#line 252 "lex.ll"
+case 85:
+YY_RULE_SETUP
+#line 253 "lex.ll"
 { KEYWORD_RETURN(STRUCT); }
 	YY_BREAK
-case 85:
-YY_RULE_SETUP
-#line 253 "lex.ll"
+case 86:
+YY_RULE_SETUP
+#line 254 "lex.ll"
 { KEYWORD_RETURN(SWITCH); }
 	YY_BREAK
-case 86:
-YY_RULE_SETUP
-#line 254 "lex.ll"
+case 87:
+YY_RULE_SETUP
+#line 255 "lex.ll"
 { KEYWORD_RETURN(THREADLOCAL); }		// C11
 	YY_BREAK
-case 87:
-YY_RULE_SETUP
-#line 255 "lex.ll"
+case 88:
+YY_RULE_SETUP
+#line 256 "lex.ll"
 { KEYWORD_RETURN(THROW); }				// CFA
 	YY_BREAK
-case 88:
-YY_RULE_SETUP
-#line 256 "lex.ll"
+case 89:
+YY_RULE_SETUP
+#line 257 "lex.ll"
 { KEYWORD_RETURN(THROWRESUME); }		// CFA
 	YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 257 "lex.ll"
+case 90:
+YY_RULE_SETUP
+#line 258 "lex.ll"
 { KEYWORD_RETURN(TRAIT); }				// CFA
 	YY_BREAK
-case 90:
-YY_RULE_SETUP
-#line 258 "lex.ll"
+case 91:
+YY_RULE_SETUP
+#line 259 "lex.ll"
 { KEYWORD_RETURN(TRY); }				// CFA
 	YY_BREAK
-case 91:
-YY_RULE_SETUP
-#line 259 "lex.ll"
+case 92:
+YY_RULE_SETUP
+#line 260 "lex.ll"
 { KEYWORD_RETURN(TYPEDEF); }
-	YY_BREAK
-case 92:
-YY_RULE_SETUP
-#line 260 "lex.ll"
-{ KEYWORD_RETURN(TYPEOF); }				// GCC
 	YY_BREAK
 case 93:
@@ -2326,30 +2335,30 @@
 YY_RULE_SETUP
 #line 263 "lex.ll"
+{ KEYWORD_RETURN(TYPEOF); }				// GCC
+	YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 264 "lex.ll"
 { KEYWORD_RETURN(UNION); }
 	YY_BREAK
-case 96:
-YY_RULE_SETUP
-#line 264 "lex.ll"
+case 97:
+YY_RULE_SETUP
+#line 265 "lex.ll"
 { KEYWORD_RETURN(UNSIGNED); }
 	YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 265 "lex.ll"
+case 98:
+YY_RULE_SETUP
+#line 266 "lex.ll"
 { KEYWORD_RETURN(VALIST); }			// GCC
 	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 266 "lex.ll"
+case 99:
+YY_RULE_SETUP
+#line 267 "lex.ll"
 { KEYWORD_RETURN(VOID); }
 	YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 267 "lex.ll"
+case 100:
+YY_RULE_SETUP
+#line 268 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }
-	YY_BREAK
-case 100:
-YY_RULE_SETUP
-#line 268 "lex.ll"
-{ KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
 case 101:
@@ -2361,52 +2370,52 @@
 YY_RULE_SETUP
 #line 270 "lex.ll"
+{ KEYWORD_RETURN(VOLATILE); }			// GCC
+	YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 271 "lex.ll"
 { KEYWORD_RETURN(WHILE); }
 	YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 272 "lex.ll"
+{ NUMERIC_RETURN(ZERO_T); }				// CFA
+	YY_BREAK
 /* identifier */
-case 103:
-YY_RULE_SETUP
-#line 273 "lex.ll"
+case 105:
+YY_RULE_SETUP
+#line 275 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 274 "lex.ll"
+case 106:
+YY_RULE_SETUP
+#line 276 "lex.ll"
 { ATTRIBUTE_RETURN(); }
 	YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 275 "lex.ll"
+case 107:
+YY_RULE_SETUP
+#line 277 "lex.ll"
 { BEGIN BKQUOTE; }
 	YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 276 "lex.ll"
+case 108:
+YY_RULE_SETUP
+#line 278 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 107:
-YY_RULE_SETUP
-#line 277 "lex.ll"
+case 109:
+YY_RULE_SETUP
+#line 279 "lex.ll"
 { BEGIN 0; }
 	YY_BREAK
 /* numeric constants */
-case 108:
-YY_RULE_SETUP
-#line 280 "lex.ll"
+case 110:
+YY_RULE_SETUP
+#line 282 "lex.ll"
 { NUMERIC_RETURN(ZERO); }				// CFA
 	YY_BREAK
-case 109:
-YY_RULE_SETUP
-#line 281 "lex.ll"
+case 111:
+YY_RULE_SETUP
+#line 283 "lex.ll"
 { NUMERIC_RETURN(ONE); }				// CFA
-	YY_BREAK
-case 110:
-YY_RULE_SETUP
-#line 282 "lex.ll"
-{ NUMERIC_RETURN(INTEGERconstant); }
-	YY_BREAK
-case 111:
-YY_RULE_SETUP
-#line 283 "lex.ll"
-{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 112:
@@ -2418,85 +2427,85 @@
 YY_RULE_SETUP
 #line 285 "lex.ll"
+{ NUMERIC_RETURN(INTEGERconstant); }
+	YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 286 "lex.ll"
+{ NUMERIC_RETURN(INTEGERconstant); }
+	YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 287 "lex.ll"
 { NUMERIC_RETURN(REALDECIMALconstant); } // must appear before floating_constant
 	YY_BREAK
-case 114:
-YY_RULE_SETUP
-#line 286 "lex.ll"
+case 116:
+YY_RULE_SETUP
+#line 288 "lex.ll"
 { NUMERIC_RETURN(REALFRACTIONconstant); } // must appear before floating_constant
 	YY_BREAK
-case 115:
-YY_RULE_SETUP
-#line 287 "lex.ll"
+case 117:
+YY_RULE_SETUP
+#line 289 "lex.ll"
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
-case 116:
-YY_RULE_SETUP
-#line 288 "lex.ll"
+case 118:
+YY_RULE_SETUP
+#line 290 "lex.ll"
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
 /* character constant, allows empty value */
-case 117:
-YY_RULE_SETUP
-#line 291 "lex.ll"
+case 119:
+YY_RULE_SETUP
+#line 293 "lex.ll"
 { BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 292 "lex.ll"
+case 120:
+YY_RULE_SETUP
+#line 294 "lex.ll"
 { strtext->append( yytext, yyleng ); }
 	YY_BREAK
-case 119:
-/* rule 119 can match eol */
-YY_RULE_SETUP
-#line 293 "lex.ll"
+case 121:
+/* rule 121 can match eol */
+YY_RULE_SETUP
+#line 295 "lex.ll"
 { BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
 /* string constant */
-case 120:
-YY_RULE_SETUP
-#line 297 "lex.ll"
+case 122:
+YY_RULE_SETUP
+#line 299 "lex.ll"
 { BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
-case 121:
-YY_RULE_SETUP
-#line 298 "lex.ll"
+case 123:
+YY_RULE_SETUP
+#line 300 "lex.ll"
 { strtext->append( yytext, yyleng ); }
 	YY_BREAK
-case 122:
-/* rule 122 can match eol */
-YY_RULE_SETUP
-#line 299 "lex.ll"
+case 124:
+/* rule 124 can match eol */
+YY_RULE_SETUP
+#line 301 "lex.ll"
 { BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
 /* common character/string constant */
-case 123:
-YY_RULE_SETUP
-#line 303 "lex.ll"
+case 125:
+YY_RULE_SETUP
+#line 305 "lex.ll"
 { rm_underscore(); strtext->append( yytext, yyleng ); }
 	YY_BREAK
-case 124:
-/* rule 124 can match eol */
-YY_RULE_SETUP
-#line 304 "lex.ll"
+case 126:
+/* rule 126 can match eol */
+YY_RULE_SETUP
+#line 306 "lex.ll"
 {}						// continuation (ALSO HANDLED BY CPP)
 	YY_BREAK
-case 125:
-YY_RULE_SETUP
-#line 305 "lex.ll"
+case 127:
+YY_RULE_SETUP
+#line 307 "lex.ll"
 { strtext->append( yytext, yyleng ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
-case 126:
-YY_RULE_SETUP
-#line 308 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 127:
-YY_RULE_SETUP
-#line 309 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 128:
 YY_RULE_SETUP
@@ -2522,5 +2531,5 @@
 YY_RULE_SETUP
 #line 314 "lex.ll"
-{ ASCIIOP_RETURN(); }					// also operator
+{ ASCIIOP_RETURN(); }
 	YY_BREAK
 case 133:
@@ -2532,48 +2541,48 @@
 YY_RULE_SETUP
 #line 316 "lex.ll"
+{ ASCIIOP_RETURN(); }					// also operator
+	YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 317 "lex.ll"
 { ASCIIOP_RETURN(); }
 	YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 317 "lex.ll"
+case 136:
+YY_RULE_SETUP
+#line 318 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 319 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
 	YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 318 "lex.ll"
+case 138:
+YY_RULE_SETUP
+#line 320 "lex.ll"
 { NAMEDOP_RETURN(ELLIPSIS); }
 	YY_BREAK
 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
-case 137:
-YY_RULE_SETUP
-#line 321 "lex.ll"
+case 139:
+YY_RULE_SETUP
+#line 323 "lex.ll"
 { RETURN_VAL('['); }
 	YY_BREAK
-case 138:
-YY_RULE_SETUP
-#line 322 "lex.ll"
+case 140:
+YY_RULE_SETUP
+#line 324 "lex.ll"
 { RETURN_VAL(']'); }
 	YY_BREAK
-case 139:
-YY_RULE_SETUP
-#line 323 "lex.ll"
+case 141:
+YY_RULE_SETUP
+#line 325 "lex.ll"
 { RETURN_VAL('{'); }
 	YY_BREAK
-case 140:
-YY_RULE_SETUP
-#line 324 "lex.ll"
+case 142:
+YY_RULE_SETUP
+#line 326 "lex.ll"
 { RETURN_VAL('}'); }
 	YY_BREAK
 /* operators */
-case 141:
-YY_RULE_SETUP
-#line 327 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
-case 142:
-YY_RULE_SETUP
-#line 328 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 143:
 YY_RULE_SETUP
@@ -2638,131 +2647,141 @@
 case 155:
 YY_RULE_SETUP
+#line 341 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 156:
+YY_RULE_SETUP
 #line 342 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 344 "lex.ll"
 { NAMEDOP_RETURN(ICR); }
 	YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 343 "lex.ll"
+case 158:
+YY_RULE_SETUP
+#line 345 "lex.ll"
 { NAMEDOP_RETURN(DECR); }
 	YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 344 "lex.ll"
+case 159:
+YY_RULE_SETUP
+#line 346 "lex.ll"
 { NAMEDOP_RETURN(EQ); }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 345 "lex.ll"
+case 160:
+YY_RULE_SETUP
+#line 347 "lex.ll"
 { NAMEDOP_RETURN(NE); }
 	YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 346 "lex.ll"
+case 161:
+YY_RULE_SETUP
+#line 348 "lex.ll"
 { NAMEDOP_RETURN(LS); }
 	YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 347 "lex.ll"
+case 162:
+YY_RULE_SETUP
+#line 349 "lex.ll"
 { NAMEDOP_RETURN(RS); }
 	YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 348 "lex.ll"
+case 163:
+YY_RULE_SETUP
+#line 350 "lex.ll"
 { NAMEDOP_RETURN(LE); }
 	YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 349 "lex.ll"
+case 164:
+YY_RULE_SETUP
+#line 351 "lex.ll"
 { NAMEDOP_RETURN(GE); }
 	YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 350 "lex.ll"
+case 165:
+YY_RULE_SETUP
+#line 352 "lex.ll"
 { NAMEDOP_RETURN(ANDAND); }
 	YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 351 "lex.ll"
+case 166:
+YY_RULE_SETUP
+#line 353 "lex.ll"
 { NAMEDOP_RETURN(OROR); }
 	YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 352 "lex.ll"
+case 167:
+YY_RULE_SETUP
+#line 354 "lex.ll"
 { NAMEDOP_RETURN(ARROW); }
 	YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 353 "lex.ll"
+case 168:
+YY_RULE_SETUP
+#line 355 "lex.ll"
 { NAMEDOP_RETURN(PLUSassign); }
 	YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 354 "lex.ll"
+case 169:
+YY_RULE_SETUP
+#line 356 "lex.ll"
 { NAMEDOP_RETURN(MINUSassign); }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 355 "lex.ll"
+case 170:
+YY_RULE_SETUP
+#line 357 "lex.ll"
 { NAMEDOP_RETURN(MULTassign); }
 	YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 356 "lex.ll"
+case 171:
+YY_RULE_SETUP
+#line 358 "lex.ll"
 { NAMEDOP_RETURN(DIVassign); }
 	YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 357 "lex.ll"
+case 172:
+YY_RULE_SETUP
+#line 359 "lex.ll"
 { NAMEDOP_RETURN(MODassign); }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 358 "lex.ll"
+case 173:
+YY_RULE_SETUP
+#line 360 "lex.ll"
 { NAMEDOP_RETURN(ANDassign); }
 	YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 359 "lex.ll"
+case 174:
+YY_RULE_SETUP
+#line 361 "lex.ll"
 { NAMEDOP_RETURN(ORassign); }
 	YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 360 "lex.ll"
+case 175:
+YY_RULE_SETUP
+#line 362 "lex.ll"
 { NAMEDOP_RETURN(ERassign); }
 	YY_BREAK
-case 174:
-YY_RULE_SETUP
-#line 361 "lex.ll"
+case 176:
+YY_RULE_SETUP
+#line 363 "lex.ll"
 { NAMEDOP_RETURN(LSassign); }
 	YY_BREAK
-case 175:
-YY_RULE_SETUP
-#line 362 "lex.ll"
+case 177:
+YY_RULE_SETUP
+#line 364 "lex.ll"
 { NAMEDOP_RETURN(RSassign); }
 	YY_BREAK
-case 176:
-YY_RULE_SETUP
-#line 364 "lex.ll"
+case 178:
+YY_RULE_SETUP
+#line 366 "lex.ll"
 { NAMEDOP_RETURN(ATassign); }			// CFA
 	YY_BREAK
 /* CFA, operator identifier */
-case 177:
-YY_RULE_SETUP
-#line 367 "lex.ll"
+case 179:
+YY_RULE_SETUP
+#line 369 "lex.ll"
 { IDENTIFIER_RETURN(); }				// unary
 	YY_BREAK
-case 178:
-YY_RULE_SETUP
-#line 368 "lex.ll"
+case 180:
+YY_RULE_SETUP
+#line 370 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 179:
-YY_RULE_SETUP
-#line 369 "lex.ll"
+case 181:
+YY_RULE_SETUP
+#line 371 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 180:
-YY_RULE_SETUP
-#line 370 "lex.ll"
+case 182:
+YY_RULE_SETUP
+#line 372 "lex.ll"
 { IDENTIFIER_RETURN(); }		// binary
 	YY_BREAK
@@ -2793,7 +2812,7 @@
 	  an argument list.
 	*/
-case 181:
-YY_RULE_SETUP
-#line 397 "lex.ll"
+case 183:
+YY_RULE_SETUP
+#line 399 "lex.ll"
 {
 	// 1 or 2 character unary operator ?
@@ -2808,15 +2827,15 @@
 	YY_BREAK
 /* unknown characters */
-case 182:
-YY_RULE_SETUP
-#line 409 "lex.ll"
+case 184:
+YY_RULE_SETUP
+#line 411 "lex.ll"
 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
 	YY_BREAK
-case 183:
-YY_RULE_SETUP
-#line 411 "lex.ll"
+case 185:
+YY_RULE_SETUP
+#line 413 "lex.ll"
 ECHO;
 	YY_BREAK
-#line 2821 "Parser/lex.cc"
+#line 2840 "Parser/lex.cc"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
@@ -3115,5 +3134,5 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 895 )
+			if ( yy_current_state >= 905 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
@@ -3143,9 +3162,9 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 895 )
+		if ( yy_current_state >= 905 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 894);
+	yy_is_jam = (yy_current_state == 904);
 
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3793,5 +3812,5 @@
 #define YYTABLES_NAME "yytables"
 
-#line 411 "lex.ll"
+#line 413 "lex.ll"
 
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/lex.ll	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Wed Oct 26 17:32:30 2016
- * Update Count     : 499
+ * Last Modified On : Tue Nov 29 11:32:00 2016
+ * Update Count     : 501
  */
 
@@ -237,4 +237,5 @@
 _Noreturn		{ KEYWORD_RETURN(NORETURN); }			// C11
 __builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }		// GCC
+one_t			{ NUMERIC_RETURN(ONE_T); }				// CFA
 otype			{ KEYWORD_RETURN(OTYPE); }				// CFA
 register		{ KEYWORD_RETURN(REGISTER); }
@@ -269,4 +270,5 @@
 __volatile__	{ KEYWORD_RETURN(VOLATILE); }			// GCC
 while			{ KEYWORD_RETURN(WHILE); }
+zero_t			{ NUMERIC_RETURN(ZERO_T); }				// CFA
 
 				/* identifier */
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/parser.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -145,91 +145,93 @@
      SIGNED = 277,
      UNSIGNED = 278,
-     VALIST = 279,
-     BOOL = 280,
-     COMPLEX = 281,
-     IMAGINARY = 282,
-     TYPEOF = 283,
-     LABEL = 284,
-     ENUM = 285,
-     STRUCT = 286,
-     UNION = 287,
-     OTYPE = 288,
-     FTYPE = 289,
-     DTYPE = 290,
-     TRAIT = 291,
-     SIZEOF = 292,
-     OFFSETOF = 293,
-     ATTRIBUTE = 294,
-     EXTENSION = 295,
-     IF = 296,
-     ELSE = 297,
-     SWITCH = 298,
-     CASE = 299,
-     DEFAULT = 300,
-     DO = 301,
-     WHILE = 302,
-     FOR = 303,
-     BREAK = 304,
-     CONTINUE = 305,
-     GOTO = 306,
-     RETURN = 307,
-     CHOOSE = 308,
-     DISABLE = 309,
-     ENABLE = 310,
-     FALLTHRU = 311,
-     TRY = 312,
-     CATCH = 313,
-     CATCHRESUME = 314,
-     FINALLY = 315,
-     THROW = 316,
-     THROWRESUME = 317,
-     AT = 318,
-     ASM = 319,
-     ALIGNAS = 320,
-     ALIGNOF = 321,
-     ATOMIC = 322,
-     GENERIC = 323,
-     NORETURN = 324,
-     STATICASSERT = 325,
-     THREADLOCAL = 326,
-     IDENTIFIER = 327,
-     QUOTED_IDENTIFIER = 328,
-     TYPEDEFname = 329,
-     TYPEGENname = 330,
-     ATTR_IDENTIFIER = 331,
-     ATTR_TYPEDEFname = 332,
-     ATTR_TYPEGENname = 333,
-     INTEGERconstant = 334,
-     CHARACTERconstant = 335,
-     STRINGliteral = 336,
-     REALDECIMALconstant = 337,
-     REALFRACTIONconstant = 338,
-     FLOATINGconstant = 339,
-     ZERO = 340,
-     ONE = 341,
-     ARROW = 342,
-     ICR = 343,
-     DECR = 344,
-     LS = 345,
-     RS = 346,
-     LE = 347,
-     GE = 348,
-     EQ = 349,
-     NE = 350,
-     ANDAND = 351,
-     OROR = 352,
-     ELLIPSIS = 353,
-     MULTassign = 354,
-     DIVassign = 355,
-     MODassign = 356,
-     PLUSassign = 357,
-     MINUSassign = 358,
-     LSassign = 359,
-     RSassign = 360,
-     ANDassign = 361,
-     ERassign = 362,
-     ORassign = 363,
-     ATassign = 364,
-     THEN = 365
+     ZERO_T = 279,
+     ONE_T = 280,
+     VALIST = 281,
+     BOOL = 282,
+     COMPLEX = 283,
+     IMAGINARY = 284,
+     TYPEOF = 285,
+     LABEL = 286,
+     ENUM = 287,
+     STRUCT = 288,
+     UNION = 289,
+     OTYPE = 290,
+     FTYPE = 291,
+     DTYPE = 292,
+     TRAIT = 293,
+     SIZEOF = 294,
+     OFFSETOF = 295,
+     ATTRIBUTE = 296,
+     EXTENSION = 297,
+     IF = 298,
+     ELSE = 299,
+     SWITCH = 300,
+     CASE = 301,
+     DEFAULT = 302,
+     DO = 303,
+     WHILE = 304,
+     FOR = 305,
+     BREAK = 306,
+     CONTINUE = 307,
+     GOTO = 308,
+     RETURN = 309,
+     CHOOSE = 310,
+     DISABLE = 311,
+     ENABLE = 312,
+     FALLTHRU = 313,
+     TRY = 314,
+     CATCH = 315,
+     CATCHRESUME = 316,
+     FINALLY = 317,
+     THROW = 318,
+     THROWRESUME = 319,
+     AT = 320,
+     ASM = 321,
+     ALIGNAS = 322,
+     ALIGNOF = 323,
+     ATOMIC = 324,
+     GENERIC = 325,
+     NORETURN = 326,
+     STATICASSERT = 327,
+     THREADLOCAL = 328,
+     IDENTIFIER = 329,
+     QUOTED_IDENTIFIER = 330,
+     TYPEDEFname = 331,
+     TYPEGENname = 332,
+     ATTR_IDENTIFIER = 333,
+     ATTR_TYPEDEFname = 334,
+     ATTR_TYPEGENname = 335,
+     INTEGERconstant = 336,
+     CHARACTERconstant = 337,
+     STRINGliteral = 338,
+     REALDECIMALconstant = 339,
+     REALFRACTIONconstant = 340,
+     FLOATINGconstant = 341,
+     ZERO = 342,
+     ONE = 343,
+     ARROW = 344,
+     ICR = 345,
+     DECR = 346,
+     LS = 347,
+     RS = 348,
+     LE = 349,
+     GE = 350,
+     EQ = 351,
+     NE = 352,
+     ANDAND = 353,
+     OROR = 354,
+     ELLIPSIS = 355,
+     MULTassign = 356,
+     DIVassign = 357,
+     MODassign = 358,
+     PLUSassign = 359,
+     MINUSassign = 360,
+     LSassign = 361,
+     RSassign = 362,
+     ANDassign = 363,
+     ERassign = 364,
+     ORassign = 365,
+     ATassign = 366,
+     THEN = 367
    };
 #endif
@@ -256,91 +258,93 @@
 #define SIGNED 277
 #define UNSIGNED 278
-#define VALIST 279
-#define BOOL 280
-#define COMPLEX 281
-#define IMAGINARY 282
-#define TYPEOF 283
-#define LABEL 284
-#define ENUM 285
-#define STRUCT 286
-#define UNION 287
-#define OTYPE 288
-#define FTYPE 289
-#define DTYPE 290
-#define TRAIT 291
-#define SIZEOF 292
-#define OFFSETOF 293
-#define ATTRIBUTE 294
-#define EXTENSION 295
-#define IF 296
-#define ELSE 297
-#define SWITCH 298
-#define CASE 299
-#define DEFAULT 300
-#define DO 301
-#define WHILE 302
-#define FOR 303
-#define BREAK 304
-#define CONTINUE 305
-#define GOTO 306
-#define RETURN 307
-#define CHOOSE 308
-#define DISABLE 309
-#define ENABLE 310
-#define FALLTHRU 311
-#define TRY 312
-#define CATCH 313
-#define CATCHRESUME 314
-#define FINALLY 315
-#define THROW 316
-#define THROWRESUME 317
-#define AT 318
-#define ASM 319
-#define ALIGNAS 320
-#define ALIGNOF 321
-#define ATOMIC 322
-#define GENERIC 323
-#define NORETURN 324
-#define STATICASSERT 325
-#define THREADLOCAL 326
-#define IDENTIFIER 327
-#define QUOTED_IDENTIFIER 328
-#define TYPEDEFname 329
-#define TYPEGENname 330
-#define ATTR_IDENTIFIER 331
-#define ATTR_TYPEDEFname 332
-#define ATTR_TYPEGENname 333
-#define INTEGERconstant 334
-#define CHARACTERconstant 335
-#define STRINGliteral 336
-#define REALDECIMALconstant 337
-#define REALFRACTIONconstant 338
-#define FLOATINGconstant 339
-#define ZERO 340
-#define ONE 341
-#define ARROW 342
-#define ICR 343
-#define DECR 344
-#define LS 345
-#define RS 346
-#define LE 347
-#define GE 348
-#define EQ 349
-#define NE 350
-#define ANDAND 351
-#define OROR 352
-#define ELLIPSIS 353
-#define MULTassign 354
-#define DIVassign 355
-#define MODassign 356
-#define PLUSassign 357
-#define MINUSassign 358
-#define LSassign 359
-#define RSassign 360
-#define ANDassign 361
-#define ERassign 362
-#define ORassign 363
-#define ATassign 364
-#define THEN 365
+#define ZERO_T 279
+#define ONE_T 280
+#define VALIST 281
+#define BOOL 282
+#define COMPLEX 283
+#define IMAGINARY 284
+#define TYPEOF 285
+#define LABEL 286
+#define ENUM 287
+#define STRUCT 288
+#define UNION 289
+#define OTYPE 290
+#define FTYPE 291
+#define DTYPE 292
+#define TRAIT 293
+#define SIZEOF 294
+#define OFFSETOF 295
+#define ATTRIBUTE 296
+#define EXTENSION 297
+#define IF 298
+#define ELSE 299
+#define SWITCH 300
+#define CASE 301
+#define DEFAULT 302
+#define DO 303
+#define WHILE 304
+#define FOR 305
+#define BREAK 306
+#define CONTINUE 307
+#define GOTO 308
+#define RETURN 309
+#define CHOOSE 310
+#define DISABLE 311
+#define ENABLE 312
+#define FALLTHRU 313
+#define TRY 314
+#define CATCH 315
+#define CATCHRESUME 316
+#define FINALLY 317
+#define THROW 318
+#define THROWRESUME 319
+#define AT 320
+#define ASM 321
+#define ALIGNAS 322
+#define ALIGNOF 323
+#define ATOMIC 324
+#define GENERIC 325
+#define NORETURN 326
+#define STATICASSERT 327
+#define THREADLOCAL 328
+#define IDENTIFIER 329
+#define QUOTED_IDENTIFIER 330
+#define TYPEDEFname 331
+#define TYPEGENname 332
+#define ATTR_IDENTIFIER 333
+#define ATTR_TYPEDEFname 334
+#define ATTR_TYPEGENname 335
+#define INTEGERconstant 336
+#define CHARACTERconstant 337
+#define STRINGliteral 338
+#define REALDECIMALconstant 339
+#define REALFRACTIONconstant 340
+#define FLOATINGconstant 341
+#define ZERO 342
+#define ONE 343
+#define ARROW 344
+#define ICR 345
+#define DECR 346
+#define LS 347
+#define RS 348
+#define LE 349
+#define GE 350
+#define EQ 351
+#define NE 352
+#define ANDAND 353
+#define OROR 354
+#define ELLIPSIS 355
+#define MULTassign 356
+#define DIVassign 357
+#define MODassign 358
+#define PLUSassign 359
+#define MINUSassign 360
+#define LSassign 361
+#define RSassign 362
+#define ANDassign 363
+#define ERassign 364
+#define ORassign 365
+#define ATassign 366
+#define THEN 367
 
 
@@ -372,5 +376,5 @@
 
 /* Line 293 of yacc.c  */
-#line 375 "Parser/parser.cc"
+#line 379 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -384,5 +388,5 @@
 
 /* Line 343 of yacc.c  */
-#line 387 "Parser/parser.cc"
+#line 391 "Parser/parser.cc"
 
 #ifdef short
@@ -601,20 +605,20 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  249
+#define YYFINAL  251
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   10266
+#define YYLAST   10624
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  135
+#define YYNTOKENS  137
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  243
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  755
+#define YYNRULES  757
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1538
+#define YYNSTATES  1540
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   365
+#define YYMAXUTOK   367
 
 #define YYTRANSLATE(YYX)						\
@@ -627,14 +631,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   123,     2,     2,     2,   126,   120,     2,
-     111,   112,   119,   121,   118,   122,   115,   125,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   132,   134,
-     127,   133,   128,   131,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   125,     2,     2,     2,   128,   122,     2,
+     113,   114,   121,   123,   120,   124,   117,   127,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   134,   136,
+     129,   135,   130,   133,     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,   113,     2,   114,   129,     2,     2,     2,     2,     2,
+       2,   115,     2,   116,   131,     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,   116,   130,   117,   124,     2,     2,     2,
+       2,     2,     2,   118,   132,   119,   126,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -660,5 +664,5 @@
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110
+     105,   106,   107,   108,   109,   110,   111,   112
 };
 
@@ -701,47 +705,47 @@
     1119,  1125,  1127,  1130,  1134,  1136,  1139,  1141,  1143,  1145,
     1147,  1149,  1151,  1153,  1155,  1157,  1159,  1161,  1163,  1165,
-    1167,  1169,  1171,  1173,  1175,  1177,  1179,  1181,  1183,  1186,
-    1189,  1193,  1197,  1199,  1203,  1205,  1208,  1211,  1214,  1219,
-    1224,  1229,  1234,  1236,  1239,  1242,  1246,  1248,  1251,  1254,
-    1256,  1259,  1262,  1266,  1268,  1271,  1274,  1276,  1278,  1283,
-    1286,  1287,  1294,  1302,  1305,  1308,  1311,  1312,  1315,  1318,
-    1322,  1325,  1329,  1331,  1334,  1338,  1341,  1344,  1349,  1350,
-    1352,  1355,  1358,  1360,  1361,  1363,  1366,  1369,  1375,  1378,
-    1379,  1387,  1390,  1395,  1396,  1399,  1400,  1402,  1404,  1406,
-    1412,  1418,  1424,  1426,  1432,  1438,  1448,  1450,  1456,  1457,
-    1459,  1461,  1467,  1469,  1471,  1477,  1483,  1485,  1489,  1493,
-    1498,  1500,  1502,  1504,  1506,  1509,  1511,  1515,  1519,  1521,
-    1524,  1526,  1530,  1532,  1534,  1536,  1538,  1540,  1542,  1544,
-    1546,  1548,  1550,  1552,  1555,  1557,  1559,  1561,  1564,  1565,
-    1568,  1571,  1573,  1578,  1579,  1581,  1584,  1588,  1593,  1596,
-    1599,  1601,  1604,  1607,  1613,  1619,  1627,  1634,  1636,  1639,
-    1642,  1646,  1648,  1651,  1654,  1659,  1662,  1667,  1668,  1673,
-    1676,  1678,  1680,  1682,  1683,  1686,  1692,  1698,  1712,  1714,
-    1716,  1720,  1724,  1727,  1731,  1735,  1738,  1743,  1745,  1752,
-    1762,  1763,  1775,  1777,  1781,  1785,  1789,  1791,  1793,  1799,
-    1802,  1808,  1809,  1811,  1813,  1817,  1818,  1820,  1822,  1824,
-    1826,  1827,  1834,  1837,  1839,  1842,  1847,  1850,  1854,  1858,
-    1862,  1867,  1873,  1879,  1885,  1892,  1894,  1896,  1898,  1902,
-    1903,  1909,  1910,  1912,  1914,  1917,  1924,  1926,  1930,  1931,
-    1933,  1938,  1940,  1942,  1944,  1946,  1949,  1951,  1954,  1957,
-    1959,  1963,  1966,  1970,  1974,  1977,  1982,  1987,  1991,  2000,
-    2004,  2007,  2009,  2012,  2019,  2028,  2032,  2035,  2039,  2043,
-    2048,  2053,  2057,  2059,  2061,  2063,  2068,  2075,  2079,  2082,
-    2086,  2090,  2095,  2100,  2104,  2107,  2109,  2112,  2115,  2117,
-    2121,  2124,  2128,  2132,  2135,  2140,  2145,  2149,  2156,  2165,
-    2169,  2172,  2174,  2177,  2180,  2183,  2187,  2191,  2194,  2199,
-    2204,  2208,  2215,  2224,  2228,  2231,  2233,  2236,  2239,  2241,
-    2243,  2246,  2250,  2254,  2257,  2262,  2269,  2278,  2280,  2283,
-    2286,  2288,  2291,  2294,  2298,  2302,  2304,  2309,  2314,  2318,
-    2324,  2333,  2337,  2340,  2344,  2346,  2352,  2358,  2365,  2372,
-    2374,  2377,  2380,  2382,  2385,  2388,  2392,  2396,  2398,  2403,
-    2408,  2412,  2418,  2427,  2431,  2433,  2436,  2438,  2441,  2448,
-    2454,  2461,  2469,  2477,  2479,  2482,  2485,  2487,  2490,  2493,
-    2497,  2501,  2503,  2508,  2513,  2517,  2526,  2530,  2532,  2534,
-    2537,  2539,  2541,  2544,  2548,  2551,  2555,  2558,  2562,  2566,
-    2569,  2574,  2578,  2581,  2585,  2588,  2593,  2597,  2600,  2607,
-    2614,  2621,  2629,  2631,  2634,  2636,  2638,  2640,  2643,  2647,
-    2650,  2654,  2657,  2661,  2665,  2670,  2673,  2677,  2682,  2685,
-    2691,  2698,  2705,  2706,  2708,  2709
+    1167,  1169,  1171,  1173,  1175,  1177,  1179,  1181,  1183,  1185,
+    1187,  1190,  1193,  1197,  1201,  1203,  1207,  1209,  1212,  1215,
+    1218,  1223,  1228,  1233,  1238,  1240,  1243,  1246,  1250,  1252,
+    1255,  1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,
+    1282,  1287,  1290,  1291,  1298,  1306,  1309,  1312,  1315,  1316,
+    1319,  1322,  1326,  1329,  1333,  1335,  1338,  1342,  1345,  1348,
+    1353,  1354,  1356,  1359,  1362,  1364,  1365,  1367,  1370,  1373,
+    1379,  1382,  1383,  1391,  1394,  1399,  1400,  1403,  1404,  1406,
+    1408,  1410,  1416,  1422,  1428,  1430,  1436,  1442,  1452,  1454,
+    1460,  1461,  1463,  1465,  1471,  1473,  1475,  1481,  1487,  1489,
+    1493,  1497,  1502,  1504,  1506,  1508,  1510,  1513,  1515,  1519,
+    1523,  1525,  1528,  1530,  1534,  1536,  1538,  1540,  1542,  1544,
+    1546,  1548,  1550,  1552,  1554,  1556,  1559,  1561,  1563,  1565,
+    1568,  1569,  1572,  1575,  1577,  1582,  1583,  1585,  1588,  1592,
+    1597,  1600,  1603,  1605,  1608,  1611,  1617,  1623,  1631,  1638,
+    1640,  1643,  1646,  1650,  1652,  1655,  1658,  1663,  1666,  1671,
+    1672,  1677,  1680,  1682,  1684,  1686,  1687,  1690,  1696,  1702,
+    1716,  1718,  1720,  1724,  1728,  1731,  1735,  1739,  1742,  1747,
+    1749,  1756,  1766,  1767,  1779,  1781,  1785,  1789,  1793,  1795,
+    1797,  1803,  1806,  1812,  1813,  1815,  1817,  1821,  1822,  1824,
+    1826,  1828,  1830,  1831,  1838,  1841,  1843,  1846,  1851,  1854,
+    1858,  1862,  1866,  1871,  1877,  1883,  1889,  1896,  1898,  1900,
+    1902,  1906,  1907,  1913,  1914,  1916,  1918,  1921,  1928,  1930,
+    1934,  1935,  1937,  1942,  1944,  1946,  1948,  1950,  1953,  1955,
+    1958,  1961,  1963,  1967,  1970,  1974,  1978,  1981,  1986,  1991,
+    1995,  2004,  2008,  2011,  2013,  2016,  2023,  2032,  2036,  2039,
+    2043,  2047,  2052,  2057,  2061,  2063,  2065,  2067,  2072,  2079,
+    2083,  2086,  2090,  2094,  2099,  2104,  2108,  2111,  2113,  2116,
+    2119,  2121,  2125,  2128,  2132,  2136,  2139,  2144,  2149,  2153,
+    2160,  2169,  2173,  2176,  2178,  2181,  2184,  2187,  2191,  2195,
+    2198,  2203,  2208,  2212,  2219,  2228,  2232,  2235,  2237,  2240,
+    2243,  2245,  2247,  2250,  2254,  2258,  2261,  2266,  2273,  2282,
+    2284,  2287,  2290,  2292,  2295,  2298,  2302,  2306,  2308,  2313,
+    2318,  2322,  2328,  2337,  2341,  2344,  2348,  2350,  2356,  2362,
+    2369,  2376,  2378,  2381,  2384,  2386,  2389,  2392,  2396,  2400,
+    2402,  2407,  2412,  2416,  2422,  2431,  2435,  2437,  2440,  2442,
+    2445,  2452,  2458,  2465,  2473,  2481,  2483,  2486,  2489,  2491,
+    2494,  2497,  2501,  2505,  2507,  2512,  2517,  2521,  2530,  2534,
+    2536,  2538,  2541,  2543,  2545,  2548,  2552,  2555,  2559,  2562,
+    2566,  2570,  2573,  2578,  2582,  2585,  2589,  2592,  2597,  2601,
+    2604,  2611,  2618,  2625,  2633,  2635,  2638,  2640,  2642,  2644,
+    2647,  2651,  2654,  2658,  2661,  2665,  2669,  2674,  2677,  2681,
+    2686,  2689,  2695,  2702,  2709,  2710,  2712,  2713
 };
 
@@ -749,276 +753,276 @@
 static const yytype_int16 yyrhs[] =
 {
-     306,     0,    -1,    -1,    -1,    79,    -1,    82,    -1,    83,
-      -1,    84,    -1,    80,    -1,    72,    -1,    76,    -1,   142,
-      -1,    72,    -1,    76,    -1,    72,    -1,   142,    -1,    85,
-      -1,    86,    -1,   144,    -1,    81,    -1,   144,    81,    -1,
-      72,    -1,   142,    -1,   172,    -1,   111,   174,   112,    -1,
-     111,   178,   112,    -1,   145,    -1,   146,   113,   136,   169,
-     137,   114,    -1,   146,   111,   147,   112,    -1,   146,   115,
-     141,    -1,   146,   115,   113,   136,   149,   137,   114,    -1,
-     146,    83,    -1,   146,    87,   141,    -1,   146,    87,   113,
-     136,   149,   137,   114,    -1,   146,    88,    -1,   146,    89,
-      -1,   111,   279,   112,   116,   283,   376,   117,    -1,   146,
-     116,   147,   117,    -1,   148,    -1,   147,   118,   148,    -1,
-      -1,   169,    -1,   150,    -1,   149,   118,   150,    -1,   151,
-      -1,    82,   150,    -1,    82,   113,   136,   149,   137,   114,
-      -1,   151,   115,   150,    -1,   151,   115,   113,   136,   149,
-     137,   114,    -1,   151,    87,   150,    -1,   151,    87,   113,
-     136,   149,   137,   114,    -1,    79,   152,    -1,    84,   152,
-      -1,   141,   152,    -1,    -1,   152,    83,    -1,   146,    -1,
-     138,    -1,   143,    -1,    40,   156,    -1,   154,   156,    -1,
-     155,   156,    -1,    88,   153,    -1,    89,   153,    -1,    37,
-     153,    -1,    37,   111,   279,   112,    -1,    66,   153,    -1,
-      66,   111,   279,   112,    -1,    38,   111,   279,   118,   141,
-     112,    -1,    76,    -1,    76,   111,   148,   112,    -1,    76,
-     111,   280,   112,    -1,   119,    -1,   120,    -1,   121,    -1,
-     122,    -1,   123,    -1,   124,    -1,   153,    -1,   111,   279,
-     112,   156,    -1,   156,    -1,   157,   119,   156,    -1,   157,
-     125,   156,    -1,   157,   126,   156,    -1,   157,    -1,   158,
-     121,   157,    -1,   158,   122,   157,    -1,   158,    -1,   159,
-      90,   158,    -1,   159,    91,   158,    -1,   159,    -1,   160,
-     127,   159,    -1,   160,   128,   159,    -1,   160,    92,   159,
-      -1,   160,    93,   159,    -1,   160,    -1,   161,    94,   160,
-      -1,   161,    95,   160,    -1,   161,    -1,   162,   120,   161,
-      -1,   162,    -1,   163,   129,   162,    -1,   163,    -1,   164,
-     130,   163,    -1,   164,    -1,   165,    96,   164,    -1,   165,
-      -1,   166,    97,   165,    -1,   166,    -1,   166,   131,   174,
-     132,   167,    -1,   166,   131,   132,   167,    -1,   167,    -1,
-     167,    -1,   153,   171,   169,    -1,    -1,   169,    -1,   133,
-      -1,   109,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
-      -1,   103,    -1,   104,    -1,   105,    -1,   106,    -1,   107,
-      -1,   108,    -1,   113,   136,   118,   173,   137,   114,    -1,
-     113,   136,   169,   118,   173,   137,   114,    -1,   170,    -1,
-     173,   118,   170,    -1,   169,    -1,   174,   118,   169,    -1,
-      -1,   174,    -1,   177,    -1,   178,    -1,   182,    -1,   183,
-      -1,   195,    -1,   197,    -1,   198,    -1,   203,    -1,   129,
-     146,   116,   147,   117,   134,    -1,    72,   132,   316,   176,
-      -1,   116,   117,    -1,   116,   136,   136,   214,   179,   137,
-     117,    -1,   180,    -1,   179,   136,   180,    -1,   217,    -1,
-      40,   217,    -1,   312,    -1,   176,   137,    -1,   176,    -1,
-     181,   176,    -1,   175,   134,    -1,    41,   111,   174,   112,
-     176,    -1,    41,   111,   174,   112,   176,    42,   176,    -1,
-      43,   111,   174,   112,   188,    -1,    43,   111,   174,   112,
-     116,   136,   210,   189,   117,    -1,    53,   111,   174,   112,
-     188,    -1,    53,   111,   174,   112,   116,   136,   210,   191,
-     117,    -1,   168,    -1,   168,    98,   168,    -1,   314,    -1,
-     184,    -1,   185,   118,   184,    -1,    44,   185,   132,    -1,
-      45,   132,    -1,   186,    -1,   187,   186,    -1,   187,   176,
-      -1,    -1,   190,    -1,   187,   181,    -1,   190,   187,   181,
-      -1,    -1,   192,    -1,   187,   194,    -1,   187,   181,   193,
-      -1,   192,   187,   194,    -1,   192,   187,   181,   193,    -1,
-      -1,   194,    -1,    56,    -1,    56,   134,    -1,    47,   111,
-     174,   112,   176,    -1,    46,   176,    47,   111,   174,   112,
-     134,    -1,    48,   111,   136,   196,   112,   176,    -1,   175,
-     137,   134,   175,   134,   175,    -1,   217,   175,   134,   175,
-      -1,    51,    72,   134,    -1,    51,   119,   174,   134,    -1,
-      50,   134,    -1,    50,    72,   134,    -1,    49,   134,    -1,
-      49,    72,   134,    -1,    52,   175,   134,    -1,    61,   170,
-     134,    -1,    62,   170,   134,    -1,    62,   170,    63,   169,
-     134,    -1,    57,   178,   199,    -1,    57,   178,   201,    -1,
-      57,   178,   199,   201,    -1,   200,    -1,    58,   111,    98,
-     112,   178,    -1,   200,    58,   111,    98,   112,   178,    -1,
-      59,   111,    98,   112,   178,    -1,   200,    59,   111,    98,
-     112,   178,    -1,    58,   111,   136,   136,   202,   137,   112,
-     178,   137,    -1,   200,    58,   111,   136,   136,   202,   137,
-     112,   178,   137,    -1,    59,   111,   136,   136,   202,   137,
-     112,   178,   137,    -1,   200,    59,   111,   136,   136,   202,
-     137,   112,   178,   137,    -1,    60,   178,    -1,   230,    -1,
-     230,   313,    -1,   230,   361,    -1,   370,   141,    -1,   370,
-      -1,    64,   204,   111,   143,   112,   134,    -1,    64,   204,
-     111,   143,   132,   205,   112,   134,    -1,    64,   204,   111,
-     143,   132,   205,   132,   205,   112,   134,    -1,    64,   204,
-     111,   143,   132,   205,   132,   205,   132,   208,   112,   134,
-      -1,    64,   204,    51,   111,   143,   132,   132,   205,   132,
-     208,   132,   209,   112,   134,    -1,    -1,    11,    -1,    -1,
-     206,    -1,   207,    -1,   206,   118,   207,    -1,   143,   111,
-     168,   112,    -1,   113,   168,   114,   143,   111,   168,   112,
-      -1,    -1,   143,    -1,   208,   118,   143,    -1,   141,    -1,
-     209,   118,   141,    -1,   137,    -1,   211,    -1,   217,    -1,
-     211,   136,   217,    -1,   137,    -1,   213,    -1,   227,    -1,
-     213,   136,   227,    -1,    -1,   215,    -1,    29,   216,   134,
-      -1,   215,    29,   216,   134,    -1,   278,    -1,   216,   118,
-     278,    -1,   218,    -1,   227,    -1,   219,   137,   134,    -1,
-     224,   137,   134,    -1,   221,   137,   134,    -1,   297,   137,
-     134,    -1,   300,   137,   134,    -1,   220,   281,    -1,   236,
-     220,   281,    -1,   219,   137,   118,   136,   276,   281,    -1,
-     371,   276,   315,    -1,   374,   276,   315,    -1,   232,   374,
-     276,   315,    -1,   222,    -1,   232,   222,    -1,   236,   222,
-      -1,   236,   232,   222,    -1,   221,   137,   118,   136,   276,
-      -1,   374,   276,   111,   136,   264,   137,   112,    -1,   223,
-     276,   111,   136,   264,   137,   112,    -1,   113,   136,   266,
-     137,   114,    -1,   113,   136,   266,   137,   118,   136,   267,
-     137,   114,    -1,     3,   220,    -1,     3,   222,    -1,   224,
-     137,   118,   136,   141,    -1,     3,   230,   313,    -1,   225,
-     137,   118,   136,   313,    -1,   232,     3,   230,   313,    -1,
-     230,     3,   313,    -1,   230,     3,   232,   313,    -1,     3,
-     141,   133,   169,    -1,   226,   137,   118,   136,   141,   133,
-     169,    -1,   228,   137,   134,    -1,   225,   137,   134,    -1,
-     226,   137,   134,    -1,   244,   137,   134,    -1,   229,   313,
-     315,   281,    -1,   228,   118,   316,   313,   315,   281,    -1,
-     240,    -1,   244,    -1,   246,    -1,   287,    -1,   241,    -1,
-     245,    -1,   247,    -1,   288,    -1,    -1,   232,    -1,   233,
-      -1,   232,   233,    -1,   234,    -1,   318,    -1,    10,    -1,
-      12,    -1,    11,    -1,    14,    -1,    67,    -1,    -1,    13,
-     111,   235,   290,   112,    -1,   237,    -1,   232,   237,    -1,
-     236,   232,   237,    -1,   238,    -1,   237,   238,    -1,     5,
+     308,     0,    -1,    -1,    -1,    81,    -1,    84,    -1,    85,
+      -1,    86,    -1,    82,    -1,    74,    -1,    78,    -1,   144,
+      -1,    74,    -1,    78,    -1,    74,    -1,   144,    -1,    87,
+      -1,    88,    -1,   146,    -1,    83,    -1,   146,    83,    -1,
+      74,    -1,   144,    -1,   174,    -1,   113,   176,   114,    -1,
+     113,   180,   114,    -1,   147,    -1,   148,   115,   138,   171,
+     139,   116,    -1,   148,   113,   149,   114,    -1,   148,   117,
+     143,    -1,   148,   117,   115,   138,   151,   139,   116,    -1,
+     148,    85,    -1,   148,    89,   143,    -1,   148,    89,   115,
+     138,   151,   139,   116,    -1,   148,    90,    -1,   148,    91,
+      -1,   113,   281,   114,   118,   285,   378,   119,    -1,   148,
+     118,   149,   119,    -1,   150,    -1,   149,   120,   150,    -1,
+      -1,   171,    -1,   152,    -1,   151,   120,   152,    -1,   153,
+      -1,    84,   152,    -1,    84,   115,   138,   151,   139,   116,
+      -1,   153,   117,   152,    -1,   153,   117,   115,   138,   151,
+     139,   116,    -1,   153,    89,   152,    -1,   153,    89,   115,
+     138,   151,   139,   116,    -1,    81,   154,    -1,    86,   154,
+      -1,   143,   154,    -1,    -1,   154,    85,    -1,   148,    -1,
+     140,    -1,   145,    -1,    42,   158,    -1,   156,   158,    -1,
+     157,   158,    -1,    90,   155,    -1,    91,   155,    -1,    39,
+     155,    -1,    39,   113,   281,   114,    -1,    68,   155,    -1,
+      68,   113,   281,   114,    -1,    40,   113,   281,   120,   143,
+     114,    -1,    78,    -1,    78,   113,   150,   114,    -1,    78,
+     113,   282,   114,    -1,   121,    -1,   122,    -1,   123,    -1,
+     124,    -1,   125,    -1,   126,    -1,   155,    -1,   113,   281,
+     114,   158,    -1,   158,    -1,   159,   121,   158,    -1,   159,
+     127,   158,    -1,   159,   128,   158,    -1,   159,    -1,   160,
+     123,   159,    -1,   160,   124,   159,    -1,   160,    -1,   161,
+      92,   160,    -1,   161,    93,   160,    -1,   161,    -1,   162,
+     129,   161,    -1,   162,   130,   161,    -1,   162,    94,   161,
+      -1,   162,    95,   161,    -1,   162,    -1,   163,    96,   162,
+      -1,   163,    97,   162,    -1,   163,    -1,   164,   122,   163,
+      -1,   164,    -1,   165,   131,   164,    -1,   165,    -1,   166,
+     132,   165,    -1,   166,    -1,   167,    98,   166,    -1,   167,
+      -1,   168,    99,   167,    -1,   168,    -1,   168,   133,   176,
+     134,   169,    -1,   168,   133,   134,   169,    -1,   169,    -1,
+     169,    -1,   155,   173,   171,    -1,    -1,   171,    -1,   135,
+      -1,   111,    -1,   101,    -1,   102,    -1,   103,    -1,   104,
+      -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,   109,
+      -1,   110,    -1,   115,   138,   120,   175,   139,   116,    -1,
+     115,   138,   171,   120,   175,   139,   116,    -1,   172,    -1,
+     175,   120,   172,    -1,   171,    -1,   176,   120,   171,    -1,
+      -1,   176,    -1,   179,    -1,   180,    -1,   184,    -1,   185,
+      -1,   197,    -1,   199,    -1,   200,    -1,   205,    -1,   131,
+     148,   118,   149,   119,   136,    -1,    74,   134,   318,   178,
+      -1,   118,   119,    -1,   118,   138,   138,   216,   181,   139,
+     119,    -1,   182,    -1,   181,   138,   182,    -1,   219,    -1,
+      42,   219,    -1,   314,    -1,   178,   139,    -1,   178,    -1,
+     183,   178,    -1,   177,   136,    -1,    43,   113,   176,   114,
+     178,    -1,    43,   113,   176,   114,   178,    44,   178,    -1,
+      45,   113,   176,   114,   190,    -1,    45,   113,   176,   114,
+     118,   138,   212,   191,   119,    -1,    55,   113,   176,   114,
+     190,    -1,    55,   113,   176,   114,   118,   138,   212,   193,
+     119,    -1,   170,    -1,   170,   100,   170,    -1,   316,    -1,
+     186,    -1,   187,   120,   186,    -1,    46,   187,   134,    -1,
+      47,   134,    -1,   188,    -1,   189,   188,    -1,   189,   178,
+      -1,    -1,   192,    -1,   189,   183,    -1,   192,   189,   183,
+      -1,    -1,   194,    -1,   189,   196,    -1,   189,   183,   195,
+      -1,   194,   189,   196,    -1,   194,   189,   183,   195,    -1,
+      -1,   196,    -1,    58,    -1,    58,   136,    -1,    49,   113,
+     176,   114,   178,    -1,    48,   178,    49,   113,   176,   114,
+     136,    -1,    50,   113,   138,   198,   114,   178,    -1,   177,
+     139,   136,   177,   136,   177,    -1,   219,   177,   136,   177,
+      -1,    53,    74,   136,    -1,    53,   121,   176,   136,    -1,
+      52,   136,    -1,    52,    74,   136,    -1,    51,   136,    -1,
+      51,    74,   136,    -1,    54,   177,   136,    -1,    63,   172,
+     136,    -1,    64,   172,   136,    -1,    64,   172,    65,   171,
+     136,    -1,    59,   180,   201,    -1,    59,   180,   203,    -1,
+      59,   180,   201,   203,    -1,   202,    -1,    60,   113,   100,
+     114,   180,    -1,   202,    60,   113,   100,   114,   180,    -1,
+      61,   113,   100,   114,   180,    -1,   202,    61,   113,   100,
+     114,   180,    -1,    60,   113,   138,   138,   204,   139,   114,
+     180,   139,    -1,   202,    60,   113,   138,   138,   204,   139,
+     114,   180,   139,    -1,    61,   113,   138,   138,   204,   139,
+     114,   180,   139,    -1,   202,    61,   113,   138,   138,   204,
+     139,   114,   180,   139,    -1,    62,   180,    -1,   232,    -1,
+     232,   315,    -1,   232,   363,    -1,   372,   143,    -1,   372,
+      -1,    66,   206,   113,   145,   114,   136,    -1,    66,   206,
+     113,   145,   134,   207,   114,   136,    -1,    66,   206,   113,
+     145,   134,   207,   134,   207,   114,   136,    -1,    66,   206,
+     113,   145,   134,   207,   134,   207,   134,   210,   114,   136,
+      -1,    66,   206,    53,   113,   145,   134,   134,   207,   134,
+     210,   134,   211,   114,   136,    -1,    -1,    11,    -1,    -1,
+     208,    -1,   209,    -1,   208,   120,   209,    -1,   145,   113,
+     170,   114,    -1,   115,   170,   116,   145,   113,   170,   114,
+      -1,    -1,   145,    -1,   210,   120,   145,    -1,   143,    -1,
+     211,   120,   143,    -1,   139,    -1,   213,    -1,   219,    -1,
+     213,   138,   219,    -1,   139,    -1,   215,    -1,   229,    -1,
+     215,   138,   229,    -1,    -1,   217,    -1,    31,   218,   136,
+      -1,   217,    31,   218,   136,    -1,   280,    -1,   218,   120,
+     280,    -1,   220,    -1,   229,    -1,   221,   139,   136,    -1,
+     226,   139,   136,    -1,   223,   139,   136,    -1,   299,   139,
+     136,    -1,   302,   139,   136,    -1,   222,   283,    -1,   238,
+     222,   283,    -1,   221,   139,   120,   138,   278,   283,    -1,
+     373,   278,   317,    -1,   376,   278,   317,    -1,   234,   376,
+     278,   317,    -1,   224,    -1,   234,   224,    -1,   238,   224,
+      -1,   238,   234,   224,    -1,   223,   139,   120,   138,   278,
+      -1,   376,   278,   113,   138,   266,   139,   114,    -1,   225,
+     278,   113,   138,   266,   139,   114,    -1,   115,   138,   268,
+     139,   116,    -1,   115,   138,   268,   139,   120,   138,   269,
+     139,   116,    -1,     3,   222,    -1,     3,   224,    -1,   226,
+     139,   120,   138,   143,    -1,     3,   232,   315,    -1,   227,
+     139,   120,   138,   315,    -1,   234,     3,   232,   315,    -1,
+     232,     3,   315,    -1,   232,     3,   234,   315,    -1,     3,
+     143,   135,   171,    -1,   228,   139,   120,   138,   143,   135,
+     171,    -1,   230,   139,   136,    -1,   227,   139,   136,    -1,
+     228,   139,   136,    -1,   246,   139,   136,    -1,   231,   315,
+     317,   283,    -1,   230,   120,   318,   315,   317,   283,    -1,
+     242,    -1,   246,    -1,   248,    -1,   289,    -1,   243,    -1,
+     247,    -1,   249,    -1,   290,    -1,    -1,   234,    -1,   235,
+      -1,   234,   235,    -1,   236,    -1,   320,    -1,    10,    -1,
+      12,    -1,    11,    -1,    14,    -1,    69,    -1,    -1,    13,
+     113,   237,   292,   114,    -1,   239,    -1,   234,   239,    -1,
+     238,   234,   239,    -1,   240,    -1,   239,   240,    -1,     5,
       -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
-      -1,    69,    -1,    71,    -1,    16,    -1,    21,    -1,    20,
+      -1,    71,    -1,    73,    -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,   241,    -1,   236,   241,    -1,   240,   238,    -1,   240,
-     238,   232,    -1,   240,   238,   241,    -1,   242,    -1,   231,
-     243,   231,    -1,   239,    -1,   232,   239,    -1,   242,   233,
-      -1,   242,   239,    -1,    28,   111,   280,   112,    -1,    28,
-     111,   174,   112,    -1,    78,   111,   280,   112,    -1,    78,
-     111,   174,   112,    -1,   245,    -1,   236,   245,    -1,   244,
-     238,    -1,   244,   238,   232,    -1,   248,    -1,   232,   248,
-      -1,   245,   233,    -1,   247,    -1,   236,   247,    -1,   246,
-     238,    -1,   246,   238,   232,    -1,    74,    -1,   232,    74,
-      -1,   247,   233,    -1,   249,    -1,   260,    -1,   251,   116,
-     252,   117,    -1,   251,   278,    -1,    -1,   251,   278,   250,
-     116,   252,   117,    -1,   251,   111,   296,   112,   116,   252,
-     117,    -1,   251,   289,    -1,    31,   316,    -1,    32,   316,
-      -1,    -1,   252,   253,    -1,   254,   134,    -1,    40,   254,
-     134,    -1,   255,   134,    -1,    40,   255,   134,    -1,   370,
-      -1,   370,   278,    -1,   254,   118,   278,    -1,   254,   118,
-      -1,   230,   256,    -1,   255,   118,   316,   256,    -1,    -1,
-     258,    -1,   322,   257,    -1,   335,   257,    -1,   361,    -1,
-      -1,   258,    -1,   132,   168,    -1,    30,   316,    -1,   259,
-     116,   262,   376,   117,    -1,   259,   278,    -1,    -1,   259,
-     278,   261,   116,   262,   376,   117,    -1,   278,   263,    -1,
-     262,   118,   278,   263,    -1,    -1,   133,   168,    -1,    -1,
-     265,    -1,   267,    -1,   266,    -1,   266,   137,   118,   136,
-     267,    -1,   267,   137,   118,   136,    98,    -1,   266,   137,
-     118,   136,    98,    -1,   271,    -1,   267,   137,   118,   136,
-     271,    -1,   266,   137,   118,   136,   271,    -1,   266,   137,
-     118,   136,   267,   137,   118,   136,   271,    -1,   272,    -1,
-     267,   137,   118,   136,   272,    -1,    -1,   269,    -1,   270,
-      -1,   270,   137,   118,   136,    98,    -1,   274,    -1,   273,
-      -1,   270,   137,   118,   136,   274,    -1,   270,   137,   118,
-     136,   273,    -1,   273,    -1,   366,   276,   377,    -1,   374,
-     276,   377,    -1,   232,   374,   276,   377,    -1,   222,    -1,
-     274,    -1,   366,    -1,   374,    -1,   232,   374,    -1,   375,
-      -1,   229,   340,   377,    -1,   229,   344,   377,    -1,   229,
-      -1,   229,   355,    -1,   141,    -1,   275,   118,   141,    -1,
-     139,    -1,    74,    -1,    75,    -1,   140,    -1,    74,    -1,
-      75,    -1,   141,    -1,    74,    -1,    75,    -1,   370,    -1,
-     230,    -1,   230,   361,    -1,   370,    -1,   375,    -1,   230,
-      -1,   230,   349,    -1,    -1,   133,   282,    -1,   109,   282,
-      -1,   169,    -1,   116,   283,   376,   117,    -1,    -1,   282,
-      -1,   284,   282,    -1,   283,   118,   282,    -1,   283,   118,
-     284,   282,    -1,   285,   132,    -1,   278,   132,    -1,   286,
-      -1,   285,   286,    -1,   115,   278,    -1,   113,   136,   169,
-     137,   114,    -1,   113,   136,   314,   137,   114,    -1,   113,
-     136,   168,    98,   168,   137,   114,    -1,   115,   113,   136,
-     149,   137,   114,    -1,   288,    -1,   236,   288,    -1,   287,
-     238,    -1,   287,   238,   232,    -1,   289,    -1,   232,   289,
-      -1,   288,   233,    -1,    75,   111,   296,   112,    -1,   291,
-     377,    -1,   290,   118,   291,   377,    -1,    -1,   293,   278,
-     292,   294,    -1,   230,   340,    -1,    33,    -1,    35,    -1,
-      34,    -1,    -1,   294,   295,    -1,   130,   278,   111,   296,
-     112,    -1,   130,   116,   136,   302,   117,    -1,   130,   111,
-     136,   290,   137,   112,   116,   136,   302,   117,   111,   296,
-     112,    -1,   280,    -1,   169,    -1,   296,   118,   280,    -1,
-     296,   118,   169,    -1,    33,   298,    -1,   237,    33,   298,
-      -1,   297,   118,   298,    -1,   299,   294,    -1,   299,   294,
-     133,   280,    -1,   278,    -1,   277,   111,   136,   290,   137,
-     112,    -1,    36,   278,   111,   136,   290,   137,   112,   116,
-     117,    -1,    -1,    36,   278,   111,   136,   290,   137,   112,
-     116,   301,   302,   117,    -1,   303,    -1,   302,   136,   303,
-      -1,   304,   137,   134,    -1,   305,   137,   134,    -1,   220,
-      -1,   222,    -1,   304,   137,   118,   136,   276,    -1,   230,
-     313,    -1,   305,   137,   118,   136,   313,    -1,    -1,   307,
-      -1,   309,    -1,   307,   136,   309,    -1,    -1,   307,    -1,
-     217,    -1,   311,    -1,   203,    -1,    -1,     5,    81,   310,
-     116,   308,   117,    -1,    40,   309,    -1,   312,    -1,   327,
-     178,    -1,   331,   136,   212,   178,    -1,   221,   178,    -1,
-     229,   327,   178,    -1,   232,   327,   178,    -1,   236,   327,
-     178,    -1,   236,   232,   327,   178,    -1,   229,   331,   136,
-     212,   178,    -1,   232,   331,   136,   212,   178,    -1,   236,
-     331,   136,   212,   178,    -1,   236,   232,   331,   136,   212,
-     178,    -1,   322,    -1,   335,    -1,   327,    -1,   168,   124,
-     168,    -1,    -1,    64,   111,   144,   112,   316,    -1,    -1,
-     317,    -1,   318,    -1,   317,   318,    -1,    39,   111,   111,
-     319,   112,   112,    -1,   320,    -1,   319,   118,   320,    -1,
-      -1,   321,    -1,   321,   111,   175,   112,    -1,   276,    -1,
-     238,    -1,   239,    -1,   233,    -1,   323,   316,    -1,   324,
-      -1,   325,   316,    -1,   326,   316,    -1,   139,    -1,   111,
-     323,   112,    -1,   154,   322,    -1,   154,   232,   322,    -1,
-     111,   324,   112,    -1,   323,   353,    -1,   111,   324,   112,
-     353,    -1,   111,   325,   112,   354,    -1,   111,   325,   112,
-      -1,   111,   324,   112,   111,   136,   268,   137,   112,    -1,
-     111,   326,   112,    -1,   328,   316,    -1,   329,    -1,   330,
-     316,    -1,   323,   111,   136,   268,   137,   112,    -1,   111,
-     329,   112,   111,   136,   268,   137,   112,    -1,   111,   328,
-     112,    -1,   154,   327,    -1,   154,   232,   327,    -1,   111,
-     329,   112,    -1,   111,   329,   112,   353,    -1,   111,   330,
-     112,   354,    -1,   111,   330,   112,    -1,   332,    -1,   333,
-      -1,   334,    -1,   323,   111,   275,   112,    -1,   111,   333,
-     112,   111,   275,   112,    -1,   111,   332,   112,    -1,   154,
-     331,    -1,   154,   232,   331,    -1,   111,   333,   112,    -1,
-     111,   333,   112,   353,    -1,   111,   334,   112,   354,    -1,
-     111,   334,   112,    -1,   336,   316,    -1,   337,    -1,   338,
-     316,    -1,   339,   316,    -1,   345,    -1,   111,   336,   112,
-      -1,   154,   335,    -1,   154,   232,   335,    -1,   111,   337,
-     112,    -1,   336,   353,    -1,   111,   337,   112,   353,    -1,
-     111,   338,   112,   354,    -1,   111,   338,   112,    -1,   336,
-     111,   136,   268,   137,   112,    -1,   111,   337,   112,   111,
-     136,   268,   137,   112,    -1,   111,   339,   112,    -1,   323,
-     316,    -1,   341,    -1,   342,   316,    -1,   343,   316,    -1,
-     154,   340,    -1,   154,   232,   340,    -1,   111,   341,   112,
-      -1,   323,   359,    -1,   111,   341,   112,   353,    -1,   111,
-     342,   112,   354,    -1,   111,   342,   112,    -1,   323,   111,
-     136,   268,   137,   112,    -1,   111,   341,   112,   111,   136,
-     268,   137,   112,    -1,   111,   343,   112,    -1,   345,   316,
-      -1,   346,    -1,   347,   316,    -1,   348,   316,    -1,    74,
-      -1,    75,    -1,   154,   344,    -1,   154,   232,   344,    -1,
-     111,   346,   112,    -1,   345,   359,    -1,   111,   346,   112,
-     359,    -1,   345,   111,   136,   268,   137,   112,    -1,   111,
-     346,   112,   111,   136,   268,   137,   112,    -1,   350,    -1,
-     351,   316,    -1,   352,   316,    -1,   154,    -1,   154,   232,
-      -1,   154,   349,    -1,   154,   232,   349,    -1,   111,   350,
-     112,    -1,   353,    -1,   111,   350,   112,   353,    -1,   111,
-     351,   112,   354,    -1,   111,   351,   112,    -1,   111,   136,
-     268,   137,   112,    -1,   111,   350,   112,   111,   136,   268,
-     137,   112,    -1,   111,   352,   112,    -1,   113,   114,    -1,
-     113,   114,   354,    -1,   354,    -1,   113,   136,   169,   137,
-     114,    -1,   113,   136,   119,   137,   114,    -1,   354,   113,
-     136,   169,   137,   114,    -1,   354,   113,   136,   119,   137,
-     114,    -1,   356,    -1,   357,   316,    -1,   358,   316,    -1,
-     154,    -1,   154,   232,    -1,   154,   355,    -1,   154,   232,
-     355,    -1,   111,   356,   112,    -1,   359,    -1,   111,   356,
-     112,   359,    -1,   111,   357,   112,   354,    -1,   111,   357,
-     112,    -1,   111,   136,   268,   137,   112,    -1,   111,   356,
-     112,   111,   136,   268,   137,   112,    -1,   111,   358,   112,
-      -1,   360,    -1,   360,   354,    -1,   354,    -1,   113,   114,
-      -1,   113,   136,   232,   119,   137,   114,    -1,   113,   136,
-     232,   137,   114,    -1,   113,   136,   232,   169,   137,   114,
-      -1,   113,   136,     7,   231,   169,   137,   114,    -1,   113,
-     136,   232,     7,   169,   137,   114,    -1,   362,    -1,   363,
-     316,    -1,   364,   316,    -1,   154,    -1,   154,   232,    -1,
-     154,   361,    -1,   154,   232,   361,    -1,   111,   362,   112,
-      -1,   353,    -1,   111,   362,   112,   353,    -1,   111,   363,
-     112,   354,    -1,   111,   363,   112,    -1,   111,   362,   112,
-     111,   136,   268,   137,   112,    -1,   111,   364,   112,    -1,
-     366,    -1,   374,    -1,   232,   374,    -1,   367,    -1,   368,
-      -1,   154,   230,    -1,   232,   154,   230,    -1,   154,   375,
-      -1,   232,   154,   375,    -1,   154,   365,    -1,   232,   154,
-     365,    -1,   113,   114,   230,    -1,   369,   230,    -1,   113,
-     114,   354,   230,    -1,   369,   354,   230,    -1,   354,   230,
-      -1,   113,   114,   367,    -1,   369,   367,    -1,   113,   114,
-     354,   367,    -1,   369,   354,   367,    -1,   354,   367,    -1,
-     113,   136,   232,   119,   137,   114,    -1,   113,   136,   232,
-     169,   137,   114,    -1,   113,   136,   236,   169,   137,   114,
-      -1,   113,   136,   236,   232,   169,   137,   114,    -1,   374,
-      -1,   232,   374,    -1,   371,    -1,   372,    -1,   373,    -1,
-     154,   230,    -1,   232,   154,   230,    -1,   154,   375,    -1,
-     232,   154,   375,    -1,   154,   370,    -1,   232,   154,   370,
-      -1,   113,   114,   230,    -1,   113,   114,   354,   230,    -1,
-     354,   230,    -1,   113,   114,   372,    -1,   113,   114,   354,
-     372,    -1,   354,   372,    -1,   113,   136,   267,   137,   114,
-      -1,   374,   111,   136,   264,   137,   112,    -1,   223,   111,
-     136,   264,   137,   112,    -1,    -1,   118,    -1,    -1,   133,
-     169,    -1
+      -1,    15,    -1,    27,    -1,    28,    -1,    29,    -1,    26,
+      -1,    24,    -1,    25,    -1,   243,    -1,   238,   243,    -1,
+     242,   240,    -1,   242,   240,   234,    -1,   242,   240,   243,
+      -1,   244,    -1,   233,   245,   233,    -1,   241,    -1,   234,
+     241,    -1,   244,   235,    -1,   244,   241,    -1,    30,   113,
+     282,   114,    -1,    30,   113,   176,   114,    -1,    80,   113,
+     282,   114,    -1,    80,   113,   176,   114,    -1,   247,    -1,
+     238,   247,    -1,   246,   240,    -1,   246,   240,   234,    -1,
+     250,    -1,   234,   250,    -1,   247,   235,    -1,   249,    -1,
+     238,   249,    -1,   248,   240,    -1,   248,   240,   234,    -1,
+      76,    -1,   234,    76,    -1,   249,   235,    -1,   251,    -1,
+     262,    -1,   253,   118,   254,   119,    -1,   253,   280,    -1,
+      -1,   253,   280,   252,   118,   254,   119,    -1,   253,   113,
+     298,   114,   118,   254,   119,    -1,   253,   291,    -1,    33,
+     318,    -1,    34,   318,    -1,    -1,   254,   255,    -1,   256,
+     136,    -1,    42,   256,   136,    -1,   257,   136,    -1,    42,
+     257,   136,    -1,   372,    -1,   372,   280,    -1,   256,   120,
+     280,    -1,   256,   120,    -1,   232,   258,    -1,   257,   120,
+     318,   258,    -1,    -1,   260,    -1,   324,   259,    -1,   337,
+     259,    -1,   363,    -1,    -1,   260,    -1,   134,   170,    -1,
+      32,   318,    -1,   261,   118,   264,   378,   119,    -1,   261,
+     280,    -1,    -1,   261,   280,   263,   118,   264,   378,   119,
+      -1,   280,   265,    -1,   264,   120,   280,   265,    -1,    -1,
+     135,   170,    -1,    -1,   267,    -1,   269,    -1,   268,    -1,
+     268,   139,   120,   138,   269,    -1,   269,   139,   120,   138,
+     100,    -1,   268,   139,   120,   138,   100,    -1,   273,    -1,
+     269,   139,   120,   138,   273,    -1,   268,   139,   120,   138,
+     273,    -1,   268,   139,   120,   138,   269,   139,   120,   138,
+     273,    -1,   274,    -1,   269,   139,   120,   138,   274,    -1,
+      -1,   271,    -1,   272,    -1,   272,   139,   120,   138,   100,
+      -1,   276,    -1,   275,    -1,   272,   139,   120,   138,   276,
+      -1,   272,   139,   120,   138,   275,    -1,   275,    -1,   368,
+     278,   379,    -1,   376,   278,   379,    -1,   234,   376,   278,
+     379,    -1,   224,    -1,   276,    -1,   368,    -1,   376,    -1,
+     234,   376,    -1,   377,    -1,   231,   342,   379,    -1,   231,
+     346,   379,    -1,   231,    -1,   231,   357,    -1,   143,    -1,
+     277,   120,   143,    -1,   141,    -1,    76,    -1,    77,    -1,
+     142,    -1,    76,    -1,    77,    -1,   143,    -1,    76,    -1,
+      77,    -1,   372,    -1,   232,    -1,   232,   363,    -1,   372,
+      -1,   377,    -1,   232,    -1,   232,   351,    -1,    -1,   135,
+     284,    -1,   111,   284,    -1,   171,    -1,   118,   285,   378,
+     119,    -1,    -1,   284,    -1,   286,   284,    -1,   285,   120,
+     284,    -1,   285,   120,   286,   284,    -1,   287,   134,    -1,
+     280,   134,    -1,   288,    -1,   287,   288,    -1,   117,   280,
+      -1,   115,   138,   171,   139,   116,    -1,   115,   138,   316,
+     139,   116,    -1,   115,   138,   170,   100,   170,   139,   116,
+      -1,   117,   115,   138,   151,   139,   116,    -1,   290,    -1,
+     238,   290,    -1,   289,   240,    -1,   289,   240,   234,    -1,
+     291,    -1,   234,   291,    -1,   290,   235,    -1,    77,   113,
+     298,   114,    -1,   293,   379,    -1,   292,   120,   293,   379,
+      -1,    -1,   295,   280,   294,   296,    -1,   232,   342,    -1,
+      35,    -1,    37,    -1,    36,    -1,    -1,   296,   297,    -1,
+     132,   280,   113,   298,   114,    -1,   132,   118,   138,   304,
+     119,    -1,   132,   113,   138,   292,   139,   114,   118,   138,
+     304,   119,   113,   298,   114,    -1,   282,    -1,   171,    -1,
+     298,   120,   282,    -1,   298,   120,   171,    -1,    35,   300,
+      -1,   239,    35,   300,    -1,   299,   120,   300,    -1,   301,
+     296,    -1,   301,   296,   135,   282,    -1,   280,    -1,   279,
+     113,   138,   292,   139,   114,    -1,    38,   280,   113,   138,
+     292,   139,   114,   118,   119,    -1,    -1,    38,   280,   113,
+     138,   292,   139,   114,   118,   303,   304,   119,    -1,   305,
+      -1,   304,   138,   305,    -1,   306,   139,   136,    -1,   307,
+     139,   136,    -1,   222,    -1,   224,    -1,   306,   139,   120,
+     138,   278,    -1,   232,   315,    -1,   307,   139,   120,   138,
+     315,    -1,    -1,   309,    -1,   311,    -1,   309,   138,   311,
+      -1,    -1,   309,    -1,   219,    -1,   313,    -1,   205,    -1,
+      -1,     5,    83,   312,   118,   310,   119,    -1,    42,   311,
+      -1,   314,    -1,   329,   180,    -1,   333,   138,   214,   180,
+      -1,   223,   180,    -1,   231,   329,   180,    -1,   234,   329,
+     180,    -1,   238,   329,   180,    -1,   238,   234,   329,   180,
+      -1,   231,   333,   138,   214,   180,    -1,   234,   333,   138,
+     214,   180,    -1,   238,   333,   138,   214,   180,    -1,   238,
+     234,   333,   138,   214,   180,    -1,   324,    -1,   337,    -1,
+     329,    -1,   170,   126,   170,    -1,    -1,    66,   113,   145,
+     114,   318,    -1,    -1,   319,    -1,   320,    -1,   319,   320,
+      -1,    41,   113,   113,   321,   114,   114,    -1,   322,    -1,
+     321,   120,   322,    -1,    -1,   323,    -1,   323,   113,   177,
+     114,    -1,   278,    -1,   240,    -1,   241,    -1,   235,    -1,
+     325,   318,    -1,   326,    -1,   327,   318,    -1,   328,   318,
+      -1,   141,    -1,   113,   325,   114,    -1,   156,   324,    -1,
+     156,   234,   324,    -1,   113,   326,   114,    -1,   325,   355,
+      -1,   113,   326,   114,   355,    -1,   113,   327,   114,   356,
+      -1,   113,   327,   114,    -1,   113,   326,   114,   113,   138,
+     270,   139,   114,    -1,   113,   328,   114,    -1,   330,   318,
+      -1,   331,    -1,   332,   318,    -1,   325,   113,   138,   270,
+     139,   114,    -1,   113,   331,   114,   113,   138,   270,   139,
+     114,    -1,   113,   330,   114,    -1,   156,   329,    -1,   156,
+     234,   329,    -1,   113,   331,   114,    -1,   113,   331,   114,
+     355,    -1,   113,   332,   114,   356,    -1,   113,   332,   114,
+      -1,   334,    -1,   335,    -1,   336,    -1,   325,   113,   277,
+     114,    -1,   113,   335,   114,   113,   277,   114,    -1,   113,
+     334,   114,    -1,   156,   333,    -1,   156,   234,   333,    -1,
+     113,   335,   114,    -1,   113,   335,   114,   355,    -1,   113,
+     336,   114,   356,    -1,   113,   336,   114,    -1,   338,   318,
+      -1,   339,    -1,   340,   318,    -1,   341,   318,    -1,   347,
+      -1,   113,   338,   114,    -1,   156,   337,    -1,   156,   234,
+     337,    -1,   113,   339,   114,    -1,   338,   355,    -1,   113,
+     339,   114,   355,    -1,   113,   340,   114,   356,    -1,   113,
+     340,   114,    -1,   338,   113,   138,   270,   139,   114,    -1,
+     113,   339,   114,   113,   138,   270,   139,   114,    -1,   113,
+     341,   114,    -1,   325,   318,    -1,   343,    -1,   344,   318,
+      -1,   345,   318,    -1,   156,   342,    -1,   156,   234,   342,
+      -1,   113,   343,   114,    -1,   325,   361,    -1,   113,   343,
+     114,   355,    -1,   113,   344,   114,   356,    -1,   113,   344,
+     114,    -1,   325,   113,   138,   270,   139,   114,    -1,   113,
+     343,   114,   113,   138,   270,   139,   114,    -1,   113,   345,
+     114,    -1,   347,   318,    -1,   348,    -1,   349,   318,    -1,
+     350,   318,    -1,    76,    -1,    77,    -1,   156,   346,    -1,
+     156,   234,   346,    -1,   113,   348,   114,    -1,   347,   361,
+      -1,   113,   348,   114,   361,    -1,   347,   113,   138,   270,
+     139,   114,    -1,   113,   348,   114,   113,   138,   270,   139,
+     114,    -1,   352,    -1,   353,   318,    -1,   354,   318,    -1,
+     156,    -1,   156,   234,    -1,   156,   351,    -1,   156,   234,
+     351,    -1,   113,   352,   114,    -1,   355,    -1,   113,   352,
+     114,   355,    -1,   113,   353,   114,   356,    -1,   113,   353,
+     114,    -1,   113,   138,   270,   139,   114,    -1,   113,   352,
+     114,   113,   138,   270,   139,   114,    -1,   113,   354,   114,
+      -1,   115,   116,    -1,   115,   116,   356,    -1,   356,    -1,
+     115,   138,   171,   139,   116,    -1,   115,   138,   121,   139,
+     116,    -1,   356,   115,   138,   171,   139,   116,    -1,   356,
+     115,   138,   121,   139,   116,    -1,   358,    -1,   359,   318,
+      -1,   360,   318,    -1,   156,    -1,   156,   234,    -1,   156,
+     357,    -1,   156,   234,   357,    -1,   113,   358,   114,    -1,
+     361,    -1,   113,   358,   114,   361,    -1,   113,   359,   114,
+     356,    -1,   113,   359,   114,    -1,   113,   138,   270,   139,
+     114,    -1,   113,   358,   114,   113,   138,   270,   139,   114,
+      -1,   113,   360,   114,    -1,   362,    -1,   362,   356,    -1,
+     356,    -1,   115,   116,    -1,   115,   138,   234,   121,   139,
+     116,    -1,   115,   138,   234,   139,   116,    -1,   115,   138,
+     234,   171,   139,   116,    -1,   115,   138,     7,   233,   171,
+     139,   116,    -1,   115,   138,   234,     7,   171,   139,   116,
+      -1,   364,    -1,   365,   318,    -1,   366,   318,    -1,   156,
+      -1,   156,   234,    -1,   156,   363,    -1,   156,   234,   363,
+      -1,   113,   364,   114,    -1,   355,    -1,   113,   364,   114,
+     355,    -1,   113,   365,   114,   356,    -1,   113,   365,   114,
+      -1,   113,   364,   114,   113,   138,   270,   139,   114,    -1,
+     113,   366,   114,    -1,   368,    -1,   376,    -1,   234,   376,
+      -1,   369,    -1,   370,    -1,   156,   232,    -1,   234,   156,
+     232,    -1,   156,   377,    -1,   234,   156,   377,    -1,   156,
+     367,    -1,   234,   156,   367,    -1,   115,   116,   232,    -1,
+     371,   232,    -1,   115,   116,   356,   232,    -1,   371,   356,
+     232,    -1,   356,   232,    -1,   115,   116,   369,    -1,   371,
+     369,    -1,   115,   116,   356,   369,    -1,   371,   356,   369,
+      -1,   356,   369,    -1,   115,   138,   234,   121,   139,   116,
+      -1,   115,   138,   234,   171,   139,   116,    -1,   115,   138,
+     238,   171,   139,   116,    -1,   115,   138,   238,   234,   171,
+     139,   116,    -1,   376,    -1,   234,   376,    -1,   373,    -1,
+     374,    -1,   375,    -1,   156,   232,    -1,   234,   156,   232,
+      -1,   156,   377,    -1,   234,   156,   377,    -1,   156,   372,
+      -1,   234,   156,   372,    -1,   115,   116,   232,    -1,   115,
+     116,   356,   232,    -1,   356,   232,    -1,   115,   116,   374,
+      -1,   115,   116,   356,   374,    -1,   356,   374,    -1,   115,
+     138,   269,   139,   116,    -1,   376,   113,   138,   266,   139,
+     114,    -1,   225,   113,   138,   266,   139,   114,    -1,    -1,
+     120,    -1,    -1,   135,   171,    -1
 };
 
@@ -1026,80 +1030,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   305,   305,   309,   316,   317,   318,   319,   320,   324,
-     325,   326,   330,   331,   335,   336,   340,   341,   345,   349,
-     350,   361,   363,   365,   366,   368,   373,   374,   380,   382,
-     384,   386,   388,   390,   392,   394,   396,   398,   407,   408,
-     414,   415,   419,   420,   424,   425,   427,   429,   431,   433,
-     435,   440,   442,   444,   450,   451,   459,   462,   464,   466,
-     471,   484,   486,   488,   490,   492,   494,   496,   498,   500,
-     502,   504,   511,   512,   518,   519,   520,   521,   525,   526,
-     533,   534,   536,   538,   543,   544,   546,   551,   552,   554,
-     559,   560,   562,   564,   566,   571,   572,   574,   579,   580,
-     585,   586,   591,   592,   597,   598,   603,   604,   609,   610,
-     613,   620,   625,   626,   634,   635,   639,   640,   641,   642,
-     643,   644,   645,   646,   647,   648,   649,   650,   660,   662,
-     667,   668,   673,   674,   680,   681,   687,   688,   689,   690,
-     691,   692,   693,   694,   695,   705,   712,   714,   724,   725,
-     730,   732,   738,   740,   744,   745,   750,   755,   758,   760,
-     762,   772,   774,   785,   786,   788,   792,   794,   798,   799,
-     804,   805,   809,   814,   815,   819,   821,   827,   828,   832,
-     834,   836,   838,   844,   845,   849,   851,   856,   858,   860,
-     865,   867,   872,   874,   878,   881,   885,   888,   892,   894,
-     896,   898,   903,   905,   907,   912,   914,   916,   918,   920,
-     925,   927,   929,   931,   936,   948,   949,   954,   956,   961,
-     965,   967,   969,   971,   973,   979,   980,   986,   987,   991,
-     992,   997,   999,  1005,  1006,  1008,  1013,  1018,  1028,  1030,
-    1034,  1035,  1040,  1042,  1046,  1047,  1051,  1053,  1057,  1058,
-    1062,  1063,  1067,  1068,  1083,  1084,  1085,  1086,  1087,  1091,
-    1096,  1103,  1113,  1118,  1123,  1131,  1136,  1141,  1146,  1151,
-    1181,  1186,  1193,  1195,  1202,  1207,  1212,  1223,  1228,  1233,
-    1238,  1243,  1252,  1257,  1265,  1266,  1267,  1268,  1274,  1279,
-    1287,  1288,  1289,  1290,  1294,  1295,  1296,  1297,  1302,  1303,
-    1312,  1313,  1318,  1319,  1324,  1326,  1328,  1330,  1332,  1335,
-    1334,  1346,  1347,  1349,  1359,  1360,  1365,  1367,  1369,  1371,
-    1373,  1376,  1378,  1381,  1386,  1388,  1390,  1392,  1394,  1396,
-    1398,  1400,  1402,  1404,  1406,  1408,  1410,  1416,  1417,  1419,
-    1421,  1423,  1428,  1429,  1435,  1436,  1438,  1440,  1445,  1447,
-    1449,  1451,  1456,  1457,  1459,  1461,  1466,  1467,  1469,  1474,
-    1475,  1477,  1479,  1484,  1486,  1488,  1493,  1494,  1498,  1500,
-    1506,  1505,  1509,  1511,  1516,  1518,  1524,  1525,  1530,  1531,
-    1533,  1534,  1543,  1544,  1546,  1548,  1553,  1555,  1561,  1562,
-    1564,  1567,  1570,  1575,  1576,  1581,  1586,  1590,  1592,  1598,
-    1597,  1604,  1606,  1612,  1613,  1621,  1622,  1626,  1627,  1628,
-    1630,  1632,  1639,  1640,  1642,  1644,  1649,  1650,  1656,  1657,
-    1661,  1662,  1667,  1668,  1669,  1671,  1679,  1680,  1682,  1685,
-    1687,  1691,  1692,  1693,  1695,  1697,  1701,  1706,  1714,  1715,
-    1724,  1726,  1731,  1732,  1733,  1737,  1738,  1739,  1743,  1744,
-    1745,  1749,  1750,  1751,  1756,  1757,  1758,  1759,  1765,  1766,
-    1768,  1773,  1774,  1779,  1780,  1781,  1782,  1783,  1798,  1799,
-    1804,  1805,  1811,  1813,  1816,  1818,  1820,  1843,  1844,  1846,
-    1848,  1853,  1854,  1856,  1861,  1866,  1867,  1873,  1872,  1876,
-    1880,  1882,  1884,  1890,  1891,  1896,  1901,  1903,  1908,  1910,
-    1911,  1913,  1918,  1920,  1922,  1927,  1929,  1934,  1939,  1947,
-    1953,  1952,  1966,  1967,  1972,  1973,  1977,  1982,  1987,  1995,
-    2000,  2011,  2012,  2017,  2018,  2024,  2025,  2029,  2030,  2031,
-    2034,  2033,  2044,  2053,  2059,  2065,  2074,  2080,  2086,  2092,
-    2098,  2106,  2112,  2120,  2126,  2135,  2136,  2137,  2141,  2145,
-    2147,  2152,  2153,  2157,  2158,  2163,  2169,  2170,  2173,  2175,
-    2176,  2180,  2181,  2182,  2183,  2217,  2219,  2220,  2222,  2227,
-    2232,  2237,  2239,  2241,  2246,  2248,  2250,  2252,  2257,  2259,
-    2268,  2270,  2271,  2276,  2278,  2280,  2285,  2287,  2289,  2294,
-    2296,  2298,  2307,  2308,  2309,  2313,  2315,  2317,  2322,  2324,
-    2326,  2331,  2333,  2335,  2350,  2352,  2353,  2355,  2360,  2361,
-    2366,  2368,  2370,  2375,  2377,  2379,  2381,  2386,  2388,  2390,
-    2400,  2402,  2403,  2405,  2410,  2412,  2414,  2419,  2421,  2423,
-    2425,  2430,  2432,  2434,  2465,  2467,  2468,  2470,  2475,  2480,
-    2488,  2490,  2492,  2497,  2499,  2504,  2506,  2520,  2521,  2523,
-    2528,  2530,  2532,  2534,  2536,  2541,  2542,  2544,  2546,  2551,
-    2553,  2555,  2561,  2563,  2565,  2569,  2571,  2573,  2575,  2589,
-    2590,  2592,  2597,  2599,  2601,  2603,  2605,  2610,  2611,  2613,
-    2615,  2620,  2622,  2624,  2630,  2631,  2633,  2642,  2645,  2647,
-    2650,  2652,  2654,  2667,  2668,  2670,  2675,  2677,  2679,  2681,
-    2683,  2688,  2689,  2691,  2693,  2698,  2700,  2708,  2709,  2710,
-    2715,  2716,  2720,  2722,  2724,  2726,  2728,  2730,  2737,  2739,
-    2741,  2743,  2745,  2748,  2750,  2752,  2754,  2756,  2761,  2763,
-    2765,  2770,  2796,  2797,  2799,  2803,  2804,  2808,  2810,  2812,
-    2814,  2816,  2818,  2825,  2827,  2829,  2831,  2833,  2835,  2840,
-    2847,  2849,  2867,  2869,  2874,  2875
+       0,   306,   306,   310,   317,   318,   319,   320,   321,   325,
+     326,   327,   331,   332,   336,   337,   341,   342,   346,   350,
+     351,   362,   364,   366,   367,   369,   374,   375,   381,   383,
+     385,   387,   389,   391,   393,   395,   397,   399,   408,   409,
+     415,   416,   420,   421,   425,   426,   428,   430,   432,   434,
+     436,   441,   443,   445,   457,   458,   466,   469,   471,   473,
+     478,   491,   493,   495,   497,   499,   501,   503,   505,   507,
+     509,   511,   518,   519,   525,   526,   527,   528,   532,   533,
+     540,   541,   543,   545,   550,   551,   553,   558,   559,   561,
+     566,   567,   569,   571,   573,   578,   579,   581,   586,   587,
+     592,   593,   598,   599,   604,   605,   610,   611,   616,   617,
+     620,   627,   632,   633,   641,   642,   646,   647,   648,   649,
+     650,   651,   652,   653,   654,   655,   656,   657,   667,   669,
+     674,   675,   680,   681,   687,   688,   694,   695,   696,   697,
+     698,   699,   700,   701,   702,   712,   719,   721,   731,   732,
+     737,   739,   745,   747,   751,   752,   757,   762,   765,   767,
+     769,   779,   781,   792,   793,   795,   799,   801,   805,   806,
+     811,   812,   816,   821,   822,   826,   828,   834,   835,   839,
+     841,   843,   845,   851,   852,   856,   858,   863,   865,   867,
+     872,   874,   879,   881,   885,   888,   892,   895,   899,   901,
+     903,   905,   910,   912,   914,   919,   921,   923,   925,   927,
+     932,   934,   936,   938,   943,   955,   956,   961,   963,   968,
+     972,   974,   976,   978,   980,   986,   987,   993,   994,   998,
+     999,  1004,  1006,  1012,  1013,  1015,  1021,  1026,  1036,  1038,
+    1042,  1043,  1048,  1050,  1054,  1055,  1059,  1061,  1065,  1066,
+    1070,  1071,  1075,  1076,  1091,  1092,  1093,  1094,  1095,  1099,
+    1104,  1111,  1121,  1126,  1131,  1139,  1144,  1149,  1154,  1159,
+    1189,  1194,  1201,  1203,  1210,  1215,  1220,  1231,  1236,  1241,
+    1246,  1251,  1260,  1265,  1273,  1274,  1275,  1276,  1282,  1287,
+    1295,  1296,  1297,  1298,  1302,  1303,  1304,  1305,  1310,  1311,
+    1320,  1321,  1326,  1327,  1332,  1334,  1336,  1338,  1340,  1343,
+    1342,  1354,  1355,  1357,  1367,  1368,  1373,  1375,  1377,  1379,
+    1381,  1384,  1386,  1389,  1394,  1396,  1398,  1400,  1402,  1404,
+    1406,  1408,  1410,  1412,  1414,  1416,  1418,  1420,  1422,  1428,
+    1429,  1431,  1433,  1435,  1440,  1441,  1447,  1448,  1450,  1452,
+    1457,  1459,  1461,  1463,  1468,  1469,  1471,  1473,  1478,  1479,
+    1481,  1486,  1487,  1489,  1491,  1496,  1498,  1500,  1505,  1506,
+    1510,  1512,  1518,  1517,  1521,  1523,  1528,  1530,  1536,  1537,
+    1542,  1543,  1545,  1546,  1555,  1556,  1558,  1560,  1565,  1567,
+    1573,  1574,  1576,  1579,  1582,  1587,  1588,  1593,  1598,  1602,
+    1604,  1610,  1609,  1616,  1618,  1624,  1625,  1633,  1634,  1638,
+    1639,  1640,  1642,  1644,  1651,  1652,  1654,  1656,  1661,  1662,
+    1668,  1669,  1673,  1674,  1679,  1680,  1681,  1683,  1691,  1692,
+    1694,  1697,  1699,  1703,  1704,  1705,  1707,  1709,  1713,  1718,
+    1726,  1727,  1736,  1738,  1743,  1744,  1745,  1749,  1750,  1751,
+    1755,  1756,  1757,  1761,  1762,  1763,  1768,  1769,  1770,  1771,
+    1777,  1778,  1780,  1785,  1786,  1791,  1792,  1793,  1794,  1795,
+    1810,  1811,  1816,  1817,  1823,  1825,  1828,  1830,  1832,  1855,
+    1856,  1858,  1860,  1865,  1866,  1868,  1873,  1878,  1879,  1885,
+    1884,  1888,  1892,  1894,  1896,  1902,  1903,  1908,  1913,  1915,
+    1920,  1922,  1923,  1925,  1930,  1932,  1934,  1939,  1941,  1946,
+    1951,  1959,  1965,  1964,  1978,  1979,  1984,  1985,  1989,  1994,
+    1999,  2007,  2012,  2023,  2024,  2029,  2030,  2036,  2037,  2041,
+    2042,  2043,  2046,  2045,  2056,  2065,  2071,  2077,  2086,  2092,
+    2098,  2104,  2110,  2118,  2124,  2132,  2138,  2147,  2148,  2149,
+    2153,  2159,  2160,  2166,  2167,  2171,  2172,  2177,  2183,  2184,
+    2187,  2189,  2190,  2194,  2195,  2196,  2197,  2231,  2233,  2234,
+    2236,  2241,  2246,  2251,  2253,  2255,  2260,  2262,  2264,  2266,
+    2271,  2273,  2282,  2284,  2285,  2290,  2292,  2294,  2299,  2301,
+    2303,  2308,  2310,  2312,  2321,  2322,  2323,  2327,  2329,  2331,
+    2336,  2338,  2340,  2345,  2347,  2349,  2364,  2366,  2367,  2369,
+    2374,  2375,  2380,  2382,  2384,  2389,  2391,  2393,  2395,  2400,
+    2402,  2404,  2414,  2416,  2417,  2419,  2424,  2426,  2428,  2433,
+    2435,  2437,  2439,  2444,  2446,  2448,  2479,  2481,  2482,  2484,
+    2489,  2494,  2502,  2504,  2506,  2511,  2513,  2518,  2520,  2534,
+    2535,  2537,  2542,  2544,  2546,  2548,  2550,  2555,  2556,  2558,
+    2560,  2565,  2567,  2569,  2575,  2577,  2579,  2583,  2585,  2587,
+    2589,  2603,  2604,  2606,  2611,  2613,  2615,  2617,  2619,  2624,
+    2625,  2627,  2629,  2634,  2636,  2638,  2644,  2645,  2647,  2656,
+    2659,  2661,  2664,  2666,  2668,  2681,  2682,  2684,  2689,  2691,
+    2693,  2695,  2697,  2702,  2703,  2705,  2707,  2712,  2714,  2722,
+    2723,  2724,  2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,
+    2751,  2753,  2755,  2757,  2759,  2762,  2764,  2766,  2768,  2770,
+    2775,  2777,  2779,  2784,  2810,  2811,  2813,  2817,  2818,  2822,
+    2824,  2826,  2828,  2830,  2832,  2839,  2841,  2843,  2845,  2847,
+    2849,  2854,  2861,  2863,  2881,  2883,  2888,  2889
 };
 #endif
@@ -1113,23 +1117,24 @@
   "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL",
   "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE",
-  "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",
-  "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",
-  "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",
-  "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",
-  "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",
-  "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",
-  "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
-  "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
-  "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
-  "INTEGERconstant", "CHARACTERconstant", "STRINGliteral",
-  "REALDECIMALconstant", "REALFRACTIONconstant", "FLOATINGconstant",
-  "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE", "GE", "EQ",
-  "NE", "ANDAND", "OROR", "ELLIPSIS", "MULTassign", "DIVassign",
-  "MODassign", "PLUSassign", "MINUSassign", "LSassign", "RSassign",
-  "ANDassign", "ERassign", "ORassign", "ATassign", "THEN", "'('", "')'",
-  "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'", "'+'", "'-'",
-  "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'", "'?'", "':'",
-  "'='", "';'", "$accept", "push", "pop", "constant", "identifier",
-  "no_01_identifier", "no_attr_identifier", "zero_one", "string_literal",
+  "SIGNED", "UNSIGNED", "ZERO_T", "ONE_T", "VALIST", "BOOL", "COMPLEX",
+  "IMAGINARY", "TYPEOF", "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE",
+  "FTYPE", "DTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
+  "EXTENSION", "IF", "ELSE", "SWITCH", "CASE", "DEFAULT", "DO", "WHILE",
+  "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN", "CHOOSE", "DISABLE",
+  "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME", "FINALLY", "THROW",
+  "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF", "ATOMIC", "GENERIC",
+  "NORETURN", "STATICASSERT", "THREADLOCAL", "IDENTIFIER",
+  "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname", "ATTR_IDENTIFIER",
+  "ATTR_TYPEDEFname", "ATTR_TYPEGENname", "INTEGERconstant",
+  "CHARACTERconstant", "STRINGliteral", "REALDECIMALconstant",
+  "REALFRACTIONconstant", "FLOATINGconstant", "ZERO", "ONE", "ARROW",
+  "ICR", "DECR", "LS", "RS", "LE", "GE", "EQ", "NE", "ANDAND", "OROR",
+  "ELLIPSIS", "MULTassign", "DIVassign", "MODassign", "PLUSassign",
+  "MINUSassign", "LSassign", "RSassign", "ANDassign", "ERassign",
+  "ORassign", "ATassign", "THEN", "'('", "')'", "'['", "']'", "'.'", "'{'",
+  "'}'", "','", "'*'", "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'",
+  "'<'", "'>'", "'^'", "'|'", "'?'", "':'", "'='", "';'", "$accept",
+  "push", "pop", "constant", "identifier", "no_01_identifier",
+  "no_attr_identifier", "zero_one", "string_literal",
   "string_literal_list", "primary_expression", "postfix_expression",
   "argument_expression_list", "argument_expression", "field_list", "field",
@@ -1235,7 +1240,7 @@
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,    40,    41,    91,    93,    46,   123,   125,    44,    42,
-      38,    43,    45,    33,   126,    47,    37,    60,    62,    94,
-     124,    63,    58,    61,    59
+     365,   366,   367,    40,    41,    91,    93,    46,   123,   125,
+      44,    42,    38,    43,    45,    33,   126,    47,    37,    60,
+      62,    94,   124,    63,    58,    61,    59
 };
 # endif
@@ -1244,80 +1249,80 @@
 static const yytype_uint16 yyr1[] =
 {
-       0,   135,   136,   137,   138,   138,   138,   138,   138,   139,
-     139,   139,   140,   140,   141,   141,   142,   142,   143,   144,
-     144,   145,   145,   145,   145,   145,   146,   146,   146,   146,
-     146,   146,   146,   146,   146,   146,   146,   146,   147,   147,
-     148,   148,   149,   149,   150,   150,   150,   150,   150,   150,
-     150,   151,   151,   151,   152,   152,   153,   153,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   154,   154,   155,   155,   155,   155,   156,   156,
-     157,   157,   157,   157,   158,   158,   158,   159,   159,   159,
-     160,   160,   160,   160,   160,   161,   161,   161,   162,   162,
-     163,   163,   164,   164,   165,   165,   166,   166,   167,   167,
-     167,   168,   169,   169,   170,   170,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   172,   172,
-     173,   173,   174,   174,   175,   175,   176,   176,   176,   176,
-     176,   176,   176,   176,   176,   177,   178,   178,   179,   179,
-     180,   180,   180,   180,   181,   181,   182,   183,   183,   183,
-     183,   183,   183,   184,   184,   184,   185,   185,   186,   186,
-     187,   187,   188,   189,   189,   190,   190,   191,   191,   192,
-     192,   192,   192,   193,   193,   194,   194,   195,   195,   195,
-     196,   196,   197,   197,   197,   197,   197,   197,   197,   197,
-     197,   197,   198,   198,   198,   199,   199,   199,   199,   199,
-     200,   200,   200,   200,   201,   202,   202,   202,   202,   202,
-     203,   203,   203,   203,   203,   204,   204,   205,   205,   206,
-     206,   207,   207,   208,   208,   208,   209,   209,   210,   210,
-     211,   211,   212,   212,   213,   213,   214,   214,   215,   215,
-     216,   216,   217,   217,   218,   218,   218,   218,   218,   219,
-     219,   219,   220,   220,   220,   221,   221,   221,   221,   221,
-     222,   222,   223,   223,   224,   224,   224,   225,   225,   225,
-     225,   225,   226,   226,   227,   227,   227,   227,   228,   228,
-     229,   229,   229,   229,   230,   230,   230,   230,   231,   231,
-     232,   232,   233,   233,   234,   234,   234,   234,   234,   235,
-     234,   236,   236,   236,   237,   237,   238,   238,   238,   238,
-     238,   238,   238,   238,   239,   239,   239,   239,   239,   239,
-     239,   239,   239,   239,   239,   239,   239,   240,   240,   240,
-     240,   240,   241,   241,   242,   242,   242,   242,   243,   243,
-     243,   243,   244,   244,   244,   244,   245,   245,   245,   246,
-     246,   246,   246,   247,   247,   247,   248,   248,   249,   249,
-     250,   249,   249,   249,   251,   251,   252,   252,   253,   253,
-     253,   253,   254,   254,   254,   254,   255,   255,   256,   256,
-     256,   256,   256,   257,   257,   258,   259,   260,   260,   261,
-     260,   262,   262,   263,   263,   264,   264,   265,   265,   265,
-     265,   265,   266,   266,   266,   266,   267,   267,   268,   268,
-     269,   269,   270,   270,   270,   270,   271,   271,   271,   271,
-     271,   272,   272,   272,   272,   272,   273,   273,   274,   274,
-     275,   275,   276,   276,   276,   277,   277,   277,   278,   278,
-     278,   279,   279,   279,   280,   280,   280,   280,   281,   281,
-     281,   282,   282,   283,   283,   283,   283,   283,   284,   284,
-     285,   285,   286,   286,   286,   286,   286,   287,   287,   287,
-     287,   288,   288,   288,   289,   290,   290,   292,   291,   291,
-     293,   293,   293,   294,   294,   295,   295,   295,   296,   296,
-     296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
-     301,   300,   302,   302,   303,   303,   304,   304,   304,   305,
-     305,   306,   306,   307,   307,   308,   308,   309,   309,   309,
-     310,   309,   309,   311,   311,   311,   312,   312,   312,   312,
-     312,   312,   312,   312,   312,   313,   313,   313,   314,   315,
-     315,   316,   316,   317,   317,   318,   319,   319,   320,   320,
-     320,   321,   321,   321,   321,   322,   322,   322,   322,   323,
-     323,   324,   324,   324,   325,   325,   325,   325,   326,   326,
-     327,   327,   327,   328,   328,   328,   329,   329,   329,   330,
-     330,   330,   331,   331,   331,   332,   332,   332,   333,   333,
-     333,   334,   334,   334,   335,   335,   335,   335,   336,   336,
-     337,   337,   337,   338,   338,   338,   338,   339,   339,   339,
-     340,   340,   340,   340,   341,   341,   341,   342,   342,   342,
-     342,   343,   343,   343,   344,   344,   344,   344,   345,   345,
-     346,   346,   346,   347,   347,   348,   348,   349,   349,   349,
-     350,   350,   350,   350,   350,   351,   351,   351,   351,   352,
-     352,   352,   353,   353,   353,   354,   354,   354,   354,   355,
-     355,   355,   356,   356,   356,   356,   356,   357,   357,   357,
-     357,   358,   358,   358,   359,   359,   359,   360,   360,   360,
-     360,   360,   360,   361,   361,   361,   362,   362,   362,   362,
-     362,   363,   363,   363,   363,   364,   364,   365,   365,   365,
-     366,   366,   367,   367,   367,   367,   367,   367,   368,   368,
-     368,   368,   368,   368,   368,   368,   368,   368,   369,   369,
-     369,   369,   370,   370,   370,   371,   371,   372,   372,   372,
-     372,   372,   372,   373,   373,   373,   373,   373,   373,   374,
-     375,   375,   376,   376,   377,   377
+       0,   137,   138,   139,   140,   140,   140,   140,   140,   141,
+     141,   141,   142,   142,   143,   143,   144,   144,   145,   146,
+     146,   147,   147,   147,   147,   147,   148,   148,   148,   148,
+     148,   148,   148,   148,   148,   148,   148,   148,   149,   149,
+     150,   150,   151,   151,   152,   152,   152,   152,   152,   152,
+     152,   153,   153,   153,   154,   154,   155,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
+     155,   155,   156,   156,   157,   157,   157,   157,   158,   158,
+     159,   159,   159,   159,   160,   160,   160,   161,   161,   161,
+     162,   162,   162,   162,   162,   163,   163,   163,   164,   164,
+     165,   165,   166,   166,   167,   167,   168,   168,   169,   169,
+     169,   170,   171,   171,   172,   172,   173,   173,   173,   173,
+     173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
+     175,   175,   176,   176,   177,   177,   178,   178,   178,   178,
+     178,   178,   178,   178,   178,   179,   180,   180,   181,   181,
+     182,   182,   182,   182,   183,   183,   184,   185,   185,   185,
+     185,   185,   185,   186,   186,   186,   187,   187,   188,   188,
+     189,   189,   190,   191,   191,   192,   192,   193,   193,   194,
+     194,   194,   194,   195,   195,   196,   196,   197,   197,   197,
+     198,   198,   199,   199,   199,   199,   199,   199,   199,   199,
+     199,   199,   200,   200,   200,   201,   201,   201,   201,   201,
+     202,   202,   202,   202,   203,   204,   204,   204,   204,   204,
+     205,   205,   205,   205,   205,   206,   206,   207,   207,   208,
+     208,   209,   209,   210,   210,   210,   211,   211,   212,   212,
+     213,   213,   214,   214,   215,   215,   216,   216,   217,   217,
+     218,   218,   219,   219,   220,   220,   220,   220,   220,   221,
+     221,   221,   222,   222,   222,   223,   223,   223,   223,   223,
+     224,   224,   225,   225,   226,   226,   226,   227,   227,   227,
+     227,   227,   228,   228,   229,   229,   229,   229,   230,   230,
+     231,   231,   231,   231,   232,   232,   232,   232,   233,   233,
+     234,   234,   235,   235,   236,   236,   236,   236,   236,   237,
+     236,   238,   238,   238,   239,   239,   240,   240,   240,   240,
+     240,   240,   240,   240,   241,   241,   241,   241,   241,   241,
+     241,   241,   241,   241,   241,   241,   241,   241,   241,   242,
+     242,   242,   242,   242,   243,   243,   244,   244,   244,   244,
+     245,   245,   245,   245,   246,   246,   246,   246,   247,   247,
+     247,   248,   248,   248,   248,   249,   249,   249,   250,   250,
+     251,   251,   252,   251,   251,   251,   253,   253,   254,   254,
+     255,   255,   255,   255,   256,   256,   256,   256,   257,   257,
+     258,   258,   258,   258,   258,   259,   259,   260,   261,   262,
+     262,   263,   262,   264,   264,   265,   265,   266,   266,   267,
+     267,   267,   267,   267,   268,   268,   268,   268,   269,   269,
+     270,   270,   271,   271,   272,   272,   272,   272,   273,   273,
+     273,   273,   273,   274,   274,   274,   274,   274,   275,   275,
+     276,   276,   277,   277,   278,   278,   278,   279,   279,   279,
+     280,   280,   280,   281,   281,   281,   282,   282,   282,   282,
+     283,   283,   283,   284,   284,   285,   285,   285,   285,   285,
+     286,   286,   287,   287,   288,   288,   288,   288,   288,   289,
+     289,   289,   289,   290,   290,   290,   291,   292,   292,   294,
+     293,   293,   295,   295,   295,   296,   296,   297,   297,   297,
+     298,   298,   298,   298,   299,   299,   299,   300,   300,   301,
+     301,   302,   303,   302,   304,   304,   305,   305,   306,   306,
+     306,   307,   307,   308,   308,   309,   309,   310,   310,   311,
+     311,   311,   312,   311,   311,   313,   313,   313,   314,   314,
+     314,   314,   314,   314,   314,   314,   314,   315,   315,   315,
+     316,   317,   317,   318,   318,   319,   319,   320,   321,   321,
+     322,   322,   322,   323,   323,   323,   323,   324,   324,   324,
+     324,   325,   325,   326,   326,   326,   327,   327,   327,   327,
+     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
+     331,   332,   332,   332,   333,   333,   333,   334,   334,   334,
+     335,   335,   335,   336,   336,   336,   337,   337,   337,   337,
+     338,   338,   339,   339,   339,   340,   340,   340,   340,   341,
+     341,   341,   342,   342,   342,   342,   343,   343,   343,   344,
+     344,   344,   344,   345,   345,   345,   346,   346,   346,   346,
+     347,   347,   348,   348,   348,   349,   349,   350,   350,   351,
+     351,   351,   352,   352,   352,   352,   352,   353,   353,   353,
+     353,   354,   354,   354,   355,   355,   355,   356,   356,   356,
+     356,   357,   357,   357,   358,   358,   358,   358,   358,   359,
+     359,   359,   359,   360,   360,   360,   361,   361,   361,   362,
+     362,   362,   362,   362,   362,   363,   363,   363,   364,   364,
+     364,   364,   364,   365,   365,   365,   365,   366,   366,   367,
+     367,   367,   368,   368,   369,   369,   369,   369,   369,   369,
+     370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
+     371,   371,   371,   371,   372,   372,   372,   373,   373,   374,
+     374,   374,   374,   374,   374,   375,   375,   375,   375,   375,
+     375,   376,   377,   377,   378,   378,   379,   379
 };
 
@@ -1358,47 +1363,47 @@
        5,     1,     2,     3,     1,     2,     1,     1,     1,     1,
        1,     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,     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,
+       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,     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,     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,
-       6,     6,     0,     1,     0,     2
+       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,     6,     6,     0,     1,     0,     2
 };
 
@@ -1410,156 +1415,156 @@
      298,   298,   318,   316,   319,   317,   320,   321,   304,   306,
      305,     0,   307,   332,   324,   329,   327,   328,   326,   325,
-     330,   331,   336,   333,   334,   335,   551,   551,   551,     0,
-       0,     0,   298,   225,   308,   322,   323,     9,   363,     0,
-      10,    16,    17,     0,     2,    72,    73,   569,    11,   298,
-     529,   527,   252,     3,   458,     3,   265,     0,     3,     3,
-       3,   253,     3,     0,     0,     0,   299,   300,   302,   298,
-     311,   314,   344,   290,   337,   342,   291,   352,   292,   359,
-     356,   366,     0,     0,   367,   293,   477,   481,     3,     3,
-       0,     2,   523,   528,   533,   303,     0,     0,   551,   581,
-     551,     2,   592,   593,   594,   298,     0,   735,   736,     0,
-      14,     0,    15,   298,   274,   275,     0,   299,   294,   295,
-     296,   297,   530,   309,   396,   552,   553,   374,   375,    14,
-     449,   450,    13,   445,   448,     0,   507,   502,   493,   449,
-     450,     0,     0,   532,   226,     0,   298,     0,     0,     0,
-       0,     0,     0,     0,     0,   298,   298,     0,   737,   299,
-     586,   598,   741,   734,   732,   739,     0,     0,     0,   259,
-       2,     0,   536,   443,   444,   442,     0,     0,     0,     0,
-     551,     0,   638,   639,     0,     0,   549,   545,   551,   566,
-     551,   551,   547,     2,   546,   551,   605,   551,   551,   608,
-       0,     0,     0,   298,   298,   316,   364,     2,   298,   266,
-     301,   312,   345,   357,   482,     0,     2,     0,   458,   267,
-     299,   338,   353,   360,   478,     0,     2,     0,   315,   339,
-     346,   347,     0,   354,   358,   361,   365,   450,   298,   376,
-     369,   373,     0,   398,   479,   483,     0,     0,     0,     1,
-     298,     2,   534,   580,   582,   298,     2,   745,   299,   748,
-     549,   549,     0,   299,     0,     0,   277,   551,   547,     2,
-     298,     0,     0,   298,   554,     2,   505,     2,   558,     0,
-       0,     0,     0,     0,     0,    21,    69,     4,     8,    19,
-       5,     6,     7,     0,     0,   298,     2,    74,    75,    76,
-      77,    57,    22,    58,    18,    26,    56,    78,   298,     0,
-      80,    84,    87,    90,    95,    98,   100,   102,   104,   106,
-     108,   112,   499,    23,   456,   498,     0,   454,   455,     0,
-     570,   585,   588,   591,   597,   600,   603,     2,   743,   298,
-     746,     2,    72,   298,     3,   430,     0,   438,   299,   298,
-     311,   337,   291,   352,   359,     3,     3,   412,   416,   426,
-     431,   477,   298,   432,   710,   711,   298,   433,   435,     2,
-     587,   599,   733,     2,     2,   254,     2,   463,     0,   461,
-     460,   459,   146,     2,     2,   256,     2,     2,   255,     2,
-     285,     2,   286,     0,   284,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   571,   610,     0,   458,     2,   565,
-     574,   664,   567,   568,   537,   298,     2,   604,   613,   606,
-     607,     0,   280,   298,   298,   343,   299,     0,   299,   298,
-     738,   742,   740,   538,   298,   549,   260,   268,   313,     0,
-       2,   539,   298,   503,   340,   341,   287,   355,   362,     0,
-     298,     0,   752,   403,     0,   480,   504,   257,   258,   524,
-     298,   440,     0,   298,   242,     0,     2,   244,     0,   299,
-       0,   262,     2,   263,   282,     0,     0,     2,   298,   549,
-     298,   490,   492,   491,     0,     0,   754,     0,   298,     0,
-     298,   494,   298,   564,   562,   563,   561,     0,   556,   559,
-       0,     0,   298,    64,   298,    78,    59,   298,    66,   298,
-     298,    62,    63,     2,   132,     0,     0,   452,     0,   451,
-     732,   298,    20,    31,     0,    34,    35,    40,     2,     0,
-      40,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   117,   116,     0,    60,    61,     0,     0,     0,     0,
+     330,   331,   337,   338,   336,   333,   334,   335,   553,   553,
+     553,     0,     0,     0,   298,   225,   308,   322,   323,     9,
+     365,     0,    10,    16,    17,     0,     2,    72,    73,   571,
+      11,   298,   531,   529,   252,     3,   460,     3,   265,     0,
+       3,     3,     3,   253,     3,     0,     0,     0,   299,   300,
+     302,   298,   311,   314,   346,   290,   339,   344,   291,   354,
+     292,   361,   358,   368,     0,     0,   369,   293,   479,   483,
+       3,     3,     0,     2,   525,   530,   535,   303,     0,     0,
+     553,   583,   553,     2,   594,   595,   596,   298,     0,   737,
+     738,     0,    14,     0,    15,   298,   274,   275,     0,   299,
+     294,   295,   296,   297,   532,   309,   398,   554,   555,   376,
+     377,    14,   451,   452,    13,   447,   450,     0,   509,   504,
+     495,   451,   452,     0,     0,   534,   226,     0,   298,     0,
+       0,     0,     0,     0,     0,     0,     0,   298,   298,     0,
+     739,   299,   588,   600,   743,   736,   734,   741,     0,     0,
+       0,   259,     2,     0,   538,   445,   446,   444,     0,     0,
+       0,     0,   553,     0,   640,   641,     0,     0,   551,   547,
+     553,   568,   553,   553,   549,     2,   548,   553,   607,   553,
+     553,   610,     0,     0,     0,   298,   298,   316,   366,     2,
+     298,   266,   301,   312,   347,   359,   484,     0,     2,     0,
+     460,   267,   299,   340,   355,   362,   480,     0,     2,     0,
+     315,   341,   348,   349,     0,   356,   360,   363,   367,   452,
+     298,   378,   371,   375,     0,   400,   481,   485,     0,     0,
+       0,     1,   298,     2,   536,   582,   584,   298,     2,   747,
+     299,   750,   551,   551,     0,   299,     0,     0,   277,   553,
+     549,     2,   298,     0,     0,   298,   556,     2,   507,     2,
+     560,     0,     0,     0,     0,     0,     0,    21,    69,     4,
+       8,    19,     5,     6,     7,     0,     0,   298,     2,    74,
+      75,    76,    77,    57,    22,    58,    18,    26,    56,    78,
+     298,     0,    80,    84,    87,    90,    95,    98,   100,   102,
+     104,   106,   108,   112,   501,    23,   458,   500,     0,   456,
+     457,     0,   572,   587,   590,   593,   599,   602,   605,     2,
+     745,   298,   748,     2,    72,   298,     3,   432,     0,   440,
+     299,   298,   311,   339,   291,   354,   361,     3,     3,   414,
+     418,   428,   433,   479,   298,   434,   712,   713,   298,   435,
+     437,     2,   589,   601,   735,     2,     2,   254,     2,   465,
+       0,   463,   462,   461,   146,     2,     2,   256,     2,     2,
+     255,     2,   285,     2,   286,     0,   284,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   573,   612,     0,   460,
+       2,   567,   576,   666,   569,   570,   539,   298,     2,   606,
+     615,   608,   609,     0,   280,   298,   298,   345,   299,     0,
+     299,   298,   740,   744,   742,   540,   298,   551,   260,   268,
+     313,     0,     2,   541,   298,   505,   342,   343,   287,   357,
+     364,     0,   298,     0,   754,   405,     0,   482,   506,   257,
+     258,   526,   298,   442,     0,   298,   242,     0,     2,   244,
+       0,   299,     0,   262,     2,   263,   282,     0,     0,     2,
+     298,   551,   298,   492,   494,   493,     0,     0,   756,     0,
+     298,     0,   298,   496,   298,   566,   564,   565,   563,     0,
+     558,   561,     0,     0,   298,    64,   298,    78,    59,   298,
+      66,   298,   298,    62,    63,     2,   132,     0,     0,   454,
+       0,   453,   734,   298,    20,    31,     0,    34,    35,    40,
+       2,     0,    40,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   117,   116,     0,    60,    61,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     2,   650,   457,   647,   551,
-     551,   655,   484,   298,     2,   589,   590,     0,   601,   602,
-       0,   744,   747,   298,   298,     0,   712,   299,   716,   707,
-     708,   714,     0,     2,     2,   672,   551,   754,   621,   551,
-     551,   754,   551,   635,   551,   551,   686,   439,   669,   551,
-     551,   677,   684,   298,   434,   299,     0,     0,   298,   722,
-     299,   727,   754,   719,   298,   724,   754,   298,   298,     0,
-       0,    21,     2,     0,    22,     0,   464,   752,     0,     0,
-     470,   246,     0,   298,     0,     0,     0,   549,   573,   577,
-     579,   609,   612,   616,   619,   572,   611,     0,   288,   662,
-       0,   298,   281,     0,     0,     0,     0,   279,     2,     0,
-     264,   540,   298,     0,     0,   298,     2,   368,   388,   377,
-       0,     0,   382,   376,   753,     0,     0,   401,     0,   299,
-       3,   419,     3,   423,   422,   595,     0,   535,   298,    72,
-       3,   298,   438,   299,     3,   432,   433,     2,     0,     0,
-       0,   489,   310,   298,     0,   485,   487,     3,     2,     2,
-       0,   506,     3,     0,   558,   134,     0,     0,   227,     0,
-       0,     0,     0,    41,     0,     0,   298,    24,     0,    25,
-       0,   696,   701,   453,   693,   551,   551,     0,   114,     3,
-       2,    32,     0,    38,     0,     2,    29,     0,   113,    81,
-      82,    83,    85,    86,    88,    89,    93,    94,    91,    92,
-      96,    97,    99,   101,   103,   105,   107,     0,     0,   298,
-       0,     0,     0,   651,   652,   648,   649,   501,   500,   298,
-       0,   718,   298,   723,   299,   298,   666,   709,   665,     2,
-     298,     0,     0,     0,     0,     0,     0,     0,     0,   687,
-       0,   673,   624,   640,   674,     2,   620,   627,   436,   622,
-     623,   437,     2,   634,   643,   636,   637,   670,   671,   685,
-     713,   717,   715,   754,   272,     2,   749,     2,   427,   721,
-     726,   428,     3,   406,     3,     3,     3,   458,     0,     0,
-       2,   472,   469,   753,     0,   465,     2,   468,   471,     0,
-     298,   247,   269,     3,   276,   278,     0,   458,     2,   575,
-     576,     2,   614,   615,     0,   663,   541,     3,   349,   348,
-     351,   350,   298,   542,     0,   543,   376,     0,     0,   298,
-       0,     0,   696,   386,   389,   393,   551,   393,   392,   385,
-     378,   551,   380,   383,   298,   403,   397,   111,   404,   752,
-       0,     0,   441,   245,     0,     0,     3,     2,   672,   434,
-       0,   531,     0,   754,   755,   493,     0,   298,   298,   298,
-       0,   555,   557,   135,     0,     0,   220,     0,     0,     0,
-     228,   229,    65,     0,    67,    70,    71,     0,   133,     0,
-       0,     0,   697,   698,   694,   695,   463,    79,   115,   130,
-       3,   114,     0,    28,    40,     3,     0,    37,   110,     0,
-       3,   654,   658,   661,   653,     3,   596,   720,   725,     2,
-      72,   298,     3,     3,   299,     0,     3,   626,   630,   633,
-     642,   676,   680,   683,   298,     3,   625,   641,   675,   298,
-     298,   429,   298,   298,     0,     0,     0,     0,   261,   111,
-       0,     3,     3,     0,   466,     0,   462,     0,     0,   250,
-     298,     0,     0,   134,     0,     0,     0,     0,     0,   134,
-       0,     0,   114,   114,    21,     0,     0,     3,   136,   137,
-       2,   148,   138,   139,   140,   141,   142,   143,   150,   152,
-       0,     0,     0,   289,   298,   298,   551,     0,   544,   298,
-     379,   381,     0,   395,   697,   390,   394,   391,   384,   388,
-     371,   402,     0,   583,     2,   668,   667,     0,   673,     2,
-     486,   488,   508,     3,   516,   517,     0,     2,   512,     3,
-       3,     0,     0,   560,   227,     0,     0,     0,   227,     0,
-       0,   700,   704,   706,   699,   752,   114,     0,     3,    54,
-       0,    54,    54,     3,    42,    44,    39,     0,     3,   109,
-       0,     2,   656,   657,     0,   298,     0,     0,     0,     3,
-     642,     0,     2,   628,   629,     2,   644,     2,   678,   679,
-       0,     0,    72,     0,     3,     3,     3,     3,   414,   413,
-     417,   751,     2,     2,   750,     0,     0,     0,     0,     3,
-     467,     3,     0,   248,   151,     3,   299,   298,     0,     0,
-       0,     0,     2,     0,   196,     0,   194,     0,     0,     0,
-       0,     0,     0,     0,   551,     0,   156,   153,   298,     0,
-       0,   271,   283,     3,     3,   550,   617,   372,   387,   400,
-     298,   270,   298,     0,   519,   496,   298,     0,     0,   495,
-     510,     0,     0,     0,   221,     0,   230,    68,     2,   702,
-     703,     0,   131,   128,     0,    51,     2,    45,    52,    53,
-       0,     0,     0,     0,    27,     0,   659,   298,   584,   728,
-     729,   730,     0,   681,   298,   298,   298,     3,     3,     0,
-     689,     0,     0,     0,     0,   298,   298,     3,   548,   473,
-     474,     0,   251,   299,     0,     0,     0,     0,   298,   197,
-     195,   192,     0,   198,     0,     0,     0,     0,   202,   205,
-     203,   199,     0,   200,   134,    40,   149,   147,   249,     0,
-       0,   421,   425,   424,     0,   513,     2,   514,     2,   515,
-     509,   298,   233,     0,   231,     0,   233,   298,    36,   129,
-      55,     0,    43,    33,     2,    49,     2,    47,    30,     3,
-     731,     3,     3,     3,     0,     0,   688,   690,   631,   645,
-     273,     2,   411,     3,   410,     0,   476,   134,     0,     0,
-     134,     3,     0,   134,   193,     0,     2,     2,   214,   204,
-       0,     0,     0,   145,     0,   578,   618,     2,     0,     0,
-       2,   234,     0,     0,   222,     0,     3,     3,     0,     0,
-       0,     0,     0,     0,   691,   692,   298,     0,   475,   157,
-       0,     0,     2,   170,   134,   159,     0,   187,     0,   134,
-       0,     2,   161,     0,     2,     0,     2,     2,     2,   201,
-      37,   298,   518,   520,   511,     0,     0,     0,     0,     0,
-       0,     3,     3,   660,   632,   646,   682,   415,   134,   163,
-     166,     0,   165,   169,     3,   172,   171,     0,   134,   189,
-     134,     3,     0,   298,     0,   298,     0,     2,     0,     2,
-     144,     2,   235,   236,     0,   232,   223,   705,    46,     0,
-       0,   158,     0,     0,   168,   238,   173,     2,   240,   188,
-       0,   191,   177,   206,     3,   215,   219,   208,     3,     0,
-     298,     0,   298,     0,     0,     0,    50,    48,   164,   167,
-     134,     0,   174,   298,   134,   134,     0,   178,     0,     0,
-     696,   216,   217,   218,     0,   207,     3,   209,     3,   298,
-     224,   237,   154,   175,   160,   134,   241,   190,   185,   183,
-     179,   162,   134,     0,   697,     0,     0,     0,     0,   155,
-     176,   186,   180,   184,   183,   181,     3,     3,     0,     0,
-     497,   182,   210,   212,     3,     3,   211,   213
+       0,     0,     0,     0,     0,     0,     0,     2,   652,   459,
+     649,   553,   553,   657,   486,   298,     2,   591,   592,     0,
+     603,   604,     0,   746,   749,   298,   298,     0,   714,   299,
+     718,   709,   710,   716,     0,     2,     2,   674,   553,   756,
+     623,   553,   553,   756,   553,   637,   553,   553,   688,   441,
+     671,   553,   553,   679,   686,   298,   436,   299,     0,     0,
+     298,   724,   299,   729,   756,   721,   298,   726,   756,   298,
+     298,     0,     0,    21,     2,     0,    22,     0,   466,   754,
+       0,     0,   472,   246,     0,   298,     0,     0,     0,   551,
+     575,   579,   581,   611,   614,   618,   621,   574,   613,     0,
+     288,   664,     0,   298,   281,     0,     0,     0,     0,   279,
+       2,     0,   264,   542,   298,     0,     0,   298,     2,   370,
+     390,   379,     0,     0,   384,   378,   755,     0,     0,   403,
+       0,   299,     3,   421,     3,   425,   424,   597,     0,   537,
+     298,    72,     3,   298,   440,   299,     3,   434,   435,     2,
+       0,     0,     0,   491,   310,   298,     0,   487,   489,     3,
+       2,     2,     0,   508,     3,     0,   560,   134,     0,     0,
+     227,     0,     0,     0,     0,    41,     0,     0,   298,    24,
+       0,    25,     0,   698,   703,   455,   695,   553,   553,     0,
+     114,     3,     2,    32,     0,    38,     0,     2,    29,     0,
+     113,    81,    82,    83,    85,    86,    88,    89,    93,    94,
+      91,    92,    96,    97,    99,   101,   103,   105,   107,     0,
+       0,   298,     0,     0,     0,   653,   654,   650,   651,   503,
+     502,   298,     0,   720,   298,   725,   299,   298,   668,   711,
+     667,     2,   298,     0,     0,     0,     0,     0,     0,     0,
+       0,   689,     0,   675,   626,   642,   676,     2,   622,   629,
+     438,   624,   625,   439,     2,   636,   645,   638,   639,   672,
+     673,   687,   715,   719,   717,   756,   272,     2,   751,     2,
+     429,   723,   728,   430,     3,   408,     3,     3,     3,   460,
+       0,     0,     2,   474,   471,   755,     0,   467,     2,   470,
+     473,     0,   298,   247,   269,     3,   276,   278,     0,   460,
+       2,   577,   578,     2,   616,   617,     0,   665,   543,     3,
+     351,   350,   353,   352,   298,   544,     0,   545,   378,     0,
+       0,   298,     0,     0,   698,   388,   391,   395,   553,   395,
+     394,   387,   380,   553,   382,   385,   298,   405,   399,   111,
+     406,   754,     0,     0,   443,   245,     0,     0,     3,     2,
+     674,   436,     0,   533,     0,   756,   757,   495,     0,   298,
+     298,   298,     0,   557,   559,   135,     0,     0,   220,     0,
+       0,     0,   228,   229,    65,     0,    67,    70,    71,     0,
+     133,     0,     0,     0,   699,   700,   696,   697,   465,    79,
+     115,   130,     3,   114,     0,    28,    40,     3,     0,    37,
+     110,     0,     3,   656,   660,   663,   655,     3,   598,   722,
+     727,     2,    72,   298,     3,     3,   299,     0,     3,   628,
+     632,   635,   644,   678,   682,   685,   298,     3,   627,   643,
+     677,   298,   298,   431,   298,   298,     0,     0,     0,     0,
+     261,   111,     0,     3,     3,     0,   468,     0,   464,     0,
+       0,   250,   298,     0,     0,   134,     0,     0,     0,     0,
+       0,   134,     0,     0,   114,   114,    21,     0,     0,     3,
+     136,   137,     2,   148,   138,   139,   140,   141,   142,   143,
+     150,   152,     0,     0,     0,   289,   298,   298,   553,     0,
+     546,   298,   381,   383,     0,   397,   699,   392,   396,   393,
+     386,   390,   373,   404,     0,   585,     2,   670,   669,     0,
+     675,     2,   488,   490,   510,     3,   518,   519,     0,     2,
+     514,     3,     3,     0,     0,   562,   227,     0,     0,     0,
+     227,     0,     0,   702,   706,   708,   701,   754,   114,     0,
+       3,    54,     0,    54,    54,     3,    42,    44,    39,     0,
+       3,   109,     0,     2,   658,   659,     0,   298,     0,     0,
+       0,     3,   644,     0,     2,   630,   631,     2,   646,     2,
+     680,   681,     0,     0,    72,     0,     3,     3,     3,     3,
+     416,   415,   419,   753,     2,     2,   752,     0,     0,     0,
+       0,     3,   469,     3,     0,   248,   151,     3,   299,   298,
+       0,     0,     0,     0,     2,     0,   196,     0,   194,     0,
+       0,     0,     0,     0,     0,     0,   553,     0,   156,   153,
+     298,     0,     0,   271,   283,     3,     3,   552,   619,   374,
+     389,   402,   298,   270,   298,     0,   521,   498,   298,     0,
+       0,   497,   512,     0,     0,     0,   221,     0,   230,    68,
+       2,   704,   705,     0,   131,   128,     0,    51,     2,    45,
+      52,    53,     0,     0,     0,     0,    27,     0,   661,   298,
+     586,   730,   731,   732,     0,   683,   298,   298,   298,     3,
+       3,     0,   691,     0,     0,     0,     0,   298,   298,     3,
+     550,   475,   476,     0,   251,   299,     0,     0,     0,     0,
+     298,   197,   195,   192,     0,   198,     0,     0,     0,     0,
+     202,   205,   203,   199,     0,   200,   134,    40,   149,   147,
+     249,     0,     0,   423,   427,   426,     0,   515,     2,   516,
+       2,   517,   511,   298,   233,     0,   231,     0,   233,   298,
+      36,   129,    55,     0,    43,    33,     2,    49,     2,    47,
+      30,     3,   733,     3,     3,     3,     0,     0,   690,   692,
+     633,   647,   273,     2,   413,     3,   412,     0,   478,   134,
+       0,     0,   134,     3,     0,   134,   193,     0,     2,     2,
+     214,   204,     0,     0,     0,   145,     0,   580,   620,     2,
+       0,     0,     2,   234,     0,     0,   222,     0,     3,     3,
+       0,     0,     0,     0,     0,     0,   693,   694,   298,     0,
+     477,   157,     0,     0,     2,   170,   134,   159,     0,   187,
+       0,   134,     0,     2,   161,     0,     2,     0,     2,     2,
+       2,   201,    37,   298,   520,   522,   513,     0,     0,     0,
+       0,     0,     0,     3,     3,   662,   634,   648,   684,   417,
+     134,   163,   166,     0,   165,   169,     3,   172,   171,     0,
+     134,   189,   134,     3,     0,   298,     0,   298,     0,     2,
+       0,     2,   144,     2,   235,   236,     0,   232,   223,   707,
+      46,     0,     0,   158,     0,     0,   168,   238,   173,     2,
+     240,   188,     0,   191,   177,   206,     3,   215,   219,   208,
+       3,     0,   298,     0,   298,     0,     0,     0,    50,    48,
+     164,   167,   134,     0,   174,   298,   134,   134,     0,   178,
+       0,     0,   698,   216,   217,   218,     0,   207,     3,   209,
+       3,   298,   224,   237,   154,   175,   160,   134,   241,   190,
+     185,   183,   179,   162,   134,     0,   699,     0,     0,     0,
+       0,   155,   176,   186,   180,   184,   183,   181,     3,     3,
+       0,     0,   499,   182,   210,   212,     3,     3,   211,   213
 };
 
@@ -1567,190 +1572,190 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   800,   464,   301,    47,   133,   134,   302,   303,   304,
-     305,   306,   752,   753,  1113,  1114,  1115,  1225,   307,   378,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,  1010,   514,   959,   543,   323,   960,   933,
-    1036,  1502,  1038,  1039,  1040,  1041,  1503,  1042,  1043,  1420,
-    1421,  1383,  1384,  1385,  1481,  1482,  1486,  1487,  1522,  1523,
-    1044,  1342,  1045,  1046,  1278,  1279,  1280,  1464,  1047,   145,
-     939,   940,   941,  1362,  1444,  1456,  1457,   465,   466,   860,
-     861,  1018,    51,    52,    53,    54,    55,   345,   157,    58,
-      59,    60,    61,    62,   347,    64,    65,   263,    67,    68,
-     273,   349,   350,    71,    72,    73,   118,    75,   203,   352,
-     119,    78,   120,    80,    81,   451,    82,   450,   679,   680,
-     681,   893,  1065,   894,    83,    84,   454,   452,   687,   842,
-     843,   355,   356,   690,   691,   692,   357,   358,   359,   360,
-     462,   176,   135,   136,   518,   325,   169,   636,   637,   638,
-     639,   640,    85,   121,    87,   485,   486,   925,   487,   276,
-     491,   326,    88,   137,   138,    89,  1301,  1087,  1088,  1089,
-    1090,    90,    91,   708,    92,   272,    93,    94,   186,  1012,
-     670,   409,   125,    95,   497,   498,   499,   187,   267,   189,
-     190,   191,   268,    98,    99,   100,   101,   102,   103,   104,
-     194,   195,   196,   197,   198,   812,   598,   599,   600,   601,
-     199,   603,   604,   605,   567,   568,   569,   570,   742,   105,
-     607,   608,   609,   610,   611,   612,   953,   744,   745,   746,
-     588,   363,   364,   365,   366,   327,   163,   107,   108,   109,
-     368,   685,   715
+      -1,   802,   466,   303,    49,   135,   136,   304,   305,   306,
+     307,   308,   754,   755,  1115,  1116,  1117,  1227,   309,   380,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,  1012,   516,   961,   545,   325,   962,   935,
+    1038,  1504,  1040,  1041,  1042,  1043,  1505,  1044,  1045,  1422,
+    1423,  1385,  1386,  1387,  1483,  1484,  1488,  1489,  1524,  1525,
+    1046,  1344,  1047,  1048,  1280,  1281,  1282,  1466,  1049,   147,
+     941,   942,   943,  1364,  1446,  1458,  1459,   467,   468,   862,
+     863,  1020,    53,    54,    55,    56,    57,   347,   159,    60,
+      61,    62,    63,    64,   349,    66,    67,   265,    69,    70,
+     275,   351,   352,    73,    74,    75,   120,    77,   205,   354,
+     121,    80,   122,    82,    83,   453,    84,   452,   681,   682,
+     683,   895,  1067,   896,    85,    86,   456,   454,   689,   844,
+     845,   357,   358,   692,   693,   694,   359,   360,   361,   362,
+     464,   178,   137,   138,   520,   327,   171,   638,   639,   640,
+     641,   642,    87,   123,    89,   487,   488,   927,   489,   278,
+     493,   328,    90,   139,   140,    91,  1303,  1089,  1090,  1091,
+    1092,    92,    93,   710,    94,   274,    95,    96,   188,  1014,
+     672,   411,   127,    97,   499,   500,   501,   189,   269,   191,
+     192,   193,   270,   100,   101,   102,   103,   104,   105,   106,
+     196,   197,   198,   199,   200,   814,   600,   601,   602,   603,
+     201,   605,   606,   607,   569,   570,   571,   572,   744,   107,
+     609,   610,   611,   612,   613,   614,   955,   746,   747,   748,
+     590,   365,   366,   367,   368,   329,   165,   109,   110,   111,
+     370,   687,   717
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1333
+#define YYPACT_NINF -1267
 static const yytype_int16 yypact[] =
 {
-    6694,  7975, -1333,   -14, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333,    26, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333, -1333, -1333, -1333,   109,   109,   109,   759,
-     860,    66,  6930,   241, -1333, -1333, -1333, -1333, -1333,   199,
-   -1333, -1333, -1333,  1264,   207, -1333, -1333, -1333, -1333,  8320,
-   -1333, -1333, -1333, -1333,     3,   216, -1333,  1096, -1333, -1333,
-   -1333, -1333,   265,  1996,   389,    54,  5394, -1333, -1333,  8320,
-     780, -1333, -1333,   554,   416,  3688,   749,   995,   554,  1130,
-   -1333, -1333,   768,   826, -1333,   554,  1144, -1333,   313, -1333,
-     443,   462, -1333, -1333, -1333, -1333,   358,   216,   109, -1333,
-     109, -1333, -1333, -1333, -1333,  8461,  1096, -1333, -1333,  1096,
-   -1333,   414, -1333,  8545, -1333, -1333,  2376,  8575, -1333,  1138,
-    1138,  1138, -1333, -1333, -1333,   109, -1333, -1333, -1333,   370,
-     444,   488, -1333, -1333, -1333,   518, -1333, -1333, -1333, -1333,
-   -1333,   525,   576, -1333, -1333,    50,  8059,  1902,   238,   538,
-     578,   604,   613,   618,   635,  8659,  6327,   649, -1333,  8431,
-   -1333, -1333, -1333, -1333,   661, -1333,   -10,  9338,  9338, -1333,
-     662,   181, -1333, -1333, -1333, -1333,   680,   348,   393,   400,
-     109,   685, -1333, -1333,  1996,  2098,   801, -1333,    51, -1333,
-     109,   109,   216, -1333, -1333,   180, -1333,   109,   109, -1333,
-    2242,   712,   751,  1138,  6116, -1333, -1333, -1333,  8320, -1333,
-   -1333,   554, -1333, -1333, -1333,   216, -1333,  1096,     3, -1333,
-    7196, -1333,  1138,  1138,  1138,   216, -1333,   759, -1333,  4572,
-   -1333, -1333,   739,  1138, -1333,  1138, -1333,   199,  8059, -1333,
-     775, -1333,   860,   777,  1138, -1333,   759,   771,   804, -1333,
-    6930,   594, -1333, -1333, -1333,  4461, -1333, -1333,  5315, -1333,
-     801,   101,  9515,  8575,  2376,  2242, -1333,   187, -1333, -1333,
-    8545,  1096,   786, 10191, -1333, -1333,   434, -1333,  9931,   803,
-     866,  9574,   842,  9515,  9633, -1333,   845, -1333, -1333, -1333,
-   -1333, -1333, -1333,  9692,  9692,  7829,   207, -1333, -1333, -1333,
-   -1333, -1333, -1333, -1333,   885, -1333,  1691,  2462,  8059,  9515,
-   -1333,   558,   367,   614,   669,   742,   852,   846,   858,   883,
-     -13, -1333, -1333, -1333,   737, -1333,   269, -1333, -1333,  1902,
-   -1333, -1333,   465,   880, -1333,   586,   880, -1333, -1333,  8461,
-   -1333,   890,   897,  8174, -1333, -1333,  1514,  1088,  7619,  6116,
-     554, -1333,   554,  1138,  1138, -1333, -1333, -1333, -1333, -1333,
-   -1333,  1138,  8461,  1096, -1333, -1333,  8659,  1872, -1333, -1333,
-   -1333, -1333, -1333, -1333, -1333, -1333, -1333,  9279,  9515, -1333,
-   -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333,  2376, -1333,   105,   903,   926,   928,   796,
-     931,   941,   943,  2098, -1333, -1333,   952,     3,   954, -1333,
-   -1333,   961, -1333, -1333, -1333,  4461, -1333, -1333, -1333, -1333,
-   -1333,  2242, -1333,  8059,  8059, -1333,  1138,  2376,  6237,  7691,
-   -1333, -1333, -1333, -1333,  4461,   101, -1333, -1333,   554,   216,
-   -1333, -1333,  4461, -1333,  5995, -1333, -1333,  1138,  1138,   394,
-    7535,   966,   959,   955,   974,  1138, -1333, -1333, -1333, -1333,
-    5606, -1333,   424,  5852, -1333,   216,   977, -1333,  2376, 10015,
-    9751, -1333, -1333, -1333, -1333,   884,  2242, -1333,  7691,   801,
-    6812, -1333, -1333, -1333,  1296,   456,   986,   860, 10191,  1468,
-    8545, -1333, 10191, -1333, -1333, -1333, -1333,   473, -1333,   988,
-     866,   242,  7829, -1333,  8689, -1333, -1333,  7829, -1333,  7944,
-    7829, -1333, -1333,   207, -1333,   485,  1009,   881,  1014, -1333,
-   -1333,  6085, -1333, -1333,   360, -1333, -1333,  9515, -1333,   362,
-    9515, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333,  9515, -1333, -1333,  9515,  9515,  9515,  9515,
-    9515,  9515,  9515,  9515,  9515,  9515,  9515,  9515,  9515,  9515,
-    9515,  9515,  9515,  9515,  3091,   737,  1207, -1333, -1333,   109,
-     109, -1333, -1333,  8059, -1333, -1333,   961,   594, -1333,   961,
-    9810, -1333, -1333,  8659,  6085,   993, -1333,  8575, -1333, -1333,
-     661, -1333,  1039,   587,  1045,  2359,   209,   986, -1333,   109,
-     109,   986,   212, -1333,   109,   109,   961, -1333, -1333,   109,
-     109, -1333,   880,  8773,  1096, 10160,   415,   496,  8773, -1333,
-    5315, -1333,   986, -1333,  8461, -1333,   126,  7313,  7313,  1096,
-    9397,  1029, -1333,  1354,  1033,  1043, -1333,  1060,  9338,   407,
-   -1333,  1151,  1096,  7313,   594,  2376,   594,   801,   631,   880,
-   -1333, -1333,   692,   880, -1333, -1333, -1333,   866, -1333,   880,
-     216,  5606, -1333,   494,  1073,   520,  1074, -1333,   890,   216,
-   -1333, -1333,  4461,   216,  1071,  8689,   207, -1333,   972, -1333,
-     401,   438,   860, -1333,   860,  1075,  9515, -1333,   860, 10160,
-   -1333, -1333,  1079, -1333, -1333, -1333,   594, -1333, 10088,   897,
-   -1333,  7313,   960,  7619, -1333, -1333,   661,  1076,  1081,  1296,
-    2130, -1333, -1333, 10191,  9515, -1333, -1333,  1085, -1333, -1333,
-    1093, -1333,  1085,  1098,  9931,  9515,  1097,  1094,    38,  1119,
-    1115,  1124,  1125, -1333,  1126,  1127,  6085, -1333,  9515, -1333,
-     881,  1631, -1333, -1333, -1333,   109,   109,  9456,  9515,  1132,
-   -1333, -1333,   577, -1333,  9515, -1333, -1333,   843, -1333, -1333,
-   -1333, -1333,   558,   558,   367,   367,   614,   614,   614,   614,
-     669,   669,   742,   852,   846,   858,   883,  9515,   296,  5606,
-    1131,  1133,  1136,  1207, -1333, -1333, -1333, -1333, -1333,  5606,
-     616, -1333,  8461, -1333,  6448,  8289, -1333, -1333, -1333,   587,
-    5606,   990,  1140,  1141,  1142,  1145,  1146,  1147,  1149, -1333,
-    2845,  2359, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,   961,
-   -1333, -1333, -1333,   986, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333, -1333,  1150,  1152, -1333,     3,  1132,  9397,
-   -1333, -1333, -1333,  9279,  1154, -1333, -1333, -1333, -1333,   860,
-    5689,  1243, -1333, -1333, -1333, -1333,  1143,     3, -1333, -1333,
-     961, -1333, -1333,   961,    14,   961, -1333, -1333, -1333, -1333,
-   -1333, -1333,  6327, -1333,   216, -1333, -1333,   452,   487,  6327,
-    1790,  9515,  2983, -1333, -1333,  1153,    20,  1153, -1333,   860,
-   -1333,   109, -1333, -1333,  8090,   955, -1333, -1333, -1333,   959,
-    1161,  1157, -1333, -1333,  1163,  1164, -1333,   960,  1700, -1333,
-     539, -1333,  2130,   986, -1333, -1333,  1167, 10191,  8545,  8059,
-    1169, -1333, -1333,  1165,  1170,  1171, -1333,  9515,  1173,   310,
-    1177, -1333,  1180,   594,  1180, -1333, -1333,  1180, -1333,  1195,
-    1197,  1201,  1631, -1333, -1333, -1333,  9279, -1333, -1333, -1333,
-    1196,  9515,   730, -1333,  9515, -1333,   730, -1333, -1333,  9515,
-   -1333,   748,   880, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-     897,  8174, -1333, -1333,  6569,  1203, -1333,   758,   880, -1333,
-     763,   830,   880, -1333,  1138,  4995, -1333, -1333, -1333,  5606,
-    5606, -1333,  7691,  7691,  1205,  1210,  1223,  1209, -1333,   551,
-     162,  1132, -1333,   730, -1333,  9338, -1333,  9515,   513, -1333,
-    5964,  1214,  1227,  9220,  1234,  1235,    42,   160,   163,  9515,
-    1237,   216,  9515,  9515,  1226,   304,  1229, -1333, -1333, -1333,
-    1244, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-     860,  1248,  9515, -1333,  5606,  5606,   109,  1254, -1333,  8205,
-   -1333, -1333,   773, -1333,  2983, -1333, -1333, -1333, -1333,   972,
-   -1333, -1333,  1250, -1333, -1333, -1333, -1333,  1257,  1700, -1333,
-   -1333,  1241, -1333,  1085, -1333, -1333,  2376,  1256, -1333, -1333,
-   -1333,   617,  1258, -1333,    38,  1266,  9515,  1245,    38,    38,
-    1274,   878,   880, -1333, -1333,  1060,  9515,  1276,  1196, -1333,
-     841, -1333, -1333,  1270, -1333,   215, -1333,  1279,  1270, -1333,
-    1282, -1333, -1333,   961,  1283,  6206,  1284,  1285,  1286, -1333,
-   -1333,  1290, -1333, -1333,   961, -1333, -1333, -1333, -1333,   961,
-    9515,  9515,   897,  1291, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333, -1333, -1333,  9515,  9515,  1295,  1297,  1270,
-   -1333, -1333,   860, -1333, -1333, -1333,  7124,  8545,  9515,  9515,
-    1350,  9515, -1333,  1278, -1333,  1280, -1333,  1288,  9515,  1293,
-    9515,  1056,  1298,    72,   109,  2402, -1333, -1333,  5689,  1287,
-     521, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-    9036, -1333,  7691,  1305, -1333, -1333,  8545,   522,   524, -1333,
-    1308,  1302,   866,  1318, -1333,   325, -1333, -1333, -1333, -1333,
-     961,  1324, -1333, -1333,  1328,  1363, -1333, -1333,  1363,  1363,
-     730,  1333,  1026,  1220, -1333,  1339, -1333,  5606, -1333, -1333,
-   -1333, -1333,  1340, -1333,  5606,  5606,  5606, -1333, -1333,  1341,
-   -1333,  1342,  1345,  1347,   600,  7385,  7502, -1333, -1333, -1333,
-   -1333,  1352, -1333,  7763,   633,   634,  1353,   658,  5821, -1333,
-   -1333, -1333,   528, -1333,   659,  1362,  1364,   216,  1401,   965,
-   -1333, -1333,  9515, -1333,  9220,  9515, -1333, -1333, -1333,  1365,
-    1367, -1333, -1333, -1333,  1358, -1333, -1333, -1333, -1333, -1333,
-   -1333,  8545,   866,  1373, -1333,  1368,   866,  5606, -1333, -1333,
-   -1333,   730, -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333, -1333,  1384,  1391, -1333, -1333, -1333, -1333,
-   -1333, -1333, -1333,  1404, -1333,  1408, -1333,  9220,   198,  9515,
-    9220, -1333,  1406,  9515, -1333,   323,  1378,  1427, -1333, -1333,
-    1416,  1417,  1395, -1333,   910, -1333, -1333, -1333,  1096,  2376,
-    1413, -1333,   326,  9515, -1333,   663, -1333,  1270,   730,   730,
-    1420,  1424,  1425,  1434, -1333, -1333,  7691,  1429, -1333,  1489,
-    9515,  1426, -1333, -1333,  9130, -1333,   689, -1333,  1414,  9220,
-    1418, -1333, -1333,  1445, -1333,  1449, -1333,  1467,  1469, -1333,
-    1435,  8545, -1333, -1333, -1333,   866,   594,  1456,  1436,  1460,
-    1466,  1270,  1270, -1333, -1333, -1333, -1333, -1333,  9220,   194,
-   -1333,   376, -1333, -1333,  7048, -1333, -1333,  1447,  9515, -1333,
-    9515,  7048,   216,  8689,   216,  8689,  1470, -1333,  1471, -1333,
-   -1333,  1477, -1333, -1333,   720, -1333, -1333, -1333, -1333,  1473,
-    1481, -1333,  9515,  9515, -1333, -1333,   991,    94, -1333, -1333,
-    1462, -1333,   991, -1333, -1333,  2158,   594, -1333, -1333,   216,
-    8689,   216,  8689,  1487,  1463,   594, -1333, -1333, -1333, -1333,
-    9130,  1484,   991,  5522,  9515,  9040,  1485,   991,  1493,  2158,
-    3005, -1333, -1333, -1333,  1494, -1333, -1333, -1333, -1333,  8059,
-   -1333, -1333, -1333,  8905, -1333,  9130, -1333, -1333,  1474,  8815,
-   -1333, -1333,  9040,   216,  3005,   216,  1498,  1500,   729, -1333,
-    8905, -1333, -1333, -1333,  8815, -1333, -1333, -1333,   216,   216,
-   -1333, -1333, -1333, -1333, -1333, -1333, -1333, -1333
+    5235,  8510, -1267,   -14, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267,   -27, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,    84,    84,
+      84,  1541,   905,   123,  6677,   163, -1267, -1267, -1267, -1267,
+   -1267,   157, -1267, -1267, -1267,  1043,    81, -1267, -1267, -1267,
+   -1267,  4048, -1267, -1267, -1267, -1267,   225,   198, -1267,  1956,
+   -1267, -1267, -1267, -1267,   217,  1716,   371,    37,  6797, -1267,
+   -1267,  4048,   829, -1267, -1267,  1101,   380,  3172,   661,   839,
+    1101,   977, -1267, -1267,  1289,   340, -1267,  1101,  1140, -1267,
+     273, -1267,   439,   447, -1267, -1267, -1267, -1267,   337,   198,
+      84, -1267,    84, -1267, -1267, -1267, -1267,  7269,  1956, -1267,
+   -1267,  1956, -1267,   325, -1267,  7582, -1267, -1267,  2178,  8744,
+   -1267,   675,   675,   675, -1267, -1267, -1267,    84, -1267, -1267,
+   -1267,   360,   395,   436, -1267, -1267, -1267,   466, -1267, -1267,
+   -1267, -1267, -1267,   503,   515, -1267, -1267,   272,  8119,  1675,
+     307,   370,   377,   524,   565,   568,   580,  8828,  6307,   594,
+   -1267,  4677, -1267, -1267, -1267, -1267,   613, -1267,   271,  9583,
+    9583, -1267,   610,   339, -1267, -1267, -1267, -1267,   618,   379,
+     421,   468,    84,   603, -1267, -1267,  1716,  2591,   687, -1267,
+      90, -1267,    84,    84,   198, -1267, -1267,    91, -1267,    84,
+      84, -1267,  2973,   652,   657,   675,  6831, -1267, -1267, -1267,
+    4048, -1267, -1267,  1101, -1267, -1267, -1267,   198, -1267,  1956,
+     225, -1267,  7235, -1267,   675,   675,   675,   198, -1267,  1541,
+   -1267,  3826, -1267, -1267,   642,   675, -1267,   675, -1267,   157,
+    8119, -1267,   665, -1267,   905,   685,   675, -1267,  1541,   689,
+     710, -1267,  6677,   291, -1267, -1267, -1267,  8477, -1267, -1267,
+    4354, -1267,   687,     8,  9760,  8744,  2178,  2973, -1267,   101,
+   -1267, -1267,  7582,  1956,   740, 10515, -1267, -1267,   378, -1267,
+   10178,   730,   705,  9819,   773,  9760,  9878, -1267,   794, -1267,
+   -1267, -1267, -1267, -1267, -1267,  9937,  9937,  7885,    81, -1267,
+   -1267, -1267, -1267, -1267, -1267, -1267,   834, -1267,  1184,  2546,
+    8119,  9760, -1267,   525,   415,   844,   338,   853,   823,   831,
+     841,   886,    56, -1267, -1267, -1267,   518, -1267,   528, -1267,
+   -1267,  1675, -1267, -1267,   456,   900, -1267,   490,   900, -1267,
+   -1267,  7269, -1267,   940,   946,  8236, -1267, -1267,   536,  1525,
+    7667,  6831,  1101, -1267,  1101,   675,   675, -1267, -1267, -1267,
+   -1267, -1267, -1267,   675,  7269,  1956, -1267, -1267,  8828,  1786,
+   -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,  9524,
+    9760, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267,  2178, -1267,   446,   945,   961,
+     968,   800,   973,   976,   981,  2591, -1267, -1267,   939,   225,
+     982, -1267, -1267,   987, -1267, -1267, -1267,  8477, -1267, -1267,
+   -1267, -1267, -1267,  2973, -1267,  8119,  8119, -1267,   675,  2178,
+   10547,  7742, -1267, -1267, -1267, -1267,  8477,     8, -1267, -1267,
+    1101,   198, -1267, -1267,  8477, -1267,  5404, -1267, -1267,   675,
+     675,   579,  8594,   994,   993,   983,   998,   675, -1267, -1267,
+   -1267, -1267,  9019, -1267,   616, 10212, -1267,   198,  1004, -1267,
+    2178, 10298,  9996, -1267, -1267, -1267, -1267,   843,  2973, -1267,
+    7742,   687,  5806, -1267, -1267, -1267,  1900,   626,   990,   905,
+   10515,  1647,  7582, -1267, 10515, -1267, -1267, -1267, -1267,   627,
+   -1267,  1013,   705,   154,  7885, -1267,  8860, -1267, -1267,  7885,
+   -1267,  8002,  7885, -1267, -1267,    81, -1267,   640,  1015,   658,
+    1021, -1267, -1267,  6061, -1267, -1267,   315, -1267, -1267,  9760,
+   -1267,   368,  9760, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267,  9760, -1267, -1267,  9760,  9760,
+    9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,
+    9760,  9760,  9760,  9760,  9760,  9760,  3432,   518,  1212, -1267,
+   -1267,    84,    84, -1267, -1267,  8119, -1267, -1267,   987,   291,
+   -1267,   987, 10055, -1267, -1267,  8828,  6061,  1020, -1267,  8744,
+   -1267, -1267,   613, -1267,  1023,  1793,  1025,  1950,   136,   990,
+   -1267,    84,    84,   990,   407, -1267,    84,    84,   987, -1267,
+   -1267,    84,    84, -1267,   900,  8944,  1956, 10447,   356,   541,
+    8944, -1267,  4354, -1267,   990, -1267,  7269, -1267,   126,  7354,
+    7354,  1956,  9642,  1003, -1267,   789,  1008,  1010, -1267,  1026,
+    9583,   449, -1267,  1114,  1956,  7354,   291,  2178,   291,   687,
+     707,   900, -1267, -1267,   766,   900, -1267, -1267, -1267,   705,
+   -1267,   900,   198,  9019, -1267,   643,  1041,   647,  1045, -1267,
+     940,   198, -1267, -1267,  8477,   198,  1042,  8860,    81, -1267,
+    1307, -1267,   471,   481,   905, -1267,   905,  1047,  9760, -1267,
+     905, 10447, -1267, -1267,  1056, -1267, -1267, -1267,   291, -1267,
+   10373,   946, -1267,  7354,   694,  7667, -1267, -1267,   613,  1052,
+    1057,  1900,  2267, -1267, -1267, 10515,  9760, -1267, -1267,  1055,
+   -1267, -1267,  1048, -1267,  1055,  1063, 10178,  9760,  1046,  1051,
+     117,  1065,  1062,  1070,  1074, -1267,  1081,  1082,  6061, -1267,
+    9760, -1267,   658,  1520, -1267, -1267, -1267,    84,    84,  9701,
+    9760,  1077, -1267, -1267,   679, -1267,  9760, -1267, -1267,   821,
+   -1267, -1267, -1267, -1267,   525,   525,   415,   415,   844,   844,
+     844,   844,   338,   338,   853,   823,   831,   841,   886,  9760,
+     397,  9019,  1085,  1086,  1087,  1212, -1267, -1267, -1267, -1267,
+   -1267,  9019,   691, -1267,  7269, -1267,  6430,  8353, -1267, -1267,
+   -1267,  1793,  9019,   856,  1089,  1091,  1092,  1093,  1096,  1098,
+    1104, -1267,  3291,  1950, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267,   987, -1267, -1267, -1267,   990, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267, -1267,  1105,  1106, -1267,   225,
+    1077,  9642, -1267, -1267, -1267,  9524,  1108, -1267, -1267, -1267,
+   -1267,   905,  5524,  1197, -1267, -1267, -1267, -1267,  1095,   225,
+   -1267, -1267,   987, -1267, -1267,   987,  1117,   987, -1267, -1267,
+   -1267, -1267, -1267, -1267,  6307, -1267,   198, -1267, -1267,   505,
+     507,  6307,  1549,  9760,  2098, -1267, -1267,  1099,    38,  1099,
+   -1267,   905, -1267,    84, -1267, -1267,  8627,   983, -1267, -1267,
+   -1267,   993,  1120,  1115, -1267, -1267,  1122,  1123, -1267,   694,
+    1698, -1267,   576, -1267,  2267,   990, -1267, -1267,  1126, 10515,
+    7582,  8119,  1129, -1267, -1267,  1125,  1135,  1118, -1267,  9760,
+    1141,   190,  1136, -1267,  1142,   291,  1142, -1267, -1267,  1142,
+   -1267,  1147,  1152,  1154,  1520, -1267, -1267, -1267,  9524, -1267,
+   -1267, -1267,  1163,  9760,   986, -1267,  9760, -1267,   986, -1267,
+   -1267,  9760, -1267,   894,   900, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267,   946,  8236, -1267, -1267,  6553,  1171, -1267,   898,
+     900, -1267,   920,   936,   900, -1267,   675,  7112, -1267, -1267,
+   -1267,  9019,  9019, -1267,  7742,  7742,  1172,  1167,  1168,  1175,
+   -1267,   670,   111,  1077, -1267,   986, -1267,  9583, -1267,  9760,
+     540, -1267,  5932,  1180,  1181,  9465,  1182,  1185,    -8,    40,
+      86,  9760,  1191,   198,  9760,  9760,  1177,   585,  1169, -1267,
+   -1267, -1267,  1187, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267,   905,  1195,  9760, -1267,  9019,  9019,    84,  1201,
+   -1267,  8711, -1267, -1267,   862, -1267,  2098, -1267, -1267, -1267,
+   -1267,  1307, -1267, -1267,  1198, -1267, -1267, -1267, -1267,  1202,
+    1698, -1267, -1267,  1196, -1267,  1055, -1267, -1267,  2178,  1210,
+   -1267, -1267, -1267,   704,  1217, -1267,   117,  1214,  9760,  1200,
+     117,   117,  1224,   950,   900, -1267, -1267,  1026,  9760,  1230,
+    1163, -1267,   943, -1267, -1267,  1220, -1267,    78, -1267,  1231,
+    1220, -1267,  1234, -1267, -1267,   987,  1236,  6184,  1235,  1239,
+    1241, -1267, -1267,  1238, -1267, -1267,   987, -1267, -1267, -1267,
+   -1267,   987,  9760,  9760,   946,  1243, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267, -1267, -1267,  9760,  9760,  1244,
+    1248,  1220, -1267, -1267,   905, -1267, -1267, -1267,  7070,  7582,
+    9760,  9760,  1318,  9760, -1267,  1233, -1267,  1246, -1267,  1250,
+    9760,  1254,  9760,   938,  1255,    47,    84,  1805, -1267, -1267,
+    5524,  1256,   554, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267,  9281, -1267,  7742,  1260, -1267, -1267,  7582,   555,
+     561, -1267,  1273,  1262,   705,  1283, -1267,   256, -1267, -1267,
+   -1267, -1267,   987,  1282, -1267, -1267,  1288,  1321, -1267, -1267,
+    1321,  1321,   986,  1292,  1699,  1866, -1267,  1295, -1267,  9019,
+   -1267, -1267, -1267, -1267,  1298, -1267,  9019,  9019,  9019, -1267,
+   -1267,  1300, -1267,  1301,  1310,  1311,   725,  7429,  7548, -1267,
+   -1267, -1267, -1267,  1305, -1267,  7817,   709,   755,  1317,   758,
+    5667, -1267, -1267, -1267,   582, -1267,   768,  1319,  1323,   198,
+    1369,   935, -1267, -1267,  9760, -1267,  9465,  9760, -1267, -1267,
+   -1267,  1320,  1326, -1267, -1267, -1267,  1324, -1267, -1267, -1267,
+   -1267, -1267, -1267,  7582,   705,  1330, -1267,  1313,   705,  9019,
+   -1267, -1267, -1267,   986, -1267, -1267, -1267, -1267, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267, -1267,  1337,  1340, -1267, -1267,
+   -1267, -1267, -1267, -1267, -1267,  1343, -1267,  1342, -1267,  9465,
+     276,  9760,  9465, -1267,  1346,  9760, -1267,   281,  1361,  1363,
+   -1267, -1267,  1355,  1356,  1339, -1267,   901, -1267, -1267, -1267,
+    1956,  2178,  1347, -1267,   401,  9760, -1267,   783, -1267,  1220,
+     986,   986,  1362,  1364,  1365,  1367, -1267, -1267,  7742,  1357,
+   -1267,  1438,  9760,  1352, -1267, -1267,  9375, -1267,   791, -1267,
+    1360,  9465,  1368, -1267, -1267,  1386, -1267,  1389, -1267,  1407,
+    1409, -1267,  1376,  7582, -1267, -1267, -1267,   705,   291,  1403,
+    1382,  1405,  1404,  1220,  1220, -1267, -1267, -1267, -1267, -1267,
+    9465,   240, -1267,   474, -1267, -1267,  6917, -1267, -1267,  1385,
+    9760, -1267,  9760,  6917,   198,  8860,   198,  8860,  1410, -1267,
+    1411, -1267, -1267,  1408, -1267, -1267,   802, -1267, -1267, -1267,
+   -1267,  1422,  1423, -1267,  9760,  9760, -1267, -1267,   979,    59,
+   -1267, -1267,  1390, -1267,   979, -1267, -1267,  2042,   291, -1267,
+   -1267,   198,  8860,   198,  8860,  1427,  1412,   291, -1267, -1267,
+   -1267, -1267,  9375,  1425,   979,  6995,  9760,  9285,  1426,   979,
+    1435,  2042,  2360, -1267, -1267, -1267,  1436, -1267, -1267, -1267,
+   -1267,  8119, -1267, -1267, -1267,  9148, -1267,  9375, -1267, -1267,
+    1416,  9058, -1267, -1267,  9285,   198,  2360,   198,  1441,  1445,
+     814, -1267,  9148, -1267, -1267, -1267,  9058, -1267, -1267, -1267,
+     198,   198, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267
 };
 
@@ -1758,29 +1763,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1333,  3826,  2645, -1333,   849, -1333,   762,   867,  -112,   956,
-   -1333,   580,  -517,  -490,  -904,  -999, -1333,   -62,  4003,     0,
-   -1333,   676,   547,   572,   581,   571,  1057,  1058,  1059,  1055,
-    1061, -1333,   963,  -485,  4467,  -910, -1333, -1333,   665,   184,
-    -691,   319, -1333,   356, -1333,   440, -1283, -1333, -1333,   176,
-   -1333, -1072, -1062,   285, -1333, -1333, -1333, -1333,   107, -1332,
-   -1333, -1333, -1333, -1333, -1333, -1333,   359, -1109,    16, -1333,
-    -288, -1333,   535,   330, -1333,   208, -1333,  -237, -1333, -1333,
-   -1333,   596,  -693, -1333, -1333,     9,  -933,   372,  2238, -1333,
-   -1333, -1333,   -57, -1333,   110,    36,  -194,  1419,  3198, -1333,
-   -1333,    12,    61,  1486,  1572, -1333,  1265, -1333, -1333,    21,
-    1950, -1333,  2034,  1735, -1333, -1333, -1333,  -611, -1333,   975,
-     976,   584,   761,   136, -1333, -1333, -1333,   967,   755,  -456,
-   -1333,  -528,  -433,   832, -1333, -1333,  -922,  -915,  -420,  1560,
-    1084,    19, -1333,   388,   467,  -359,  -203,  -145,   706,   811,
-   -1333,  1028, -1333,  2348,   798,  -442,   958, -1333, -1333,   740,
-   -1333,  -233, -1333,   118, -1333, -1333, -1333, -1243,   466, -1333,
-   -1333, -1333,  1188, -1333,    -1, -1333, -1333,  -832,  -108, -1152,
-    -131,  3669, -1333,  4255, -1333,   951, -1333,  -125,   120,  -178,
-    -173,  -170,     7,   -41,   -40,   -39,   619,    -5,    25,    46,
-      -4,  -167,  -166,  -158,  -157,  -296,  -519,  -516,  -510,  -538,
-    -311,  -552, -1333, -1333,  -514,  1111,  1112,  1114,  1610,  4174,
-    -565,  -560,  -546,  -522,  -389, -1333,  -475,  -720,  -716,  -715,
-    -584,  -222,  -287, -1333, -1333,    47,   102,   -51, -1333,  3453,
-     108,  -602,  -196
+   -1267,  4051,  2784, -1267,   133, -1267,  1353,   867,  -240, -1267,
+   -1267,   504,  -528,  -489,  -834, -1001, -1267,   -77,  4776,     0,
+   -1267,   793,   489,   531,   722,   534,   999,  1001,  1005,  1007,
+    1002, -1267,   711,  -584,  4023,  -739, -1267, -1267,   606,  -227,
+    -674,  -263, -1267,   335, -1267,   382,  -963, -1267, -1267,   119,
+   -1267,  -732, -1049,   228, -1267, -1267, -1267, -1267,    54, -1266,
+   -1267, -1267, -1267, -1267, -1267, -1267,   302, -1050,    23, -1267,
+    -171, -1267,   482,   277, -1267,   153, -1267,  -355, -1267, -1267,
+   -1267,   538,  -612, -1267, -1267,     9,  -990,   219,  2319, -1267,
+   -1267, -1267,  -124, -1267,   110,    36,  -188,  1213,  3869, -1267,
+   -1267,    12,    61,   970,  1623, -1267,  1495, -1267, -1267,    21,
+    1827, -1267,  2153,  1937, -1267, -1267, -1267,  -641, -1267,   911,
+     914,   521,   695,   -93, -1267, -1267, -1267,   906,   690,  -521,
+   -1267,  -507,  -417,  -420, -1267, -1267,  -914,  -941,  -147,   -54,
+    1019,    19, -1267,  2311,   381,  -366,  -185,  -122,   649,   745,
+   -1267,   964, -1267,  2435,  1823,  -463,   895, -1267, -1267,   693,
+   -1267,  -225, -1267,   103, -1267, -1267, -1267, -1263,   408, -1267,
+   -1267, -1267,  1139, -1267,    42, -1267, -1267,  -832,   -94, -1230,
+    -162,  2364, -1267,  3117, -1267,   908, -1267,  -103,   120,  -184,
+    -183,  -178,     7,   -40,   -39,   -36,  1505,     4,    32,    71,
+      92,  -173,  -172,  -170,  -168,  -306,  -510,  -503,  -496,  -559,
+    -313,  -498, -1267, -1267,  -514,  1064,  1072,  1076,  1925,  4399,
+    -524,  -566,  -556,  -543,  -548, -1267,  -508,  -723,  -722,  -717,
+    -582,  -166,  -229, -1267, -1267,   283,   102,     6, -1267,  3380,
+     108,  -611,  -462
 };
 
@@ -1788,2071 +1793,2143 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -527
+#define YYTABLE_NINF -529
 static const yytype_int16 yytable[] =
 {
-      49,   113,   149,   150,   151,   449,   396,    97,   266,   425,
-     114,   397,    69,   757,   398,   436,    50,   399,   400,   732,
-     949,    76,   380,   381,   950,   951,   401,   402,  1049,   831,
-     814,   143,    49,   806,   934,   854,   602,   116,   152,    97,
-     693,   805,   743,   147,    69,   704,   717,   807,    50,    49,
-     722,   597,   784,    76,   259,   407,   160,   813,  1360,    31,
-     404,    70,  1118,   185,   664,   666,   208,   122,   153,    49,
-     192,   808,   904,   215,   802,   621,   225,   803,   218,   625,
-    1148,  1149,   201,   804,   563,   158,   396,  1165,  1150,   154,
-      31,   397,   422,    70,   398,   522,   162,   399,   400,   844,
-     844,   279,   106,   106,   340,   113,   401,   402,   374,  1159,
-      63,  1227,   167,   113,  1173,   844,   265,   270,   564,   289,
-      96,   589,  1182,  1183,   375,   260,  1056,   211,   261,   471,
-     473,   721,   202,   408,   106,  1282,   168,   123,  -239,  -239,
-     404,   257,    63,   149,   150,   151,   308,   147,    31,   158,
-     734,   937,    96,  1510,   160,   113,   343,   165,  1441,   208,
-     162,   280,   251,   148,   408,   406,   370,  1048,   501,    96,
-     949,   106,   846,   844,   950,   951,  1174,   142,   660,   152,
-    1525,   405,   324,   188,   185,   185,    96,   863,   711,    96,
-     802,   338,   160,   803,   845,   845,  1222,   669,   467,   804,
-     265,   908,  1509,   898,   658,   673,  1283,   817,    49,   153,
-     845,  -239,   472,   824,   788,   160,   251,   330,   408,    31,
-     208,   165,  1520,   149,   150,   151,    31,   439,  1422,  1524,
-     154,  1312,  1175,  1315,  1317,  1177,   435,   472,   308,   806,
-     427,   693,  1380,  1381,   430,   916,   998,   985,    31,   459,
-      49,    31,   144,   807,   328,   431,   705,    97,   270,   714,
-    1155,   405,    69,   270,   265,   265,    50,    96,   845,   974,
-     113,    76,   160,   997,   324,  1059,    76,   808,   655,    96,
-     802,   438,  1178,   803,   602,   647,  1156,  1150,   582,   804,
-     479,   416,  1452,   408,  1176,   308,   793,   496,   477,   384,
-     408,  1422,  1232,   704,   395,   188,   430,  1072,   308,   484,
-     146,    70,  1426,   662,  1382,   385,   432,   431,  1156,   667,
-     815,   155,   594,   822,   566,   594,  1468,  1164,    96,   147,
-    1233,   517,   170,  1148,  1149,  1165,   370,   840,  1179,   113,
-      96,  1150,   519,   343,   158,   443,   328,   595,   613,   251,
-     330,   655,   106,   814,   727,   162,  1049,   806,   467,   693,
-      63,  1496,   618,  1498,   456,   468,   618,  1380,  1381,   693,
-      96,   807,    56,   115,   728,   581,   285,   467,   432,   586,
-     693,   572,   622,   180,   475,   467,   626,   573,   726,    41,
-      42,   589,   200,   265,  1480,   808,   589,   831,   619,   656,
-    1485,   818,   623,   185,    56,   821,  1063,  1367,  1426,   211,
-     370,   172,   817,  1426,   738,   510,   165,   376,   141,  -294,
-    1505,   265,  1097,   308,   308,  1512,   838,   265,   969,   618,
-     841,   246,   110,  1426,   110,   884,    76,  1305,   209,  1391,
-    1426,   219,  1098,   249,  1405,    41,    42,    41,    42,    96,
-     113,   591,  1095,   252,  1417,    76,   704,  1306,  1406,   324,
-     324,  1150,  -522,    76,  1411,  1412,   387,   596,   265,   251,
-     240,   243,   656,   750,  1116,   755,   265,  1104,   618,   515,
-      49,   -12,   388,   370,   710,  1083,   678,    97,   549,   550,
-     113,  1165,    69,   855,  1453,  1048,    50,   682,  1165,   116,
-     602,    76,   308,  1221,   113,   978,   674,   308,  1454,   308,
-     308,   389,   573,   998,   705,   996,   867,   741,   391,   899,
-     856,   343,   633,   188,   484,   468,   324,   390,   484,   834,
-     211,   328,   328,   835,   392,   900,   695,   865,   517,   857,
-     517,    70,   696,   517,   468,   324,   517,   262,   414,   519,
-    1165,   519,   468,   895,   519,  -446,   901,   519,     2,   205,
-       4,     5,     6,     7,   489,   566,   566,   490,   712,  1147,
-     899,   433,   902,   308,   713,  1343,   574,  1341,   408,   693,
-     693,   441,   106,   618,   343,   723,  1060,   613,   702,  1104,
-      63,   724,   437,   595,   898,   595,   795,   737,   328,  -447,
-      96,  1136,  1138,   738,   596,   901,   878,   663,   665,   324,
-     836,  1213,   738,   618,   837,   467,   938,   328,   618,   791,
-     613,  1061,    56,    35,   618,    36,   996,   618,   618,   275,
-     453,  1162,   880,   833,   693,   693,   277,  1001,   738,  1162,
-    1296,   913,  1298,   618,  1008,   265,   738,  1163,   847,   830,
-     331,   516,  1390,   836,   586,  1288,  1297,  1079,  1299,    37,
-     839,   862,  1344,    40,  1053,  -112,   110,   705,   161,  -112,
-    1257,  1258,    41,    42,   897,   113,   438,   546,   892,    41,
-      42,   328,   193,   547,   548,   216,   515,   278,   226,   963,
-     332,   515,   704,    76,   515,   964,  1091,   577,   799,   408,
-     594,   618,   918,   613,   551,   552,    45,    46,  1014,   710,
-     710,   678,   396,   801,  1330,   596,   333,   397,  1331,    76,
-     398,   832,   682,   399,   400,   334,   591,  1080,   976,  1209,
-     335,  1458,   401,   402,   696,   573,   343,  1460,  1458,  1461,
-     741,   741,   868,   496,   408,  1337,  1338,   336,   778,   484,
-     211,   738,   738,     2,   205,     4,     5,     6,     7,   589,
-     369,   553,   554,   111,   211,   635,   161,   404,  1354,   949,
-    1340,  1345,   373,   950,   951,  1408,   738,   738,   371,   382,
-    1292,  1405,   468,   566,     2,   205,     4,     5,     6,     7,
-    1506,   386,   618,  1507,   981,   671,   555,   556,   896,   595,
-    1140,  1427,   110,   871,   161,   408,  1211,   738,   468,  1109,
-    1215,   595,  1110,   227,  1111,    41,    42,   693,    35,   394,
-      36,   697,  1333,   423,   693,   693,   693,   161,   977,   801,
-     596,   129,  1474,   130,   131,   132,   557,   558,  1475,   440,
-     110,  1530,   139,   237,    41,    42,   702,   573,   565,    35,
-     408,    36,    56,    41,    42,   211,    45,    46,   516,  1121,
-     308,   408,   424,   516,   214,   406,   516,    48,   112,  1132,
-    1160,   408,    69,   446,  1135,   716,   594,   720,  1407,   238,
-     241,    76,   343,    -3,   239,   330,   408,   693,   405,   343,
-     892,  -370,   892,  -399,   795,  1419,   112,   112,   110,    48,
-     139,   140,   480,   705,   113,   457,   175,   416,   651,   408,
-      48,    41,    42,   110,   500,   214,    48,   918,   918,   801,
-    1109,    70,   710,  1110,    48,  1111,    41,    42,   113,   308,
-      48,   596,   110,    48,   139,   140,    48,  1084,   458,   655,
-     678,  1137,   242,   594,   895,    41,    42,   289,   371,   112,
-     112,   682,   741,   504,  1226,   175,   509,   214,   175,   506,
-     967,   964,   106,   484,  1086,   324,   522,  1478,  1419,   729,
-      63,   730,   559,    48,   731,   560,    48,   735,  1204,   562,
-     705,   343,   938,    48,   544,   545,   938,   938,   561,  1218,
-    1492,   408,   740,   337,   408,   477,   330,   408,  -295,   702,
-      45,    46,   618,   618,   583,     8,     9,    10,    11,    12,
-    1062,    -3,   896,   461,    48,   648,   876,   830,   214,   544,
-     308,   851,   371,  1350,  1351,   883,    48,  1400,   964,   885,
-     106,  1066,  1167,  1066,    31,  1380,  1381,   328,   649,  1104,
-     650,    76,   596,   652,    37,   438,   182,   183,    40,  1228,
-    1229,    48,    48,   653,   544,   654,   214,    41,    42,   113,
-     656,   214,    34,   657,   892,   897,   175,    48,   659,   892,
-     903,   917,   905,   594,   256,    48,   453,   684,   918,    45,
-      46,    70,   683,   890,    48,   408,   265,    48,   686,   832,
-     688,    45,    46,  -243,   112,   678,   762,   763,   110,   725,
-    1303,   815,   330,   594,   891,  1109,   682,   796,  1110,   112,
-    1111,    41,    42,   112,  1275,  1276,  1277,    48,   112,   714,
-     175,   739,   106,   764,   765,   343,   747,   175,   770,   771,
-     468,    48,    48,  -296,   766,   767,   768,   769,    48,  1314,
-       8,     9,    10,    11,    12,    48,   214,  -297,     8,     9,
-      10,    11,    12,   798,     8,     9,    10,    11,    12,   809,
-      37,   -14,   182,   183,    40,   -15,   270,   113,    37,    31,
-     173,   174,    40,    41,    42,   852,   218,    31,   853,  1037,
-     859,    41,    42,    31,   896,   879,   881,   886,   308,   896,
-    1361,  -420,   906,  -526,  1361,   175,    48,    34,   921,   593,
-      69,   594,   618,   713,   929,    34,   113,    45,    46,    76,
-     931,    34,   175,    48,    48,  1084,   175,     8,     9,    10,
-      11,    12,   759,   760,   761,   111,   214,   211,   936,   935,
-      48,   942,    56,   943,    48,   702,   944,   945,   946,   947,
-    1058,   635,  1086,   971,   634,   972,    31,  1019,   973,    70,
-     961,  1403,   987,   988,   989,   618,   618,   990,   991,   992,
-      48,   993,  -408,   270,  -407,    74,  1518,   214,   308,   106,
-      48,  1016,  1050,  1073,    34,  1074,  1052,  1075,  1076,  1082,
-    1167,  1092,  1093,   738,  1096,   891,   751,  1068,    48,    76,
-     106,   756,   110,  1442,    48,  1099,   956,    74,    63,  1109,
-    1085,   113,  1110,  1094,  1111,    41,    42,  1101,   106,  1102,
-    1084,   396,   702,  1103,  1106,  1130,   397,  1151,   565,   398,
-     408,  1154,   399,   400,   438,  1168,    45,    46,  1152,    70,
-     112,   401,   402,  1316,   221,    48,    37,  1086,  1169,   461,
-      40,  1153,  1170,    48,   635,  1171,  1172,    48,  1180,    41,
-      42,    48,  1264,  1265,   112,  1267,   112,  1491,  1184,   265,
-    1191,    -3,  1272,  1186,  1274,   404,  1196,  1199,    37,  1201,
-     106,   489,    40,  1205,  1210,    43,   618,  1402,   468,  1214,
-    1212,    41,    42,    45,    46,   214,  1217,  1181,  1230,   655,
-    1223,   112,    56,  1234,  1236,  1238,   112,  1266,  1239,  1240,
-    1241,   113,  1243,   106,  1287,  1250,   864,   709,   866,  1259,
-    1084,  1260,  1269,   214,  1270,    45,    46,  1294,   214,    66,
-     117,   351,  1271,   957,   113,  1300,   110,  1273,   139,   140,
-    1304,   113,  1281,   113,  1302,   113,  1167,  1086,  1019,    41,
-      42,  1308,  1309,  1167,   112,    76,  1310,  1313,   149,   150,
-     151,    66,    76,  1318,  1320,  1326,  1327,  1328,   912,  1329,
-      48,  1277,    48,   175,  1339,  1490,  1336,   850,   159,  1465,
-     113,  1465,   113,  1346,  1357,  1347,  1393,  1355,   175,  1356,
-    1466,    48,  1466,   113,  1363,    70,   405,   214,   220,  1490,
-    1490,   175,    70,   877,   445,  1167,    48,   160,  1374,   308,
-     112,   214,  1364,   106,    76,  1375,  1465,  1037,  1465,    48,
-     656,   112,    48,   112,  1490,    74,  -409,  1466,  1389,  1466,
-      74,   370,  1378,  1386,   258,  1395,   106,  1397,  1398,  1399,
-    1404,  1418,  1413,   106,   468,   324,  1414,  1415,   209,   219,
-     110,   468,   139,   140,    70,    48,  1416,  1331,  1428,   112,
-    1262,   112,  1430,    41,    42,   112,   228,  1432,  1423,   229,
-      56,  1434,   233,   112,   235,  1436,   329,  1438,  1445,  1440,
-    1446,   244,  1447,   175,   258,   348,    48,    48,  1085,   718,
-    1448,  1459,  1469,  1471,   719,   106,    37,  1476,   173,   174,
-      40,    48,   214,   468,  1473,  1477,  1484,  1500,  1499,    41,
-      42,  1504,  1511,  1353,   403,  1513,  1515,   328,  1521,   475,
-    1528,   970,  1529,   874,   221,  1185,   772,   775,   773,   421,
-     774,   975,   426,   428,   776,   369,  1108,   159,  1286,  1479,
-    1392,  1531,   986,  1348,  1216,   437,  1365,  1349,   212,  1462,
-      56,     8,     9,    10,    11,    12,  1190,   231,   444,   907,
-     887,   888,   447,  1198,   448,   909,  1379,   544,  1067,  1387,
-    1071,   790,  1105,   455,  1015,  1081,    48,   858,   707,    66,
-      31,   923,  1295,  1085,   469,   932,   780,   781,    48,   782,
-      74,     0,     0,     0,   476,     0,     0,     0,     0,   212,
-       0,     0,   428,     0,   351,     0,   506,   228,    34,    74,
-       0,     0,     0,  1425,     0,  1100,     0,    74,  1429,     0,
+      51,   115,   398,   399,   759,   151,   152,    99,   400,   153,
+     116,   745,    71,   401,   402,   451,   403,   427,   404,   951,
+     952,    78,   734,    52,   268,   953,   409,   719,   856,   808,
+    1051,   724,  1167,   833,    51,   438,   604,   118,   815,   809,
+    1362,    99,   503,   599,   906,   149,    71,   382,   383,   154,
+     819,    51,   810,   936,   786,    78,   826,    52,   162,   666,
+     668,    72,   662,   706,  1152,   187,  1175,   203,   210,   124,
+     517,    51,   194,   816,   408,   217,   145,   155,   227,    33,
+     220,   671,   398,   399,   406,   804,   125,   160,   400,   675,
+    1150,  1151,   805,   401,   402,    72,   403,   807,   404,   806,
+     473,   475,   108,   108,   910,  -239,  -239,   115,   424,   848,
+      65,  1229,  1284,   261,  1177,   115,   156,   204,   267,   272,
+      98,   474,   846,   846,   865,    33,   723,   262,  1176,   213,
+     263,    33,    33,   469,  1120,   623,   108,   820,   846,   627,
+    1443,   823,    33,   259,    65,   736,   151,   152,   310,   149,
+     153,   160,  1424,   410,    98,   565,   162,   115,   345,   167,
+    1179,   210,   840,   342,   406,   150,   843,  1234,   372,   951,
+     952,    98,   900,   108,   146,   953,  1178,    33,  -239,   591,
+     713,  1161,   918,  1285,   326,   190,   187,   187,    98,   566,
+     154,    98,   177,   340,   162,  1235,   846,   157,   665,   667,
+     291,   804,   267,   253,   418,   410,   410,  1180,   805,   790,
+      51,  1157,   847,   847,   479,   806,   410,   162,   155,    58,
+     117,  1512,   210,   167,   660,  1424,   151,   152,   847,   441,
+     153,  1314,   939,  1317,  1319,   808,   144,  1158,   437,   474,
+     310,   177,   429,   879,   177,   809,   432,  1061,  1527,   817,
+    1050,   596,    51,    58,   999,   819,   330,   156,   810,    99,
+     272,   716,   728,  1152,    71,   272,   267,   267,   729,    98,
+     148,   976,   115,    78,   162,    52,   326,   517,    78,   407,
+    1167,    98,   517,   440,   604,   517,   847,   211,   730,  1000,
+     221,   804,   481,   469,   461,  1184,  1185,   310,   805,   498,
+    1074,   649,   657,   987,  1099,   806,   397,   190,   432,  1065,
+     310,   486,   469,    72,   707,   695,   172,  1152,   434,   886,
+     469,   706,  1382,  1383,  1100,   281,   568,  1382,  1383,   664,
+      98,   149,   445,   519,   164,   669,   169,   182,   372,   780,
+    1454,   115,    98,  1150,  1151,   345,   160,   584,   330,   597,
+     615,   458,   177,   808,   108,  1097,   795,  1181,  1051,   407,
+     170,   972,    65,   809,   620,   112,  1158,   470,   620,  1224,
+    1307,   977,    98,  1003,   202,   657,   810,   583,    43,    44,
+     434,   588,   988,  -294,   624,   282,   477,  1470,   628,   112,
+    1308,   376,   174,   248,  1384,   267,   816,   842,   164,  1393,
+     621,   833,    43,    44,   625,   187,   177,   377,   696,  1482,
+    1166,   213,   372,   177,   112,  1487,   141,   142,   167,   876,
+     253,   332,  1498,   267,  1500,   310,   310,    43,    44,   267,
+     752,   620,   555,   556,   254,  1507,  1167,  1152,    78,   251,
+    1514,   439,   112,  1167,  1138,  1140,  1106,  -524,    33,   591,
+     253,    98,   115,   593,   591,    43,    44,    78,   244,   386,
+     264,   326,   326,  1082,  1419,    78,  1085,   557,   558,   598,
+     267,    58,   836,   -12,   706,   387,   837,  1118,   267,  1369,
+     620,   177,    51,   757,   333,   372,   712,   869,   680,    99,
+     940,   334,   115,   433,    71,  1167,  1223,   658,   177,   389,
+     604,   118,   177,    78,   310,    52,   115,   998,  -448,   310,
+     491,   310,   310,   492,  1215,   390,   695,   740,   857,   743,
+     824,  1407,   596,   345,  1511,   190,   486,   470,   326,   416,
+     486,   971,   213,   330,   330,  1408,  1413,  1414,   551,   552,
+     519,   391,   519,    72,  1522,   519,   470,   326,   519,  -449,
+     469,  1526,   435,   867,   470,   433,  1000,   392,  1106,   253,
+     332,   410,   443,   900,   858,   980,   635,   568,   568,   576,
+     658,   410,   707,  1259,  1260,   310,   915,   897,  1050,   277,
+     521,  1147,  1148,   859,   108,   620,   345,  1149,   393,   615,
+     704,   901,    65,   164,  1455,   597,  1343,   597,   797,  1039,
+     330,   903,    98,   579,   394,   410,   598,   902,  1456,   696,
+      39,   326,   175,   176,    42,   620,   279,   904,   998,   330,
+     620,   793,   615,    43,    44,   901,   620,   903,   280,   620,
+     620,   567,   518,   410,   695,   835,  1195,  1196,   335,    47,
+      48,  1062,   574,  1063,   695,   620,   548,   267,   575,   371,
+     849,   832,   549,   550,  1428,   695,   588,   838,  1345,   287,
+    1164,   839,   841,   864,  1010,     2,   207,     4,     5,     6,
+       7,  1392,    43,    44,  1164,  1298,  1165,   115,   440,   336,
+     894,  1300,   337,   330,  1055,     8,     9,    10,    11,    12,
+    1290,  1299,   838,   676,   338,    78,  1081,  1301,   512,   575,
+     378,    58,   740,   620,   920,   615,  1093,   371,   398,   399,
+     706,   712,   712,   680,   400,   803,    33,   598,  1346,   401,
+     402,    78,   403,   834,   404,   707,   375,   696,   593,   384,
+     697,   388,    37,  1016,    38,   684,   698,   696,   345,   396,
+     714,   725,   743,   743,    36,   498,   715,   726,   696,   177,
+    1428,   486,   213,   408,   739,  1428,  1462,   880,  1463,  1356,
+     740,   882,  1172,   740,   177,   425,   213,   740,   951,   952,
+     426,   742,   899,   410,   953,  1428,   673,   177,   448,    47,
+      48,  1409,  1428,  -372,   470,   568,  -112,   521,   291,   521,
+    -112,   406,   521,   965,   620,   521,   983,    -3,  1421,   966,
+     898,   597,   699,  -401,  1068,   978,  1068,   919,  1142,   596,
+     470,   698,  1509,   597,  1460,    47,    48,   591,  1211,  1321,
+     870,  1460,   410,  1339,   575,   459,  1323,  1324,  1325,   740,
+     979,   803,   598,     2,   207,     4,     5,     6,     7,   518,
+    1335,  1332,  -295,   502,   518,  1333,   460,   518,   704,     8,
+       9,    10,    11,    12,   695,   695,   940,   213,   482,   177,
+     940,   940,   310,   112,   229,   141,   142,    50,   114,  1340,
+    1480,  1421,  1342,  1508,    71,   740,    43,    44,   740,   873,
+      33,   410,  1347,    78,   345,   731,   506,   732,   740,  1368,
+     733,   345,   894,   737,   894,  1162,   797,  1410,   114,   114,
+      37,    50,    38,  1407,   852,  1429,   115,   511,    36,   695,
+     695,   740,    50,   418,   653,   410,  1476,   524,    50,   920,
+     920,   803,  1477,    72,   712,  1213,    50,  1039,  1532,  1217,
+     115,   310,    50,   598,   575,    50,   553,   554,    50,  1086,
+     969,   966,   680,  1266,  1267,   561,  1269,   696,   696,   559,
+     560,   114,   114,  1274,   743,  1276,   479,   332,   410,  1494,
+     684,   707,   562,   657,   108,   486,  1088,   326,   897,   817,
+     332,   596,    65,   563,  1305,    50,   332,   410,    50,   112,
+    -296,   141,   142,   345,   564,    50,   407,     8,     9,    10,
+      11,    12,    43,    44,  1206,  1352,  1353,   878,  1277,  1278,
+    1279,   704,   696,   696,   620,   620,   885,  1123,  1106,   410,
+     887,  1134,  1064,   410,   898,   339,    50,   112,    33,   832,
+    1402,   966,   310,  1355,  1111,  1382,  1383,  1112,    50,  1113,
+      43,    44,   108,  1137,  1169,   596,  1230,  1231,   707,   330,
+     764,   765,   230,    78,   598,   231,    36,   440,   235,  1139,
+     237,   596,   659,    50,    50,  1294,   585,   246,  1228,   650,
+     112,   115,    -3,  1220,  1363,   410,   894,  1111,  1363,    50,
+    1112,   894,  1113,    43,    44,   651,  1381,    50,   508,  1389,
+     920,    58,   652,    72,   766,   767,    50,   654,   267,    50,
+     655,   834,   695,   772,   773,   656,   114,   680,   661,   695,
+     695,   695,   258,   546,   547,     2,   207,     4,     5,     6,
+       7,   114,   685,   686,  1388,   114,   690,    39,   688,    50,
+     114,    42,  -243,  1427,   108,   716,   727,   345,  1431,   741,
+      43,    44,   470,    50,    50,   749,   798,   -14,   546,   800,
+      50,   811,   -15,  -297,   854,   861,   855,    50,  1295,  1087,
+       8,     9,    10,    11,    12,   881,    45,  1453,   658,   883,
+     888,   931,   695,   899,    47,    48,   908,  1444,   272,   115,
+    -422,  -528,    37,   546,    38,   715,   923,   933,   220,   944,
+     937,    33,   945,   230,   946,   696,   898,   938,   947,   684,
+     310,   898,   696,   696,   696,   948,   949,   963,    50,   973,
+     974,   975,    71,   989,   620,   990,   991,   992,   115,    36,
+     993,    78,   994,    68,   119,    50,    50,  1086,   995,  -410,
+    -409,  1060,     8,     9,    10,    11,    12,  1018,  1052,   213,
+    1054,  1058,    50,   893,  1075,  1076,    50,   704,  1077,  1078,
+    1084,    58,  1521,  1094,  1088,   740,   636,    68,  1521,  1095,
+     496,    72,  1096,    33,  1098,   696,  1101,   620,   620,  1521,
+     958,  1103,    50,  1521,   161,   272,  1104,  1405,  1105,   525,
+     310,   108,    50,   526,   527,   528,  1520,   768,   769,   770,
+     771,    36,  1169,  1108,   222,  1132,  1153,  1154,  1155,  1156,
+      50,    78,   108,  1170,  1171,  1173,    50,   529,  1174,   530,
+      65,   531,   532,   115,  1182,  1188,    -3,   398,   399,  1193,
+     108,  1186,  1086,   400,   704,  1198,  1203,  1201,   401,   402,
+     260,   403,   230,   404,   235,   567,   440,   410,   491,  1207,
+    1214,    72,   114,    47,    48,  1212,  1216,    50,  1219,  1088,
+    1232,   761,   762,   763,   684,    50,  1225,  1236,  1238,    50,
+    1240,  1241,  1245,    50,   113,  1242,   114,  1243,   114,  1252,
+    1261,   267,   331,   112,  1262,   141,   239,  1268,  1183,  1271,
+     260,   350,   108,  1493,  1296,  1289,    43,    44,   620,  1404,
+     470,    39,  1272,   184,   185,    42,  1273,   211,   221,   406,
+    1275,  1283,  1302,   114,    43,    44,  1304,  1306,   114,   909,
+     405,  1310,   240,   115,  1311,   108,  1312,   241,  1315,    58,
+     230,  1320,  1086,   657,  1322,   423,  1328,  1329,   428,   430,
+     892,  1338,   410,   161,  1330,  1331,   115,  1087,    47,    48,
+    1341,  1279,  1348,   115,  1357,   115,  1349,   115,  1169,  1088,
+    1358,   893,  1359,  1365,   446,  1169,   114,    78,   449,  1366,
+     450,   151,   152,  1376,    78,   153,  1377,  -411,  1380,   457,
+    1391,  1395,    50,  1397,    50,    68,  1406,  1492,  1399,  1400,
+     471,  1467,   115,  1467,   115,  1401,  1415,  1333,  1416,  1417,
+     478,  1418,  1420,    50,   439,   115,  1425,    72,   430,    58,
+     970,  1492,  1492,   177,    72,    76,  1430,  1169,    50,   162,
+    1434,   310,   114,  1436,  1432,   108,    78,  1438,  1467,  1440,
+    1467,    50,  1442,   114,    50,   114,  1492,  1447,  1448,  1449,
+    1450,  1461,  1087,   372,  1471,  1473,  1486,  1475,   108,    76,
+       8,     9,    10,    11,    12,   108,   470,   326,  1478,  1479,
+    1501,  1187,   959,   470,  1506,  1513,    72,    50,  1502,  1515,
+    1517,   114,  1523,   114,   260,  1530,   163,   114,   589,  1531,
+     774,    33,  1011,   775,   617,   114,   223,   778,   776,  1110,
+     195,   777,  1288,   218,  1481,  1394,   228,   622,    50,    50,
+    1533,   622,  1351,  1218,   407,  1367,  1464,   108,   889,    36,
+    1192,   890,  1200,    50,  1069,   470,   911,  1073,   792,    39,
+    1017,   184,   185,    42,   909,   860,   463,  1107,   658,   330,
+     925,   477,    43,    44,  1350,   131,  1297,   132,   133,   134,
+    1083,   709,  1087,    39,     0,   184,   185,    42,    43,    44,
+     471,   782,     0,   742,   934,   410,    43,    44,   595,   783,
+     596,    47,    48,   784,   350,    58,    47,    48,     0,   471,
+     909,     0,    58,   353,   163,     0,     0,   471,     0,     0,
+       0,     0,   892,     0,   410,     0,   373,     0,    50,     0,
+      47,    48,     0,     0,     0,   691,     0,     0,   430,     0,
+      50,     0,  1121,     0,     0,     8,     9,    10,    11,    12,
+       0,   214,   163,   705,     0,    68,   496,     0,     0,     0,
+     233,     0,     0,   430,    58,     0,     0,   430,     8,     9,
+      10,    11,    12,     0,     0,   163,    33,     0,  1468,     0,
+    1468,   112,   636,   141,   142,     0,   447,   442,   114,     0,
+    1011,     0,     0,     0,    43,    44,   350,     0,     0,    33,
+       0,     0,   214,     0,    36,     0,     0,    76,     0,    39,
+       0,     0,    76,    42,     0,  1468,     0,  1468,     0,    50,
+     720,    50,    43,    44,     0,   721,     0,    36,   114,  1465,
+       0,  1469,     0,   112,     0,     0,   546,     0,     0,     0,
+    1111,   785,     0,  1112,   214,  1113,    43,    44,    45,     0,
+      39,    50,   184,   185,    42,     0,    47,    48,   622,   796,
+       0,     0,     0,    43,    44,     0,  1497,     0,  1499,   909,
+     813,   919,   114,   596,  1316,   508,     0,     0,   113,    47,
+      48,     0,     0,     0,     0,   636,     0,    79,   589,   186,
+       0,   114,     0,   589,     0,   114,   373,    47,    48,   622,
+       0,     0,   350,   350,     0,   214,   223,     0,     0,     0,
+    1528,     0,  1529,     0,     0,     0,     0,     0,   350,     0,
+      39,    79,   175,   176,    42,  1536,  1537,    39,   909,   909,
+       0,    42,     0,    43,    44,     0,   691,     0,     0,   753,
+      43,    44,   114,   214,   758,     0,     0,   471,   214,     0,
+     525,   216,     0,     0,   526,   527,   528,     0,   224,   375,
+       0,     0,     0,   497,     0,     0,   801,   243,   596,     0,
+     373,     0,    76,   471,    47,    48,   350,     0,   529,   114,
+     530,     0,   531,  1287,     0,   924,   353,     0,   430,     0,
+       0,    76,   463,    50,     0,     0,     0,     0,    50,    76,
+     112,     0,   216,     0,     0,     0,     0,  1111,     0,     0,
+    1112,   705,  1113,    43,    44,    50,   954,   353,     0,     0,
        8,     9,    10,    11,    12,     0,     0,     0,     0,     0,
-     634,     0,     0,     0,  1112,   351,   112,     0,  1112,     0,
-       0,   212,     0,     0,     0,     0,     0,  1451,     0,    31,
-     968,     0,   740,   351,   408,    74,     0,     0,     0,     0,
-      45,    46,     0,     0,     0,     0,     0,    48,   258,    48,
-       0,     0,   587,     0,   494,     0,   112,    34,   615,     0,
-       0,     0,     0,  1085,   523,  1112,     0,     0,   524,   525,
-     526,   620,   214,     0,     0,   620,   351,     0,  1463,    48,
-    1467,     0,   212,     0,     0,     0,    56,     0,   410,     0,
-       0,   213,   527,    56,   528,   418,   529,   530,     0,     0,
-     112,   917,  1009,   594,     0,     0,     0,     0,     0,    45,
-      46,     0,  1519,   634,     0,  1495,     0,  1497,  1519,   112,
-     212,  1145,  1146,   112,   469,   212,   228,     0,   233,  1519,
-       0,     0,     0,  1519,     0,     0,     0,     0,   348,   351,
-     495,     0,   213,   469,   907,    56,     0,     0,     0,     0,
-       0,   469,    37,     0,   182,   183,    40,     0,     0,  1526,
-       0,  1527,  1112,     0,     0,    41,    42,   410,     0,   689,
-     112,     0,   428,     0,  1534,  1535,  1193,  1194,     0,     0,
-       0,     0,   351,   351,   213,     0,     0,   703,     0,    66,
-     907,   890,     0,   408,     0,     0,     0,   428,   351,    45,
-      46,   428,     8,     9,    10,    11,    12,   112,     0,     0,
-     212,     0,     0,     0,   228,     0,   351,     0,     0,     0,
-       0,    48,  1119,     0,   571,     0,    48,    74,     0,     0,
-     348,    31,   575,     0,    37,   578,   173,   174,    40,     0,
-      77,     0,     0,    48,     0,   213,     0,    41,    42,     0,
-       0,     0,     0,    74,   214,     0,   351,     0,     0,    34,
-       0,     0,     0,     0,    37,     0,     0,   112,    40,     0,
-    1009,     0,    77,   373,     0,   783,     0,    41,    42,     0,
-       0,     0,  1112,   213,  1112,  1112,     0,     0,   213,     0,
-     212,   351,   620,   794,     0,   410,     0,     0,     0,   418,
-       0,     0,     0,    43,   811,     0,   212,     0,     0,   222,
-     694,    45,    46,     0,     0,     0,     0,     0,     0,   112,
-       0,     0,   587,     0,    79,     0,     0,   587,     0,     0,
-       0,   212,     0,   620,   351,     0,   348,   348,     0,     0,
-       0,     0,     0,     0,   351,     0,     0,     0,     0,   907,
-     221,   214,   348,     0,     0,   351,    79,     0,    37,  1319,
-     182,   183,    40,  1112,     0,     0,  1321,  1322,  1323,     0,
-     689,    41,    42,   213,     0,   410,     0,     0,     0,     0,
-       0,   469,     0,     0,     0,     0,     0,   112,     0,   112,
-     112,     0,     0,   223,     0,     0,   353,   184,     8,     9,
-      10,    11,    12,     0,     0,    45,    46,   469,   907,   907,
-     348,     0,     0,     0,     0,    74,     0,     0,     0,   922,
-    1112,  1112,   428,     0,     0,     0,     0,    31,     0,  1366,
-       8,     9,    10,    11,    12,     0,     0,   351,     0,     0,
-       0,     0,     0,     0,   351,   703,     0,     0,     0,   212,
-     952,     0,     0,   213,     0,    34,     0,     0,  1443,    31,
-      37,     0,   182,   183,    40,   571,   571,     0,   112,     0,
-       0,     0,     0,    41,    42,     0,     0,   212,     0,     0,
-     354,     0,   212,     0,     0,     0,     0,    34,   689,     0,
-      77,     0,    37,     0,   213,    77,    40,   175,   689,   184,
-     494,   620,     0,     0,   984,    41,    42,    45,    46,   689,
-       0,   694,     0,     0,     0,    48,    48,     0,  1493,   995,
-      37,     0,   182,   183,    40,   112,   112,  1501,    57,    57,
-       0,   709,     0,    41,    42,     0,     0,     0,     0,    45,
-      46,     0,     8,     9,    10,    11,    12,     0,   869,     0,
-       0,   212,   872,     0,   351,   351,     0,   351,   351,  1489,
-      57,   408,     0,   112,     0,   212,     0,    45,    46,    66,
-       0,    31,     0,     0,    79,    74,     0,     0,     0,    79,
-       0,     0,     0,     0,     0,     0,   495,     0,     0,   222,
-       0,   794,     0,     0,    57,     0,     0,    57,   703,    34,
-       0,  1064,     0,     0,    37,     0,   182,   183,    40,   351,
-     351,     0,   213,     0,     0,     0,   907,    41,    42,     0,
-       0,     0,    48,   112,     0,     0,     0,  1078,     0,   694,
-       0,     0,   112,   907,     0,     0,   428,   117,    86,   694,
-     213,     0,     0,   264,     0,   213,    48,    48,     0,     0,
-     694,    45,    46,     0,     0,    77,   212,     0,     0,     8,
-       9,    10,    11,    12,     0,     0,     0,     0,     0,   353,
-      86,    48,     0,   223,    77,     0,     0,     0,     0,     0,
-     351,     0,    77,   571,   346,     0,     0,     0,    31,     0,
-     587,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     353,     0,     0,   426,     0,   907,   907,   224,   689,   689,
-       0,   348,   348,     0,   213,     0,    34,     0,   353,     0,
-      77,    37,   221,   182,   183,    40,     0,     0,   213,  1166,
-       0,     0,     0,     0,    41,    42,     0,     0,    37,    79,
-     182,   183,    40,    74,     0,     0,     0,     0,    57,     0,
-       0,    41,    42,   354,     0,   351,     0,   351,    79,     0,
-     593,   353,   594,   689,   689,     0,    79,     0,    45,    46,
-       0,     0,     0,     0,     0,   523,     0,   264,    57,   524,
-     525,   526,     0,     0,   354,    45,    46,     0,     0,     0,
-       0,     0,   351,     0,   361,     0,   410,     0,     0,   351,
-     351,   351,   354,   527,    79,   528,     0,   529,  1285,     0,
-     351,   351,     0,     0,     0,     0,     0,     0,     0,   213,
-       0,     0,     0,    74,   353,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   703,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   354,   212,     0,     0,   694,
-     694,   531,   532,   533,   534,   535,   536,   537,   538,   539,
-     540,   541,   351,     0,     0,     0,     0,   353,   353,     0,
-       0,  1122,     0,     0,     0,     0,  1263,     0,     0,     0,
-       0,     0,     0,   353,     0,   542,     0,  1133,    86,     0,
-       0,     0,     0,    86,     0,     0,     0,    66,     0,     0,
-       0,   353,     0,     0,   694,   694,     0,     0,   354,   689,
-       0,   703,    77,     0,     0,   117,     0,     0,     0,     0,
+       0,     0,     0,   214,    39,   353,     0,    76,    42,   114,
+       0,  1318,     0,     0,   216,   355,     0,    43,    44,     0,
+       0,    33,     0,     0,   691,     0,     0,     0,     0,   866,
+       0,   868,     0,     0,   691,   215,     0,   622,     0,     0,
+     986,     0,     0,   711,     0,   691,     0,     0,   353,    36,
+       0,    47,    48,     0,    39,   997,   184,   185,    42,     0,
+      39,   114,   175,   176,    42,     0,     0,    43,    44,     0,
+       0,     0,     0,    43,    44,   216,     0,     0,     0,     0,
+       0,   914,     0,   214,     0,     0,   215,     0,     0,     0,
+       0,     0,     0,   595,     0,   596,     0,     0,     0,   214,
+       0,    47,    48,     0,     0,    68,   909,     0,     0,    79,
+       0,   353,     0,   216,    79,     0,     0,     0,   216,     0,
+       0,     0,     0,   909,   214,     0,     0,   796,   215,   114,
+       0,   114,   114,     0,   705,     0,     0,  1066,     8,     9,
+      10,    11,    12,     0,     0,   412,    39,     0,   184,   185,
+      42,     0,   420,     0,   353,   353,     0,     0,     0,    43,
+      44,     0,     0,  1080,     0,     0,     0,     0,     0,    33,
+     353,     0,   430,   119,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    81,     0,  1491,     0,   410,   353,   215,
+       0,     0,     0,    47,    48,   909,   909,    36,     0,    76,
+       0,     0,    39,   216,   184,   185,    42,     0,   224,     0,
+     114,     0,     0,     0,     0,    43,    44,    81,     0,     0,
+       0,     0,     0,     0,   412,    76,   589,   215,   353,     0,
+       0,     0,   215,     0,     0,     0,     0,     0,     0,   428,
+       0,   892,   214,   410,   691,   691,     0,   350,   350,    47,
+      48,     0,     0,     0,   225,     0,     0,    50,    50,     0,
+       0,     0,     0,   353,     0,  1168,     0,   114,   114,     0,
+     214,     0,     0,     0,    79,   214,     0,     0,     0,     0,
+       0,   573,    39,   216,   184,   185,    42,     0,   355,   577,
+       0,     0,   580,    79,     0,    43,    44,     0,     0,   691,
+     691,    79,     0,     0,     0,   114,   353,     8,     9,    10,
+      11,    12,     0,     0,     0,     0,   353,   215,     0,   355,
+       0,   266,   223,     0,   216,     0,     0,   353,  1102,    47,
+      48,     0,     0,     0,     0,     0,     0,   355,    33,    79,
+       0,   356,     0,     0,   214,     0,     0,  1114,     0,    59,
+      59,  1114,   412,     0,     0,     0,   420,     0,   214,     0,
+       0,     0,     0,     0,    50,   114,    36,     0,     0,     0,
+     705,    39,     0,   143,   114,    42,     0,     0,     0,   497,
+     355,     0,     0,    59,    43,    44,     0,    76,    50,    50,
+       0,     0,     0,     0,     0,     0,     0,   215,  1114,     0,
+       8,     9,    10,    11,    12,     0,     0,     0,     0,   353,
+     711,     0,  1265,    50,     0,     0,   353,    59,    47,    48,
+      59,     0,   126,   129,   130,   242,   245,     0,     0,     0,
+       0,    33,   412,    68,     0,    81,     0,     0,   215,     0,
+      81,     0,   216,   355,     0,   691,     0,   705,     0,   214,
+       0,   119,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,     0,     0,     0,    39,    88,   184,   185,    42,     0,
+     216,     0,     0,     0,     0,   216,     0,    43,    44,     0,
+       0,     0,   691,     0,     0,     0,   355,   355,     0,   691,
+     691,   691,     0,     0,   255,  1114,   256,     0,     0,    88,
+     350,   350,   355,  1491,     0,   410,     0,   348,     0,     0,
+       0,    47,    48,  1168,     0,     0,     0,     0,     0,     0,
+     355,     0,   573,   573,     0,     0,   353,   353,     0,   353,
+     353,    79,     0,     0,   225,     0,   226,     0,     0,     0,
+       0,     0,     0,     0,   216,     0,   119,    76,     0,     0,
+       0,     0,   691,     0,     0,     0,   215,    79,   216,     0,
+     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    59,     0,     0,     0,     0,   395,     0,     0,     0,
+       0,   353,   353,     0,   215,   455,   414,   415,     0,   215,
+       0,   419,     0,   421,   422,   355,     0,     0,     0,     0,
+      81,    59,     0,     0,     0,   871,     0,     0,     0,   874,
+       0,     0,     0,     0,   356,  1114,     0,  1114,  1114,    81,
+       0,   350,     0,   363,     0,     0,     0,    81,     0,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,   355,   214,
+       0,     0,     0,     0,     0,   356,   119,     0,   355,   216,
+       0,     0,   353,     0,   224,     0,     0,     0,   215,   355,
+       0,     0,    33,   356,     0,    81,     0,     0,     0,  1168,
+       0,     0,   215,     0,     0,     0,  1168,   533,   534,   535,
+     536,   537,   538,   539,   540,   541,   542,   543,     0,     0,
+      36,     0,     0,     0,   223,    39,  1114,   184,   185,    42,
+       0,     0,     0,     0,     0,     0,   356,     0,    43,    44,
+       0,   544,     0,     0,     0,    76,     0,    88,     0,    79,
+     637,     0,    88,     0,     0,     0,     0,   353,  1168,   353,
+       0,     0,     0,     0,   186,  1516,     0,     0,     0,     0,
+     573,   355,    47,    48,     0,     0,     0,     0,   355,     0,
+       0,     0,     0,  1114,  1114,     0,     0,     0,     0,     0,
+       0,     0,     0,   215,   353,     0,     0,     0,     0,   356,
+       0,   353,   353,   353,     0,     0,     0,     0,     0,     0,
+     348,     0,   353,   353,     0,     0,     0,     0,     0,     0,
+       0,  1445,     0,     0,     0,    76,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   351,     0,     0,     0,     0,     0,     0,    77,     0,
-       0,   353,     0,     0,     0,     0,   689,     0,     0,     0,
-       0,   354,   354,   689,   689,   689,     0,   346,     0,     0,
-       0,     0,   410,     0,   348,   348,     0,   354,     0,     0,
-       0,     0,     0,     0,     0,     0,   353,  1166,     0,    74,
-       0,     0,     0,     0,     0,   354,    74,   224,   166,     0,
-     171,     0,     0,   177,   178,   179,    79,   181,     0,     0,
-       0,  1219,     0,     0,     0,     0,     0,     0,    57,   213,
-     117,   232,     0,     0,     0,     0,   689,     0,     0,   353,
-       0,     0,    79,   247,   248,   354,     0,     0,   212,   353,
-       0,     0,     0,     0,     0,   222,     0,     0,    74,     0,
-     353,     0,     0,     0,     0,     0,     0,     0,     0,   346,
-    1293,     0,     0,    86,     0,     0,     0,     0,     0,     0,
-     354,     0,     0,     0,     0,     0,     0,   361,     0,     0,
-       0,     0,    86,     0,     0,     0,     0,     0,     0,     0,
-      86,     0,     0,     0,     0,   348,     0,   694,     0,     0,
-       0,     0,     0,     0,   694,   694,   694,     0,   361,     0,
-      77,     0,     0,   354,     0,     0,     0,     0,     0,     0,
-     117,     0,   346,   354,     0,     0,   361,     0,    86,   223,
-       0,     0,   353,     0,   354,   212,     0,     0,     0,   353,
-       0,     0,     0,  1166,     0,     0,     0,     0,     0,     0,
-    1166,     0,   994,     0,     0,     8,     9,    10,    11,    12,
-       0,     0,     0,     0,     0,   346,   346,   694,     0,   361,
+       0,     0,   356,   356,     0,     0,   226,     0,     0,     0,
+       0,   214,     0,     0,     0,     0,     0,     0,   356,     0,
+     718,    59,   722,     0,   353,     0,     0,     0,     0,   216,
+       0,     0,     0,     0,     0,     0,   356,     0,     0,     0,
+       0,  1495,     0,   412,     0,     0,     0,    81,   355,   355,
+    1503,   355,   355,     0,     0,     0,     0,     0,     0,   168,
+       0,   173,   348,     0,   179,   180,   181,     0,   183,    79,
+       0,     0,    88,    81,     0,     0,   356,     0,     0,     0,
+       0,     0,   234,     0,     0,     0,   363,     0,     0,     0,
+       0,    88,     0,   353,   249,   250,     0,     0,     0,    88,
+       0,     0,     0,   355,   355,     0,     0,     0,   214,     0,
+       0,   356,     0,     0,     0,     0,     0,   363,  1124,     0,
+       0,     0,     0,     0,     0,   348,     0,     0,     0,     0,
+       0,     0,     0,     0,  1135,   363,     0,    88,     0,     0,
+       0,    76,     0,   215,     0,     0,     0,     0,    76,     0,
+       0,     0,     0,     0,   356,   787,   788,     0,     0,     0,
+       0,     0,     0,     0,   356,     0,   853,     0,   348,   348,
+     225,     0,     0,     0,   355,   356,     0,     0,   363,     0,
+       0,     0,   818,     0,   348,   821,   822,     0,   825,     0,
+     827,   828,     0,     0,     0,   829,   830,     0,     0,     0,
+      76,     0,     0,     8,     9,    10,    11,    12,     0,   412,
+       0,   216,     0,     0,     0,   905,   224,   907,     0,     0,
+       0,   455,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    33,    81,     0,    79,     0,     0,
+       0,   363,   348,     0,     0,     0,     0,     0,  1221,   355,
+       0,   355,     0,     0,     0,     0,     0,   356,     0,     0,
+       0,     0,    36,     0,   356,     0,     0,    39,     0,   184,
+     185,    42,     0,     0,     0,     0,     0,     0,     0,     0,
+      43,    44,     0,     0,   363,   363,   355,     0,     0,     0,
+       0,     0,     0,   355,   355,   355,     0,     0,     0,     0,
+     363,     0,     0,     0,   355,   355,   266,     0,   216,     0,
+       0,     0,     0,     0,    47,    48,     0,    79,   363,     0,
+       0,     0,     0,     0,     0,   215,     0,     0,     0,    88,
+       0,   956,   957,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   587,     0,
+     594,     0,     0,     0,     0,    88,   355,     0,   363,     0,
+       0,   618,   619,     0,     0,   128,   128,   128,     0,     0,
+       0,     0,     0,     0,   356,   356,     0,   356,   356,     0,
+       0,     0,     0,     0,     0,     0,   637,     0,     0,     0,
+       0,     0,  1021,   363,     0,    81,     0,     0,     0,     0,
+       0,    59,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,   215,   348,     0,   355,     0,     0,     0,   356,
+     356,     0,  1070,    33,     0,     0,   363,   128,     0,   128,
+       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
+       0,     0,   226,     0,     0,     0,     0,   363,     0,     0,
+       0,    36,     0,     0,   276,     0,     0,     0,     0,    59,
+       0,     0,     0,    79,     0,     0,     0,     0,     0,     0,
+      79,     0,     0,     0,     0,     0,     0,  1071,     0,   637,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   346,   281,   282,    31,   283,     0,     0,     0,     0,
-       0,     0,     0,     0,    79,     0,     0,     0,     0,     0,
-       0,   213,  1166,     0,     0,     0,     0,     0,     0,  1514,
-       0,   284,    34,     0,     0,     0,   354,   285,     0,     0,
-       0,   286,     0,   354,   287,   288,   289,   290,   291,   292,
-      41,    42,   361,   293,   294,     0,     0,     0,     0,   346,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   353,
-     353,     0,   353,   353,     0,     0,   295,     0,   376,     0,
-       0,     0,     0,     0,   342,    46,   297,   298,   299,   300,
-      77,     0,     0,     0,     0,   361,   361,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   585,     0,   592,
-       0,   361,     0,     8,     9,    10,    11,    12,   213,     0,
-     616,   617,     0,     0,   353,   353,     0,     0,     0,   361,
-       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
-      86,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   354,   354,     0,   354,   354,     0,     0,
-       0,     0,     0,     0,    31,     0,    86,     0,     0,   361,
-      34,     0,     0,     0,    79,    37,     0,   182,   183,    40,
-       0,     0,     0,     0,     0,     0,     0,     0,    41,    42,
-       0,     0,    34,     0,     0,   353,     0,    37,     0,   182,
-     183,    40,     0,     0,   361,     0,     0,     0,   354,   354,
-      41,    42,     0,     0,   890,     0,   408,     0,    57,     0,
-       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1489,   222,   408,     0,
-     346,     0,     0,     0,    45,    46,     0,   361,   281,   282,
-       0,   283,     0,     0,     0,     0,     0,   361,    77,     0,
-       0,     0,     0,   224,     0,     0,     0,     0,   361,     0,
-     353,     0,   353,     0,     0,     0,     0,   284,     0,   354,
-       0,     0,     0,   285,     0,     0,    57,   286,     0,     0,
-     287,   288,   289,   290,   291,   292,    41,    42,     0,   293,
-     294,     0,     0,     0,     0,     0,     0,   353,     0,     0,
-       0,     0,     0,     0,   353,   353,   353,     0,     0,     0,
-       0,   223,   295,     0,   376,   353,   353,     0,    86,     0,
-      45,    46,   297,   298,   299,   300,     0,     0,    77,     0,
-       0,     0,    79,   777,     0,     0,     0,     0,     0,     0,
-     361,     0,     0,     0,   354,     0,   354,   361,     0,     0,
-     346,   346,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   353,    57,     0,
-       0,     0,     0,     0,   210,     0,     0,     0,     0,     0,
-       0,   354,     0,   230,     0,   234,     0,   236,   354,   354,
-     354,     0,     0,     0,   245,     0,     0,     0,     0,   354,
-     354,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    79,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   210,     0,   234,   236,   245,
-       0,     0,     0,     0,     0,     0,   353,     0,     0,     0,
-       0,     0,     0,     0,     0,   910,     0,   911,     0,     0,
-       0,   354,     0,     0,   914,   915,     0,   361,   361,   920,
-     361,   361,     0,     0,     0,     0,     0,   210,     0,     0,
-       0,     0,   926,     0,     0,     0,     0,   930,    86,     0,
-       0,     0,     0,     0,    77,     0,     0,     0,     0,     0,
-       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   592,     0,     0,     0,     0,     0,
-       0,     0,   361,   361,    57,    57,     0,     0,     0,     0,
-     354,     0,     0,     0,     0,     0,     0,     0,   210,     0,
-     234,   236,   245,     0,     0,     0,    57,     0,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    57,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   210,     0,    79,     0,
-       0,   210,     0,     0,     0,    79,     0,     0,     0,     0,
-       0,     0,     0,   361,     0,     0,   493,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1004,     0,  1005,
-    1006,  1007,     0,   346,   346,     0,     0,     0,     0,     0,
-       0,    57,   164,     0,     0,     0,    57,     0,  1051,     0,
-       0,     0,     0,     0,     0,   224,     0,    79,     0,   217,
-       0,     0,  1057,     0,     0,     0,     0,   210,     0,     0,
-       0,     0,     0,     0,     0,     0,    86,     0,     0,    57,
-       0,     0,     0,     0,     0,     0,   210,     0,   361,     0,
-     361,   234,   236,     0,     0,     0,     0,     0,     0,   245,
-       0,  1077,     0,     0,     0,     0,   164,     0,     0,     0,
-     271,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   361,     0,     0,     0,     0,
-       0,     0,   361,   361,   361,     0,     0,     0,     0,   164,
-       0,   210,     0,   361,   361,  1107,     0,     0,     0,   367,
-    1117,     0,   372,     0,   346,  1120,    86,     0,     0,   210,
-    1124,     0,     0,     0,   210,  1126,   210,  1127,  1128,     0,
-       0,  1131,     0,     0,     0,     0,     0,     0,     0,    57,
-    1143,     0,   210,     0,     0,   210,   210,     0,     0,     0,
-       0,     0,     0,   210,     0,   361,  1157,  1158,     0,     0,
-       0,   164,    57,     0,     0,     0,     0,   210,     0,    57,
-       0,     0,     0,   217,   210,     0,     0,     0,     0,     0,
-       0,     0,  1187,     0,     0,  1189,     0,     0,     0,     0,
-       0,   164,     0,     0,     0,   124,   127,   128,     8,     9,
+     356,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    88,   996,   128,
+       0,     8,     9,    10,    11,    12,     0,   128,     0,   128,
+     128,     0,    79,     0,   128,     0,   128,   128,     0,   363,
+       0,     0,   225,   348,   348,     0,   363,     0,     0,     0,
+     283,   284,    33,   285,     0,     0,     0,     0,     0,     0,
+       0,    59,     0,    81,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,     0,   356,     0,   286,
+      36,     0,     0,  1021,     0,   287,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
+       0,   295,   296,     0,     0,     0,   128,     0,     0,     0,
+       0,     0,   356,     0,     0,     0,     0,     0,     0,   356,
+     356,   356,     0,     0,   297,     0,   378,     0,     0,     0,
+     356,   356,   344,    48,   299,   300,   301,   302,     0,     0,
+       0,     0,  1197,    81,     0,     0,     0,     0,     0,     0,
+       0,   166,     0,     0,     0,     0,   363,   363,     0,   363,
+     363,     0,     0,     0,     0,     0,     0,     0,   219,     0,
+       0,     0,     0,     0,     0,     0,     0,    88,     0,     0,
+       0,     0,   356,     0,     0,     0,     0,     0,     0,     0,
+       0,   283,   284,     0,   285,  1264,   912,     0,   913,     0,
+       0,     0,     0,     0,     0,   916,   917,    59,    59,     0,
+     922,   363,   363,     0,     0,   166,     0,     0,     0,   273,
+     286,     0,     0,   928,     0,     0,   287,     0,   932,    59,
+     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
+      44,     0,   295,   296,     0,     0,     0,    59,   166,     0,
+       0,   356,     0,     0,     0,   594,     0,     0,   369,     0,
+       0,   374,     0,     0,     0,   297,     0,   378,     0,     0,
+    1286,     0,     0,    47,    48,   299,   300,   301,   302,     0,
+       0,     0,   363,     0,     0,     0,   779,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   348,   348,     0,    81,
+       0,     0,     0,     0,    59,     0,    81,     0,     0,    59,
+     166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   219,     0,   226,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     166,     0,    59,     0,     0,    88,     0,     0,  1006,     0,
+    1007,  1008,  1009,     0,     0,     0,     0,   363,    81,   363,
+       0,     0,     0,     0,     0,   374,     0,     0,     0,  1053,
+       0,     0,   166,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1059,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   363,     0,     0,   522,     0,     0,
+       0,   363,   363,   363,     0,     0,     0,     0,   128,   128,
+     166,     0,   363,   363,     0,     0,     0,   348,     0,     0,
+       0,     0,  1079,     0,     0,    88,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   128,     0,     0,   128,   128,
+       0,   128,    59,   128,   128,   592,     0,     0,   128,   128,
+     616,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   363,    59,  1109,     0,     0,     0,
+       0,  1119,    59,     0,     0,     0,  1122,     0,     0,     0,
+       0,  1126,     0,     0,     0,     0,  1128,     0,  1129,  1130,
+       0,     0,  1133,     0,     0,     0,     0,     0,     0,     0,
+       0,  1145,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1159,  1160,     0,
+       0,     0,     0,     0,    59,   166,   166,     0,     0,     0,
+       0,   369,     0,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1189,     0,     0,  1191,     0,     0,     0,
+       0,     0,   522,     0,     0,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,  -298,     0,     0,     0,
+     708,    88,     0,     0,   128,   128,     0,    33,    88,  1205,
+       0,     0,   166,     0,     0,  1209,  1210,     0,     0,     0,
+       0,     0,     0,     0,   522,     0,   522,     0,     0,   522,
+       0,   166,   522,     0,  1226,    36,     0,     0,     0,  1233,
+       0,     0,     0,   369,  1237,     0,  -298,     0,     0,     0,
+       0,     0,     0,     0,     0,  1244,     0,     0,     0,     0,
+      88,     0,     0,     0,     0,     0,     0,     0,  1251,     0,
+    1253,  1254,  1255,  1256,     0,     0,     0,   212,     0,     0,
+       0,     0,     0,     0,     0,  1263,   232,  1159,   236,     0,
+     238,   173,     0,     0,     0,   166,     0,   247,     0,     0,
+       0,     0,     0,     0,     0,     0,   369,     0,     0,   799,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,  1291,
+    1292,     0,     0,     0,     0,     0,     0,     0,   212,     0,
+     236,   238,   247,     0,     0,   592,     0,     0,     0,     0,
+     592,     0,     0,     0,     0,     0,     0,     0,     0,   369,
+     369,     0,     0,     0,     0,   128,     0,     0,     0,     0,
+     128,     0,     0,     0,     0,   369,     0,     0,     0,     0,
+     212,     0,     0,  1326,  1327,     0,     0,     0,     0,     0,
+       0,     0,     0,  1337,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   522,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,   372,     0,     0,     0,
-       0,    57,     0,   164,   361,     0,     0,    31,  1203,     0,
-       0,     0,     0,     0,  1207,  1208,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   520,     0,
-       0,     0,     0,  1224,     0,    34,     0,     0,  1231,     0,
-       0,   164,     0,  1235,     0,     0,     0,   253,     0,   254,
-       0,     0,    86,     0,  1242,     0,     0,     0,     0,    86,
-       0,     0,     0,     0,     0,   210,     0,  1249,     0,  1251,
-    1252,  1253,  1254,     0,     0,     0,   590,     0,     0,     0,
-       0,   614,     0,     0,  1261,     0,  1157,     0,     0,     0,
-     171,     0,     0,   210,     0,     0,     0,     0,   210,     0,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+      28,    29,    30,   369,     0,   921,     0,     0,     0,    33,
+       0,   212,     0,   236,   238,   247,     0,   158,     0,     0,
+       0,     0,     0,     0,     0,  1372,     0,  1373,  1374,  1375,
+       0,     0,     0,     0,     0,     0,     0,    36,   708,  1379,
+       0,     0,    39,     0,    40,    41,    42,  1390,     0,   212,
+       0,     0,     0,     0,   212,    43,    44,     0,     0,     0,
+       0,     0,     0,     0,   252,     0,     0,     0,     0,   495,
+       0,     0,  1411,  1412,   257,     0,     0,     0,     0,     0,
+       0,    45,     0,    46,     0,     0,     0,     0,     0,    47,
+      48,   324,     0,     0,     0,   128,   616,     0,     0,     0,
+       0,   346,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   381,   381,     0,     0,     0,  1451,  1452,     0,
+     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1457,     0,     0,     0,     0,     0,     0,  1457,     0,   212,
+       0,     0,     0,   385,   236,   238,     0,     0,     0,     0,
+       0,     0,   247,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   417,     0,     0,     0,
+    1490,     0,     0,     0,  1496,     0,     0,     0,     0,     0,
+     431,     0,     0,   324,   369,     0,     0,     0,     0,   436,
+       0,   708,     0,     0,   212,     0,     0,     0,     0,   444,
+       0,     0,  1518,     0,  1519,     0,   522,   476,     0,     0,
+       0,     0,   212,     0,     0,     0,     0,   212,     0,   212,
+       0,     0,     0,   128,   462,     0,     0,     0,     0,   472,
+       0,   166,  1534,  1535,     0,   212,     0,     0,   212,   212,
+    1538,  1539,   480,     0,     0,     0,   212,     0,   490,     0,
+     494,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,     0,     0,     0,     0,     0,   212,     0,   523,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    86,     0,     0,     0,     0,     0,     0,  1289,  1290,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   393,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   412,
-     413,     0,     0,     0,   417,     0,   419,   420,     0,     0,
-     156,     0,     0,     0,     0,     0,   164,   164,     0,     0,
-       0,     0,   367,     0,     0,     0,     0,   210,     0,     0,
-       0,     0,  1324,  1325,     0,     0,     0,     0,     0,     0,
-       0,   210,  1335,   520,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   250,     0,     0,
-       0,     0,   493,     0,     0,     0,     0,   255,     0,     0,
-       0,   706,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   164,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   520,     0,   520,     0,     0,
-     520,     0,   164,   520,  1370,     0,  1371,  1372,  1373,     0,
-       0,     0,     0,     0,   367,     0,     0,     0,  1377,     0,
-       0,   210,     0,     0,     0,     0,  1388,     0,     0,     0,
-       0,     0,   210,     0,     0,     0,   383,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   210,
-       0,  1409,  1410,     0,     0,     0,     0,     0,     0,   415,
-       0,     0,     0,     0,     0,     0,   164,     0,     0,     0,
-       0,     0,     0,   429,     0,     0,     0,   367,     0,     0,
-     797,     0,   434,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   442,     0,     0,     0,  1449,  1450,     0,     0,
-       0,     0,     0,     0,     0,     0,   590,     0,     0,  1455,
-       0,   590,     0,     0,     0,     0,  1455,   460,     0,     0,
-     367,   367,   470,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   478,   367,     0,     0,     0,
-       0,   488,     0,   492,     0,     0,     0,     0,     0,  1488,
-       0,     0,     0,  1494,     0,     0,     0,     0,     0,     0,
-     210,     0,   521,     0,     0,     0,     0,     0,   520,     0,
+       0,     0,     0,   592,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,   369,   369,    28,    29,    30,     0,
+     582,     0,     0,     0,   586,    33,     0,     0,     0,     0,
+       0,     0,   381,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1516,     0,  1517,     0,     0,     0,     0,     0,     0,
-     210,     0,     0,     0,   367,     0,   919,     0,     0,     0,
-       0,     0,     0,   580,     0,     0,     0,   584,     0,     0,
-       0,  1532,  1533,     0,     0,     0,     0,     0,     0,  1536,
-    1537,     0,   210,     0,     0,     0,     0,     0,     0,   706,
-       0,     0,     0,   210,     0,   627,     0,     0,     0,   628,
-     629,     0,   630,     0,     0,     0,     0,     0,     0,   641,
-     642,     0,   643,   644,     0,   645,     0,   646,     0,     0,
+       0,     0,   629,    36,     0,     0,   630,   631,     0,   632,
+     208,    41,     0,     0,     0,     0,   643,   644,     0,   645,
+     646,   522,   647,     0,   648,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   212,     0,
+       0,   582,     0,     0,     0,     0,     0,     0,     0,   663,
+       0,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   212,     0,     0,     0,
+       0,   212,     0,   674,     0,   702,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   708,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   700,
+       0,     0,     0,     0,     0,   703,     0,     0,     0,     0,
+     462,     0,     0,     0,   735,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   751,     0,   219,     0,
+       0,     0,   735,     0,     0,   735,   341,   364,     0,     0,
+     212,     0,     0,     0,     0,     0,   738,     0,   760,     0,
+       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,   756,     0,     0,   708,     0,     0,     0,     0,   413,
+       0,     0,     0,     0,     0,   495,   413,     0,   789,     0,
+       0,     0,     0,     0,     0,   346,     0,     0,     0,   751,
+       0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
+       0,     0,     0,     0,     0,     0,     0,   791,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   369,   369,     0,
+       0,     0,     0,     0,     0,   219,     0,   812,     0,     0,
+       0,     0,     0,     0,   212,   850,     0,     0,     0,     0,
+       0,     0,     0,   381,     0,   212,     0,     0,   413,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   580,     0,     0,     0,   785,   786,
-       0,     0,   661,     0,     0,     0,     0,   614,     0,     0,
+       0,     0,   212,     0,     0,   851,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
+       0,   884,     0,     0,     0,   413,     0,     0,     0,   891,
+       0,     0,     0,   413,   578,     0,   413,   581,     0,   926,
+       0,     0,     0,     0,   364,     0,    36,     0,   608,     0,
+       0,    39,     0,   208,    41,    42,     0,     0,   369,     0,
+     252,   751,     0,   950,    43,    44,     0,   626,     0,     0,
+       0,   929,   930,   960,     0,     0,     0,     0,     0,   967,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   210,     0,     0,   816,   672,     0,   819,   820,
-       0,   823,     0,   825,   826,     0,   210,     0,   827,   828,
-       0,   126,   126,   126,   503,     0,   505,   508,     0,     0,
-       0,     0,   698,     0,     0,     0,   511,   512,   701,     0,
-       0,     0,     0,   460,     0,     0,     0,     0,     0,     0,
-       0,   505,   505,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   339,
-     362,     0,     0,     0,     0,   367,     0,     0,     0,   736,
-       0,     0,   706,     0,     0,     0,   505,     0,     0,     0,
-       0,     0,     0,   126,   754,   126,     0,   520,     0,     0,
-       0,     0,   411,     0,   210,     0,     0,     0,     0,   411,
+      45,     0,   271,   212,     0,     0,   413,     0,    47,    48,
+     413,     0,     0,   964,     0,     0,     0,     0,   968,     0,
+       0,     0,     0,     0,     0,   522,     0,   522,     0,   984,
+     985,     0,     0,   212,     0,     0,     0,     0,     0,     0,
+     364,     0,     0,     0,     0,   346,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     274,   505,   164,     0,     0,     0,     0,     0,     0,     0,
-       0,   779,     0,     0,     0,     0,     0,     0,     0,     0,
-     789,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   954,   955,     0,     0,     0,     0,
-     810,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   590,   126,     0,     0,     0,     0,
-       0,   411,     0,   126,     0,   126,   126,     0,     0,     0,
-     126,     0,   126,   126,     0,   367,   367,     0,   849,     0,
-       0,   210,     0,     0,   463,     2,   205,     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,   882,     0,     0,     0,   411,     0,
-      31,     0,   889,     0,     0,     0,   411,   576,     0,   411,
-     579,     0,   520,     0,     0,     0,     0,   362,     0,     0,
-       0,   606,   126,     0,     0,     0,     0,     0,    34,     0,
-      35,     0,    36,   250,     0,    38,    39,     0,     0,     0,
-     624,     0,     0,     0,   927,   928,     0,     0,     0,   505,
-     505,   505,   505,   505,   505,   505,   505,   505,   505,   505,
-     505,   505,   505,   505,   505,   505,   505,     0,     0,   411,
-    1069,     0,     0,   411,     0,     0,   962,    -3,   706,     0,
-       0,   966,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    -298,     0,     0,   362,     0,     0,     0,     0,     0,     0,
-       0,    31,     0,   322,     0,     0,     0,     0,     0,   217,
-       0,     0,     0,   344,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   379,   379,     0,     0,     0,    34,
-       0,   999,     0,     0,     0,     0,     0,     0,  1000,   411,
-    -298,     0,   362,     0,     0,   706,     0,     0,     0,     0,
-       0,  1002,     0,  1003,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1013,     0,     0,     0,
-       0,     0,  1017,     0,     0,     0,     0,     0,     0,   505,
-       0,   411,     0,     0,  1054,   362,     0,  1055,     0,     0,
-       0,     0,     0,     0,     0,   322,     0,     0,   367,   367,
-       0,     0,   210,     0,     0,     0,   217,     0,     0,     0,
-       0,     0,     0,     0,     0,  1195,     0,     0,     0,   474,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   411,
-     411,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     505,     0,     0,     0,     0,     0,     0,   792,   362,     0,
-       0,     0,     0,     0,     0,     0,     0,   606,     0,   606,
-     606,     0,     0,     0,     0,     0,   606,     0,     0,     0,
-     505,     0,     0,     0,     0,     0,   829,   362,     0,     0,
-       0,     0,   362,     0,     0,     0,     0,     0,     0,     0,
-       0,   362,   362,     0,     0,  1125,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   362,     0,     0,
-       0,     0,   411,   870,   126,   126,   411,   873,     0,   367,
-       0,     0,     0,   875,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   379,     0,     0,     0,     0,     0,
-       0,   126,   411,  1284,   126,   126,     0,   126,     0,   126,
-     126,     0,     0,     0,   126,   126,  1188,     0,     0,     0,
-       0,     0,     0,     0,     0,   362,   606,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   520,     0,   520,     0,
-       0,     0,     0,     0,   505,     0,     0,     0,     0,     0,
-    1200,     0,     0,     0,     0,  1202,     0,     0,     0,     0,
-     362,     0,     0,  1206,   411,   411,     0,     0,     0,     0,
-       0,     0,     0,   520,     0,   520,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   700,     0,     0,
-     505,     0,     0,     0,     0,     0,     0,  1237,     0,     0,
-       0,     0,   164,     0,     0,     0,     0,   411,  1244,     0,
-       0,  1245,     0,  1246,     0,     0,     0,     0,     0,     0,
-       0,     0,   505,   606,     0,   606,   733,     0,  1255,  1256,
-       0,     0,     0,     0,   505,   606,     0,     0,   749,     0,
-       0,     0,     0,     0,   733,     0,     0,   733,  1268,     0,
-     126,   126,  1141,     0,     0,     8,     9,    10,    11,    12,
-     758,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   505,     0,     0,     0,     0,     0,     0,
-       0,     0,   281,   282,    31,   283,     0,     0,     0,     0,
-     787,     0,     0,     0,  1307,     0,     0,   344,     0,     0,
-       0,   749,  1311,     0,     0,     0,   362,     0,     0,     0,
-       0,   284,    34,   362,   411,     0,   411,   285,     0,     0,
-     411,   286,     0,     0,   287,   288,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
-       0,   606,   606,     0,     0,     0,     0,   848,     0,   505,
-       0,     0,     0,     0,     0,   379,   295,     0,   376,     0,
-       0,     0,     0,     0,  1142,    46,   297,   298,   299,   300,
-       0,     0,  1358,     0,  1359,     0,   411,     0,     0,     0,
+       0,     0,   522,     0,   522,   212,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   212,     0,  1001,     0,
+       0,     0,     0,     0,  1013,  1002,   413,     0,   381,   364,
+       0,   166,     0,     0,     0,     0,     0,     0,  1004,     0,
+    1005,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1015,     0,     0,     0,   346,     0,  1019,
+       0,     0,     0,     0,   346,     0,     0,     0,   413,     0,
+       0,  1056,   364,     0,  1057,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   212,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
+       0,     0,     0,     0,   324,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1368,     0,  1369,     0,     0,   411,  1123,     0,     0,     0,
-       0,   126,     0,     0,     0,   362,   126,  1376,   505,   505,
-       0,   411,  1134,     0,   606,   606,  1139,     0,     0,     0,
-       0,     0,  1394,  1396,     0,     0,   362,   362,     0,     0,
-       0,   924,     0,  1401,     0,     0,  1206,     0,     0,     0,
+       0,   381,     0,     0,   794,   364,   960,     0,     0,   735,
+       0,     0,     0,     0,   608,     0,   608,   608,     0,     0,
+       0,     0,     0,   608,     0,     0,     0,     0,     0,  1131,
+       0,     0,     0,   831,   364,     0,     0,     0,     0,   364,
+    1146,     0,     0,     0,     0,     0,     0,     0,   364,   364,
+       0,     0,  1127,     0,     0,     0,     0,   212,     0,     0,
+     381,     0,  1163,     0,   364,     0,     0,     0,     0,   413,
+     872,     0,     0,   413,   875,     0,     0,   960,   960,   505,
+     877,   507,   510,     0,     0,     0,     0,     0,     0,     0,
+       0,   513,   514,     0,     0,     0,     0,  1194,     0,   413,
+       0,     0,     0,     0,     0,     0,   507,   507,     0,     0,
+       0,     0,     0,  1190,     0,     0,     0,     0,     0,     0,
+       0,     0,   364,   608,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   749,     0,   948,     0,     0,  1424,     0,
-       0,     0,     0,     0,     0,   958,     0,  1431,     0,     0,
-    1433,   965,  1435,  1437,  1439,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   411,     0,   411,     0,
-       0,     0,     0,   411,     0,     0,     0,     0,     0,     0,
-       0,     0,   606,     0,     0,     0,     0,     0,     0,     0,
-       0,   982,   983,  1470,     0,  1472,     0,  1206,     0,     0,
-       0,     0,     0,     0,     0,   411,  1220,   344,     0,     0,
-       0,     0,     0,  1483,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   362,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   126,     0,     0,     0,     0,  1011,     0,     0,     0,
-     379,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+       0,   507,     0,     0,     0,     0,     0,  1202,     0,     0,
+       0,   960,  1204,     0,   212,     0,     0,   364,     0,     0,
+    1208,   413,   413,     0,     0,     0,     0,     0,     0,     0,
+     850,     0,     0,     0,     0,     0,   507,     0,     0,     0,
+       0,     0,     0,     0,     0,  1249,  1250,     0,     0,     0,
+       0,     0,     0,     0,  1239,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   413,  1246,     0,     0,  1247,     0,
+    1248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     608,     0,   608,     0,     0,  1257,  1258,     0,     0,     0,
+       0,     0,   608,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1270,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  -523,     0,     0,     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,     0,   344,
-       0,     0,     0,     0,    31,     0,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   505,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   362,     0,     0,     0,
-       0,     0,    34,   505,     0,     0,     0,     0,     0,   206,
-      39,     0,     0,     0,     0,     0,   322,   204,     2,   205,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+      31,  1309,     0,    32,     0,     0,    33,    34,     0,  1313,
+       0,     0,     0,   364,     0,     0,     0,     0,     0,     0,
+     364,   413,     0,   413,     0,     0,     0,   413,     0,     0,
+       0,    35,     0,     0,    36,     0,    37,  1354,    38,    39,
+     735,    40,    41,    42,     0,     0,     0,     0,   608,   608,
+       0,     0,    43,    44,   507,   507,   507,   507,   507,   507,
+     507,   507,   507,   507,   507,   507,   507,   507,   507,   507,
+     507,   507,     0,     0,     0,     0,     0,     0,    45,  1360,
+      46,  1361,     0,   413,     0,     0,    47,    48,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1370,     0,  1371,
+       0,     0,   413,  1125,     0,     0,     0,     0,     0,     0,
+       0,     0,   364,     0,  1378,   212,     0,     0,   413,  1136,
+       0,   608,   608,  1141,     0,     0,     0,     0,     0,  1396,
+    1398,     0,     0,   364,   364,     0,     0,     0,     0,     0,
+    1403,     0,     0,  1208,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,  -299,  1426,     0,     0,     0,     0,
+       0,     0,     0,     0,  1433,    33,     0,  1435,     0,  1437,
+    1439,  1441,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   413,   507,   413,     0,     0,     0,     0,
+     413,     0,     0,    36,     0,     0,     0,     0,     0,   608,
+       0,     0,     0,     0,  -299,     0,     0,     0,     0,     0,
+    1472,     0,  1474,     0,  1208,     0,     0,     0,     0,     0,
+       0,     0,   413,  1222,     0,     0,     0,     0,     0,     0,
+    1485,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   324,   507,   364,     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,   379,    26,    27,    28,     0,   958,   362,
-     362,   733,     0,    31,    45,    46,     0,     0,     0,   126,
+      24,    25,    26,    27,     0,   507,    28,    29,    30,    31,
+       0,     0,    32,   283,   284,    33,  1022,  1023,     0,  1024,
+       0,     0,  1025,  1026,  1027,  1028,  1029,  1030,  1031,  1032,
+       0,     0,     0,  1033,     0,     0,     0,  1034,  1035,     0,
+      35,     0,   286,    36,     0,    37,     0,    38,  1036,     0,
+      40,    41,   288,   364,     0,   289,   290,   291,   292,   293,
+     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1129,     0,     0,     0,   505,   505,     0,     0,     0,
-       0,    34,  1144,    35,     0,    36,    37,     0,   206,    39,
-      40,     0,     0,     0,     0,     0,     0,     0,     0,    41,
-      42,     0,   379,     0,  1161,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   958,
-     958,     0,     0,     0,     0,    43,     0,   207,     0,     0,
-       0,     0,     0,    45,    46,     0,     0,     0,     0,  1192,
-       0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
+       0,     0,     0,     0,     0,     0,     0,   297,     0,   298,
+       0,     0,   172,     0,     0,    47,    48,   299,   300,   301,
+     302,     0,     0,     0,     0,  1037,   364,   364,     0,     0,
+    -134,     0,     0,     0,     0,     0,     0,     0,     0,   507,
+       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,    26,    27,     0,     0,    28,
+      29,    30,    31,     0,     0,    32,   283,   284,    33,   285,
+       0,     0,     0,     0,     0,   507,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
+      38,   287,     0,    40,    41,   288,     0,   507,   289,   290,
+     291,   292,   293,   294,    43,    44,     0,   295,   296,   507,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
+     297,     0,   298,     0,     0,     0,     0,     0,    47,    48,
+     299,   300,   301,   302,     0,     0,     0,     0,   507,     0,
+       0,     0,     0,  -134,     0,     0,     0,     0,     0,     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,    26,    27,     0,     0,    28,    29,
+      30,    31,     0,     0,    32,     0,     0,    33,    34,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   413,     0,     0,     0,
+       0,     0,    35,     0,   507,    36,     0,    37,     0,    38,
+      39,     0,    40,    41,    42,     0,     0,     0,     0,     0,
+     413,   413,     0,    43,    44,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   413,     0,     0,     0,    45,
+       0,    46,     0,     0,     0,  -527,     0,    47,    48,     0,
+       0,     0,     0,   507,   507,     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,
-     362,     0,    26,    27,    28,    29,     0,     0,    30,     0,
-       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   958,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,    35,   848,    36,     0,     0,    38,    39,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1247,  1248,     0,
-       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,    44,    26,    27,    28,   411,
-       0,    45,    46,     0,     0,    31,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   411,   411,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
-      38,    39,     0,     0,     0,     0,     0,     0,   411,     0,
-       0,     0,     1,     2,   205,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,  -418,    26,
-      27,    28,    29,     0,     0,    30,   281,   282,    31,  1020,
-    1021,     0,  1022,     0,     0,  1023,  1024,  1025,  1026,  1027,
-    1028,  1029,  1030,     0,     0,     0,  1031,     0,     0,  1352,
-    1032,  1033,   733,    33,     0,   284,    34,     0,    35,     0,
-      36,  1034,     0,    38,    39,   286,     0,     0,   287,   288,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+      26,    27,     0,     0,    28,    29,    30,    31,     0,     0,
+      32,   283,   284,    33,   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,
-     295,     0,   296,     0,     0,   170,     0,     0,    45,    46,
-     297,   298,   299,   300,     0,     0,     0,     0,  1035,     0,
-       0,     0,     0,  -134,     1,     2,   205,     4,     5,     6,
+     286,    36,     0,    37,     0,    38,   287,     0,    40,    41,
+     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
+      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   297,     0,   298,     0,     0,
+       0,     0,     0,    47,    48,   299,   300,   301,   302,     0,
+       0,     0,     0,     0,     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,    29,     0,     0,    30,   281,   282,
-      31,   283,     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,   284,    34,     0,
-      35,    31,    36,   285,     0,    38,    39,   286,     0,     0,
-     287,   288,   289,   290,   291,   292,    41,    42,     0,   293,
-     294,     0,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,     0,     0,     0,   110,     0,    38,    39,     0,     0,
-       0,     0,   295,     0,   296,     0,     0,    41,    42,     0,
-      45,    46,   297,   298,   299,   300,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  -134,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   322,     1,     2,   205,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
+     283,   284,    33,   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,
+      36,     0,    37,     0,    38,   287,     0,    40,    41,   288,
+       0,   507,   289,   290,   291,   292,   293,   294,    43,    44,
+       0,   295,   296,     0,     0,     0,     0,     0,   507,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   297,     0,   343,     0,     0,     0,
+       0,   750,   344,    48,   299,   300,   301,   302,     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,   281,   282,    31,   283,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -299,     0,     0,     0,     0,     0,     0,
-     284,    34,     0,    35,    31,    36,   285,     0,    38,    39,
-     286,     0,     0,   287,   288,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  -299,     0,   295,     0,   296,     0,     0,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,     2,
-     205,     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,   281,   282,    31,   283,     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,   284,    34,     0,    35,    31,    36,   285,     0,    38,
-      39,   286,     0,     0,   287,   288,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      38,    39,     0,     0,     0,     0,   295,     0,   341,     0,
-       0,     0,     0,   748,   342,    46,   297,   298,   299,   300,
-       2,   205,     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,   281,   282,    31,   283,     8,     9,    10,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
+       0,     0,     0,   283,   284,    33,   285,     0,     0,     0,
+     507,   507,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   286,    36,     0,    37,     0,    38,   287,     0,
+      40,    41,   288,     0,     0,   289,   290,   291,   292,   293,
+     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   297,     0,   343,
+       0,     0,     0,     0,   750,    47,    48,   299,   300,   301,
+     302,     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,   284,    34,     0,    35,    31,    36,   285,     0,
-      38,    39,   286,     0,     0,   287,   288,   289,   290,   291,
-     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
-       0,   206,    39,     0,     0,     0,     0,   295,     0,   341,
-       0,     0,     0,     0,   748,    45,    46,   297,   298,   299,
-     300,     2,   205,     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,   281,   282,    31,   283,     0,     0,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,   283,   284,    33,   285,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   284,    34,     0,    35,     0,    36,   285,
-       0,    38,    39,   286,     0,     0,   287,   288,   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,
-     341,     0,     0,     0,     0,     0,   342,    46,   297,   298,
-     299,   300,     2,   205,     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,   281,   282,    31,   283,     0,
+       0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
+      38,   287,     0,    40,    41,   288,     0,     0,   289,   290,
+     291,   292,   293,   294,    43,    44,     0,   295,   296,     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,   284,    34,     0,    35,     0,    36,
-     285,     0,   206,    39,   286,     0,     0,   287,   288,   289,
-     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
+     297,     0,   343,     0,     0,     0,     0,     0,   344,    48,
+     299,   300,   301,   302,     2,   207,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,     0,     0,     0,     0,   283,
+     284,    33,   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,   295,
-       0,   979,     0,     0,     0,     0,     0,   980,    46,   297,
-     298,   299,   300,     2,   205,     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,   281,   282,    31,   283,
+       0,     0,     0,     0,     0,     0,     0,     0,   286,    36,
+       0,    37,     0,    38,   287,     0,   208,    41,   288,     0,
+       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
+     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   297,     0,   981,     0,     0,     0,     0,
+       0,   982,    48,   299,   300,   301,   302,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,   283,   284,    33,   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,     0,     0,     0,   284,    34,     0,    35,     0,
-      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,   286,    36,     0,    37,     0,    38,   287,     0,   208,
+      41,   288,     0,     0,   289,   290,   291,   292,   293,   294,
+      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
+       0,     0,     0,     0,    47,    48,   299,   300,   301,   302,
+       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,    26,    27,     0,     0,    28,
+      29,    30,    31,     0,     0,    32,     0,     0,    33,    34,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     295,     0,   376,     0,     0,     0,     0,     0,    45,    46,
-     297,   298,   299,   300,  -521,     0,     0,     1,     2,     3,
+       0,     0,     0,    35,     0,     0,    36,     0,    37,     0,
+      38,    39,     0,    40,    41,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      45,     0,    46,     0,     0,     0,     0,     0,    47,    48,
+     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,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,     0,     0,    28,    29,    30,    36,     0,    37,     0,
+      38,    39,    33,   208,    41,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,    43,    44,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      36,     0,     0,     0,     0,     0,     0,    40,    41,     0,
+      45,     0,   209,     0,     0,     0,     0,     0,    47,    48,
+       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,    26,    27,  -298,     0,    28,
+      29,    30,    31,     0,     0,    32,     0,     0,    33,     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,    36,     0,    37,     0,
+      38,     0,     0,    40,    41,     0,     0,  -298,     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,    26,    27,     0,     0,    28,    29,    30,
+      31,     0,    46,    32,     0,     0,    33,     0,    47,    48,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    36,     0,    37,     0,    38,     0,
+       0,    40,    41,   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,    26,    27,
+       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+      46,    33,     0,     0,     0,     0,    47,    48,     0,  1143,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,    37,     0,    38,     0,     0,   208,    41,     0,     0,
+       0,   283,   284,    33,   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,    36,     0,     0,     0,   209,   287,     0,     0,     0,
+     288,    47,    48,   289,   290,   291,   292,   293,   294,    43,
+      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   297,     0,   378,     0,     0,
+       0,     0,     0,  1144,    48,   299,   300,   301,   302,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,    36,     0,    37,     0,    38,    39,
+      33,   208,    41,    42,     0,     0,     0,     0,     0,     0,
+       0,     0,    43,    44,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+       0,     0,     0,     0,     0,    40,    41,     0,    45,     0,
+     209,     0,     0,     0,     0,     0,    47,    48,     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,    32,     0,     0,     0,     0,     0,
+      24,    25,    26,    27,   258,     0,    28,    29,    30,     0,
+      47,    48,     0,     0,     0,    33,     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,     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,     3,     4,     5,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+      40,    41,     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,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,     0,     0,  -407,   670,
+      33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,     0,     0,    40,    41,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,  1334,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   670,     0,     0,     0,     0,     0,
+      47,    48,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+      28,    29,    30,     0,     0,     0,     0,     0,     0,    33,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,    36,     0,    37,
+       0,    38,     0,    33,    40,    41,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1336,     0,
+       0,    36,     0,     0,     0,     0,     0,     0,    40,    41,
+       0,     0,     0,   670,     0,     0,     0,     0,     0,    47,
+      48,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    46,     0,    28,
+      29,    30,     0,    47,    48,     0,     0,     0,    33,     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,    36,     0,    37,     0,
+      38,     0,     0,   208,    41,     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,    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,     0,     0,    41,    42,     0,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
+       0,     0,   271,    33,     0,     0,     0,     0,    47,    48,
        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,  -525,
-       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,    36,     0,    37,     0,    38,     0,     0,    40,    41,
+       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,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,   670,    33,     0,
+       0,     0,     0,    47,    48,     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,     0,     0,    41,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
+      38,     0,     0,   208,    41,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+       0,     0,     0,     0,   283,   284,    33,   285,     0,     0,
+       0,     0,   209,     0,     0,     0,     0,     0,    47,    48,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   286,    36,     0,     0,     0,     0,   287,
+       0,    40,    41,   288,     0,     0,   289,   290,   291,   292,
+     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
+     515,     0,     0,   172,     0,     0,    47,    48,   299,   300,
+     301,   302,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
+       0,   283,   284,    33,   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,    43,     0,    44,     0,     0,     0,     0,     0,    45,
-      46,     1,     2,   205,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,  -298,     0,    26,    27,
-      28,    29,     0,     0,    30,     0,     0,    31,     0,     0,
+     286,    36,     0,     0,     0,     0,   287,     0,    40,    41,
+     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
+      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   297,   -40,   298,     0,     0,
+       0,     0,     0,    47,    48,   299,   300,   301,   302,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,     0,     0,   283,   284,
+      33,   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,    36,     0,
+       0,     0,     0,   287,     0,    40,    41,   288,     0,     0,
+     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
+     296,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   297,     0,   298,     0,     0,     0,     0,     0,
+      47,    48,   299,   300,   301,   302,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
+      30,     0,     0,     0,     0,   283,   284,    33,   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,    34,     0,    35,     0,    36,
-       0,     0,    38,    39,     0,     0,  -298,   204,     2,   205,
+       0,     0,     0,     0,   286,    36,     0,     0,     0,     0,
+     287,     0,    40,    41,   288,     0,     0,   289,   290,   291,
+     292,   293,   294,    43,    44,     0,   295,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
+       0,   343,     0,     0,     0,     0,     0,    47,    48,   299,
+     300,   301,   302,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,   283,   284,    33,   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,    36,     0,     0,     0,     0,   287,     0,    40,
+      41,   288,     0,     0,   289,   290,   291,   292,   293,   294,
+      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
+       0,     0,     0,     0,    47,    48,   299,   300,   301,   302,
+     465,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,     0,    33,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,     0,    36,     0,    37,     0,
+      38,    33,     0,    40,    41,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,     0,     0,     0,   112,     0,    40,    41,     0,     0,
+       0,     0,     0,     0,     0,    -3,     0,    43,    44,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,    46,    28,    29,    30,     0,
+       0,    47,    48,     0,     0,    33,   677,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,    36,     0,     0,     0,     0,    33,   677,
+      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
+       0,     0,     0,    40,    41,     0,     0,     0,     0,   678,
+       0,     0,     0,   679,     0,    47,    48,     0,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,     0,   678,    28,    29,    30,  1072,     0,    47,    48,
+       0,     0,    33,   677,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
+      36,     0,     0,     0,     0,    33,     0,    40,    41,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
+     208,    41,     0,     0,     0,     0,   678,     0,     0,     0,
+    1199,     0,    47,    48,     0,     0,     0,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,   271,
+      28,    29,    30,     0,     0,    47,    48,     0,     0,    33,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,     0,     0,    36,     0,     0,
+       0,    33,     0,     0,    40,    41,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
+       0,     0,     0,   339,     0,     0,     0,     0,     0,    47,
+      48,     0,     0,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,   678,    28,    29,    30,     0,
+       0,    47,    48,     0,     0,    33,     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,    36,     0,     0,     0,     0,     0,     0,
+      40,    41,     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,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,     0,     0,     0,   670,
+      33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,     0,     0,    40,    41,   283,   284,     0,
+     285,  1023,     0,  1024,     0,     0,  1025,  1026,  1027,  1028,
+    1029,  1030,  1031,  1032,     0,     0,  1510,  1033,     0,     0,
+       0,  1034,  1035,     0,    35,     0,   286,     0,     0,     0,
+       0,     0,  1036,  -420,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   297,     0,   378,     0,     0,   172,     0,     0,    47,
+      48,   299,   300,   301,   302,     0,     0,   283,   284,  1037,
+     285,  1023,     0,  1024,  -134,     0,  1025,  1026,  1027,  1028,
+    1029,  1030,  1031,  1032,     0,     0,     0,  1033,     0,     0,
+       0,  1034,  1035,     0,    35,     0,   286,     0,     0,     0,
+       0,     0,  1036,     0,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   297,     0,   378,     0,     0,   172,     0,     0,    47,
+      48,   299,   300,   301,   302,     0,     0,     0,     0,  1037,
+       0,     0,     0,     0,  -134,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
+       0,     0,    33,     0,   283,   284,     0,   285,  1023,     0,
+    1024,  1382,  1383,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
+    1032,     0,     0,  1510,  1033,     0,     0,     0,  1034,  1035,
+      36,    35,    37,   286,    38,     0,     0,    40,    41,  1036,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
+       0,  1293,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
+     378,     0,     0,   172,     0,     0,    47,    48,   299,   300,
+     301,   302,     0,     0,   283,   284,  1037,   285,  1023,     0,
+    1024,  1382,  1383,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
+    1032,     0,     0,     0,  1033,     0,     0,     0,  1034,  1035,
+       0,    35,     0,   286,     0,     0,     0,     0,     0,  1036,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
+     378,     0,     0,   172,     0,     0,    47,    48,   299,   300,
+     301,   302,     0,     0,   283,   284,  1037,   285,  1023,     0,
+    1024,     0,     0,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
+    1032,     0,     0,     0,  1033,     0,     0,     0,  1034,  1035,
+       0,    35,     0,   286,     0,     0,     0,     0,     0,  1036,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
+       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
+     378,     0,     0,   172,     0,     0,    47,    48,   299,   300,
+     301,   302,   286,     0,     0,     0,  1037,     0,   633,     0,
+     141,   142,   288,     0,     0,   289,   290,   291,   292,   293,
+     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
+       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   297,     0,   634,
+       0,   635,   379,     0,     0,    47,    48,   299,   300,   301,
+     302,   286,     0,     0,     0,     0,     0,   287,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,   293,   294,
+      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
+       0,   283,   284,     0,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
+       0,   379,     0,     0,    47,    48,   299,   300,   301,   302,
+     286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
+      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
+     283,   284,     0,   285,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   297,     0,   378,     0,     0,
+       0,     0,   750,    47,    48,   299,   300,   301,   302,   286,
+       0,     0,     0,     0,     0,   287,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
+       0,   295,   296,     0,     0,     0,     0,     0,     0,   283,
+     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   297,     0,   378,     0,     0,   958,
+       0,     0,    47,    48,   299,   300,   301,   302,   286,     0,
+       0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
+     295,   296,     0,     0,     0,     0,     0,     0,   283,   284,
+       0,   285,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   297,     0,   378,     0,     0,     0,     0,
+       0,    47,    48,   299,   300,   301,   302,   286,     0,     0,
+       0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
+     296,     0,     0,     0,     0,     0,     0,   283,   284,     0,
+     285,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   504,     0,   378,     0,     0,     0,     0,     0,
+      47,    48,   299,   300,   301,   302,   286,     0,     0,     0,
+       0,     0,   287,     0,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
+       0,     0,     0,     0,     0,     0,   283,   284,     0,   285,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   509,     0,   378,     0,     0,     0,     0,     0,    47,
+      48,   299,   300,   301,   302,   286,     0,     0,     0,     0,
+       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
+     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
+       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     512,     0,   378,     0,     0,     0,     0,     0,    47,    48,
+     299,   300,   301,   302,   286,     0,     0,     0,     0,     0,
+     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
+     292,   293,   294,    43,    44,     0,   295,   296,     0,     0,
+       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
+       0,   378,     0,     0,     0,     0,     0,   701,    48,   299,
+     300,   301,   302,   286,     0,     0,     0,     0,     0,   287,
+       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
+     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   297,     0,
+     378,     0,     0,     0,     0,     0,   344,    48,   299,   300,
+     301,   302,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,    36,     0,    37,
+       0,    38,    39,    33,   175,   176,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,    43,    44,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    36,     0,     0,     0,     0,   112,     0,    40,    41,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+      44,   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,    26,    27,     0,     0,
+      28,    29,    30,     0,     0,     0,     0,     0,     0,    33,
+       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,    36,     0,    37,
+       0,    38,     0,     0,   208,    41,   465,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,     0,    33,     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,    36,     0,    37,     0,    38,     0,     0,    40,
+      41,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,     0,    33,     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,    36,     0,    37,     0,
+      38,     0,     0,   208,    41,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+     483,   484,   485,     0,     0,     0,    33,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,    36,     0,     0,     0,    33,     0,
+       0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
+       0,     0,     0,   208,    41
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-1267))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     1,   186,   186,   532,    45,    45,     0,   186,    45,
+       1,   519,     0,   186,   186,   240,   186,   205,   186,   742,
+     742,     0,   511,     0,   118,   742,   188,   490,   639,   595,
+     862,   494,  1022,   615,    34,   220,   349,     1,   597,   595,
+    1303,    34,   282,   349,   685,    45,    34,   169,   170,    45,
+     598,    51,   595,   727,   568,    34,   604,    34,    51,   425,
+     426,     0,   417,   480,  1005,    65,    74,    30,    68,    83,
+     297,    71,    65,   597,    66,    68,    34,    45,    71,    41,
+      71,   436,   266,   266,   187,   595,   113,    51,   266,   444,
+    1004,  1005,   595,   266,   266,    34,   266,   595,   266,   595,
+     262,   263,     0,     1,   688,    46,    47,   107,   202,   630,
+       0,  1112,    65,   107,    74,   115,    45,    80,   118,   119,
+       0,   113,   629,   630,   645,    41,   492,   108,   136,    68,
+     111,    41,    41,   257,   968,   364,    34,   599,   645,   368,
+    1403,   603,    41,   107,    34,   511,   186,   186,   148,   149,
+     186,   115,  1382,   115,    34,    99,   149,   157,   158,    51,
+      74,   161,   624,   157,   267,    45,   628,    89,   161,   892,
+     892,    51,   680,    71,    11,   892,   136,    41,   119,   345,
+     486,  1015,   703,   136,   148,    65,   186,   187,    68,   133,
+     186,    71,    59,   157,   187,   117,   703,   116,   425,   426,
+      83,   711,   202,   113,   113,   115,   115,   121,   711,   575,
+     210,   100,   629,   630,   113,   711,   115,   210,   186,     0,
+       1,  1487,   222,   115,   409,  1455,   266,   266,   645,   222,
+     266,  1232,   115,  1234,  1235,   801,   113,   126,   219,   113,
+     240,   108,   206,   663,   111,   801,   210,   888,  1514,   113,
+     862,   115,   252,    34,   813,   803,   148,   186,   801,   252,
+     260,   135,   502,  1204,   252,   265,   266,   267,   114,   149,
+     113,   785,   272,   252,   267,   252,   240,   504,   257,   187,
+    1270,   161,   509,   222,   597,   512,   703,    68,   134,   813,
+      71,   801,   273,   417,   252,  1034,  1035,   297,   801,   280,
+     911,   395,   405,   801,   114,   801,   186,   187,   272,   893,
+     310,   275,   436,   252,   480,   462,   118,  1258,   210,   674,
+     444,   738,    46,    47,   134,    53,   326,    46,    47,   423,
+     210,   331,   229,   297,    51,   429,   111,   120,   331,   566,
+     100,   341,   222,  1257,  1258,   345,   310,   341,   240,   349,
+     350,   248,   219,   919,   252,   939,   585,  1031,  1190,   267,
+     135,   781,   252,   919,   364,    74,   126,   257,   368,  1108,
+     114,   791,   252,   835,     3,   478,   919,   341,    87,    88,
+     272,   345,   802,     3,   365,   113,   266,  1437,   369,    74,
+     134,   120,    57,   120,   118,   395,   920,   626,   115,   118,
+     364,   983,    87,    88,   368,   405,   273,   136,   462,  1458,
+    1022,   350,   405,   280,    74,  1464,    76,    77,   310,   659,
+     113,   114,  1472,   423,  1474,   425,   426,    87,    88,   429,
+     115,   431,    94,    95,    99,  1484,  1426,  1378,   417,     0,
+    1489,   222,    74,  1433,   992,   993,   954,     0,    41,   615,
+     113,   331,   452,   345,   620,    87,    88,   436,   118,   120,
+     135,   425,   426,   925,  1378,   444,   929,   129,   130,   349,
+     470,   252,   116,   113,   891,   136,   120,   966,   478,  1313,
+     480,   348,   482,   115,   114,   478,   486,   649,   452,   482,
+     730,   114,   492,   210,   482,  1485,  1107,   405,   365,   120,
+     813,   465,   369,   482,   504,   482,   506,   813,   113,   509,
+     132,   511,   512,   135,  1098,   136,   663,   120,   640,   519,
+     113,   120,   115,   523,  1487,   405,   490,   417,   492,   194,
+     494,   134,   471,   425,   426,   134,  1370,  1371,   123,   124,
+     504,   120,   506,   482,  1507,   509,   436,   511,   512,   113,
+     674,  1514,   217,   647,   444,   272,  1080,   136,  1066,   113,
+     114,   115,   227,  1071,   115,   794,   117,   567,   568,   113,
+     478,   115,   738,  1157,  1158,   575,   700,   680,  1190,   113,
+     297,  1001,  1002,   134,   482,   585,   586,  1004,   120,   589,
+     480,   120,   482,   310,   120,   595,  1270,   597,   586,   862,
+     492,   120,   482,   113,   136,   115,   486,   136,   134,   663,
+      74,   575,    76,    77,    78,   615,   113,   136,   924,   511,
+     620,   585,   622,    87,    88,   120,   626,   120,   113,   629,
+     630,   113,   297,   115,   781,   616,  1056,  1057,   114,   121,
+     122,   136,   114,   136,   791,   645,   121,   647,   120,   113,
+     631,   615,   127,   128,  1386,   802,   620,   116,  1270,    74,
+     120,   120,   626,   644,   849,     4,     5,     6,     7,     8,
+       9,  1345,    87,    88,   120,   120,   136,   677,   617,   114,
+     680,   120,   114,   575,   869,    10,    11,    12,    13,    14,
+     136,   136,   116,   114,   114,   674,   120,   136,   113,   120,
+     115,   482,   120,   703,   704,   705,   931,   113,   892,   892,
+    1127,   711,   712,   677,   892,   595,    41,   597,   136,   892,
+     892,   700,   892,   615,   892,   891,   113,   781,   620,   119,
+     114,   113,    71,   855,    73,   452,   120,   791,   738,   136,
+     114,   114,   742,   743,    69,   726,   120,   120,   802,   616,
+    1482,   715,   691,    66,   114,  1487,  1430,   114,  1432,  1287,
+     120,   114,  1025,   120,   631,   113,   705,   120,  1491,  1491,
+     113,   113,   680,   115,  1491,  1507,   441,   644,   136,   121,
+     122,  1365,  1514,   118,   674,   785,   116,   504,    83,   506,
+     120,   894,   509,   114,   794,   512,   796,   136,  1382,   120,
+     680,   801,   467,   118,   897,   114,   899,   113,   996,   115,
+     700,   120,  1486,   813,  1426,   121,   122,   983,   114,  1239,
+     113,  1433,   115,   114,   120,   136,  1246,  1247,  1248,   120,
+     794,   711,   712,     4,     5,     6,     7,     8,     9,   504,
+    1257,   116,     3,   113,   509,   120,   136,   512,   738,    10,
+      11,    12,    13,    14,  1001,  1002,  1096,   796,   118,   726,
+    1100,  1101,   862,    74,    35,    76,    77,     0,     1,   114,
+    1454,  1455,   114,  1485,   862,   120,    87,    88,   120,   113,
+      41,   115,   114,   862,   884,   504,   113,   506,   120,  1309,
+     509,   891,   892,   512,   894,  1017,   884,   114,    31,    32,
+      71,    34,    73,   120,   115,   114,   906,   113,    69,  1056,
+    1057,   120,    45,   113,   114,   115,   114,    83,    51,   919,
+     920,   801,   120,   862,   924,  1096,    59,  1190,   114,  1100,
+     930,   931,    65,   813,   120,    68,    92,    93,    71,   930,
+     119,   120,   906,  1170,  1171,   122,  1173,  1001,  1002,    96,
+      97,    84,    85,  1180,   954,  1182,   113,   114,   115,  1467,
+     677,  1127,   131,  1066,   862,   929,   930,   931,  1071,   113,
+     114,   115,   862,   132,  1214,   108,   114,   115,   111,    74,
+       3,    76,    77,   983,    98,   118,   894,    10,    11,    12,
+      13,    14,    87,    88,  1088,    60,    61,   662,    60,    61,
+      62,   891,  1056,  1057,  1004,  1005,   671,   113,  1516,   115,
+     675,   113,   892,   115,   894,   115,   149,    74,    41,   983,
+     119,   120,  1022,  1286,    81,    46,    47,    84,   161,    86,
+      87,    88,   930,   113,  1022,   115,  1113,  1114,  1204,   931,
+     551,   552,    72,  1022,   924,    75,    69,   986,    78,   113,
+      80,   115,   113,   186,   187,  1202,   116,    87,   115,   114,
+      74,  1061,   116,   113,  1304,   115,  1066,    81,  1308,   202,
+      84,  1071,    86,    87,    88,   114,  1339,   210,   285,  1342,
+    1080,   862,   114,  1022,   553,   554,   219,   114,  1088,   222,
+     114,   983,  1239,   559,   560,   114,   229,  1061,   116,  1246,
+    1247,  1248,   115,   310,   311,     4,     5,     6,     7,     8,
+       9,   244,   118,   120,  1341,   248,   118,    74,   135,   252,
+     253,    78,   118,  1386,  1022,   135,   113,  1127,  1391,   114,
+      87,    88,  1022,   266,   267,   114,   116,   134,   345,   116,
+     273,   116,   134,     3,   134,    31,   120,   280,  1202,   930,
+      10,    11,    12,    13,    14,   114,   113,  1420,  1066,   114,
+     118,   113,  1309,  1071,   121,   122,   119,  1407,  1168,  1169,
+     114,   119,    71,   380,    73,   120,   119,   114,  1169,   114,
+     134,    41,   120,   213,   114,  1239,  1066,   136,   114,   906,
+    1190,  1071,  1246,  1247,  1248,   114,   114,   120,   331,   114,
+     114,   114,  1190,   114,  1204,   114,   114,   114,  1208,    69,
+     114,  1190,   114,     0,     1,   348,   349,  1208,   114,   114,
+     114,   886,    10,    11,    12,    13,    14,   119,    31,  1168,
+     135,   114,   365,   134,   114,   120,   369,  1127,   116,   116,
+     114,  1022,  1505,   114,  1208,   120,   379,    34,  1511,   114,
+     280,  1190,   134,    41,   113,  1309,   120,  1257,  1258,  1522,
+     118,   114,   395,  1526,    51,  1265,   114,  1361,   114,    85,
+    1270,  1169,   405,    89,    90,    91,  1501,   555,   556,   557,
+     558,    69,  1270,   120,    71,   114,   114,   120,   120,   114,
+     423,  1270,  1190,   113,   113,   113,   429,   113,   113,   115,
+    1190,   117,   118,  1303,   113,   136,   119,  1491,  1491,   114,
+    1208,   134,  1303,  1491,  1204,   114,   114,   119,  1491,  1491,
+     107,  1491,   352,  1491,   354,   113,  1265,   115,   132,   119,
+     116,  1270,   465,   121,   122,   118,   136,   470,   114,  1303,
+     120,   548,   549,   550,  1061,   478,   116,   116,   114,   482,
+     114,   116,   114,   486,     1,   116,   489,   116,   491,   116,
+     116,  1361,   149,    74,   116,    76,    77,    49,  1033,   136,
+     157,   158,  1270,  1467,   114,   119,    87,    88,  1378,  1360,
+    1270,    74,   136,    76,    77,    78,   136,  1168,  1169,  1492,
+     136,   136,   119,   526,    87,    88,   134,   114,   531,   688,
+     187,   119,   113,  1403,   116,  1303,    85,   118,   116,  1190,
+     440,   116,  1403,  1516,   116,   202,   116,   116,   205,   206,
+     113,   116,   115,   210,   114,   114,  1426,  1208,   121,   122,
+     113,    62,   113,  1433,   114,  1435,   113,  1437,  1426,  1403,
+     114,   134,   118,   113,   231,  1433,   579,  1426,   235,   136,
+     237,  1491,  1491,   116,  1433,  1491,   116,   114,   116,   246,
+     114,   100,   595,   100,   597,   252,   119,  1467,   113,   113,
+     257,  1435,  1472,  1437,  1474,   136,   114,   120,   114,   114,
+     267,   114,    44,   616,  1265,  1485,   134,  1426,   275,  1270,
+     779,  1491,  1492,  1360,  1433,     0,   136,  1485,   631,  1492,
+     114,  1501,   635,   114,   136,  1403,  1485,   100,  1472,   100,
+    1474,   644,   136,   646,   647,   648,  1516,   114,   136,   114,
+     116,   136,  1303,  1516,   114,   114,   136,   119,  1426,    34,
+      10,    11,    12,    13,    14,  1433,  1426,  1501,   116,   116,
+     113,  1037,   749,  1433,   119,   119,  1485,   680,   136,   114,
+     114,   684,   136,   686,   341,   114,    51,   690,   345,   114,
+     561,    41,   851,   562,   351,   698,    71,   565,   563,   963,
+      65,   564,  1190,    68,  1455,  1347,    71,   364,   711,   712,
+    1526,   368,  1280,  1101,  1492,  1308,  1433,  1485,   677,    69,
+    1052,   677,  1071,   726,   899,  1485,   690,   907,   579,    74,
+     855,    76,    77,    78,   893,   641,   253,   958,  1516,  1501,
+     715,  1491,    87,    88,  1279,    74,  1208,    76,    77,    78,
+     927,   482,  1403,    74,    -1,    76,    77,    78,    87,    88,
+     417,   567,    -1,   113,   726,   115,    87,    88,   113,   567,
+     115,   121,   122,   567,   431,  1426,   121,   122,    -1,   436,
+     939,    -1,  1433,   158,   149,    -1,    -1,   444,    -1,    -1,
+      -1,    -1,   113,    -1,   115,    -1,   161,    -1,   801,    -1,
+     121,   122,    -1,    -1,    -1,   462,    -1,    -1,   465,    -1,
+     813,    -1,   971,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    68,   187,   480,    -1,   482,   726,    -1,    -1,    -1,
+      77,    -1,    -1,   490,  1485,    -1,    -1,   494,    10,    11,
+      12,    13,    14,    -1,    -1,   210,    41,    -1,  1435,    -1,
+    1437,    74,   855,    76,    77,    -1,   231,   222,   861,    -1,
+    1019,    -1,    -1,    -1,    87,    88,   523,    -1,    -1,    41,
+      -1,    -1,   119,    -1,    69,    -1,    -1,   252,    -1,    74,
+      -1,    -1,   257,    78,    -1,  1472,    -1,  1474,    -1,   892,
+     113,   894,    87,    88,    -1,   118,    -1,    69,   901,  1434,
+      -1,  1436,    -1,    74,    -1,    -1,   983,    -1,    -1,    -1,
+      81,   568,    -1,    84,   161,    86,    87,    88,   113,    -1,
+      74,   924,    76,    77,    78,    -1,   121,   122,   585,   586,
+      -1,    -1,    -1,    87,    88,    -1,  1471,    -1,  1473,  1098,
+     597,   113,   945,   115,   115,  1022,    -1,    -1,   465,   121,
+     122,    -1,    -1,    -1,    -1,   958,    -1,     0,   615,   113,
+      -1,   964,    -1,   620,    -1,   968,   331,   121,   122,   626,
+      -1,    -1,   629,   630,    -1,   222,   351,    -1,    -1,    -1,
+    1515,    -1,  1517,    -1,    -1,    -1,    -1,    -1,   645,    -1,
+      74,    34,    76,    77,    78,  1530,  1531,    74,  1157,  1158,
+      -1,    78,    -1,    87,    88,    -1,   663,    -1,    -1,   526,
+      87,    88,  1015,   260,   531,    -1,    -1,   674,   265,    -1,
+      85,    68,    -1,    -1,    89,    90,    91,    -1,    71,   113,
+      -1,    -1,    -1,   280,    -1,    -1,   113,    84,   115,    -1,
+     405,    -1,   417,   700,   121,   122,   703,    -1,   113,  1052,
+     115,    -1,   117,   118,    -1,   712,   431,    -1,   715,    -1,
+      -1,   436,   579,  1066,    -1,    -1,    -1,    -1,  1071,   444,
+      74,    -1,   119,    -1,    -1,    -1,    -1,    81,    -1,    -1,
+      84,   738,    86,    87,    88,  1088,   743,   462,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   350,    74,   480,    -1,   482,    78,  1112,
+      -1,   115,    -1,    -1,   161,   158,    -1,    87,    88,    -1,
+      -1,    41,    -1,    -1,   781,    -1,    -1,    -1,    -1,   646,
+      -1,   648,    -1,    -1,   791,    68,    -1,   794,    -1,    -1,
+     797,    -1,    -1,   113,    -1,   802,    -1,    -1,   523,    69,
+      -1,   121,   122,    -1,    74,   812,    76,    77,    78,    -1,
+      74,  1164,    76,    77,    78,    -1,    -1,    87,    88,    -1,
+      -1,    -1,    -1,    87,    88,   222,    -1,    -1,    -1,    -1,
+      -1,   698,    -1,   430,    -1,    -1,   119,    -1,    -1,    -1,
+      -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,   446,
+      -1,   121,   122,    -1,    -1,   862,  1365,    -1,    -1,   252,
+      -1,   586,    -1,   260,   257,    -1,    -1,    -1,   265,    -1,
+      -1,    -1,    -1,  1382,   471,    -1,    -1,   884,   161,  1232,
+      -1,  1234,  1235,    -1,   891,    -1,    -1,   894,    10,    11,
+      12,    13,    14,    -1,    -1,   190,    74,    -1,    76,    77,
+      78,    -1,   197,    -1,   629,   630,    -1,    -1,    -1,    87,
+      88,    -1,    -1,   920,    -1,    -1,    -1,    -1,    -1,    41,
+     645,    -1,   929,   930,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     0,    -1,   113,    -1,   115,   663,   222,
+      -1,    -1,    -1,   121,   122,  1454,  1455,    69,    -1,   674,
+      -1,    -1,    74,   350,    76,    77,    78,    -1,   351,    -1,
+    1313,    -1,    -1,    -1,    -1,    87,    88,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,   269,   700,   983,   260,   703,    -1,
+      -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,   996,
+      -1,   113,   589,   115,  1001,  1002,    -1,  1004,  1005,   121,
+     122,    -1,    -1,    -1,    71,    -1,    -1,  1360,  1361,    -1,
+      -1,    -1,    -1,   738,    -1,  1022,    -1,  1370,  1371,    -1,
+     617,    -1,    -1,    -1,   417,   622,    -1,    -1,    -1,    -1,
+      -1,   326,    74,   430,    76,    77,    78,    -1,   431,   334,
+      -1,    -1,   337,   436,    -1,    87,    88,    -1,    -1,  1056,
+    1057,   444,    -1,    -1,    -1,  1408,   781,    10,    11,    12,
+      13,    14,    -1,    -1,    -1,    -1,   791,   350,    -1,   462,
+      -1,   113,   797,    -1,   471,    -1,    -1,   802,   945,   121,
+     122,    -1,    -1,    -1,    -1,    -1,    -1,   480,    41,   482,
+      -1,   158,    -1,    -1,   691,    -1,    -1,   964,    -1,     0,
+       1,   968,   397,    -1,    -1,    -1,   401,    -1,   705,    -1,
+      -1,    -1,    -1,    -1,  1467,  1468,    69,    -1,    -1,    -1,
+    1127,    74,    -1,    32,  1477,    78,    -1,    -1,    -1,   726,
+     523,    -1,    -1,    34,    87,    88,    -1,   862,  1491,  1492,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   430,  1015,    -1,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,   884,
+     113,    -1,  1169,  1516,    -1,    -1,   891,    68,   121,   122,
+      71,    -1,    28,    29,    30,    84,    85,    -1,    -1,    -1,
+      -1,    41,   477,  1190,    -1,   252,    -1,    -1,   471,    -1,
+     257,    -1,   589,   586,    -1,  1202,    -1,  1204,    -1,   796,
+      -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+      -1,    -1,    -1,    -1,    74,     0,    76,    77,    78,    -1,
+     617,    -1,    -1,    -1,    -1,   622,    -1,    87,    88,    -1,
+      -1,    -1,  1239,    -1,    -1,    -1,   629,   630,    -1,  1246,
+    1247,  1248,    -1,    -1,   100,  1112,   102,    -1,    -1,    34,
+    1257,  1258,   645,   113,    -1,   115,    -1,   158,    -1,    -1,
+      -1,   121,   122,  1270,    -1,    -1,    -1,    -1,    -1,    -1,
+     663,    -1,   567,   568,    -1,    -1,  1001,  1002,    -1,  1004,
+    1005,   674,    -1,    -1,   351,    -1,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   691,    -1,  1303,  1022,    -1,    -1,
+      -1,    -1,  1309,    -1,    -1,    -1,   589,   700,   705,    -1,
+     703,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   222,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,
+      -1,  1056,  1057,    -1,   617,   244,   192,   193,    -1,   622,
+      -1,   197,    -1,   199,   200,   738,    -1,    -1,    -1,    -1,
+     417,   252,    -1,    -1,    -1,   650,    -1,    -1,    -1,   654,
+      -1,    -1,    -1,    -1,   431,  1232,    -1,  1234,  1235,   436,
+      -1,  1378,    -1,   158,    -1,    -1,    -1,   444,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,   781,   986,
+      -1,    -1,    -1,    -1,    -1,   462,  1403,    -1,   791,   796,
+      -1,    -1,  1127,    -1,   797,    -1,    -1,    -1,   691,   802,
+      -1,    -1,    41,   480,    -1,   482,    -1,    -1,    -1,  1426,
+      -1,    -1,   705,    -1,    -1,    -1,  1433,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
+      69,    -1,    -1,    -1,  1169,    74,  1313,    76,    77,    78,
+      -1,    -1,    -1,    -1,    -1,    -1,   523,    -1,    87,    88,
+      -1,   135,    -1,    -1,    -1,  1190,    -1,   252,    -1,   862,
+     379,    -1,   257,    -1,    -1,    -1,    -1,  1202,  1485,  1204,
+      -1,    -1,    -1,    -1,   113,  1492,    -1,    -1,    -1,    -1,
+     785,   884,   121,   122,    -1,    -1,    -1,    -1,   891,    -1,
+      -1,    -1,    -1,  1370,  1371,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   796,  1239,    -1,    -1,    -1,    -1,   586,
+      -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,    -1,    -1,
+     431,    -1,  1257,  1258,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1408,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   629,   630,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,  1168,    -1,    -1,    -1,    -1,    -1,    -1,   645,    -1,
+     489,   482,   491,    -1,  1309,    -1,    -1,    -1,    -1,   986,
+      -1,    -1,    -1,    -1,    -1,    -1,   663,    -1,    -1,    -1,
+      -1,  1468,    -1,   898,    -1,    -1,    -1,   674,  1001,  1002,
+    1477,  1004,  1005,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+      -1,    57,   523,    -1,    60,    61,    62,    -1,    64,  1022,
+      -1,    -1,   417,   700,    -1,    -1,   703,    -1,    -1,    -1,
+      -1,    -1,    78,    -1,    -1,    -1,   431,    -1,    -1,    -1,
+      -1,   436,    -1,  1378,    90,    91,    -1,    -1,    -1,   444,
+      -1,    -1,    -1,  1056,  1057,    -1,    -1,    -1,  1265,    -1,
+      -1,   738,    -1,    -1,    -1,    -1,    -1,   462,   973,    -1,
+      -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   989,   480,    -1,   482,    -1,    -1,
+      -1,  1426,    -1,   986,    -1,    -1,    -1,    -1,  1433,    -1,
+      -1,    -1,    -1,    -1,   781,   571,   572,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   791,    -1,   635,    -1,   629,   630,
+     797,    -1,    -1,    -1,  1127,   802,    -1,    -1,   523,    -1,
+      -1,    -1,   598,    -1,   645,   601,   602,    -1,   604,    -1,
+     606,   607,    -1,    -1,    -1,   611,   612,    -1,    -1,    -1,
+    1485,    -1,    -1,    10,    11,    12,    13,    14,    -1,  1064,
+      -1,  1168,    -1,    -1,    -1,   684,  1169,   686,    -1,    -1,
+      -1,   690,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    41,   862,    -1,  1190,    -1,    -1,
+      -1,   586,   703,    -1,    -1,    -1,    -1,    -1,  1103,  1202,
+      -1,  1204,    -1,    -1,    -1,    -1,    -1,   884,    -1,    -1,
+      -1,    -1,    69,    -1,   891,    -1,    -1,    74,    -1,    76,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    -1,    -1,   629,   630,  1239,    -1,    -1,    -1,
+      -1,    -1,    -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,
+     645,    -1,    -1,    -1,  1257,  1258,   113,    -1,  1265,    -1,
+      -1,    -1,    -1,    -1,   121,   122,    -1,  1270,   663,    -1,
+      -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,    -1,   674,
+      -1,   747,   748,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   344,    -1,
+     346,    -1,    -1,    -1,    -1,   700,  1309,    -1,   703,    -1,
+      -1,   357,   358,    -1,    -1,    28,    29,    30,    -1,    -1,
+      -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,  1005,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   855,    -1,    -1,    -1,
+      -1,    -1,   861,   738,    -1,  1022,    -1,    -1,    -1,    -1,
+      -1,   862,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,  1265,   884,    -1,  1378,    -1,    -1,    -1,  1056,
+    1057,    -1,   901,    41,    -1,    -1,   781,   100,    -1,   102,
+      -1,    -1,    -1,    -1,    -1,    -1,   791,    -1,    -1,    -1,
+      -1,    -1,   797,    -1,    -1,    -1,    -1,   802,    -1,    -1,
+      -1,    69,    -1,    -1,   127,    -1,    -1,    -1,    -1,   930,
+      -1,    -1,    -1,  1426,    -1,    -1,    -1,    -1,    -1,    -1,
+    1433,    -1,    -1,    -1,    -1,    -1,    -1,   903,    -1,   958,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   862,     7,   182,
+      -1,    10,    11,    12,    13,    14,    -1,   190,    -1,   192,
+     193,    -1,  1485,    -1,   197,    -1,   199,   200,    -1,   884,
+      -1,    -1,  1169,  1004,  1005,    -1,   891,    -1,    -1,    -1,
+      39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1022,    -1,  1190,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1202,    -1,  1204,    -1,    68,
+      69,    -1,    -1,  1052,    -1,    74,    -1,    -1,    -1,    78,
+      -1,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      -1,    90,    91,    -1,    -1,    -1,   269,    -1,    -1,    -1,
+      -1,    -1,  1239,    -1,    -1,    -1,    -1,    -1,    -1,  1246,
+    1247,  1248,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,
+    1257,  1258,   121,   122,   123,   124,   125,   126,    -1,    -1,
+      -1,    -1,  1058,  1270,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    51,    -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,
+    1005,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1022,    -1,    -1,
+      -1,    -1,  1309,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    40,    -1,    42,  1164,   692,    -1,   694,    -1,
+      -1,    -1,    -1,    -1,    -1,   701,   702,  1168,  1169,    -1,
+     706,  1056,  1057,    -1,    -1,   115,    -1,    -1,    -1,   119,
+      68,    -1,    -1,   719,    -1,    -1,    74,    -1,   724,  1190,
+      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    -1,    90,    91,    -1,    -1,    -1,  1208,   148,    -1,
+      -1,  1378,    -1,    -1,    -1,   751,    -1,    -1,   158,    -1,
+      -1,   161,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
+    1186,    -1,    -1,   121,   122,   123,   124,   125,   126,    -1,
+      -1,    -1,  1127,    -1,    -1,    -1,   134,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,  1426,
+      -1,    -1,    -1,    -1,  1265,    -1,  1433,    -1,    -1,  1270,
+     210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   222,    -1,  1169,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     240,    -1,  1303,    -1,    -1,  1190,    -1,    -1,   844,    -1,
+     846,   847,   848,    -1,    -1,    -1,    -1,  1202,  1485,  1204,
+      -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   865,
+      -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1239,    -1,    -1,   297,    -1,    -1,
+      -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,   571,   572,
+     310,    -1,  1257,  1258,    -1,    -1,    -1,  1378,    -1,    -1,
+      -1,    -1,   918,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   598,    -1,    -1,   601,   602,
+      -1,   604,  1403,   606,   607,   345,    -1,    -1,   611,   612,
+     350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1309,  1426,   962,    -1,    -1,    -1,
+      -1,   967,  1433,    -1,    -1,    -1,   972,    -1,    -1,    -1,
+      -1,   977,    -1,    -1,    -1,    -1,   982,    -1,   984,   985,
+      -1,    -1,   988,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   997,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1013,  1014,    -1,
+      -1,    -1,    -1,    -1,  1485,   425,   426,    -1,    -1,    -1,
+      -1,   431,    -1,  1378,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1039,    -1,    -1,  1042,    -1,    -1,    -1,
+      -1,    -1,   452,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    -1,    -1,    -1,
+     480,  1426,    -1,    -1,   747,   748,    -1,    41,  1433,  1085,
+      -1,    -1,   492,    -1,    -1,  1091,  1092,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   504,    -1,   506,    -1,    -1,   509,
+      -1,   511,   512,    -1,  1110,    69,    -1,    -1,    -1,  1115,
+      -1,    -1,    -1,   523,  1120,    -1,    80,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1131,    -1,    -1,    -1,    -1,
+    1485,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1144,    -1,
+    1146,  1147,  1148,  1149,    -1,    -1,    -1,    68,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1161,    77,  1163,    79,    -1,
+      81,  1167,    -1,    -1,    -1,   575,    -1,    88,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,   589,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1195,
+    1196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
+     121,   122,   123,    -1,    -1,   615,    -1,    -1,    -1,    -1,
+     620,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   629,
+     630,    -1,    -1,    -1,    -1,   898,    -1,    -1,    -1,    -1,
+     903,    -1,    -1,    -1,    -1,   645,    -1,    -1,    -1,    -1,
+     161,    -1,    -1,  1249,  1250,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1259,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   677,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,   703,    -1,   705,    -1,    -1,    -1,    41,
+      -1,   222,    -1,   224,   225,   226,    -1,    46,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1321,    -1,  1323,  1324,  1325,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,   738,  1335,
+      -1,    -1,    74,    -1,    76,    77,    78,  1343,    -1,   260,
+      -1,    -1,    -1,    -1,   265,    87,    88,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,   280,
+      -1,    -1,  1368,  1369,   103,    -1,    -1,    -1,    -1,    -1,
+      -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
+     122,   148,    -1,    -1,    -1,  1058,   796,    -1,    -1,    -1,
+      -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   169,   170,    -1,    -1,    -1,  1413,  1414,    -1,
+     331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1426,    -1,    -1,    -1,    -1,    -1,    -1,  1433,    -1,   350,
+      -1,    -1,    -1,   172,   355,   356,    -1,    -1,    -1,    -1,
+      -1,    -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   195,    -1,    -1,    -1,
+    1466,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,    -1,
+     209,    -1,    -1,   240,   884,    -1,    -1,    -1,    -1,   218,
+      -1,   891,    -1,    -1,   405,    -1,    -1,    -1,    -1,   228,
+      -1,    -1,  1498,    -1,  1500,    -1,   906,   264,    -1,    -1,
+      -1,    -1,   423,    -1,    -1,    -1,    -1,   428,    -1,   430,
+      -1,    -1,    -1,  1186,   253,    -1,    -1,    -1,    -1,   258,
+      -1,   931,  1528,  1529,    -1,   446,    -1,    -1,   449,   450,
+    1536,  1537,   271,    -1,    -1,    -1,   457,    -1,   277,    -1,
+     279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     471,    -1,    -1,    -1,    -1,    -1,    -1,   478,    -1,   298,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   983,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,  1004,  1005,    32,    33,    34,    -1,
+     339,    -1,    -1,    -1,   343,    41,    -1,    -1,    -1,    -1,
+      -1,    -1,   379,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   371,    69,    -1,    -1,   375,   376,    -1,   378,
+      76,    77,    -1,    -1,    -1,    -1,   385,   386,    -1,   388,
+     389,  1061,   391,    -1,   393,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   589,    -1,
+      -1,   410,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   418,
+      -1,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   617,    -1,    -1,    -1,
+      -1,   622,    -1,   442,    -1,   472,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1127,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   468,
+      -1,    -1,    -1,    -1,    -1,   474,    -1,    -1,    -1,    -1,
+     479,    -1,    -1,    -1,   511,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   523,    -1,  1168,    -1,
+      -1,    -1,   529,    -1,    -1,   532,   157,   158,    -1,    -1,
+     691,    -1,    -1,    -1,    -1,    -1,   515,    -1,   545,    -1,
+      -1,    -1,    -1,    -1,   705,    -1,    -1,    -1,    -1,    -1,
+      -1,   530,    -1,    -1,  1204,    -1,    -1,    -1,    -1,   190,
+      -1,    -1,    -1,    -1,    -1,   726,   197,    -1,   575,    -1,
+      -1,    -1,    -1,    -1,    -1,   582,    -1,    -1,    -1,   586,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   567,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,
+      -1,    -1,    -1,    -1,    -1,  1265,    -1,   596,    -1,    -1,
+      -1,    -1,    -1,    -1,   785,   632,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   640,    -1,   796,    -1,    -1,   269,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   813,    -1,    -1,   634,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
+      -1,   670,    -1,    -1,    -1,   326,    -1,    -1,    -1,   678,
+      -1,    -1,    -1,   334,   335,    -1,   337,   338,    -1,   716,
+      -1,    -1,    -1,    -1,   345,    -1,    69,    -1,   349,    -1,
+      -1,    74,    -1,    76,    77,    78,    -1,    -1,  1378,    -1,
+     709,   738,    -1,   740,    87,    88,    -1,   368,    -1,    -1,
+      -1,   720,   721,   750,    -1,    -1,    -1,    -1,    -1,   756,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     113,    -1,   115,   924,    -1,    -1,   397,    -1,   121,   122,
+     401,    -1,    -1,   752,    -1,    -1,    -1,    -1,   757,    -1,
+      -1,    -1,    -1,    -1,    -1,  1435,    -1,  1437,    -1,   796,
+     797,    -1,    -1,   954,    -1,    -1,    -1,    -1,    -1,    -1,
+     431,    -1,    -1,    -1,    -1,   812,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1472,    -1,  1474,   986,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   997,    -1,   817,    -1,
+      -1,    -1,    -1,    -1,   851,   824,   477,    -1,   855,   480,
+      -1,  1501,    -1,    -1,    -1,    -1,    -1,    -1,   837,    -1,
+     839,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   852,    -1,    -1,    -1,   884,    -1,   858,
+      -1,    -1,    -1,    -1,   891,    -1,    -1,    -1,   519,    -1,
+      -1,   870,   523,    -1,   873,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1066,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,
+      -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   567,   568,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   958,    -1,    -1,   585,   586,   963,    -1,    -1,   966,
+      -1,    -1,    -1,    -1,   595,    -1,   597,   598,    -1,    -1,
+      -1,    -1,    -1,   604,    -1,    -1,    -1,    -1,    -1,   986,
+      -1,    -1,    -1,   614,   615,    -1,    -1,    -1,    -1,   620,
+     997,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   629,   630,
+      -1,    -1,   981,    -1,    -1,    -1,    -1,  1168,    -1,    -1,
+    1017,    -1,  1019,    -1,   645,    -1,    -1,    -1,    -1,   650,
+     651,    -1,    -1,   654,   655,    -1,    -1,  1034,  1035,   283,
+     661,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   295,   296,    -1,    -1,    -1,    -1,  1054,    -1,   680,
+      -1,    -1,    -1,    -1,    -1,    -1,   310,   311,    -1,    -1,
+      -1,    -1,    -1,  1042,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   345,    -1,    -1,    -1,    -1,    -1,  1076,    -1,    -1,
+      -1,  1108,  1081,    -1,  1265,    -1,    -1,   738,    -1,    -1,
+    1089,   742,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1127,    -1,    -1,    -1,    -1,    -1,   380,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1142,  1143,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   785,  1134,    -1,    -1,  1137,    -1,
+    1139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     801,    -1,   803,    -1,    -1,  1154,  1155,    -1,    -1,    -1,
+      -1,    -1,   813,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1174,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     0,    -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,    28,    29,    -1,    -1,    32,    33,    34,
+      35,  1220,    -1,    38,    -1,    -1,    41,    42,    -1,  1228,
+      -1,    -1,    -1,   884,    -1,    -1,    -1,    -1,    -1,    -1,
+     891,   892,    -1,   894,    -1,    -1,    -1,   898,    -1,    -1,
+      -1,    66,    -1,    -1,    69,    -1,    71,  1284,    73,    74,
+    1287,    76,    77,    78,    -1,    -1,    -1,    -1,   919,   920,
+      -1,    -1,    87,    88,   548,   549,   550,   551,   552,   553,
+     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,   565,    -1,    -1,    -1,    -1,    -1,    -1,   113,  1298,
+     115,  1300,    -1,   954,    -1,    -1,   121,   122,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1316,    -1,  1318,
+      -1,    -1,   973,   974,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   983,    -1,  1333,  1516,    -1,    -1,   989,   990,
+      -1,   992,   993,   994,    -1,    -1,    -1,    -1,    -1,  1348,
+    1349,    -1,    -1,  1004,  1005,    -1,    -1,    -1,    -1,    -1,
+    1359,    -1,    -1,  1362,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,  1384,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1393,    41,    -1,  1396,    -1,  1398,
+    1399,  1400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1064,   688,  1066,    -1,    -1,    -1,    -1,
+    1071,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,  1080,
+      -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+    1439,    -1,  1441,    -1,  1443,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1103,  1104,    -1,    -1,    -1,    -1,    -1,    -1,
+    1459,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1501,   749,  1127,     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,    29,    -1,   779,    32,    33,    34,    35,
+      -1,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
+      -1,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,    -1,
+      66,    -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,
+      76,    77,    78,  1204,    -1,    81,    82,    83,    84,    85,
+      86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
+      -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,   125,
+     126,    -1,    -1,    -1,    -1,   131,  1257,  1258,    -1,    -1,
+     136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   893,
+       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,    29,    -1,    -1,    32,
+      33,    34,    35,    -1,    -1,    38,    39,    40,    41,    42,
+      -1,    -1,    -1,    -1,    -1,   939,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    71,    -1,
+      73,    74,    -1,    76,    77,    78,    -1,   971,    81,    82,
+      83,    84,    85,    86,    87,    88,    -1,    90,    91,   983,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1378,    -1,    -1,
+     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
+     123,   124,   125,   126,    -1,    -1,    -1,    -1,  1022,    -1,
+      -1,    -1,    -1,   136,    -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,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,    44,     0,    31,     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,
-       0,    34,     0,    35,     0,    36,     0,     0,   206,    39,
-       2,   205,     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,   207,     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,    34,     0,    35,     0,    36,    37,     0,
-     206,    39,    40,     0,     0,     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,   207,
-       0,     0,     0,     0,     0,    45,    46,     2,   205,     4,
+      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
+      34,    35,    -1,    -1,    38,    -1,    -1,    41,    42,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1467,    -1,    -1,    -1,
+      -1,    -1,    66,    -1,  1098,    69,    -1,    71,    -1,    73,
+      74,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,
+    1491,  1492,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1516,    -1,    -1,    -1,   113,
+      -1,   115,    -1,    -1,    -1,   119,    -1,   121,   122,    -1,
+      -1,    -1,    -1,  1157,  1158,     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,    29,    -1,    -1,    32,    33,    34,    35,    -1,    -1,
+      38,    39,    40,    41,    42,    -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,
+      68,    69,    -1,    71,    -1,    73,    74,    -1,    76,    77,
+      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
+      -1,    -1,    -1,   121,   122,   123,   124,   125,   126,    -1,
+      -1,    -1,    -1,    -1,    -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,    28,
+      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
+      39,    40,    41,    42,    -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,    68,
+      69,    -1,    71,    -1,    73,    74,    -1,    76,    77,    78,
+      -1,  1365,    81,    82,    83,    84,    85,    86,    87,    88,
+      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,  1382,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,
+      -1,   120,   121,   122,   123,   124,   125,   126,     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,    29,    -1,    -1,    32,    33,    34,    -1,
+      -1,    -1,    -1,    39,    40,    41,    42,    -1,    -1,    -1,
+    1454,  1455,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,
+      76,    77,    78,    -1,    -1,    81,    82,    83,    84,    85,
+      86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
+      -1,    -1,    -1,    -1,   120,   121,   122,   123,   124,   125,
+     126,     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,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    39,    40,    41,    42,
+      -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,    68,    69,    -1,    71,    -1,
+      73,    74,    -1,    76,    77,    78,    -1,    -1,    81,    82,
+      83,    84,    85,    86,    87,    88,    -1,    90,    91,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
+     123,   124,   125,   126,     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,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
+      40,    41,    42,    -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,    68,    69,
+      -1,    71,    -1,    73,    74,    -1,    76,    77,    78,    -1,
+      -1,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
+      90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,
+      -1,   121,   122,   123,   124,   125,   126,     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,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    40,    41,    42,    -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,    68,    69,    -1,    71,    -1,    73,    74,    -1,    76,
+      77,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
+      87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
+      -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
+       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,    29,    -1,    -1,    32,
+      33,    34,    35,    -1,    -1,    38,    -1,    -1,    41,    42,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    66,    -1,    -1,    69,    -1,    71,    -1,
+      73,    74,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   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,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    -1,    -1,    32,    33,    34,    69,    -1,    71,    -1,
+      73,    74,    41,    76,    77,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
+     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   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,    28,    29,    30,    -1,    32,
+      33,    34,    35,    -1,    -1,    38,    -1,    -1,    41,    -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,    69,    -1,    71,    -1,
+      73,    -1,    -1,    76,    77,    -1,    -1,    80,     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,     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,
-     205,     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,  -405,   668,     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,    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,     0,
-       0,     0,     0,  1332,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   668,     0,
-       0,     0,     0,     0,    45,    46,     2,   205,     4,     5,
+      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
+      35,    -1,   115,    38,    -1,    -1,    41,    -1,   121,   122,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    69,    -1,    71,    -1,    73,    -1,
+      -1,    76,    77,     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,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+     115,    41,    -1,    -1,    -1,    -1,   121,   122,    -1,     7,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+      -1,    71,    -1,    73,    -1,    -1,    76,    77,    -1,    -1,
+      -1,    39,    40,    41,    42,    -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,
+      68,    69,    -1,    -1,    -1,   115,    74,    -1,    -1,    -1,
+      78,   121,   122,    81,    82,    83,    84,    85,    86,    87,
+      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
+      -1,    -1,    -1,   121,   122,   123,   124,   125,   126,     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,    29,    -1,    -1,    32,    33,    34,
+      -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    69,    -1,    71,    -1,    73,    74,
+      41,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
+      -1,    -1,    -1,    -1,    -1,    76,    77,    -1,   113,    -1,
+     115,    -1,    -1,    -1,    -1,    -1,   121,   122,     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,
+      26,    27,    28,    29,   115,    -1,    32,    33,    34,    -1,
+     121,   122,    -1,    -1,    -1,    41,    -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,    69,    -1,    71,    -1,    73,    -1,    -1,
+      76,    77,    -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,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,    -1,    -1,   114,   115,
+      41,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
+      71,    -1,    73,    -1,    -1,    76,    77,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,
+     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,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    69,    -1,    71,
+      -1,    73,    -1,    41,    76,    77,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,    -1,
+      -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
+      -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
+     122,     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,    34,
-       0,    35,     0,    36,    31,   675,    38,    39,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1334,     0,    34,     0,     0,     0,     0,     0,     0,    38,
-      39,     0,     0,     0,     0,   668,     0,     0,     0,     0,
-       0,    45,    46,     2,   205,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,   676,    26,
-      27,    28,   677,     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,   206,    39,     2,   205,     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,   269,     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,    34,     0,
-      35,     0,    36,     0,     0,    38,    39,     2,   205,     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,   668,     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,
-      34,     0,    35,     0,    36,     0,     0,   206,    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,   281,   282,    31,   283,
-       0,     0,     0,     0,     0,     0,   207,     0,     0,     0,
-       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   284,    34,     0,     0,     0,
-       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
-     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,   513,     0,     0,   170,     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,   281,   282,    31,   283,     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,
-     284,    34,     0,     0,    31,     0,   285,     0,    38,    39,
-     286,     0,     0,   287,   288,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,     0,     0,   110,     0,    38,
-      39,     0,     0,     0,     0,   295,   -40,   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,   281,   282,    31,   283,
-       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,   284,    34,     0,     0,    31,
-     675,   285,     0,    38,    39,   286,     0,     0,   287,   288,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
-       0,     0,     0,     0,    38,    39,     0,     0,     0,     0,
-     295,     0,   296,     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,   676,    26,    27,    28,  1070,     0,    45,
-      46,   281,   282,    31,   283,     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,
-     284,    34,     0,     0,    31,   675,   285,     0,    38,    39,
-     286,     0,     0,   287,   288,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,     0,     0,     0,     0,    38,
-      39,     0,     0,     0,     0,   295,     0,   341,     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,   676,    26,
-      27,    28,  1197,     0,    45,    46,   281,   282,    31,   283,
-       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,   284,    34,     0,     0,    31,
-       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
-       0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
-     295,     0,   376,     0,     0,    41,    42,     0,    45,    46,
-     297,   298,   299,   300,     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,     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,   206,    39,    40,     0,     0,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
-       0,     0,     0,     0,     0,    38,    39,     0,     0,     0,
-       0,     0,    43,     0,   269,     0,     0,     0,     0,     0,
-      45,    46,     0,     0,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,   256,    26,    27,    28,     0,     0,
-      45,    46,     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,     0,
-       0,     0,    34,     0,     0,     0,     0,     0,     0,   206,
-      39,     0,     0,     0,     0,     0,     0,     0,    44,     0,
-       0,     0,     0,     0,    45,    46,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,   269,    26,
-      27,    28,     0,     0,    45,    46,     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,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,    38,    39,     0,     0,     0,     0,     0,
-       0,     0,   337,     0,     0,     0,     0,     0,    45,    46,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,   676,    26,    27,    28,     0,     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,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     0,   281,   282,     0,   283,  1021,     0,  1022,     0,
-       0,  1023,  1024,  1025,  1026,  1027,  1028,  1029,  1030,     0,
-       0,  1508,  1031,     0,     0,     0,  1032,  1033,     0,    33,
-       0,   284,     0,     0,     0,     0,   668,  1034,     0,     0,
-       0,   286,    45,    46,   287,   288,   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,   376,     0,
-       0,   170,     0,     0,    45,    46,   297,   298,   299,   300,
-       0,     0,   281,   282,  1035,   283,  1021,     0,  1022,  -134,
-       0,  1023,  1024,  1025,  1026,  1027,  1028,  1029,  1030,     0,
-       0,     0,  1031,     0,     0,     0,  1032,  1033,     0,    33,
-       0,   284,     0,     0,     0,     0,     0,  1034,     0,     0,
-       0,   286,     0,     0,   287,   288,   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,   376,     0,
-       0,   170,     0,     0,    45,    46,   297,   298,   299,   300,
-       0,     0,     0,     0,  1035,     0,     0,     0,     0,  -134,
-       2,   205,     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,   281,   282,     0,
-     283,  1021,     0,  1022,  1380,  1381,  1023,  1024,  1025,  1026,
-    1027,  1028,  1029,  1030,     0,     0,  1508,  1031,     0,     0,
-       0,  1032,  1033,    34,    33,    35,   284,    36,     0,     0,
-      38,    39,  1034,     0,     0,     0,   286,     0,     0,   287,
-     288,   289,   290,   291,   292,    41,    42,     0,   293,   294,
-       0,     0,     0,     0,  1291,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   295,     0,   376,     0,     0,   170,     0,     0,    45,
-      46,   297,   298,   299,   300,     0,     0,   281,   282,  1035,
-     283,  1021,     0,  1022,  1380,  1381,  1023,  1024,  1025,  1026,
-    1027,  1028,  1029,  1030,     0,     0,     0,  1031,     0,     0,
-       0,  1032,  1033,     0,    33,     0,   284,     0,     0,     0,
-       0,     0,  1034,     0,     0,     0,   286,     0,     0,   287,
-     288,   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,   376,     0,     0,   170,     0,     0,    45,
-      46,   297,   298,   299,   300,     0,     0,   281,   282,  1035,
-     283,  1021,     0,  1022,     0,     0,  1023,  1024,  1025,  1026,
-    1027,  1028,  1029,  1030,     0,     0,     0,  1031,     0,     0,
-       0,  1032,  1033,     0,    33,     0,   284,     0,     0,     0,
-       0,     0,  1034,     0,     0,     0,   286,     0,     0,   287,
-     288,   289,   290,   291,   292,    41,    42,     0,   293,   294,
-       0,     0,     0,     0,     0,     0,   281,   282,     0,   283,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   295,     0,   376,     0,     0,   170,     0,     0,    45,
-      46,   297,   298,   299,   300,   284,     0,     0,     0,  1035,
-       0,   631,     0,   139,   140,   286,     0,     0,   287,   288,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,     0,     0,     0,     0,   281,   282,     0,   283,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     295,     0,   632,     0,   633,   377,     0,     0,    45,    46,
-     297,   298,   299,   300,   284,     0,     0,     0,     0,     0,
-     285,     0,     0,     0,   286,     0,     0,   287,   288,   289,
-     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
-       0,     0,     0,     0,   281,   282,     0,   283,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   295,
-       0,   376,     0,     0,   377,     0,     0,    45,    46,   297,
-     298,   299,   300,   284,     0,     0,     0,     0,     0,   285,
-       0,     0,     0,   286,     0,     0,   287,   288,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
-       0,     0,     0,   281,   282,     0,   283,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
-     376,     0,     0,     0,     0,   748,    45,    46,   297,   298,
-     299,   300,   284,     0,     0,     0,     0,     0,   285,     0,
-       0,     0,   286,     0,     0,   287,   288,   289,   290,   291,
-     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
-       0,     0,   281,   282,     0,   283,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   295,     0,   376,
-       0,     0,   956,     0,     0,    45,    46,   297,   298,   299,
-     300,   284,     0,     0,     0,     0,     0,   285,     0,     0,
-       0,   286,     0,     0,   287,   288,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
-       0,   281,   282,     0,   283,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   295,     0,   376,     0,
-       0,     0,     0,     0,    45,    46,   297,   298,   299,   300,
-     284,     0,     0,     0,     0,     0,   285,     0,     0,     0,
-     286,     0,     0,   287,   288,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
-     281,   282,     0,   283,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   502,     0,   376,     0,     0,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,   284,
-       0,     0,     0,     0,     0,   285,     0,     0,     0,   286,
-       0,     0,   287,   288,   289,   290,   291,   292,    41,    42,
-       0,   293,   294,     0,     0,     0,     0,     0,     0,   281,
-     282,     0,   283,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   507,     0,   376,     0,     0,     0,
-       0,     0,    45,    46,   297,   298,   299,   300,   284,     0,
-       0,     0,     0,     0,   285,     0,     0,     0,   286,     0,
-       0,   287,   288,   289,   290,   291,   292,    41,    42,     0,
-     293,   294,     0,     0,     0,     0,     0,     0,   281,   282,
-       0,   283,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   510,     0,   376,     0,     0,     0,     0,
-       0,    45,    46,   297,   298,   299,   300,   284,     0,     0,
-       0,     0,     0,   285,     0,     0,     0,   286,     0,     0,
-     287,   288,   289,   290,   291,   292,    41,    42,     0,   293,
-     294,     0,     0,     0,     0,     0,     0,   281,   282,     0,
-     283,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   295,     0,   376,     0,     0,     0,     0,     0,
-     699,    46,   297,   298,   299,   300,   284,     0,     0,     0,
-       0,     0,   285,     0,     0,     0,   286,     0,     0,   287,
-     288,   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,   376,     0,     0,     0,     0,     0,   342,
-      46,   297,   298,   299,   300,     2,   205,     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,   173,   174,    40,     0,     0,
-       0,     0,     0,     0,     0,     0,    41,    42,   204,     2,
-     205,     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,   206,
-      39,   463,     2,   205,     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,   205,     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,   481,   482,   483,    34,     0,    35,
-      31,    36,     0,     0,   206,    39,     0,     0,     0,     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,     0,    38,    39
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-1333))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       0,     1,    43,    43,    43,   238,   184,     0,   116,   203,
-       1,   184,     0,   530,   184,   218,     0,   184,   184,   509,
-     740,     0,   167,   168,   740,   740,   184,   184,   860,   613,
-     595,    32,    32,   593,   725,   637,   347,     1,    43,    32,
-     460,   593,   517,    43,    32,   478,   488,   593,    32,    49,
-     492,   347,   566,    32,   105,   186,    49,   595,  1301,    39,
-     185,     0,   966,    63,   423,   424,    66,    81,    43,    69,
-      63,   593,   683,    66,   593,   362,    69,   593,    69,   366,
-    1002,  1003,    28,   593,    97,    49,   264,  1020,  1003,    43,
-      39,   264,   200,    32,   264,    81,    49,   264,   264,   627,
-     628,    51,     0,     1,   155,   105,   264,   264,   118,  1013,
-       0,  1110,   109,   113,    72,   643,   116,   117,   131,    81,
-       0,   343,  1032,  1033,   134,   106,   112,    66,   109,   260,
-     261,   490,    78,   113,    32,    63,   133,   111,    44,    45,
-     265,   105,    32,   184,   184,   184,   146,   147,    39,   113,
-     509,   113,    32,  1485,   147,   155,   156,    49,  1401,   159,
-     113,   111,   111,    43,   113,    64,   159,   860,   280,    49,
-     890,    69,   628,   701,   890,   890,   134,   111,   415,   184,
-    1512,   185,   146,    63,   184,   185,    66,   643,   484,    69,
-     709,   155,   185,   709,   627,   628,  1106,   434,   255,   709,
-     200,   686,  1485,   678,   407,   442,   134,   596,   208,   184,
-     643,   117,   111,   602,   573,   208,   111,   112,   113,    39,
-     220,   113,  1505,   264,   264,   264,    39,   220,  1380,  1512,
-     184,  1230,    72,  1232,  1233,    72,   217,   111,   238,   799,
-     204,   661,    44,    45,   208,   701,   811,   799,    39,   250,
-     250,    39,    11,   799,   146,   208,   478,   250,   258,   133,
-      98,   265,   250,   263,   264,   265,   250,   147,   701,   783,
-     270,   250,   265,   811,   238,   886,   255,   799,   403,   159,
-     799,   220,   119,   799,   595,   393,   124,  1202,   339,   799,
-     271,   111,    98,   113,   134,   295,   583,   278,   111,   118,
-     113,  1453,    87,   736,   184,   185,   270,   909,   308,   273,
-     111,   250,  1384,   421,   116,   134,   208,   270,   124,   427,
-     111,   114,   113,   111,   324,   113,  1435,  1020,   208,   329,
-     115,   295,   116,  1255,  1256,  1268,   329,   624,  1029,   339,
-     220,  1256,   295,   343,   308,   227,   238,   347,   348,   111,
-     112,   476,   250,   918,   112,   308,  1188,   917,   415,   779,
-     250,  1470,   362,  1472,   246,   255,   366,    44,    45,   789,
-     250,   917,     0,     1,   132,   339,    72,   434,   270,   343,
-     800,   112,   363,   118,   264,   442,   367,   118,   500,    85,
-      86,   613,     3,   393,  1456,   917,   618,   981,   362,   403,
-    1462,   597,   366,   403,    32,   601,   891,  1311,  1480,   348,
-     403,    55,   801,  1485,   118,   111,   308,   113,    30,     3,
-    1482,   421,   112,   423,   424,  1487,   622,   427,   132,   429,
-     626,   118,    72,  1505,    72,   672,   415,   112,    66,   116,
-    1512,    69,   132,     0,   118,    85,    86,    85,    86,   329,
-     450,   343,   937,    97,  1376,   434,   889,   132,   132,   423,
-     424,  1376,     0,   442,  1368,  1369,   118,   347,   468,   111,
-      82,    83,   476,   113,   964,   113,   476,   952,   478,   295,
-     480,   111,   134,   476,   484,   927,   450,   480,   121,   122,
-     490,  1424,   480,   638,   118,  1188,   480,   450,  1431,   463,
-     811,   480,   502,  1105,   504,   792,   112,   507,   132,   509,
-     510,   118,   118,  1078,   736,   811,   647,   517,   118,   118,
-     113,   521,   115,   403,   488,   415,   490,   134,   492,   114,
-     469,   423,   424,   118,   134,   134,   112,   645,   502,   132,
-     504,   480,   118,   507,   434,   509,   510,   133,   192,   502,
-    1483,   504,   442,   678,   507,   111,   118,   510,     4,     5,
-       6,     7,     8,     9,   130,   565,   566,   133,   112,  1002,
-     118,   215,   134,   573,   118,  1268,   111,  1268,   113,   999,
-    1000,   225,   480,   583,   584,   112,   134,   587,   478,  1064,
-     480,   118,   220,   593,  1069,   595,   584,   112,   490,   111,
-     480,   990,   991,   118,   484,   118,   112,   423,   424,   573,
-     114,  1096,   118,   613,   118,   672,   728,   509,   618,   583,
-     620,   134,   250,    69,   624,    71,   922,   627,   628,   111,
-     242,   118,   112,   614,  1054,  1055,   111,   833,   118,   118,
-     118,   698,   118,   643,   847,   645,   118,   134,   629,   613,
-     112,   295,  1343,   114,   618,   134,   134,   118,   134,    72,
-     624,   642,   134,    76,   867,   114,    72,   889,    49,   118,
-    1155,  1156,    85,    86,   678,   675,   615,   119,   678,    85,
-      86,   573,    63,   125,   126,    66,   502,   111,    69,   112,
-     112,   507,  1125,   672,   510,   118,   929,   111,   111,   113,
-     113,   701,   702,   703,    90,    91,   119,   120,   853,   709,
-     710,   675,   890,   593,   114,   595,   112,   890,   118,   698,
-     890,   613,   675,   890,   890,   112,   618,   923,   112,   112,
-     112,  1424,   890,   890,   118,   118,   736,  1428,  1431,  1430,
-     740,   741,   111,   724,   113,   112,   112,   112,   564,   713,
-     689,   118,   118,     4,     5,     6,     7,     8,     9,   981,
-     111,    92,    93,     1,   703,   377,   147,   892,  1285,  1489,
-     112,   112,   111,  1489,  1489,   112,   118,   118,   159,   117,
-    1200,   118,   672,   783,     4,     5,     6,     7,     8,     9,
-    1483,   111,   792,  1484,   794,   439,   127,   128,   678,   799,
-     994,   112,    72,   111,   185,   113,  1094,   118,   698,    79,
-    1098,   811,    82,    33,    84,    85,    86,  1237,    69,   134,
-      71,   465,  1255,   111,  1244,  1245,  1246,   208,   792,   709,
-     710,    72,   112,    74,    75,    76,    94,    95,   118,   220,
-      72,   112,    74,    75,    85,    86,   736,   118,   111,    69,
-     113,    71,   480,    85,    86,   794,   119,   120,   502,   111,
-     860,   113,   111,   507,    66,    64,   510,     0,     1,   111,
-    1015,   113,   860,   134,   111,   487,   113,   489,  1363,   111,
-      82,   860,   882,   134,   116,   112,   113,  1307,   892,   889,
-     890,   116,   892,   116,   882,  1380,    29,    30,    72,    32,
-      74,    75,   116,  1125,   904,   134,    57,   111,   112,   113,
-      43,    85,    86,    72,   111,   117,    49,   917,   918,   799,
-      79,   860,   922,    82,    57,    84,    85,    86,   928,   929,
-      63,   811,    72,    66,    74,    75,    69,   928,   134,  1064,
-     904,   111,   116,   113,  1069,    85,    86,    81,   329,    82,
-      83,   904,   952,   111,   113,   106,   111,   159,   109,   283,
-     117,   118,   860,   927,   928,   929,    81,  1452,  1453,   502,
-     860,   504,   120,   106,   507,   129,   109,   510,  1086,    96,
-    1202,   981,  1094,   116,   308,   309,  1098,  1099,   130,   111,
-    1465,   113,   111,   113,   113,   111,   112,   113,     3,   889,
-     119,   120,  1002,  1003,   114,    10,    11,    12,    13,    14,
-     890,   114,   892,   251,   147,   112,   660,   981,   220,   343,
-    1020,   633,   403,    58,    59,   669,   159,   117,   118,   673,
-     928,   895,  1020,   897,    39,    44,    45,   929,   112,  1514,
-     112,  1020,   922,   112,    72,   984,    74,    75,    76,  1111,
-    1112,   184,   185,   112,   378,   112,   258,    85,    86,  1059,
-    1064,   263,    67,   111,  1064,  1069,   217,   200,   114,  1069,
-     682,   111,   684,   113,   113,   208,   688,   118,  1078,   119,
-     120,  1020,   116,   111,   217,   113,  1086,   220,   133,   981,
-     116,   119,   120,   116,   227,  1059,   549,   550,    72,   111,
-    1212,   111,   112,   113,   132,    79,  1059,   114,    82,   242,
-      84,    85,    86,   246,    58,    59,    60,   250,   251,   133,
-     271,   112,  1020,   551,   552,  1125,   112,   278,   557,   558,
-    1020,   264,   265,     3,   553,   554,   555,   556,   271,   113,
-      10,    11,    12,    13,    14,   278,   348,     3,    10,    11,
-      12,    13,    14,   114,    10,    11,    12,    13,    14,   114,
-      72,   132,    74,    75,    76,   132,  1166,  1167,    72,    39,
-      74,    75,    76,    85,    86,   132,  1167,    39,   118,   860,
-      29,    85,    86,    39,  1064,   112,   112,   116,  1188,  1069,
-    1302,   112,   117,   117,  1306,   346,   329,    67,   117,   111,
-    1188,   113,  1202,   118,   111,    67,  1206,   119,   120,  1188,
-     112,    67,   363,   346,   347,  1206,   367,    10,    11,    12,
-      13,    14,   546,   547,   548,   463,   428,  1166,   134,   132,
-     363,   112,   860,   118,   367,  1125,   112,   112,   112,   112,
-     884,   853,  1206,   112,   377,   112,    39,   859,   112,  1188,
-     118,  1359,   112,   112,   112,  1255,  1256,   112,   112,   112,
-     393,   112,   112,  1263,   112,     0,  1499,   469,  1268,  1167,
-     403,   117,    29,   112,    67,   118,   133,   114,   114,   112,
-    1268,   112,   112,   118,   111,   132,   524,   899,   421,  1268,
-    1188,   529,    72,  1405,   427,   118,   116,    32,  1188,    79,
-     928,  1301,    82,   132,    84,    85,    86,   112,  1206,   112,
-    1301,  1489,  1202,   112,   118,   112,  1489,   112,   111,  1489,
-     113,   112,  1489,  1489,  1263,   111,   119,   120,   118,  1268,
-     463,  1489,  1489,   113,    69,   468,    72,  1301,   111,   577,
-      76,   118,  1023,   476,   956,   111,   111,   480,   111,    85,
-      86,   484,  1168,  1169,   487,  1171,   489,  1465,   132,  1359,
-     112,   117,  1178,   134,  1180,  1490,   112,   117,    72,   112,
-    1268,   130,    76,   117,   116,   111,  1376,  1358,  1268,   134,
-     114,    85,    86,   119,   120,   587,   112,  1031,   118,  1514,
-     114,   524,  1020,   114,   112,   112,   529,    47,   114,   114,
-     114,  1401,   112,  1301,   117,   114,   644,   111,   646,   114,
-    1401,   114,   134,   615,   134,   119,   120,   112,   620,     0,
-       1,   156,   134,   747,  1424,   117,    72,   134,    74,    75,
-     112,  1431,   134,  1433,   132,  1435,  1424,  1401,  1050,    85,
-      86,   117,   114,  1431,   577,  1424,    83,   114,  1489,  1489,
-    1489,    32,  1431,   114,   114,   114,   114,   112,   696,   112,
-     593,    60,   595,   614,   111,  1465,   114,   113,    49,  1433,
-    1470,  1435,  1472,   111,   116,   111,    98,   112,   629,   112,
-    1433,   614,  1435,  1483,   111,  1424,  1490,   689,    69,  1489,
-    1490,   642,  1431,   661,   229,  1483,   629,  1490,   114,  1499,
-     633,   703,   134,  1401,  1483,   114,  1470,  1188,  1472,   642,
-    1514,   644,   645,   646,  1514,   250,   112,  1470,   112,  1472,
-     255,  1514,   114,  1339,   105,    98,  1424,   111,   111,   134,
-     117,    42,   112,  1431,  1424,  1499,   112,   112,  1166,  1167,
-      72,  1431,    74,    75,  1483,   678,   112,   118,   134,   682,
-    1162,   684,   134,    85,    86,   688,    70,   112,   132,    73,
-    1188,   112,    76,   696,    78,    98,   147,    98,   112,   134,
-     134,    85,   112,   724,   155,   156,   709,   710,  1206,   111,
-     114,   134,   112,   112,   116,  1483,    72,   114,    74,    75,
-      76,   724,   794,  1483,   117,   114,   134,   134,   111,    85,
-      86,   117,   117,  1284,   185,   112,   112,  1499,   134,  1489,
-     112,   779,   112,   657,   349,  1035,   559,   562,   560,   200,
-     561,   789,   203,   204,   563,   111,   961,   208,  1188,  1453,
-    1345,  1524,   800,  1277,  1099,  1263,  1306,  1278,    66,  1431,
-    1268,    10,    11,    12,    13,    14,  1050,    75,   229,   686,
-     675,   675,   233,  1069,   235,   688,  1337,   981,   897,  1340,
-     905,   577,   956,   244,   853,   925,   799,   639,   480,   250,
-      39,   713,  1206,  1301,   255,   724,   565,   565,   811,   565,
-     415,    -1,    -1,    -1,   265,    -1,    -1,    -1,    -1,   117,
-      -1,    -1,   273,    -1,   429,    -1,  1020,   211,    67,   434,
-      -1,    -1,    -1,  1384,    -1,   943,    -1,   442,  1389,    -1,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-     853,    -1,    -1,    -1,   962,   460,   859,    -1,   966,    -1,
-      -1,   159,    -1,    -1,    -1,    -1,    -1,  1418,    -1,    39,
-     777,    -1,   111,   478,   113,   480,    -1,    -1,    -1,    -1,
-     119,   120,    -1,    -1,    -1,    -1,    -1,   890,   339,   892,
-      -1,    -1,   343,    -1,   278,    -1,   899,    67,   349,    -1,
-      -1,    -1,    -1,  1401,    83,  1013,    -1,    -1,    87,    88,
-      89,   362,   984,    -1,    -1,   366,   521,    -1,  1432,   922,
-    1434,    -1,   220,    -1,    -1,    -1,  1424,    -1,   188,    -1,
-      -1,    66,   111,  1431,   113,   195,   115,   116,    -1,    -1,
-     943,   111,   849,   113,    -1,    -1,    -1,    -1,    -1,   119,
-     120,    -1,  1503,   956,    -1,  1469,    -1,  1471,  1509,   962,
-     258,   999,  1000,   966,   415,   263,   350,    -1,   352,  1520,
-      -1,    -1,    -1,  1524,    -1,    -1,    -1,    -1,   429,   584,
-     278,    -1,   117,   434,   891,  1483,    -1,    -1,    -1,    -1,
-      -1,   442,    72,    -1,    74,    75,    76,    -1,    -1,  1513,
-      -1,  1515,  1110,    -1,    -1,    85,    86,   267,    -1,   460,
-    1013,    -1,   463,    -1,  1528,  1529,  1054,  1055,    -1,    -1,
-      -1,    -1,   627,   628,   159,    -1,    -1,   478,    -1,   480,
-     937,   111,    -1,   113,    -1,    -1,    -1,   488,   643,   119,
-     120,   492,    10,    11,    12,    13,    14,  1050,    -1,    -1,
-     348,    -1,    -1,    -1,   438,    -1,   661,    -1,    -1,    -1,
-      -1,  1064,   969,    -1,   324,    -1,  1069,   672,    -1,    -1,
-     521,    39,   332,    -1,    72,   335,    74,    75,    76,    -1,
-       0,    -1,    -1,  1086,    -1,   220,    -1,    85,    86,    -1,
-      -1,    -1,    -1,   698,  1166,    -1,   701,    -1,    -1,    67,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,  1110,    76,    -1,
-    1017,    -1,    32,   111,    -1,   566,    -1,    85,    86,    -1,
-      -1,    -1,  1230,   258,  1232,  1233,    -1,    -1,   263,    -1,
-     428,   736,   583,   584,    -1,   395,    -1,    -1,    -1,   399,
-      -1,    -1,    -1,   111,   595,    -1,   444,    -1,    -1,    69,
-     460,   119,   120,    -1,    -1,    -1,    -1,    -1,    -1,  1162,
-      -1,    -1,   613,    -1,     0,    -1,    -1,   618,    -1,    -1,
-      -1,   469,    -1,   624,   779,    -1,   627,   628,    -1,    -1,
-      -1,    -1,    -1,    -1,   789,    -1,    -1,    -1,    -1,  1096,
-     795,  1263,   643,    -1,    -1,   800,    32,    -1,    72,  1237,
-      74,    75,    76,  1311,    -1,    -1,  1244,  1245,  1246,    -1,
-     661,    85,    86,   348,    -1,   475,    -1,    -1,    -1,    -1,
-      -1,   672,    -1,    -1,    -1,    -1,    -1,  1230,    -1,  1232,
-    1233,    -1,    -1,    69,    -1,    -1,   156,   111,    10,    11,
-      12,    13,    14,    -1,    -1,   119,   120,   698,  1155,  1156,
-     701,    -1,    -1,    -1,    -1,   860,    -1,    -1,    -1,   710,
-    1368,  1369,   713,    -1,    -1,    -1,    -1,    39,    -1,  1307,
-      10,    11,    12,    13,    14,    -1,    -1,   882,    -1,    -1,
-      -1,    -1,    -1,    -1,   889,   736,    -1,    -1,    -1,   587,
-     741,    -1,    -1,   428,    -1,    67,    -1,    -1,  1406,    39,
-      72,    -1,    74,    75,    76,   565,   566,    -1,  1311,    -1,
-      -1,    -1,    -1,    85,    86,    -1,    -1,   615,    -1,    -1,
-     156,    -1,   620,    -1,    -1,    -1,    -1,    67,   779,    -1,
-     250,    -1,    72,    -1,   469,   255,    76,  1358,   789,   111,
-     724,   792,    -1,    -1,   795,    85,    86,   119,   120,   800,
-      -1,   661,    -1,    -1,    -1,  1358,  1359,    -1,  1466,   810,
-      72,    -1,    74,    75,    76,  1368,  1369,  1475,     0,     1,
-      -1,   111,    -1,    85,    86,    -1,    -1,    -1,    -1,   119,
-     120,    -1,    10,    11,    12,    13,    14,    -1,   648,    -1,
-      -1,   689,   652,    -1,   999,  1000,    -1,  1002,  1003,   111,
-      32,   113,    -1,  1406,    -1,   703,    -1,   119,   120,   860,
-      -1,    39,    -1,    -1,   250,  1020,    -1,    -1,    -1,   255,
-      -1,    -1,    -1,    -1,    -1,    -1,   724,    -1,    -1,   349,
-      -1,   882,    -1,    -1,    66,    -1,    -1,    69,   889,    67,
-      -1,   892,    -1,    -1,    72,    -1,    74,    75,    76,  1054,
-    1055,    -1,   587,    -1,    -1,    -1,  1363,    85,    86,    -1,
-      -1,    -1,  1465,  1466,    -1,    -1,    -1,   918,    -1,   779,
-      -1,    -1,  1475,  1380,    -1,    -1,   927,   928,     0,   789,
-     615,    -1,    -1,   111,    -1,   620,  1489,  1490,    -1,    -1,
-     800,   119,   120,    -1,    -1,   415,   794,    -1,    -1,    10,
-      11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,   429,
-      32,  1514,    -1,   349,   434,    -1,    -1,    -1,    -1,    -1,
-    1125,    -1,   442,   783,   156,    -1,    -1,    -1,    39,    -1,
-     981,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     460,    -1,    -1,   994,    -1,  1452,  1453,    69,   999,  1000,
-      -1,  1002,  1003,    -1,   689,    -1,    67,    -1,   478,    -1,
-     480,    72,  1167,    74,    75,    76,    -1,    -1,   703,  1020,
-      -1,    -1,    -1,    -1,    85,    86,    -1,    -1,    72,   415,
-      74,    75,    76,  1188,    -1,    -1,    -1,    -1,   220,    -1,
-      -1,    85,    86,   429,    -1,  1200,    -1,  1202,   434,    -1,
-     111,   521,   113,  1054,  1055,    -1,   442,    -1,   119,   120,
-      -1,    -1,    -1,    -1,    -1,    83,    -1,   111,   250,    87,
-      88,    89,    -1,    -1,   460,   119,   120,    -1,    -1,    -1,
-      -1,    -1,  1237,    -1,   156,    -1,   896,    -1,    -1,  1244,
-    1245,  1246,   478,   111,   480,   113,    -1,   115,   116,    -1,
-    1255,  1256,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   794,
-      -1,    -1,    -1,  1268,   584,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1125,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   521,   984,    -1,    -1,   999,
-    1000,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,  1307,    -1,    -1,    -1,    -1,   627,   628,    -1,
-      -1,   971,    -1,    -1,    -1,    -1,  1167,    -1,    -1,    -1,
-      -1,    -1,    -1,   643,    -1,   133,    -1,   987,   250,    -1,
-      -1,    -1,    -1,   255,    -1,    -1,    -1,  1188,    -1,    -1,
-      -1,   661,    -1,    -1,  1054,  1055,    -1,    -1,   584,  1200,
-      -1,  1202,   672,    -1,    -1,  1206,    -1,    -1,    -1,    -1,
+      23,    24,    25,    26,    27,    28,    29,   115,    -1,    32,
+      33,    34,    -1,   121,   122,    -1,    -1,    -1,    41,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1376,    -1,    -1,    -1,    -1,    -1,    -1,   698,    -1,
-      -1,   701,    -1,    -1,    -1,    -1,  1237,    -1,    -1,    -1,
-      -1,   627,   628,  1244,  1245,  1246,    -1,   429,    -1,    -1,
-      -1,    -1,  1062,    -1,  1255,  1256,    -1,   643,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   736,  1268,    -1,  1424,
-      -1,    -1,    -1,    -1,    -1,   661,  1431,   349,    53,    -1,
-      55,    -1,    -1,    58,    59,    60,   672,    62,    -1,    -1,
-      -1,  1101,    -1,    -1,    -1,    -1,    -1,    -1,   480,   984,
-    1301,    76,    -1,    -1,    -1,    -1,  1307,    -1,    -1,   779,
-      -1,    -1,   698,    88,    89,   701,    -1,    -1,  1166,   789,
-      -1,    -1,    -1,    -1,    -1,   795,    -1,    -1,  1483,    -1,
-     800,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   521,
-    1200,    -1,    -1,   415,    -1,    -1,    -1,    -1,    -1,    -1,
-     736,    -1,    -1,    -1,    -1,    -1,    -1,   429,    -1,    -1,
-      -1,    -1,   434,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     442,    -1,    -1,    -1,    -1,  1376,    -1,  1237,    -1,    -1,
-      -1,    -1,    -1,    -1,  1244,  1245,  1246,    -1,   460,    -1,
-     860,    -1,    -1,   779,    -1,    -1,    -1,    -1,    -1,    -1,
-    1401,    -1,   584,   789,    -1,    -1,   478,    -1,   480,   795,
-      -1,    -1,   882,    -1,   800,  1263,    -1,    -1,    -1,   889,
-      -1,    -1,    -1,  1424,    -1,    -1,    -1,    -1,    -1,    -1,
-    1431,    -1,     7,    -1,    -1,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,    -1,    -1,   627,   628,  1307,    -1,   521,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   643,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   860,    -1,    -1,    -1,    -1,    -1,
-      -1,  1166,  1483,    -1,    -1,    -1,    -1,    -1,    -1,  1490,
-      -1,    66,    67,    -1,    -1,    -1,   882,    72,    -1,    -1,
-      -1,    76,    -1,   889,    79,    80,    81,    82,    83,    84,
-      85,    86,   584,    88,    89,    -1,    -1,    -1,    -1,   701,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   999,
-    1000,    -1,  1002,  1003,    -1,    -1,   111,    -1,   113,    -1,
-      -1,    -1,    -1,    -1,   119,   120,   121,   122,   123,   124,
-    1020,    -1,    -1,    -1,    -1,   627,   628,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   342,    -1,   344,
-      -1,   643,    -1,    10,    11,    12,    13,    14,  1263,    -1,
-     355,   356,    -1,    -1,  1054,  1055,    -1,    -1,    -1,   661,
-      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-     672,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   999,  1000,    -1,  1002,  1003,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,   698,    -1,    -1,   701,
-      67,    -1,    -1,    -1,  1020,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    86,
-      -1,    -1,    67,    -1,    -1,  1125,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,   736,    -1,    -1,    -1,  1054,  1055,
-      85,    86,    -1,    -1,   111,    -1,   113,    -1,   860,    -1,
-      -1,    -1,   119,   120,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,  1167,   113,    -1,
-     882,    -1,    -1,    -1,   119,   120,    -1,   779,    37,    38,
-      -1,    40,    -1,    -1,    -1,    -1,    -1,   789,  1188,    -1,
-      -1,    -1,    -1,   795,    -1,    -1,    -1,    -1,   800,    -1,
-    1200,    -1,  1202,    -1,    -1,    -1,    -1,    66,    -1,  1125,
-      -1,    -1,    -1,    72,    -1,    -1,   928,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    85,    86,    -1,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    -1,  1237,    -1,    -1,
-      -1,    -1,    -1,    -1,  1244,  1245,  1246,    -1,    -1,    -1,
-      -1,  1167,   111,    -1,   113,  1255,  1256,    -1,   860,    -1,
-     119,   120,   121,   122,   123,   124,    -1,    -1,  1268,    -1,
-      -1,    -1,  1188,   132,    -1,    -1,    -1,    -1,    -1,    -1,
-     882,    -1,    -1,    -1,  1200,    -1,  1202,   889,    -1,    -1,
-    1002,  1003,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1307,  1020,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,  1237,    -1,    75,    -1,    77,    -1,    79,  1244,  1245,
-    1246,    -1,    -1,    -1,    86,    -1,    -1,    -1,    -1,  1255,
-    1256,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1268,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   117,    -1,   119,   120,   121,
-      -1,    -1,    -1,    -1,    -1,    -1,  1376,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   690,    -1,   692,    -1,    -1,
-      -1,  1307,    -1,    -1,   699,   700,    -1,   999,  1000,   704,
-    1002,  1003,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,
-      -1,    -1,   717,    -1,    -1,    -1,    -1,   722,  1020,    -1,
-      -1,    -1,    -1,    -1,  1424,    -1,    -1,    -1,    -1,    -1,
-      -1,  1431,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   749,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1054,  1055,  1166,  1167,    -1,    -1,    -1,    -1,
-    1376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   220,    -1,
-     222,   223,   224,    -1,    -1,    -1,  1188,    -1,    -1,    -1,
-      -1,    -1,    -1,  1483,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1206,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   258,    -1,  1424,    -1,
-      -1,   263,    -1,    -1,    -1,  1431,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1125,    -1,    -1,   278,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   842,    -1,   844,
-     845,   846,    -1,  1255,  1256,    -1,    -1,    -1,    -1,    -1,
-      -1,  1263,    49,    -1,    -1,    -1,  1268,    -1,   863,    -1,
-      -1,    -1,    -1,    -1,    -1,  1167,    -1,  1483,    -1,    66,
-      -1,    -1,   877,    -1,    -1,    -1,    -1,   329,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1188,    -1,    -1,  1301,
-      -1,    -1,    -1,    -1,    -1,    -1,   348,    -1,  1200,    -1,
-    1202,   353,   354,    -1,    -1,    -1,    -1,    -1,    -1,   361,
-      -1,   916,    -1,    -1,    -1,    -1,   113,    -1,    -1,    -1,
-     117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1237,    -1,    -1,    -1,    -1,
-      -1,    -1,  1244,  1245,  1246,    -1,    -1,    -1,    -1,   146,
-      -1,   403,    -1,  1255,  1256,   960,    -1,    -1,    -1,   156,
-     965,    -1,   159,    -1,  1376,   970,  1268,    -1,    -1,   421,
-     975,    -1,    -1,    -1,   426,   980,   428,   982,   983,    -1,
-      -1,   986,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1401,
-     995,    -1,   444,    -1,    -1,   447,   448,    -1,    -1,    -1,
-      -1,    -1,    -1,   455,    -1,  1307,  1011,  1012,    -1,    -1,
-      -1,   208,  1424,    -1,    -1,    -1,    -1,   469,    -1,  1431,
-      -1,    -1,    -1,   220,   476,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1037,    -1,    -1,  1040,    -1,    -1,    -1,    -1,
-      -1,   238,    -1,    -1,    -1,    26,    27,    28,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,   263,    -1,    -1,    -1,
-      -1,  1483,    -1,   270,  1376,    -1,    -1,    39,  1083,    -1,
-      -1,    -1,    -1,    -1,  1089,  1090,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   295,    -1,
-      -1,    -1,    -1,  1108,    -1,    67,    -1,    -1,  1113,    -1,
-      -1,   308,    -1,  1118,    -1,    -1,    -1,    98,    -1,   100,
-      -1,    -1,  1424,    -1,  1129,    -1,    -1,    -1,    -1,  1431,
-      -1,    -1,    -1,    -1,    -1,   587,    -1,  1142,    -1,  1144,
-    1145,  1146,  1147,    -1,    -1,    -1,   343,    -1,    -1,    -1,
-      -1,   348,    -1,    -1,  1159,    -1,  1161,    -1,    -1,    -1,
-    1165,    -1,    -1,   615,    -1,    -1,    -1,    -1,   620,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1483,    -1,    -1,    -1,    -1,    -1,    -1,  1193,  1194,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   180,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   190,
-     191,    -1,    -1,    -1,   195,    -1,   197,   198,    -1,    -1,
-      44,    -1,    -1,    -1,    -1,    -1,   423,   424,    -1,    -1,
-      -1,    -1,   429,    -1,    -1,    -1,    -1,   689,    -1,    -1,
-      -1,    -1,  1247,  1248,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   703,  1257,   450,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,
-      -1,    -1,   724,    -1,    -1,    -1,    -1,   101,    -1,    -1,
-      -1,   478,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   490,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   502,    -1,   504,    -1,    -1,
-     507,    -1,   509,   510,  1319,    -1,  1321,  1322,  1323,    -1,
-      -1,    -1,    -1,    -1,   521,    -1,    -1,    -1,  1333,    -1,
-      -1,   783,    -1,    -1,    -1,    -1,  1341,    -1,    -1,    -1,
-      -1,    -1,   794,    -1,    -1,    -1,   170,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   811,
-      -1,  1366,  1367,    -1,    -1,    -1,    -1,    -1,    -1,   193,
-      -1,    -1,    -1,    -1,    -1,    -1,   573,    -1,    -1,    -1,
-      -1,    -1,    -1,   207,    -1,    -1,    -1,   584,    -1,    -1,
-     587,    -1,   216,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   226,    -1,    -1,    -1,  1411,  1412,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   613,    -1,    -1,  1424,
-      -1,   618,    -1,    -1,    -1,    -1,  1431,   251,    -1,    -1,
-     627,   628,   256,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   269,   643,    -1,    -1,    -1,
-      -1,   275,    -1,   277,    -1,    -1,    -1,    -1,    -1,  1464,
-      -1,    -1,    -1,  1468,    -1,    -1,    -1,    -1,    -1,    -1,
-     922,    -1,   296,    -1,    -1,    -1,    -1,    -1,   675,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1496,    -1,  1498,    -1,    -1,    -1,    -1,    -1,    -1,
-     952,    -1,    -1,    -1,   701,    -1,   703,    -1,    -1,    -1,
-      -1,    -1,    -1,   337,    -1,    -1,    -1,   341,    -1,    -1,
-      -1,  1526,  1527,    -1,    -1,    -1,    -1,    -1,    -1,  1534,
-    1535,    -1,   984,    -1,    -1,    -1,    -1,    -1,    -1,   736,
-      -1,    -1,    -1,   995,    -1,   369,    -1,    -1,    -1,   373,
-     374,    -1,   376,    -1,    -1,    -1,    -1,    -1,    -1,   383,
-     384,    -1,   386,   387,    -1,   389,    -1,   391,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   408,    -1,    -1,    -1,   569,   570,
-      -1,    -1,   416,    -1,    -1,    -1,    -1,   794,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1064,    -1,    -1,   596,   440,    -1,   599,   600,
-      -1,   602,    -1,   604,   605,    -1,  1078,    -1,   609,   610,
-      -1,    26,    27,    28,   281,    -1,   283,   284,    -1,    -1,
-      -1,    -1,   466,    -1,    -1,    -1,   293,   294,   472,    -1,
-      -1,    -1,    -1,   477,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   308,   309,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
-     156,    -1,    -1,    -1,    -1,   882,    -1,    -1,    -1,   513,
-      -1,    -1,   889,    -1,    -1,    -1,   343,    -1,    -1,    -1,
-      -1,    -1,    -1,    98,   528,   100,    -1,   904,    -1,    -1,
-      -1,    -1,   188,    -1,  1166,    -1,    -1,    -1,    -1,   195,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     125,   378,   929,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   565,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     574,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   745,   746,    -1,    -1,    -1,    -1,
-     594,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   981,   180,    -1,    -1,    -1,    -1,
-      -1,   267,    -1,   188,    -1,   190,   191,    -1,    -1,    -1,
-     195,    -1,   197,   198,    -1,  1002,  1003,    -1,   632,    -1,
-      -1,  1263,    -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,
-      -1,    30,    31,    32,   668,    -1,    -1,    -1,   324,    -1,
-      39,    -1,   676,    -1,    -1,    -1,   332,   333,    -1,   335,
-     336,    -1,  1059,    -1,    -1,    -1,    -1,   343,    -1,    -1,
-      -1,   347,   267,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      69,    -1,    71,   707,    -1,    74,    75,    -1,    -1,    -1,
-     366,    -1,    -1,    -1,   718,   719,    -1,    -1,    -1,   546,
-     547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
-     557,   558,   559,   560,   561,   562,   563,    -1,    -1,   395,
-     901,    -1,    -1,   399,    -1,    -1,   750,   116,  1125,    -1,
-      -1,   755,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    -1,    -1,   429,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    -1,   146,    -1,    -1,    -1,    -1,    -1,  1166,
-      -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   167,   168,    -1,    -1,    -1,    67,
-      -1,   815,    -1,    -1,    -1,    -1,    -1,    -1,   822,   475,
-      78,    -1,   478,    -1,    -1,  1202,    -1,    -1,    -1,    -1,
-      -1,   835,    -1,   837,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
-      -1,    -1,   856,    -1,    -1,    -1,    -1,    -1,    -1,   686,
-      -1,   517,    -1,    -1,   868,   521,    -1,   871,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   238,    -1,    -1,  1255,  1256,
-      -1,    -1,  1514,    -1,    -1,    -1,  1263,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1056,    -1,    -1,    -1,   262,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   565,
-     566,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     747,    -1,    -1,    -1,    -1,    -1,    -1,   583,   584,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   593,    -1,   595,
-     596,    -1,    -1,    -1,    -1,    -1,   602,    -1,    -1,    -1,
-     777,    -1,    -1,    -1,    -1,    -1,   612,   613,    -1,    -1,
-      -1,    -1,   618,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   627,   628,    -1,    -1,   979,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   643,    -1,    -1,
-      -1,    -1,   648,   649,   569,   570,   652,   653,    -1,  1376,
-      -1,    -1,    -1,   659,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   377,    -1,    -1,    -1,    -1,    -1,
-      -1,   596,   678,  1184,   599,   600,    -1,   602,    -1,   604,
-     605,    -1,    -1,    -1,   609,   610,  1040,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   701,   702,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1433,    -1,  1435,    -1,
-      -1,    -1,    -1,    -1,   891,    -1,    -1,    -1,    -1,    -1,
-    1074,    -1,    -1,    -1,    -1,  1079,    -1,    -1,    -1,    -1,
-     736,    -1,    -1,  1087,   740,   741,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1470,    -1,  1472,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   470,    -1,    -1,
-     937,    -1,    -1,    -1,    -1,    -1,    -1,  1121,    -1,    -1,
-      -1,    -1,  1499,    -1,    -1,    -1,    -1,   783,  1132,    -1,
-      -1,  1135,    -1,  1137,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   969,   799,    -1,   801,   509,    -1,  1152,  1153,
-      -1,    -1,    -1,    -1,   981,   811,    -1,    -1,   521,    -1,
-      -1,    -1,    -1,    -1,   527,    -1,    -1,   530,  1172,    -1,
-     745,   746,     7,    -1,    -1,    10,    11,    12,    13,    14,
-     543,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1020,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-     573,    -1,    -1,    -1,  1218,    -1,    -1,   580,    -1,    -1,
-      -1,   584,  1226,    -1,    -1,    -1,   882,    -1,    -1,    -1,
-      -1,    66,    67,   889,   890,    -1,   892,    72,    -1,    -1,
-     896,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,   917,   918,    -1,    -1,    -1,    -1,   630,    -1,  1096,
-      -1,    -1,    -1,    -1,    -1,   638,   111,    -1,   113,    -1,
-      -1,    -1,    -1,    -1,   119,   120,   121,   122,   123,   124,
-      -1,    -1,  1296,    -1,  1298,    -1,   952,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1314,    -1,  1316,    -1,    -1,   971,   972,    -1,    -1,    -1,
-      -1,   896,    -1,    -1,    -1,   981,   901,  1331,  1155,  1156,
-      -1,   987,   988,    -1,   990,   991,   992,    -1,    -1,    -1,
-      -1,    -1,  1346,  1347,    -1,    -1,  1002,  1003,    -1,    -1,
-      -1,   714,    -1,  1357,    -1,    -1,  1360,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   736,    -1,   738,    -1,    -1,  1382,    -1,
-      -1,    -1,    -1,    -1,    -1,   748,    -1,  1391,    -1,    -1,
-    1394,   754,  1396,  1397,  1398,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1062,    -1,  1064,    -1,
-      -1,    -1,    -1,  1069,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1078,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   794,   795,  1437,    -1,  1439,    -1,  1441,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1101,  1102,   810,    -1,    -1,
-      -1,    -1,    -1,  1457,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1125,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1056,    -1,    -1,    -1,    -1,   849,    -1,    -1,    -1,
-     853,    -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,    -1,   882,
-      -1,    -1,    -1,    -1,    39,    -1,   889,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1363,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1202,    -1,    -1,    -1,
-      -1,    -1,    67,  1380,    -1,    -1,    -1,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    -1,   929,     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,   956,    30,    31,    32,    -1,   961,  1255,
-    1256,   964,    -1,    39,   119,   120,    -1,    -1,    -1,  1184,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   984,    -1,    -1,    -1,  1452,  1453,    -1,    -1,    -1,
-      -1,    67,   995,    69,    -1,    71,    72,    -1,    74,    75,
-      76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
-      86,    -1,  1015,    -1,  1017,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1032,
-    1033,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,    -1,
-      -1,    -1,    -1,   119,   120,    -1,    -1,    -1,    -1,  1052,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
+      73,    -1,    -1,    76,    77,    -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,
-    1376,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1106,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-      -1,    69,  1125,    71,    -1,    -1,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1140,  1141,    -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,   113,    30,    31,    32,  1465,
-      -1,   119,   120,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1489,  1490,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
-      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,  1514,    -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,   112,    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,  1282,
-      61,    62,  1285,    64,    -1,    66,    67,    -1,    69,    -1,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    85,    86,    -1,    88,    89,    -1,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,   115,    41,    -1,    -1,    -1,    -1,   121,   122,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,   113,    -1,    -1,   116,    -1,    -1,   119,   120,
-     121,   122,   123,   124,    -1,    -1,    -1,    -1,   129,    -1,
-      -1,    -1,    -1,   134,     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,    14,    15,    16,    17,
+      -1,    69,    -1,    71,    -1,    73,    -1,    -1,    76,    77,
+      -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,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,   115,    41,    -1,
+      -1,    -1,    -1,   121,   122,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
+      73,    -1,    -1,    76,    77,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
+      -1,    -1,    -1,    -1,    39,    40,    41,    42,    -1,    -1,
+      -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    74,
+      -1,    76,    77,    78,    -1,    -1,    81,    82,    83,    84,
+      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
+     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
+     125,   126,    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,    85,    86,    -1,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-      -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,    -1,
-      -1,    -1,   111,    -1,   113,    -1,    -1,    85,    86,    -1,
-     119,   120,   121,   122,   123,   124,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   134,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1499,     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,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    67,    -1,    69,    39,    71,    72,    -1,    74,    75,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    85,
-      86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    -1,   111,    -1,   113,    -1,    -1,
-      -1,    -1,    -1,   119,   120,   121,   122,   123,   124,     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,
-      85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      74,    75,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,   124,
-       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,    85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,   111,    -1,   113,
-      -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
-     124,     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,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
+      -1,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    67,    -1,    69,    -1,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    85,    86,    -1,    88,    89,    -1,    -1,    -1,
+      68,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
+      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-     113,    -1,    -1,    -1,    -1,    -1,   119,   120,   121,   122,
-     123,   124,     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,   113,   114,   115,    -1,    -1,
+      -1,    -1,    -1,   121,   122,   123,   124,   125,   126,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    39,    40,
+      41,    42,    -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,    68,    69,    -1,
+      -1,    -1,    -1,    74,    -1,    76,    77,    78,    -1,    -1,
+      81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
+      91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,
+     121,   122,   123,   124,   125,   126,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
+      34,    -1,    -1,    -1,    -1,    39,    40,    41,    42,    -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,    85,    86,    -1,    88,    89,    -1,    -1,
+      -1,    -1,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,
+      74,    -1,    76,    77,    78,    -1,    -1,    81,    82,    83,
+      84,    85,    86,    87,    88,    -1,    90,    91,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-      -1,   113,    -1,    -1,    -1,    -1,    -1,   119,   120,   121,
-     122,   123,   124,     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,   113,
+      -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,
+     124,   125,   126,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    85,    86,    -1,    88,    89,    -1,
+      -1,    68,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,
+      77,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
+      87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
+      -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
+       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,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    69,    -1,    71,    -1,
+      73,    41,    -1,    76,    77,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+      -1,    -1,    -1,    -1,    74,    -1,    76,    77,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   118,    -1,    87,    88,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,   115,    32,    33,    34,    -1,
+      -1,   121,   122,    -1,    -1,    41,    42,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    69,    -1,    -1,    -1,    -1,    41,    42,
+      76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
+      -1,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,   115,
+      -1,    -1,    -1,   119,    -1,   121,   122,    -1,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    -1,   115,    32,    33,    34,   119,    -1,   121,   122,
+      -1,    -1,    41,    42,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
+      69,    -1,    -1,    -1,    -1,    41,    -1,    76,    77,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,   113,    -1,    -1,    -1,    -1,    -1,   119,   120,
-     121,   122,   123,   124,     0,    -1,    -1,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,
+      76,    77,    -1,    -1,    -1,    -1,   115,    -1,    -1,    -1,
+     119,    -1,   121,   122,    -1,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,   115,
+      32,    33,    34,    -1,    -1,   121,   122,    -1,    -1,    41,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    69,    -1,    -1,
+      -1,    41,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+      -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,    -1,
+      -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
+     122,    -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,    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,    -1,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,    -1,
-      -1,    -1,    -1,   119,   120,     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,    -1,    -1,    85,    86,    -1,
+      26,    27,    28,    29,    -1,   115,    32,    33,    34,    -1,
+      -1,   121,   122,    -1,    -1,    41,    -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,   111,    -1,   113,    -1,    -1,    -1,   117,
-      -1,   119,   120,     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,    69,    -1,    -1,    -1,    -1,    -1,    -1,
+      76,    77,    -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,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,   115,
+      41,    -1,    -1,    -1,    -1,   121,   122,    -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,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
+      71,    -1,    73,    -1,    -1,    76,    77,    39,    40,    -1,
+      42,    43,    -1,    45,    -1,    -1,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    -1,    58,    59,    -1,    -1,
+      -1,    63,    64,    -1,    66,    -1,    68,    -1,    -1,    -1,
+      -1,    -1,    74,   114,    -1,    -1,    78,    -1,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,   119,
-     120,     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,   113,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
+     122,   123,   124,   125,   126,    -1,    -1,    39,    40,   131,
+      42,    43,    -1,    45,   136,    -1,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    -1,    -1,    59,    -1,    -1,
+      -1,    63,    64,    -1,    66,    -1,    68,    -1,    -1,    -1,
+      -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
       -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,     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,   113,    -1,    39,    -1,    -1,    -1,   119,   120,    -1,
+      -1,   113,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
+     122,   123,   124,   125,   126,    -1,    -1,    -1,    -1,   131,
+      -1,    -1,    -1,    -1,   136,     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,
+      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    39,    40,    -1,    42,    43,    -1,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
+      69,    66,    71,    68,    73,    -1,    -1,    76,    77,    74,
+      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
+      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
+      -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
+     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
+     125,   126,    -1,    -1,    39,    40,   131,    42,    43,    -1,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,
+      -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
+      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
+      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
+     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
+     125,   126,    -1,    -1,    39,    40,   131,    42,    43,    -1,
+      45,    -1,    -1,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,
+      -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
+      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
+      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
+      -1,    -1,    -1,    39,    40,    -1,    42,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
+     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
+     125,   126,    68,    -1,    -1,    -1,   131,    -1,    74,    -1,
+      76,    77,    78,    -1,    -1,    81,    82,    83,    84,    85,
+      86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
+      -1,    -1,    39,    40,    -1,    42,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
+      -1,   117,   118,    -1,    -1,   121,   122,   123,   124,   125,
+     126,    68,    -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,
+      -1,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
+      87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    40,    -1,    42,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
+      -1,   118,    -1,    -1,   121,   122,   123,   124,   125,   126,
+      68,    -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,
+      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
+      39,    40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
+      -1,    -1,   120,   121,   122,   123,   124,   125,   126,    68,
+      -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,    78,
+      -1,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,   118,
+      -1,    -1,   121,   122,   123,   124,   125,   126,    68,    -1,
+      -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,    78,    -1,
+      -1,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
+      90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,
+      -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,
+      -1,   121,   122,   123,   124,   125,   126,    68,    -1,    -1,
+      -1,    -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,
+      81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
+      91,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,
+      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,
+     121,   122,   123,   124,   125,   126,    68,    -1,    -1,    -1,
+      -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    42,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
+     122,   123,   124,   125,   126,    68,    -1,    -1,    -1,    -1,
+      -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,    82,
+      83,    84,    85,    86,    87,    88,    -1,    90,    91,    -1,
+      -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    42,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
+     123,   124,   125,   126,    68,    -1,    -1,    -1,    -1,    -1,
+      74,    -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,
+      84,    85,    86,    87,    88,    -1,    90,    91,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    40,    -1,    42,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,
+      -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,
+     124,   125,   126,    68,    -1,    -1,    -1,    -1,    -1,    74,
+      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
+      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
+     115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,   124,
+     125,   126,     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,    29,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    69,    -1,    71,
+      -1,    73,    74,    41,    76,    77,    78,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,     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,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
       -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,   113,    -1,    -1,
-      -1,    -1,    -1,   119,   120,    -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,    -1,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,   113,
-      -1,    -1,    -1,    -1,    -1,   119,   120,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,
+      -1,    73,    -1,    -1,    76,    77,     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,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    41,    -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,   112,   113,    -1,    -1,    -1,
-      -1,    -1,   119,   120,    -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,    -1,
-      -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-      -1,    -1,    -1,    -1,   119,   120,     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,    69,    -1,    71,    -1,    73,    -1,    -1,    76,
+      77,     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,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      98,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,   113,    -1,    -1,    -1,    -1,
-      -1,   119,   120,     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,   113,    30,
-      31,    32,   117,    -1,   119,   120,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
+      73,    -1,    -1,    76,    77,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
+      35,    36,    37,    -1,    -1,    -1,    41,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    69,    -1,    -1,    -1,    41,    -1,
+      -1,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    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,   113,    -1,    -1,    -1,    -1,    -1,   119,   120,
-      -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,   113,    -1,    -1,    -1,    -1,    -1,
-     119,   120,    -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,    -1,    -1,   113,    -1,    -1,    -1,
-      -1,    -1,   119,   120,    -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,    85,    86,    -1,    88,    89,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,   113,    -1,    -1,   116,    -1,    -1,   119,   120,
-     121,   122,   123,   124,    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,    85,
-      86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
-      75,    -1,    -1,    -1,    -1,   111,   112,   113,    -1,    -1,
-      85,    86,    -1,   119,   120,   121,   122,   123,   124,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,   113,    30,
-      31,    32,    -1,    -1,   119,   120,    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,    85,    86,    -1,    88,    89,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
-     111,    -1,   113,    -1,    -1,    -1,    -1,    -1,   119,   120,
-     121,   122,   123,   124,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,   113,    30,    31,    32,   117,    -1,   119,
-     120,    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,    85,
-      86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,    -1,
-      -1,    -1,    -1,   119,   120,   121,   122,   123,   124,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,   113,    30,
-      31,    32,   117,    -1,   119,   120,    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,    85,    86,    -1,    88,    89,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
-     111,    -1,   113,    -1,    -1,    85,    86,    -1,   119,   120,
-     121,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,   119,
-     120,    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,    -1,    -1,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,
-     119,   120,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,   113,    30,    31,    32,    -1,    -1,
-     119,   120,    -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,    -1,
-      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-      -1,    -1,    -1,    -1,   119,   120,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,   113,    30,
-      31,    32,    -1,    -1,   119,   120,    -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,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   113,    -1,    -1,    -1,    -1,    -1,   119,   120,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,   113,    30,    31,    32,    -1,    -1,   119,   120,
-      -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,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,    -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,    -1,    64,
-      -1,    66,    -1,    -1,    -1,    -1,   113,    72,    -1,    -1,
-      -1,    76,   119,   120,    79,    80,    81,    82,    83,    84,
-      85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,
-      -1,   116,    -1,    -1,   119,   120,   121,   122,   123,   124,
-      -1,    -1,    37,    38,   129,    40,    41,    -1,    43,   134,
-      -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,
-      85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,
-      -1,   116,    -1,    -1,   119,   120,   121,   122,   123,   124,
-      -1,    -1,    -1,    -1,   129,    -1,    -1,    -1,    -1,   134,
-       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,    85,    86,    -1,    88,    89,
-      -1,    -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,   113,    -1,    -1,   116,    -1,    -1,   119,
-     120,   121,   122,   123,   124,    -1,    -1,    37,    38,   129,
-      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,    85,    86,    -1,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,   113,    -1,    -1,   116,    -1,    -1,   119,
-     120,   121,   122,   123,   124,    -1,    -1,    37,    38,   129,
-      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,    85,    86,    -1,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,   113,    -1,    -1,   116,    -1,    -1,   119,
-     120,   121,   122,   123,   124,    66,    -1,    -1,    -1,   129,
-      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    85,    86,    -1,    88,    89,    -1,
-      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,   113,    -1,   115,   116,    -1,    -1,   119,   120,
-     121,   122,   123,   124,    66,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    85,    86,    -1,    88,    89,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-      -1,   113,    -1,    -1,   116,    -1,    -1,   119,   120,   121,
-     122,   123,   124,    66,    -1,    -1,    -1,    -1,    -1,    72,
-      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    85,    86,    -1,    88,    89,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-     113,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,   124,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,   113,
-      -1,    -1,   116,    -1,    -1,   119,   120,   121,   122,   123,
-     124,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
-      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      85,    86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,
-      -1,    -1,    -1,    -1,   119,   120,   121,   122,   123,   124,
-      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    85,
-      86,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,   113,    -1,    -1,
-      -1,    -1,    -1,   119,   120,   121,   122,   123,   124,    66,
-      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    85,    86,
-      -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    37,
-      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,   113,    -1,    -1,    -1,
-      -1,    -1,   119,   120,   121,   122,   123,   124,    66,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    85,    86,    -1,
-      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
-      -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,    -1,   113,    -1,    -1,    -1,    -1,
-      -1,   119,   120,   121,   122,   123,   124,    66,    -1,    -1,
-      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    85,    86,    -1,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,
-      40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,
-     119,   120,   121,   122,   123,   124,    66,    -1,    -1,    -1,
-      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    85,    86,    -1,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,   119,
-     120,   121,   122,   123,   124,     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,    -1,    -1,    85,    86,     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,    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,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    -1,    -1,    74,    75
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
+      -1,    -1,    -1,    76,    77
 };
 
@@ -3863,156 +3940,156 @@
        0,     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,    30,    31,    32,    33,
-      36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
-      76,    85,    86,   111,   113,   119,   120,   139,   142,   154,
-     203,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   236,
-     237,   238,   239,   240,   241,   242,   244,   245,   246,   247,
-     248,   249,   251,   259,   260,   287,   288,   289,   297,   300,
-     306,   307,   309,   311,   312,   318,   323,   327,   328,   329,
-     330,   331,   332,   333,   334,   354,   371,   372,   373,   374,
-      72,   141,   142,   154,   220,   222,   230,   232,   241,   245,
-     247,   288,    81,   111,   316,   317,   318,   316,   316,    72,
-      74,    75,    76,   140,   141,   277,   278,   298,   299,    74,
-      75,   278,   111,   309,    11,   204,   111,   154,   323,   328,
-     329,   330,   332,   333,   334,   114,   136,   223,   230,   232,
-     327,   331,   370,   371,   374,   375,   137,   109,   133,   281,
-     116,   137,   178,    74,    75,   139,   276,   137,   137,   137,
-     118,   137,    74,    75,   111,   154,   313,   322,   323,   324,
-     325,   326,   327,   331,   335,   336,   337,   338,   339,   345,
-       3,    28,    78,   243,     3,     5,    74,   113,   154,   222,
-     233,   237,   239,   248,   289,   327,   331,   374,   220,   222,
-     232,   241,   245,   247,   288,   327,   331,    33,   238,   238,
-     233,   239,   137,   238,   233,   238,   233,    75,   111,   116,
-     278,   289,   116,   278,   238,   233,   118,   137,   137,     0,
-     136,   111,   178,   316,   316,   136,   113,   230,   232,   372,
-     276,   276,   133,   232,   111,   154,   313,   323,   327,   113,
-     154,   374,   310,   235,   318,   111,   294,   111,   111,    51,
-     111,    37,    38,    40,    66,    72,    76,    79,    80,    81,
-      82,    83,    84,    88,    89,   111,   113,   121,   122,   123,
-     124,   138,   142,   143,   144,   145,   146,   153,   154,   155,
+      22,    23,    24,    25,    26,    27,    28,    29,    32,    33,
+      34,    35,    38,    41,    42,    66,    69,    71,    73,    74,
+      76,    77,    78,    87,    88,   113,   115,   121,   122,   141,
+     144,   156,   205,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   238,   239,   240,   241,   242,   243,   244,   246,   247,
+     248,   249,   250,   251,   253,   261,   262,   289,   290,   291,
+     299,   302,   308,   309,   311,   313,   314,   320,   325,   329,
+     330,   331,   332,   333,   334,   335,   336,   356,   373,   374,
+     375,   376,    74,   143,   144,   156,   222,   224,   232,   234,
+     243,   247,   249,   290,    83,   113,   318,   319,   320,   318,
+     318,    74,    76,    77,    78,   142,   143,   279,   280,   300,
+     301,    76,    77,   280,   113,   311,    11,   206,   113,   156,
+     325,   330,   331,   332,   334,   335,   336,   116,   138,   225,
+     232,   234,   329,   333,   372,   373,   376,   377,   139,   111,
+     135,   283,   118,   139,   180,    76,    77,   141,   278,   139,
+     139,   139,   120,   139,    76,    77,   113,   156,   315,   324,
+     325,   326,   327,   328,   329,   333,   337,   338,   339,   340,
+     341,   347,     3,    30,    80,   245,     3,     5,    76,   115,
+     156,   224,   235,   239,   241,   250,   291,   329,   333,   376,
+     222,   224,   234,   243,   247,   249,   290,   329,   333,    35,
+     240,   240,   235,   241,   139,   240,   235,   240,   235,    77,
+     113,   118,   280,   291,   118,   280,   240,   235,   120,   139,
+     139,     0,   138,   113,   180,   318,   318,   138,   115,   232,
+     234,   374,   278,   278,   135,   234,   113,   156,   315,   325,
+     329,   115,   156,   376,   312,   237,   320,   113,   296,   113,
+     113,    53,   113,    39,    40,    42,    68,    74,    78,    81,
+      82,    83,    84,    85,    86,    90,    91,   113,   115,   123,
+     124,   125,   126,   140,   144,   145,   146,   147,   148,   155,
      156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   169,   172,   230,   280,   296,   370,   375,   232,
-     112,   112,   112,   112,   112,   112,   112,   113,   230,   354,
-     372,   113,   119,   154,   169,   222,   223,   229,   232,   236,
-     237,   241,   244,   245,   247,   266,   267,   271,   272,   273,
-     274,   288,   354,   366,   367,   368,   369,   374,   375,   111,
-     327,   331,   374,   111,   118,   134,   113,   116,   154,   169,
-     282,   282,   117,   136,   118,   134,   111,   118,   134,   118,
-     134,   118,   134,   316,   134,   323,   324,   325,   326,   336,
-     337,   338,   339,   232,   322,   335,    64,   315,   113,   316,
-     353,   354,   316,   316,   178,   136,   111,   316,   353,   316,
-     316,   232,   313,   111,   111,   231,   232,   230,   232,   136,
-     230,   370,   375,   178,   136,   276,   281,   222,   237,   327,
-     331,   178,   136,   298,   232,   241,   134,   232,   232,   296,
-     252,   250,   262,   278,   261,   232,   298,   134,   134,   309,
-     136,   141,   275,     3,   137,   212,   213,   227,   229,   232,
-     136,   315,   111,   315,   169,   323,   232,   111,   136,   276,
-     116,    33,    34,    35,   230,   290,   291,   293,   136,   130,
-     133,   295,   136,   233,   238,   239,   276,   319,   320,   321,
-     111,   143,   111,   153,   111,   153,   156,   111,   153,   111,
-     111,   153,   153,   113,   169,   174,   178,   230,   279,   370,
-     374,   136,    81,    83,    87,    88,    89,   111,   113,   115,
-     116,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   133,   171,   156,   156,   119,   125,   126,   121,
-     122,    90,    91,    92,    93,   127,   128,    94,    95,   120,
-     129,   130,    96,    97,   131,   111,   154,   349,   350,   351,
-     352,   353,   112,   118,   111,   353,   354,   111,   353,   354,
-     136,   230,   372,   114,   136,   137,   230,   232,   365,   366,
-     374,   375,   137,   111,   113,   154,   323,   340,   341,   342,
-     343,   344,   345,   346,   347,   348,   354,   355,   356,   357,
-     358,   359,   360,   154,   374,   232,   137,   137,   154,   230,
-     232,   367,   276,   230,   354,   367,   276,   136,   136,   136,
-     136,    72,   113,   115,   142,   278,   282,   283,   284,   285,
-     286,   136,   136,   136,   136,   136,   136,   313,   112,   112,
-     112,   112,   112,   112,   112,   322,   335,   111,   281,   114,
-     212,   136,   313,   174,   280,   174,   280,   313,   113,   212,
-     315,   178,   136,   212,   112,    40,   113,   117,   230,   253,
-     254,   255,   370,   116,   118,   376,   133,   263,   116,   232,
-     268,   269,   270,   273,   274,   112,   118,   178,   136,   119,
-     169,   136,   229,   232,   267,   366,   374,   307,   308,   111,
-     154,   340,   112,   118,   133,   377,   278,   290,   111,   116,
-     278,   280,   290,   112,   118,   111,   143,   112,   132,   279,
-     279,   279,   148,   169,   280,   279,   136,   112,   118,   112,
-     111,   154,   353,   361,   362,   363,   364,   112,   118,   169,
-     113,   141,   147,   148,   136,   113,   141,   147,   169,   156,
-     156,   156,   157,   157,   158,   158,   159,   159,   159,   159,
-     160,   160,   161,   162,   163,   164,   165,   132,   174,   136,
-     350,   351,   352,   232,   349,   316,   316,   169,   280,   136,
-     275,   230,   354,   367,   232,   236,   114,   374,   114,   111,
-     136,   323,   341,   342,   343,   346,   356,   357,   358,   114,
-     136,   232,   340,   344,   355,   111,   316,   359,   377,   316,
-     316,   377,   111,   316,   359,   316,   316,   316,   316,   354,
-     230,   365,   375,   276,   114,   118,   114,   118,   377,   230,
-     367,   377,   264,   265,   266,   267,   264,   276,   169,   136,
-     113,   278,   132,   118,   376,   282,   113,   132,   286,    29,
-     214,   215,   276,   264,   141,   313,   141,   315,   111,   353,
-     354,   111,   353,   354,   144,   354,   178,   268,   112,   112,
-     112,   112,   136,   178,   212,   178,   116,   254,   255,   136,
-     111,   132,   154,   256,   258,   322,   323,   335,   361,   118,
-     134,   118,   134,   278,   252,   278,   117,   167,   168,   262,
-     137,   137,   141,   227,   137,   137,   264,   111,   154,   374,
-     137,   117,   232,   291,   169,   292,   137,   136,   136,   111,
-     137,   112,   320,   174,   175,   132,   134,   113,   143,   205,
-     206,   207,   112,   118,   112,   112,   112,   112,   169,   362,
-     363,   364,   232,   361,   316,   316,   116,   156,   169,   170,
-     173,   118,   136,   112,   118,   169,   136,   117,   167,   132,
-     268,   112,   112,   112,   349,   268,   112,   230,   367,   113,
-     119,   154,   169,   169,   232,   346,   268,   112,   112,   112,
-     112,   112,   112,   112,     7,   232,   340,   344,   355,   136,
-     136,   377,   136,   136,   137,   137,   137,   137,   281,   167,
-     168,   169,   314,   136,   282,   284,   117,   136,   216,   278,
-      40,    41,    43,    46,    47,    48,    49,    50,    51,    52,
-      53,    57,    61,    62,    72,   129,   175,   176,   177,   178,
-     179,   180,   182,   183,   195,   197,   198,   203,   217,   312,
-      29,   137,   133,   281,   136,   136,   112,   137,   178,   252,
-     134,   134,   323,   168,   232,   257,   258,   257,   278,   316,
-     117,   263,   376,   112,   118,   114,   114,   137,   232,   118,
-     377,   294,   112,   290,   220,   222,   230,   302,   303,   304,
-     305,   296,   112,   112,   132,   168,   111,   112,   132,   118,
-     141,   112,   112,   112,   361,   283,   118,   137,   173,    79,
-      82,    84,   141,   149,   150,   151,   148,   137,   149,   167,
-     137,   111,   353,   354,   137,   136,   137,   137,   137,   169,
-     112,   137,   111,   353,   354,   111,   359,   111,   359,   354,
-     231,     7,   119,   137,   169,   268,   268,   267,   271,   271,
-     272,   112,   118,   118,   112,    98,   124,   137,   137,   149,
-     282,   169,   118,   134,   217,   221,   232,   236,   111,   111,
-     176,   111,   111,    72,   134,    72,   134,    72,   119,   175,
-     111,   178,   170,   170,   132,   146,   134,   137,   136,   137,
-     216,   112,   169,   268,   268,   316,   112,   117,   256,   117,
-     136,   112,   136,   137,   313,   117,   136,   137,   137,   112,
-     116,   205,   114,   168,   134,   205,   207,   112,   111,   353,
-     354,   376,   170,   114,   137,   152,   113,   150,   152,   152,
-     118,   137,    87,   115,   114,   137,   112,   136,   112,   114,
-     114,   114,   137,   112,   136,   136,   136,   169,   169,   137,
-     114,   137,   137,   137,   137,   136,   136,   168,   168,   114,
-     114,   137,   278,   232,   174,   174,    47,   174,   136,   134,
-     134,   134,   174,   134,   174,    58,    59,    60,   199,   200,
-     201,   134,    63,   134,   316,   116,   180,   117,   134,   137,
-     137,    98,   273,   274,   112,   303,   118,   134,   118,   134,
-     117,   301,   132,   143,   112,   112,   132,   136,   117,   114,
-      83,   136,   150,   114,   113,   150,   113,   150,   114,   268,
-     114,   268,   268,   268,   137,   137,   114,   114,   112,   112,
-     114,   118,    98,   267,    98,   137,   114,   112,   112,   111,
-     112,   175,   196,   217,   134,   112,   111,   111,   178,   201,
-      58,    59,   169,   176,   147,   112,   112,   116,   136,   136,
-     302,   143,   208,   111,   134,   208,   268,   149,   136,   136,
-     137,   137,   137,   137,   114,   114,   136,   137,   114,   176,
-      44,    45,   116,   186,   187,   188,   174,   176,   137,   112,
-     175,   116,   188,    98,   136,    98,   136,   111,   111,   134,
-     117,   136,   276,   313,   117,   118,   132,   168,   112,   137,
-     137,   149,   149,   112,   112,   112,   112,   271,    42,   168,
-     184,   185,   314,   132,   136,   176,   186,   112,   134,   176,
-     134,   136,   112,   136,   112,   136,    98,   136,    98,   136,
-     134,   302,   143,   141,   209,   112,   134,   112,   114,   137,
-     137,   176,    98,   118,   132,   137,   210,   211,   217,   134,
-     175,   175,   210,   178,   202,   230,   370,   178,   202,   112,
-     136,   112,   136,   117,   112,   118,   114,   114,   168,   184,
-     187,   189,   190,   136,   134,   187,   191,   192,   137,   111,
-     154,   313,   361,   141,   137,   178,   202,   178,   202,   111,
-     134,   141,   176,   181,   117,   187,   217,   175,    56,   181,
-     194,   117,   187,   112,   232,   112,   137,   137,   296,   176,
-     181,   134,   193,   194,   181,   194,   178,   178,   112,   112,
-     112,   193,   137,   137,   178,   178,   137,   137
+     166,   167,   168,   169,   171,   174,   232,   282,   298,   372,
+     377,   234,   114,   114,   114,   114,   114,   114,   114,   115,
+     232,   356,   374,   115,   121,   156,   171,   224,   225,   231,
+     234,   238,   239,   243,   246,   247,   249,   268,   269,   273,
+     274,   275,   276,   290,   356,   368,   369,   370,   371,   376,
+     377,   113,   329,   333,   376,   113,   120,   136,   115,   118,
+     156,   171,   284,   284,   119,   138,   120,   136,   113,   120,
+     136,   120,   136,   120,   136,   318,   136,   325,   326,   327,
+     328,   338,   339,   340,   341,   234,   324,   337,    66,   317,
+     115,   318,   355,   356,   318,   318,   180,   138,   113,   318,
+     355,   318,   318,   234,   315,   113,   113,   233,   234,   232,
+     234,   138,   232,   372,   377,   180,   138,   278,   283,   224,
+     239,   329,   333,   180,   138,   300,   234,   243,   136,   234,
+     234,   298,   254,   252,   264,   280,   263,   234,   300,   136,
+     136,   311,   138,   143,   277,     3,   139,   214,   215,   229,
+     231,   234,   138,   317,   113,   317,   171,   325,   234,   113,
+     138,   278,   118,    35,    36,    37,   232,   292,   293,   295,
+     138,   132,   135,   297,   138,   235,   240,   241,   278,   321,
+     322,   323,   113,   145,   113,   155,   113,   155,   158,   113,
+     155,   113,   113,   155,   155,   115,   171,   176,   180,   232,
+     281,   372,   376,   138,    83,    85,    89,    90,    91,   113,
+     115,   117,   118,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   135,   173,   158,   158,   121,   127,
+     128,   123,   124,    92,    93,    94,    95,   129,   130,    96,
+      97,   122,   131,   132,    98,    99,   133,   113,   156,   351,
+     352,   353,   354,   355,   114,   120,   113,   355,   356,   113,
+     355,   356,   138,   232,   374,   116,   138,   139,   232,   234,
+     367,   368,   376,   377,   139,   113,   115,   156,   325,   342,
+     343,   344,   345,   346,   347,   348,   349,   350,   356,   357,
+     358,   359,   360,   361,   362,   156,   376,   234,   139,   139,
+     156,   232,   234,   369,   278,   232,   356,   369,   278,   138,
+     138,   138,   138,    74,   115,   117,   144,   280,   284,   285,
+     286,   287,   288,   138,   138,   138,   138,   138,   138,   315,
+     114,   114,   114,   114,   114,   114,   114,   324,   337,   113,
+     283,   116,   214,   138,   315,   176,   282,   176,   282,   315,
+     115,   214,   317,   180,   138,   214,   114,    42,   115,   119,
+     232,   255,   256,   257,   372,   118,   120,   378,   135,   265,
+     118,   234,   270,   271,   272,   275,   276,   114,   120,   180,
+     138,   121,   171,   138,   231,   234,   269,   368,   376,   309,
+     310,   113,   156,   342,   114,   120,   135,   379,   280,   292,
+     113,   118,   280,   282,   292,   114,   120,   113,   145,   114,
+     134,   281,   281,   281,   150,   171,   282,   281,   138,   114,
+     120,   114,   113,   156,   355,   363,   364,   365,   366,   114,
+     120,   171,   115,   143,   149,   150,   138,   115,   143,   149,
+     171,   158,   158,   158,   159,   159,   160,   160,   161,   161,
+     161,   161,   162,   162,   163,   164,   165,   166,   167,   134,
+     176,   138,   352,   353,   354,   234,   351,   318,   318,   171,
+     282,   138,   277,   232,   356,   369,   234,   238,   116,   376,
+     116,   113,   138,   325,   343,   344,   345,   348,   358,   359,
+     360,   116,   138,   234,   342,   346,   357,   113,   318,   361,
+     379,   318,   318,   379,   113,   318,   361,   318,   318,   318,
+     318,   356,   232,   367,   377,   278,   116,   120,   116,   120,
+     379,   232,   369,   379,   266,   267,   268,   269,   266,   278,
+     171,   138,   115,   280,   134,   120,   378,   284,   115,   134,
+     288,    31,   216,   217,   278,   266,   143,   315,   143,   317,
+     113,   355,   356,   113,   355,   356,   145,   356,   180,   270,
+     114,   114,   114,   114,   138,   180,   214,   180,   118,   256,
+     257,   138,   113,   134,   156,   258,   260,   324,   325,   337,
+     363,   120,   136,   120,   136,   280,   254,   280,   119,   169,
+     170,   264,   139,   139,   143,   229,   139,   139,   266,   113,
+     156,   376,   139,   119,   234,   293,   171,   294,   139,   138,
+     138,   113,   139,   114,   322,   176,   177,   134,   136,   115,
+     145,   207,   208,   209,   114,   120,   114,   114,   114,   114,
+     171,   364,   365,   366,   234,   363,   318,   318,   118,   158,
+     171,   172,   175,   120,   138,   114,   120,   171,   138,   119,
+     169,   134,   270,   114,   114,   114,   351,   270,   114,   232,
+     369,   115,   121,   156,   171,   171,   234,   348,   270,   114,
+     114,   114,   114,   114,   114,   114,     7,   234,   342,   346,
+     357,   138,   138,   379,   138,   138,   139,   139,   139,   139,
+     283,   169,   170,   171,   316,   138,   284,   286,   119,   138,
+     218,   280,    42,    43,    45,    48,    49,    50,    51,    52,
+      53,    54,    55,    59,    63,    64,    74,   131,   177,   178,
+     179,   180,   181,   182,   184,   185,   197,   199,   200,   205,
+     219,   314,    31,   139,   135,   283,   138,   138,   114,   139,
+     180,   254,   136,   136,   325,   170,   234,   259,   260,   259,
+     280,   318,   119,   265,   378,   114,   120,   116,   116,   139,
+     234,   120,   379,   296,   114,   292,   222,   224,   232,   304,
+     305,   306,   307,   298,   114,   114,   134,   170,   113,   114,
+     134,   120,   143,   114,   114,   114,   363,   285,   120,   139,
+     175,    81,    84,    86,   143,   151,   152,   153,   150,   139,
+     151,   169,   139,   113,   355,   356,   139,   138,   139,   139,
+     139,   171,   114,   139,   113,   355,   356,   113,   361,   113,
+     361,   356,   233,     7,   121,   139,   171,   270,   270,   269,
+     273,   273,   274,   114,   120,   120,   114,   100,   126,   139,
+     139,   151,   284,   171,   120,   136,   219,   223,   234,   238,
+     113,   113,   178,   113,   113,    74,   136,    74,   136,    74,
+     121,   177,   113,   180,   172,   172,   134,   148,   136,   139,
+     138,   139,   218,   114,   171,   270,   270,   318,   114,   119,
+     258,   119,   138,   114,   138,   139,   315,   119,   138,   139,
+     139,   114,   118,   207,   116,   170,   136,   207,   209,   114,
+     113,   355,   356,   378,   172,   116,   139,   154,   115,   152,
+     154,   154,   120,   139,    89,   117,   116,   139,   114,   138,
+     114,   116,   116,   116,   139,   114,   138,   138,   138,   171,
+     171,   139,   116,   139,   139,   139,   139,   138,   138,   170,
+     170,   116,   116,   139,   280,   234,   176,   176,    49,   176,
+     138,   136,   136,   136,   176,   136,   176,    60,    61,    62,
+     201,   202,   203,   136,    65,   136,   318,   118,   182,   119,
+     136,   139,   139,   100,   275,   276,   114,   305,   120,   136,
+     120,   136,   119,   303,   134,   145,   114,   114,   134,   138,
+     119,   116,    85,   138,   152,   116,   115,   152,   115,   152,
+     116,   270,   116,   270,   270,   270,   139,   139,   116,   116,
+     114,   114,   116,   120,   100,   269,   100,   139,   116,   114,
+     114,   113,   114,   177,   198,   219,   136,   114,   113,   113,
+     180,   203,    60,    61,   171,   178,   149,   114,   114,   118,
+     138,   138,   304,   145,   210,   113,   136,   210,   270,   151,
+     138,   138,   139,   139,   139,   139,   116,   116,   138,   139,
+     116,   178,    46,    47,   118,   188,   189,   190,   176,   178,
+     139,   114,   177,   118,   190,   100,   138,   100,   138,   113,
+     113,   136,   119,   138,   278,   315,   119,   120,   134,   170,
+     114,   139,   139,   151,   151,   114,   114,   114,   114,   273,
+      44,   170,   186,   187,   316,   134,   138,   178,   188,   114,
+     136,   178,   136,   138,   114,   138,   114,   138,   100,   138,
+     100,   138,   136,   304,   145,   143,   211,   114,   136,   114,
+     116,   139,   139,   178,   100,   120,   134,   139,   212,   213,
+     219,   136,   177,   177,   212,   180,   204,   232,   372,   180,
+     204,   114,   138,   114,   138,   119,   114,   120,   116,   116,
+     170,   186,   189,   191,   192,   138,   136,   189,   193,   194,
+     139,   113,   156,   315,   363,   143,   139,   180,   204,   180,
+     204,   113,   136,   143,   178,   183,   119,   189,   219,   177,
+      58,   183,   196,   119,   189,   114,   234,   114,   139,   139,
+     298,   178,   183,   136,   195,   196,   183,   196,   180,   180,
+     114,   114,   114,   195,   139,   139,   180,   180,   139,   139
 };
 
@@ -4851,5 +4928,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
+#line 306 "parser.yy"
     { typedefTable.enterScope(); }
     break;
@@ -4858,5 +4935,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 309 "parser.yy"
+#line 310 "parser.yy"
     { typedefTable.leaveScope(); }
     break;
@@ -4865,16 +4942,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 316 "parser.yy"
+#line 317 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
   case 5:
-
-/* Line 1806 of yacc.c  */
-#line 317 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 6:
 
 /* Line 1806 of yacc.c  */
@@ -4883,5 +4953,5 @@
     break;
 
-  case 7:
+  case 6:
 
 /* Line 1806 of yacc.c  */
@@ -4890,8 +4960,15 @@
     break;
 
+  case 7:
+
+/* Line 1806 of yacc.c  */
+#line 320 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
   case 8:
 
 /* Line 1806 of yacc.c  */
-#line 320 "parser.yy"
+#line 321 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4900,5 +4977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 345 "parser.yy"
+#line 346 "parser.yy"
     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); }
     break;
@@ -4907,5 +4984,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 349 "parser.yy"
+#line 350 "parser.yy"
     { (yyval.str) = (yyvsp[(1) - (1)].tok); }
     break;
@@ -4914,5 +4991,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 351 "parser.yy"
+#line 352 "parser.yy"
     {
 			appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) );						// append 2nd juxtaposed string to 1st
@@ -4925,5 +5002,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 362 "parser.yy"
+#line 363 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4932,6 +5009,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 364 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
+#line 365 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantZeroOne( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -4939,5 +5016,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 367 "parser.yy"
+#line 368 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -4946,5 +5023,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 369 "parser.yy"
+#line 370 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
@@ -4953,5 +5030,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+#line 380 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -4960,5 +5037,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 381 "parser.yy"
+#line 382 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -4967,5 +5044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 384 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -4974,5 +5051,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 386 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -4981,5 +5058,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 387 "parser.yy"
+#line 388 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (2)].en), build_field_name_REALFRACTIONconstant( *(yyvsp[(2) - (2)].tok) ) ) ); }
     break;
@@ -4988,5 +5065,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 389 "parser.yy"
+#line 390 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -4995,5 +5072,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
+#line 392 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5002,5 +5079,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 393 "parser.yy"
+#line 394 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5009,5 +5086,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 395 "parser.yy"
+#line 396 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5016,5 +5093,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 397 "parser.yy"
+#line 398 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
@@ -5023,5 +5100,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 399 "parser.yy"
+#line 400 "parser.yy"
     {
 			Token fn;
@@ -5034,5 +5111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 409 "parser.yy"
+#line 410 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5041,6 +5118,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
-    { (yyval.en) = 0; }
+#line 415 "parser.yy"
+    { (yyval.en) = nullptr; }
     break;
 
@@ -5048,5 +5125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
+#line 421 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5055,5 +5132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
+#line 427 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *(yyvsp[(1) - (2)].tok) ) ), maybeMoveBuild<Expression>( (yyvsp[(2) - (2)].en) ) ) ); }
     break;
@@ -5062,5 +5139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 429 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *(yyvsp[(1) - (6)].tok) ) ), build_tuple( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5069,5 +5146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 431 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
     break;
@@ -5076,5 +5153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 433 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5083,5 +5160,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 434 "parser.yy"
+#line 435 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
     break;
@@ -5090,5 +5167,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 436 "parser.yy"
+#line 437 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5097,5 +5174,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 441 "parser.yy"
+#line 442 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_constantInteger( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5104,5 +5181,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 443 "parser.yy"
+#line 444 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5111,6 +5188,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_varref( (yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
+#line 446 "parser.yy"
+    {
+			if( (*(yyvsp[(1) - (2)].tok)) == "0" || (*(yyvsp[(1) - (2)].tok)) == "1" ) {
+				(yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_constantZeroOne( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) );
+			} else {
+				(yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_varref( (yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) );
+			}
+		}
     break;
 
@@ -5118,5 +5201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 450 "parser.yy"
+#line 457 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5125,5 +5208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 452 "parser.yy"
+#line 459 "parser.yy"
     {
 			Expression * constant = build_field_name_REALFRACTIONconstant( *(yyvsp[(2) - (2)].tok) );
@@ -5135,5 +5218,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 463 "parser.yy"
+#line 470 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5142,5 +5225,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 465 "parser.yy"
+#line 472 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -5149,5 +5232,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 467 "parser.yy"
+#line 474 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5156,5 +5239,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
+#line 479 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5174,5 +5257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 492 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5181,5 +5264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5188,5 +5271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 489 "parser.yy"
+#line 496 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5195,5 +5278,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
+#line 498 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5202,5 +5285,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 493 "parser.yy"
+#line 500 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5209,5 +5292,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 495 "parser.yy"
+#line 502 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5216,5 +5299,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
+#line 504 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5223,5 +5306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
+#line 506 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5230,5 +5313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 501 "parser.yy"
+#line 508 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
@@ -5237,5 +5320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 503 "parser.yy"
+#line 510 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5244,5 +5327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
+#line 512 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5251,5 +5334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 511 "parser.yy"
+#line 518 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5258,5 +5341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 512 "parser.yy"
+#line 519 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
@@ -5265,5 +5348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 518 "parser.yy"
+#line 525 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
@@ -5272,5 +5355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 519 "parser.yy"
+#line 526 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
@@ -5279,5 +5362,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 520 "parser.yy"
+#line 527 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
@@ -5286,5 +5369,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 521 "parser.yy"
+#line 528 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
@@ -5293,5 +5376,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 527 "parser.yy"
+#line 534 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5300,5 +5383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 535 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5307,5 +5390,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 537 "parser.yy"
+#line 544 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5314,5 +5397,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 539 "parser.yy"
+#line 546 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5321,5 +5404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 545 "parser.yy"
+#line 552 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5328,5 +5411,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 547 "parser.yy"
+#line 554 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5335,5 +5418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 553 "parser.yy"
+#line 560 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5342,5 +5425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 555 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5349,5 +5432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 561 "parser.yy"
+#line 568 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5356,5 +5439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 563 "parser.yy"
+#line 570 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5363,5 +5446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 565 "parser.yy"
+#line 572 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5370,5 +5453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
+#line 574 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5377,5 +5460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 573 "parser.yy"
+#line 580 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5384,5 +5467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 575 "parser.yy"
+#line 582 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5391,5 +5474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 581 "parser.yy"
+#line 588 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5398,5 +5481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 587 "parser.yy"
+#line 594 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5405,5 +5488,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 600 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5412,5 +5495,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
+#line 606 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
@@ -5419,5 +5502,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
+#line 612 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
@@ -5426,5 +5509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 618 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5433,5 +5516,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+#line 621 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5440,5 +5523,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+#line 634 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5447,5 +5530,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 634 "parser.yy"
+#line 641 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5454,5 +5537,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 639 "parser.yy"
+#line 646 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
@@ -5461,5 +5544,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 647 "parser.yy"
     { (yyval.op) = OperKinds::AtAssn; }
     break;
@@ -5468,5 +5551,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 641 "parser.yy"
+#line 648 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
@@ -5475,5 +5558,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 642 "parser.yy"
+#line 649 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
@@ -5482,5 +5565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
+#line 650 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
@@ -5489,5 +5572,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 644 "parser.yy"
+#line 651 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
@@ -5496,5 +5579,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
+#line 652 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
@@ -5503,5 +5586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 646 "parser.yy"
+#line 653 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
@@ -5510,5 +5593,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 647 "parser.yy"
+#line 654 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
@@ -5517,5 +5600,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 648 "parser.yy"
+#line 655 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
@@ -5524,5 +5607,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 649 "parser.yy"
+#line 656 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
@@ -5531,5 +5614,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 650 "parser.yy"
+#line 657 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
@@ -5538,5 +5621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 661 "parser.yy"
+#line 668 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5545,5 +5628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 663 "parser.yy"
+#line 670 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5552,5 +5635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
+#line 676 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5559,5 +5642,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 675 "parser.yy"
+#line 682 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5566,6 +5649,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 680 "parser.yy"
-    { (yyval.en) = 0; }
+#line 687 "parser.yy"
+    { (yyval.en) = nullptr; }
     break;
 
@@ -5573,5 +5656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 689 "parser.yy"
+#line 696 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5580,5 +5663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 696 "parser.yy"
+#line 703 "parser.yy"
     {
 			Token fn;
@@ -5591,5 +5674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 706 "parser.yy"
+#line 713 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5600,5 +5683,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 713 "parser.yy"
+#line 720 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     break;
@@ -5607,5 +5690,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 720 "parser.yy"
+#line 727 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     break;
@@ -5614,5 +5697,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 726 "parser.yy"
+#line 733 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5621,5 +5704,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 731 "parser.yy"
+#line 738 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5628,5 +5711,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 733 "parser.yy"
+#line 740 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -5639,5 +5722,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 739 "parser.yy"
+#line 746 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5646,5 +5729,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 746 "parser.yy"
+#line 753 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
@@ -5653,5 +5736,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 751 "parser.yy"
+#line 758 "parser.yy"
     { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5660,5 +5743,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 757 "parser.yy"
+#line 764 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
@@ -5667,5 +5750,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
+#line 766 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
@@ -5674,5 +5757,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 768 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5681,5 +5764,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 763 "parser.yy"
+#line 770 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5689,5 +5772,5 @@
 			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
 			// statement.
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
 		}
     break;
@@ -5696,5 +5779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 780 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5703,8 +5786,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 775 "parser.yy"
+#line 782 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
 		}
     break;
@@ -5713,5 +5796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 785 "parser.yy"
+#line 792 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5720,5 +5803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 787 "parser.yy"
+#line 794 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5727,5 +5810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 792 "parser.yy"
+#line 799 "parser.yy"
     { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
     break;
@@ -5734,5 +5817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 794 "parser.yy"
+#line 801 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     break;
@@ -5741,5 +5824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 798 "parser.yy"
+#line 805 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5748,5 +5831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 799 "parser.yy"
+#line 806 "parser.yy"
     { (yyval.sn) = new StatementNode( build_default() ); }
     break;
@@ -5755,5 +5838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 805 "parser.yy"
+#line 812 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5762,5 +5845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
+#line 816 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
@@ -5769,6 +5852,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 814 "parser.yy"
-    { (yyval.sn) = 0; }
+#line 821 "parser.yy"
+    { (yyval.sn) = nullptr; }
     break;
 
@@ -5776,5 +5859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 820 "parser.yy"
+#line 827 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
@@ -5783,5 +5866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 822 "parser.yy"
+#line 829 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
     break;
@@ -5790,6 +5873,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
-    { (yyval.sn) = 0; }
+#line 834 "parser.yy"
+    { (yyval.sn) = nullptr; }
     break;
 
@@ -5797,5 +5880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
+#line 840 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5804,5 +5887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 835 "parser.yy"
+#line 842 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5811,5 +5894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
+#line 844 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5818,5 +5901,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 839 "parser.yy"
+#line 846 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
@@ -5825,5 +5908,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 844 "parser.yy"
+#line 851 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
@@ -5832,6 +5915,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 850 "parser.yy"
-    { (yyval.sn) = 0; }
+#line 857 "parser.yy"
+    { (yyval.sn) = nullptr; }
     break;
 
@@ -5839,6 +5922,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 852 "parser.yy"
-    { (yyval.sn) = 0; }
+#line 859 "parser.yy"
+    { (yyval.sn) = nullptr; }
     break;
 
@@ -5846,5 +5929,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
+#line 864 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5853,5 +5936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 859 "parser.yy"
+#line 866 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn), true ) ); }
     break;
@@ -5860,5 +5943,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 861 "parser.yy"
+#line 868 "parser.yy"
     { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
@@ -5867,5 +5950,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5874,5 +5957,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
+#line 875 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5881,5 +5964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
+#line 880 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     break;
@@ -5888,5 +5971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 884 "parser.yy"
     { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5895,5 +5978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 880 "parser.yy"
+#line 887 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
     break;
@@ -5902,5 +5985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 884 "parser.yy"
+#line 891 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
     break;
@@ -5909,5 +5992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
+#line 894 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
@@ -5916,5 +5999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 891 "parser.yy"
+#line 898 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
     break;
@@ -5923,5 +6006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 893 "parser.yy"
+#line 900 "parser.yy"
     { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5930,5 +6013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 895 "parser.yy"
+#line 902 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5937,5 +6020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 897 "parser.yy"
+#line 904 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5944,5 +6027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 899 "parser.yy"
+#line 906 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
@@ -5951,5 +6034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 904 "parser.yy"
+#line 911 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     break;
@@ -5958,5 +6041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 906 "parser.yy"
+#line 913 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     break;
@@ -5965,5 +6048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 908 "parser.yy"
+#line 915 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
     break;
@@ -5972,5 +6055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+#line 922 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
@@ -5979,5 +6062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 917 "parser.yy"
+#line 924 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
@@ -5986,5 +6069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 919 "parser.yy"
+#line 926 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
@@ -5993,5 +6076,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 921 "parser.yy"
+#line 928 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
@@ -6000,5 +6083,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 926 "parser.yy"
+#line 933 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
@@ -6007,5 +6090,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 928 "parser.yy"
+#line 935 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
@@ -6014,5 +6097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 930 "parser.yy"
+#line 937 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
@@ -6021,5 +6104,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 932 "parser.yy"
+#line 939 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
@@ -6028,5 +6111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 937 "parser.yy"
+#line 944 "parser.yy"
     {
 			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
@@ -6037,5 +6120,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 950 "parser.yy"
+#line 957 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6047,5 +6130,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+#line 962 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6054,5 +6137,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
+#line 964 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6064,5 +6147,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 966 "parser.yy"
+#line 973 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
     break;
@@ -6071,5 +6154,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 968 "parser.yy"
+#line 975 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
     break;
@@ -6078,5 +6161,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 970 "parser.yy"
+#line 977 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
     break;
@@ -6085,5 +6168,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
+#line 979 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
     break;
@@ -6092,5 +6175,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
+#line 981 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
     break;
@@ -6099,5 +6182,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 979 "parser.yy"
+#line 986 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6106,5 +6189,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
+#line 988 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6113,6 +6196,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 986 "parser.yy"
-    { (yyval.en) = 0; }
+#line 993 "parser.yy"
+    { (yyval.en) = nullptr; }
     break;
 
@@ -6120,5 +6203,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 993 "parser.yy"
+#line 1000 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6127,5 +6210,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 998 "parser.yy"
+#line 1005 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6134,5 +6217,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1000 "parser.yy"
+#line 1007 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6141,6 +6224,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1005 "parser.yy"
-    { (yyval.en) = 0; }
+#line 1012 "parser.yy"
+    { (yyval.en) = nullptr; }
     break;
 
@@ -6148,5 +6231,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1007 "parser.yy"
+#line 1014 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6155,5 +6238,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1009 "parser.yy"
+#line 1017 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6162,5 +6245,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1014 "parser.yy"
+#line 1022 "parser.yy"
     {
 			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
@@ -6172,5 +6255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1019 "parser.yy"
+#line 1027 "parser.yy"
     {
 			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
@@ -6182,6 +6265,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1029 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1037 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
@@ -6189,5 +6272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1036 "parser.yy"
+#line 1044 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6196,6 +6279,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1041 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1049 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
@@ -6203,5 +6286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1048 "parser.yy"
+#line 1056 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6210,5 +6293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1062 "parser.yy"
+#line 1070 "parser.yy"
     {}
     break;
@@ -6217,5 +6300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1063 "parser.yy"
+#line 1071 "parser.yy"
     {}
     break;
@@ -6224,5 +6307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1092 "parser.yy"
+#line 1100 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6234,5 +6317,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1099 "parser.yy"
+#line 1107 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6244,5 +6327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1104 "parser.yy"
+#line 1112 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6254,8 +6337,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 1114 "parser.yy"
+#line 1122 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
-			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
+			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) )->addAsmName( (yyvsp[(3) - (3)].constant) );
 		}
     break;
@@ -6264,8 +6347,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 1119 "parser.yy"
+#line 1127 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
-			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
+			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) )->addAsmName( (yyvsp[(3) - (3)].constant) );
 		}
     break;
@@ -6274,8 +6357,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 1124 "parser.yy"
+#line 1132 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
-			(yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(1) - (4)].decl) )->addName( (yyvsp[(3) - (4)].tok) );
+			(yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(1) - (4)].decl) )->addName( (yyvsp[(3) - (4)].tok) )->addAsmName( (yyvsp[(4) - (4)].constant) );
 		}
     break;
@@ -6284,5 +6367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1132 "parser.yy"
+#line 1140 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6294,5 +6377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1137 "parser.yy"
+#line 1145 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6304,5 +6387,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1142 "parser.yy"
+#line 1150 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6314,5 +6397,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1147 "parser.yy"
+#line 1155 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6324,5 +6407,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1152 "parser.yy"
+#line 1160 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6334,5 +6417,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1183 "parser.yy"
+#line 1191 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6343,5 +6426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1187 "parser.yy"
+#line 1195 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6352,5 +6435,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1194 "parser.yy"
+#line 1202 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6359,5 +6442,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1198 "parser.yy"
+#line 1206 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6366,5 +6449,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1203 "parser.yy"
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6376,5 +6459,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1208 "parser.yy"
+#line 1216 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6386,5 +6469,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1213 "parser.yy"
+#line 1221 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6396,5 +6479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1224 "parser.yy"
+#line 1232 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6406,5 +6489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1229 "parser.yy"
+#line 1237 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6416,5 +6499,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1234 "parser.yy"
+#line 1242 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6426,5 +6509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1239 "parser.yy"
+#line 1247 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6436,5 +6519,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1244 "parser.yy"
+#line 1252 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6446,5 +6529,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1253 "parser.yy"
+#line 1261 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6456,5 +6539,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1258 "parser.yy"
+#line 1266 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6466,8 +6549,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 1275 "parser.yy"
+#line 1283 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = ( (yyvsp[(2) - (4)].decl)->addType( (yyvsp[(1) - (4)].decl) ))->addInitializer( (yyvsp[(4) - (4)].in) );
+			(yyval.decl) = ( (yyvsp[(2) - (4)].decl)->addType( (yyvsp[(1) - (4)].decl) ))->addAsmName( (yyvsp[(3) - (4)].constant) )->addInitializer( (yyvsp[(4) - (4)].in) );
 		}
     break;
@@ -6476,8 +6559,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 1280 "parser.yy"
+#line 1288 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneBaseType( (yyvsp[(4) - (6)].decl)->addInitializer( (yyvsp[(6) - (6)].in) ) ) );
+			(yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneBaseType( (yyvsp[(4) - (6)].decl)->addAsmName( (yyvsp[(5) - (6)].constant) )->addInitializer( (yyvsp[(6) - (6)].in) ) ) );
 		}
     break;
@@ -6486,6 +6569,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1302 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1310 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
@@ -6493,5 +6576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1314 "parser.yy"
+#line 1322 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6500,5 +6583,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1325 "parser.yy"
+#line 1333 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6507,5 +6590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1327 "parser.yy"
+#line 1335 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6514,5 +6597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6521,5 +6604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
+#line 1339 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6528,5 +6611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
+#line 1341 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6535,5 +6618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
+#line 1343 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6544,5 +6627,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+#line 1347 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6554,5 +6637,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
+#line 1356 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6561,5 +6644,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
+#line 1358 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6568,5 +6651,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1361 "parser.yy"
+#line 1369 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6575,5 +6658,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1374 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6582,5 +6665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
+#line 1376 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6589,5 +6672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
+#line 1378 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6596,5 +6679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+#line 1380 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6603,5 +6686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1375 "parser.yy"
+#line 1383 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
     break;
@@ -6610,5 +6693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1377 "parser.yy"
+#line 1385 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6617,5 +6700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1380 "parser.yy"
+#line 1388 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
     break;
@@ -6624,5 +6707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1382 "parser.yy"
+#line 1390 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6631,5 +6714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+#line 1395 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6638,5 +6721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1389 "parser.yy"
+#line 1397 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6645,5 +6728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
+#line 1399 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6652,5 +6735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1393 "parser.yy"
+#line 1401 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6659,5 +6742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1395 "parser.yy"
+#line 1403 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Long ); }
     break;
@@ -6666,5 +6749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+#line 1405 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Short ); }
     break;
@@ -6673,5 +6756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
+#line 1407 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
     break;
@@ -6680,5 +6763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+#line 1409 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
     break;
@@ -6687,5 +6770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+#line 1411 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6694,5 +6777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+#line 1413 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6701,5 +6784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+#line 1415 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
     break;
@@ -6708,5 +6791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+#line 1417 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
     break;
@@ -6715,180 +6798,194 @@
 
 /* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
+#line 1419 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
 
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1421 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
+    break;
+
   case 338:
 
 /* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+#line 1423 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::One ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1430 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1432 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 340:
-
-/* Line 1806 of yacc.c  */
-#line 1422 "parser.yy"
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1434 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1424 "parser.yy"
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1436 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1442 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1449 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1439 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1451 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1441 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1453 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
+  case 350:
+
+/* Line 1806 of yacc.c  */
+#line 1458 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1460 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1462 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1452 "parser.yy"
+  case 353:
+
+/* Line 1806 of yacc.c  */
+#line 1464 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1458 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1470 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1460 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1472 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1474 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1480 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1470 "parser.yy"
+  case 360:
+
+/* Line 1806 of yacc.c  */
+#line 1482 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1476 "parser.yy"
+  case 362:
+
+/* Line 1806 of yacc.c  */
+#line 1488 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
+  case 363:
+
+/* Line 1806 of yacc.c  */
+#line 1490 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 362:
-
-/* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1492 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 363:
-
-/* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1497 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 364:
-
-/* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1499 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1489 "parser.yy"
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1501 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 368:
-
-/* Line 1806 of yacc.c  */
-#line 1499 "parser.yy"
+  case 370:
+
+/* Line 1806 of yacc.c  */
+#line 1511 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), nullptr, nullptr, (yyvsp[(3) - (4)].decl), true ); }
     break;
 
-  case 369:
-
-/* Line 1806 of yacc.c  */
-#line 1501 "parser.yy"
+  case 371:
+
+/* Line 1806 of yacc.c  */
+#line 1513 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -6897,58 +6994,51 @@
     break;
 
-  case 370:
-
-/* Line 1806 of yacc.c  */
-#line 1506 "parser.yy"
+  case 372:
+
+/* Line 1806 of yacc.c  */
+#line 1518 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 371:
-
-/* Line 1806 of yacc.c  */
-#line 1508 "parser.yy"
+  case 373:
+
+/* Line 1806 of yacc.c  */
+#line 1520 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), nullptr, (yyvsp[(5) - (6)].decl), true ); }
     break;
 
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1510 "parser.yy"
+  case 374:
+
+/* Line 1806 of yacc.c  */
+#line 1522 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), nullptr, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
 
-  case 373:
-
-/* Line 1806 of yacc.c  */
-#line 1512 "parser.yy"
+  case 375:
+
+/* Line 1806 of yacc.c  */
+#line 1524 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
+  case 376:
+
+/* Line 1806 of yacc.c  */
+#line 1529 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
-  case 375:
-
-/* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1531 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
-  case 376:
-
-/* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1536 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
@@ -6956,12 +7046,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 1532 "parser.yy"
+#line 1538 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
+    break;
+
+  case 381:
+
+/* Line 1806 of yacc.c  */
+#line 1544 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
 
-  case 381:
-
-/* Line 1806 of yacc.c  */
-#line 1535 "parser.yy"
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1547 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -6971,99 +7068,99 @@
     break;
 
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1545 "parser.yy"
+  case 385:
+
+/* Line 1806 of yacc.c  */
+#line 1557 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1547 "parser.yy"
+  case 386:
+
+/* Line 1806 of yacc.c  */
+#line 1559 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 385:
-
-/* Line 1806 of yacc.c  */
-#line 1549 "parser.yy"
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1561 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
+  case 388:
+
+/* Line 1806 of yacc.c  */
+#line 1566 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1556 "parser.yy"
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1568 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
+  case 390:
+
+/* Line 1806 of yacc.c  */
+#line 1573 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
-  case 389:
-
-/* Line 1806 of yacc.c  */
-#line 1563 "parser.yy"
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1575 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 390:
-
-/* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
+  case 392:
+
+/* Line 1806 of yacc.c  */
+#line 1578 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 391:
-
-/* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1581 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1575 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 394:
-
-/* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1587 "parser.yy"
+    { (yyval.en) = nullptr; }
+    break;
+
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1589 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1582 "parser.yy"
+  case 397:
+
+/* Line 1806 of yacc.c  */
+#line 1594 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 397:
-
-/* Line 1806 of yacc.c  */
-#line 1591 "parser.yy"
+  case 399:
+
+/* Line 1806 of yacc.c  */
+#line 1603 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 398:
-
-/* Line 1806 of yacc.c  */
-#line 1593 "parser.yy"
+  case 400:
+
+/* Line 1806 of yacc.c  */
+#line 1605 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7072,75 +7169,54 @@
     break;
 
-  case 399:
-
-/* Line 1806 of yacc.c  */
-#line 1598 "parser.yy"
+  case 401:
+
+/* Line 1806 of yacc.c  */
+#line 1610 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 400:
-
-/* Line 1806 of yacc.c  */
-#line 1600 "parser.yy"
+  case 402:
+
+/* Line 1806 of yacc.c  */
+#line 1612 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
 
-  case 401:
-
-/* Line 1806 of yacc.c  */
-#line 1605 "parser.yy"
+  case 403:
+
+/* Line 1806 of yacc.c  */
+#line 1617 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 402:
-
-/* Line 1806 of yacc.c  */
-#line 1607 "parser.yy"
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1619 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 404:
-
-/* Line 1806 of yacc.c  */
-#line 1614 "parser.yy"
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1624 "parser.yy"
+    { (yyval.en) = nullptr; }
+    break;
+
+  case 406:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 405:
-
-/* Line 1806 of yacc.c  */
-#line 1621 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1629 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 410:
-
-/* Line 1806 of yacc.c  */
-#line 1631 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+  case 407:
+
+/* Line 1806 of yacc.c  */
+#line 1633 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
   case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1633 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 413:
 
 /* Line 1806 of yacc.c  */
@@ -7149,350 +7225,371 @@
     break;
 
-  case 414:
+  case 412:
 
 /* Line 1806 of yacc.c  */
 #line 1643 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 413:
+
+/* Line 1806 of yacc.c  */
+#line 1645 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1653 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1645 "parser.yy"
+  case 416:
+
+/* Line 1806 of yacc.c  */
+#line 1655 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 417:
+
+/* Line 1806 of yacc.c  */
+#line 1657 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
 
-  case 417:
-
-/* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1663 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 418:
-
-/* Line 1806 of yacc.c  */
-#line 1656 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 421:
-
-/* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
+  case 420:
+
+/* Line 1806 of yacc.c  */
+#line 1668 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
+  case 423:
+
+/* Line 1806 of yacc.c  */
+#line 1675 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 424:
-
-/* Line 1806 of yacc.c  */
-#line 1670 "parser.yy"
+  case 426:
+
+/* Line 1806 of yacc.c  */
+#line 1682 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1672 "parser.yy"
+  case 427:
+
+/* Line 1806 of yacc.c  */
+#line 1684 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 427:
-
-/* Line 1806 of yacc.c  */
-#line 1681 "parser.yy"
+  case 429:
+
+/* Line 1806 of yacc.c  */
+#line 1693 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 428:
-
-/* Line 1806 of yacc.c  */
-#line 1684 "parser.yy"
+  case 430:
+
+/* Line 1806 of yacc.c  */
+#line 1696 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 429:
-
-/* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1698 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1696 "parser.yy"
+  case 436:
+
+/* Line 1806 of yacc.c  */
+#line 1708 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 436:
-
-/* Line 1806 of yacc.c  */
-#line 1702 "parser.yy"
+  case 438:
+
+/* Line 1806 of yacc.c  */
+#line 1714 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
+			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].en) ? new InitializerNode( (yyvsp[(3) - (3)].en) ) : nullptr );
 		}
     break;
 
-  case 437:
-
-/* Line 1806 of yacc.c  */
-#line 1707 "parser.yy"
+  case 439:
+
+/* Line 1806 of yacc.c  */
+#line 1719 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
+			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].en) ? new InitializerNode( (yyvsp[(3) - (3)].en) ) : nullptr );
 		}
     break;
 
-  case 439:
-
-/* Line 1806 of yacc.c  */
-#line 1716 "parser.yy"
+  case 441:
+
+/* Line 1806 of yacc.c  */
+#line 1728 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 440:
-
-/* Line 1806 of yacc.c  */
-#line 1725 "parser.yy"
+  case 442:
+
+/* Line 1806 of yacc.c  */
+#line 1737 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 441:
-
-/* Line 1806 of yacc.c  */
-#line 1727 "parser.yy"
+  case 443:
+
+/* Line 1806 of yacc.c  */
+#line 1739 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 453:
-
-/* Line 1806 of yacc.c  */
-#line 1752 "parser.yy"
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1764 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
+  case 459:
+
+/* Line 1806 of yacc.c  */
+#line 1772 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 458:
-
-/* Line 1806 of yacc.c  */
-#line 1765 "parser.yy"
-    { (yyval.in) = 0; }
-    break;
-
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
+  case 460:
+
+/* Line 1806 of yacc.c  */
+#line 1777 "parser.yy"
+    { (yyval.in) = nullptr; }
+    break;
+
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1779 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1769 "parser.yy"
+  case 462:
+
+/* Line 1806 of yacc.c  */
+#line 1781 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
 
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1773 "parser.yy"
+  case 463:
+
+/* Line 1806 of yacc.c  */
+#line 1785 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 462:
-
-/* Line 1806 of yacc.c  */
-#line 1774 "parser.yy"
+  case 464:
+
+/* Line 1806 of yacc.c  */
+#line 1786 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
 
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1779 "parser.yy"
-    { (yyval.in) = 0; }
-    break;
-
   case 465:
 
 /* Line 1806 of yacc.c  */
-#line 1781 "parser.yy"
+#line 1791 "parser.yy"
+    { (yyval.in) = nullptr; }
+    break;
+
+  case 467:
+
+/* Line 1806 of yacc.c  */
+#line 1793 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1794 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1784 "parser.yy"
+  case 469:
+
+/* Line 1806 of yacc.c  */
+#line 1796 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
-  case 469:
-
-/* Line 1806 of yacc.c  */
-#line 1800 "parser.yy"
+  case 471:
+
+/* Line 1806 of yacc.c  */
+#line 1812 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
 
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
+  case 473:
+
+/* Line 1806 of yacc.c  */
+#line 1818 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
-  case 472:
-
-/* Line 1806 of yacc.c  */
-#line 1812 "parser.yy"
+  case 474:
+
+/* Line 1806 of yacc.c  */
+#line 1824 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
-  case 473:
-
-/* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+  case 475:
+
+/* Line 1806 of yacc.c  */
+#line 1827 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
-  case 474:
-
-/* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1829 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1819 "parser.yy"
+  case 477:
+
+/* Line 1806 of yacc.c  */
+#line 1831 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
 
-  case 476:
-
-/* Line 1806 of yacc.c  */
-#line 1821 "parser.yy"
+  case 478:
+
+/* Line 1806 of yacc.c  */
+#line 1833 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
 
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1845 "parser.yy"
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1857 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1847 "parser.yy"
+  case 481:
+
+/* Line 1806 of yacc.c  */
+#line 1859 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 480:
-
-/* Line 1806 of yacc.c  */
-#line 1849 "parser.yy"
+  case 482:
+
+/* Line 1806 of yacc.c  */
+#line 1861 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 482:
-
-/* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1867 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1857 "parser.yy"
+  case 485:
+
+/* Line 1806 of yacc.c  */
+#line 1869 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 484:
-
-/* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+  case 486:
+
+/* Line 1806 of yacc.c  */
+#line 1874 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 486:
-
-/* Line 1806 of yacc.c  */
-#line 1868 "parser.yy"
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1880 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 487:
-
-/* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
+  case 489:
+
+/* Line 1806 of yacc.c  */
+#line 1885 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
-  case 488:
-
-/* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1887 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1881 "parser.yy"
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1893 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Otype; }
     break;
 
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+  case 493:
+
+/* Line 1806 of yacc.c  */
+#line 1895 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1885 "parser.yy"
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1897 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1890 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1892 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
   case 495:
 
 /* Line 1806 of yacc.c  */
-#line 1897 "parser.yy"
+#line 1902 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
+  case 496:
+
+/* Line 1806 of yacc.c  */
+#line 1904 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
+    break;
+
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1909 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7501,78 +7598,78 @@
     break;
 
-  case 496:
-
-/* Line 1806 of yacc.c  */
-#line 1902 "parser.yy"
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1914 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
 
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1904 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 498:
-
-/* Line 1806 of yacc.c  */
-#line 1909 "parser.yy"
+  case 499:
+
+/* Line 1806 of yacc.c  */
+#line 1916 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
+  case 500:
+
+/* Line 1806 of yacc.c  */
+#line 1921 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
 
-  case 500:
-
-/* Line 1806 of yacc.c  */
-#line 1912 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1924 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
 
-  case 501:
-
-/* Line 1806 of yacc.c  */
-#line 1914 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1926 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1919 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1931 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1921 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1933 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1923 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1935 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1928 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1940 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1930 "parser.yy"
+  case 508:
+
+/* Line 1806 of yacc.c  */
+#line 1942 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1935 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1947 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7581,8 +7678,8 @@
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1940 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1952 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7591,8 +7688,8 @@
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1960 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7601,8 +7698,8 @@
     break;
 
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 1953 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1965 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7611,8 +7708,8 @@
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 1958 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1970 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7622,15 +7719,15 @@
     break;
 
-  case 513:
-
-/* Line 1806 of yacc.c  */
-#line 1968 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1980 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1978 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1990 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7639,8 +7736,8 @@
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1983 "parser.yy"
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 1995 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7649,8 +7746,8 @@
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1988 "parser.yy"
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 2000 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7659,8 +7756,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1996 "parser.yy"
+  case 521:
+
+/* Line 1806 of yacc.c  */
+#line 2008 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7669,8 +7766,8 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 2001 "parser.yy"
+  case 522:
+
+/* Line 1806 of yacc.c  */
+#line 2013 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7679,43 +7776,43 @@
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 2011 "parser.yy"
+  case 523:
+
+/* Line 1806 of yacc.c  */
+#line 2023 "parser.yy"
     {}
     break;
 
-  case 522:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
-    { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
-    break;
-
   case 524:
 
 /* Line 1806 of yacc.c  */
-#line 2019 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
-    break;
-
-  case 525:
-
-/* Line 1806 of yacc.c  */
-#line 2024 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 2032 "parser.yy"
+#line 2025 "parser.yy"
+    { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
+    break;
+
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2031 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+    break;
+
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 2036 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2044 "parser.yy"
     {}
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2034 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2046 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7724,8 +7821,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2039 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2051 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7735,8 +7832,8 @@
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2045 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2057 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7746,8 +7843,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2060 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2072 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7757,8 +7854,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2066 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2078 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7768,8 +7865,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2075 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2087 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7779,8 +7876,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2081 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2093 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7790,8 +7887,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2087 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2099 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7801,8 +7898,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2093 "parser.yy"
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2105 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7812,8 +7909,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2099 "parser.yy"
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2111 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7823,8 +7920,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
+  case 543:
+
+/* Line 1806 of yacc.c  */
+#line 2119 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7834,8 +7931,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2113 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2125 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7845,8 +7942,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2133 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7856,8 +7953,8 @@
     break;
 
-  case 544:
-
-/* Line 1806 of yacc.c  */
-#line 2127 "parser.yy"
+  case 546:
+
+/* Line 1806 of yacc.c  */
+#line 2139 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7867,99 +7964,106 @@
     break;
 
-  case 548:
-
-/* Line 1806 of yacc.c  */
-#line 2142 "parser.yy"
+  case 550:
+
+/* Line 1806 of yacc.c  */
+#line 2154 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2147 "parser.yy"
-    { delete (yyvsp[(3) - (5)].str); }
-    break;
-
   case 551:
 
 /* Line 1806 of yacc.c  */
-#line 2152 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 554:
-
-/* Line 1806 of yacc.c  */
 #line 2159 "parser.yy"
+    { (yyval.constant) = nullptr; }
+    break;
+
+  case 552:
+
+/* Line 1806 of yacc.c  */
+#line 2161 "parser.yy"
+    { (yyval.constant) = (yyvsp[(3) - (5)].constant); }
+    break;
+
+  case 553:
+
+/* Line 1806 of yacc.c  */
+#line 2166 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2173 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 555:
-
-/* Line 1806 of yacc.c  */
-#line 2165 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2176 "parser.yy"
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2179 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
+  case 562:
+
+/* Line 1806 of yacc.c  */
+#line 2190 "parser.yy"
     { delete (yyvsp[(3) - (4)].en); }
     break;
 
-  case 561:
-
-/* Line 1806 of yacc.c  */
-#line 2180 "parser.yy"
+  case 563:
+
+/* Line 1806 of yacc.c  */
+#line 2194 "parser.yy"
     { delete (yyvsp[(1) - (1)].tok); }
     break;
 
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2181 "parser.yy"
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2195 "parser.yy"
     { delete (yyvsp[(1) - (1)].decl); }
     break;
 
-  case 563:
-
-/* Line 1806 of yacc.c  */
-#line 2182 "parser.yy"
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2196 "parser.yy"
     { delete (yyvsp[(1) - (1)].decl); }
     break;
 
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2183 "parser.yy"
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2197 "parser.yy"
     { delete (yyvsp[(1) - (1)].decl); }
     break;
 
-  case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2232 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2221 "parser.yy"
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2228 "parser.yy"
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2242 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -7968,428 +8072,428 @@
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2233 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2247 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2238 "parser.yy"
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2252 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2240 "parser.yy"
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2254 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2256 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2247 "parser.yy"
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2261 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2249 "parser.yy"
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2263 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2251 "parser.yy"
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2265 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2267 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2274 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2269 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2283 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2272 "parser.yy"
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2277 "parser.yy"
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2291 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2279 "parser.yy"
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2293 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2281 "parser.yy"
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2295 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2286 "parser.yy"
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2300 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2288 "parser.yy"
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2302 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2304 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2309 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2297 "parser.yy"
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2311 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2313 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2314 "parser.yy"
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2328 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2330 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
 
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2318 "parser.yy"
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2323 "parser.yy"
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2337 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2325 "parser.yy"
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2339 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2334 "parser.yy"
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2348 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2336 "parser.yy"
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2368 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2370 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2362 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2376 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2367 "parser.yy"
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2381 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2369 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2383 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2371 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2376 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2378 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2392 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2394 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2396 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2401 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2401 "parser.yy"
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2404 "parser.yy"
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2406 "parser.yy"
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2420 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2425 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2413 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2427 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2415 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2429 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2434 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2422 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2436 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2424 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2438 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2426 "parser.yy"
+  case 632:
+
+/* Line 1806 of yacc.c  */
+#line 2440 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2431 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2445 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2433 "parser.yy"
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2447 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2435 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2449 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2466 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2480 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2483 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2471 "parser.yy"
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2485 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2490 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8398,8 +8502,8 @@
     break;
 
-  case 639:
-
-/* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2495 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8408,680 +8512,680 @@
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2503 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2505 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2493 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2512 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2514 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2505 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2519 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2522 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2524 "parser.yy"
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2538 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2543 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2545 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2547 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2549 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2557 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2559 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2561 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2552 "parser.yy"
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2566 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
 
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2554 "parser.yy"
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2568 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2570 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2562 "parser.yy"
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2564 "parser.yy"
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2584 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2572 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2586 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2588 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2591 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2605 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2593 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2607 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2598 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2614 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2602 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2616 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2604 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2618 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2606 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2612 "parser.yy"
+  case 680:
+
+/* Line 1806 of yacc.c  */
+#line 2626 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2628 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2630 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2621 "parser.yy"
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2635 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
 
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2623 "parser.yy"
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2637 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2625 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2639 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2646 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2643 "parser.yy"
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2657 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2646 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2648 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2662 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2651 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2665 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2667 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
 
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2683 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2685 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2676 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2690 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2678 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2692 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2680 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2694 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2682 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2696 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2684 "parser.yy"
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2698 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+  case 704:
+
+/* Line 1806 of yacc.c  */
+#line 2704 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
+  case 705:
+
+/* Line 1806 of yacc.c  */
+#line 2706 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
+  case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2708 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2699 "parser.yy"
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2713 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 706:
-
-/* Line 1806 of yacc.c  */
-#line 2701 "parser.yy"
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2715 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2725 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2735 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2723 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2727 "parser.yy"
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2741 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2729 "parser.yy"
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2743 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2731 "parser.yy"
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2745 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2738 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2752 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2740 "parser.yy"
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2754 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2742 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2756 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2744 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2758 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2746 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2760 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2749 "parser.yy"
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2763 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2751 "parser.yy"
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2765 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2753 "parser.yy"
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2767 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2755 "parser.yy"
+  case 728:
+
+/* Line 1806 of yacc.c  */
+#line 2769 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2757 "parser.yy"
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2771 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+  case 730:
+
+/* Line 1806 of yacc.c  */
+#line 2776 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2764 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2778 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2769 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2783 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2771 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2785 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
 
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2812 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2823 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2825 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2813 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2827 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2815 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2829 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2817 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2831 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2819 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2833 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2826 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2840 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2828 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2842 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2830 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2844 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2832 "parser.yy"
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2846 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2834 "parser.yy"
+  case 749:
+
+/* Line 1806 of yacc.c  */
+#line 2848 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2836 "parser.yy"
+  case 750:
+
+/* Line 1806 of yacc.c  */
+#line 2850 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 749:
-
-/* Line 1806 of yacc.c  */
-#line 2841 "parser.yy"
+  case 751:
+
+/* Line 1806 of yacc.c  */
+#line 2855 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 750:
-
-/* Line 1806 of yacc.c  */
-#line 2848 "parser.yy"
+  case 752:
+
+/* Line 1806 of yacc.c  */
+#line 2862 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2850 "parser.yy"
+  case 753:
+
+/* Line 1806 of yacc.c  */
+#line 2864 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
-  case 754:
-
-/* Line 1806 of yacc.c  */
-#line 2874 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 755:
-
-/* Line 1806 of yacc.c  */
-#line 2876 "parser.yy"
+  case 756:
+
+/* Line 1806 of yacc.c  */
+#line 2888 "parser.yy"
+    { (yyval.en) = nullptr; }
+    break;
+
+  case 757:
+
+/* Line 1806 of yacc.c  */
+#line 2890 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9090,5 +9194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9093 "Parser/parser.cc"
+#line 9197 "Parser/parser.cc"
       default: break;
     }
@@ -9321,5 +9425,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2879 "parser.yy"
+#line 2893 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/parser.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -59,91 +59,93 @@
      SIGNED = 277,
      UNSIGNED = 278,
-     VALIST = 279,
-     BOOL = 280,
-     COMPLEX = 281,
-     IMAGINARY = 282,
-     TYPEOF = 283,
-     LABEL = 284,
-     ENUM = 285,
-     STRUCT = 286,
-     UNION = 287,
-     OTYPE = 288,
-     FTYPE = 289,
-     DTYPE = 290,
-     TRAIT = 291,
-     SIZEOF = 292,
-     OFFSETOF = 293,
-     ATTRIBUTE = 294,
-     EXTENSION = 295,
-     IF = 296,
-     ELSE = 297,
-     SWITCH = 298,
-     CASE = 299,
-     DEFAULT = 300,
-     DO = 301,
-     WHILE = 302,
-     FOR = 303,
-     BREAK = 304,
-     CONTINUE = 305,
-     GOTO = 306,
-     RETURN = 307,
-     CHOOSE = 308,
-     DISABLE = 309,
-     ENABLE = 310,
-     FALLTHRU = 311,
-     TRY = 312,
-     CATCH = 313,
-     CATCHRESUME = 314,
-     FINALLY = 315,
-     THROW = 316,
-     THROWRESUME = 317,
-     AT = 318,
-     ASM = 319,
-     ALIGNAS = 320,
-     ALIGNOF = 321,
-     ATOMIC = 322,
-     GENERIC = 323,
-     NORETURN = 324,
-     STATICASSERT = 325,
-     THREADLOCAL = 326,
-     IDENTIFIER = 327,
-     QUOTED_IDENTIFIER = 328,
-     TYPEDEFname = 329,
-     TYPEGENname = 330,
-     ATTR_IDENTIFIER = 331,
-     ATTR_TYPEDEFname = 332,
-     ATTR_TYPEGENname = 333,
-     INTEGERconstant = 334,
-     CHARACTERconstant = 335,
-     STRINGliteral = 336,
-     REALDECIMALconstant = 337,
-     REALFRACTIONconstant = 338,
-     FLOATINGconstant = 339,
-     ZERO = 340,
-     ONE = 341,
-     ARROW = 342,
-     ICR = 343,
-     DECR = 344,
-     LS = 345,
-     RS = 346,
-     LE = 347,
-     GE = 348,
-     EQ = 349,
-     NE = 350,
-     ANDAND = 351,
-     OROR = 352,
-     ELLIPSIS = 353,
-     MULTassign = 354,
-     DIVassign = 355,
-     MODassign = 356,
-     PLUSassign = 357,
-     MINUSassign = 358,
-     LSassign = 359,
-     RSassign = 360,
-     ANDassign = 361,
-     ERassign = 362,
-     ORassign = 363,
-     ATassign = 364,
-     THEN = 365
+     ZERO_T = 279,
+     ONE_T = 280,
+     VALIST = 281,
+     BOOL = 282,
+     COMPLEX = 283,
+     IMAGINARY = 284,
+     TYPEOF = 285,
+     LABEL = 286,
+     ENUM = 287,
+     STRUCT = 288,
+     UNION = 289,
+     OTYPE = 290,
+     FTYPE = 291,
+     DTYPE = 292,
+     TRAIT = 293,
+     SIZEOF = 294,
+     OFFSETOF = 295,
+     ATTRIBUTE = 296,
+     EXTENSION = 297,
+     IF = 298,
+     ELSE = 299,
+     SWITCH = 300,
+     CASE = 301,
+     DEFAULT = 302,
+     DO = 303,
+     WHILE = 304,
+     FOR = 305,
+     BREAK = 306,
+     CONTINUE = 307,
+     GOTO = 308,
+     RETURN = 309,
+     CHOOSE = 310,
+     DISABLE = 311,
+     ENABLE = 312,
+     FALLTHRU = 313,
+     TRY = 314,
+     CATCH = 315,
+     CATCHRESUME = 316,
+     FINALLY = 317,
+     THROW = 318,
+     THROWRESUME = 319,
+     AT = 320,
+     ASM = 321,
+     ALIGNAS = 322,
+     ALIGNOF = 323,
+     ATOMIC = 324,
+     GENERIC = 325,
+     NORETURN = 326,
+     STATICASSERT = 327,
+     THREADLOCAL = 328,
+     IDENTIFIER = 329,
+     QUOTED_IDENTIFIER = 330,
+     TYPEDEFname = 331,
+     TYPEGENname = 332,
+     ATTR_IDENTIFIER = 333,
+     ATTR_TYPEDEFname = 334,
+     ATTR_TYPEGENname = 335,
+     INTEGERconstant = 336,
+     CHARACTERconstant = 337,
+     STRINGliteral = 338,
+     REALDECIMALconstant = 339,
+     REALFRACTIONconstant = 340,
+     FLOATINGconstant = 341,
+     ZERO = 342,
+     ONE = 343,
+     ARROW = 344,
+     ICR = 345,
+     DECR = 346,
+     LS = 347,
+     RS = 348,
+     LE = 349,
+     GE = 350,
+     EQ = 351,
+     NE = 352,
+     ANDAND = 353,
+     OROR = 354,
+     ELLIPSIS = 355,
+     MULTassign = 356,
+     DIVassign = 357,
+     MODassign = 358,
+     PLUSassign = 359,
+     MINUSassign = 360,
+     LSassign = 361,
+     RSassign = 362,
+     ANDassign = 363,
+     ERassign = 364,
+     ORassign = 365,
+     ATassign = 366,
+     THEN = 367
    };
 #endif
@@ -170,91 +172,93 @@
 #define SIGNED 277
 #define UNSIGNED 278
-#define VALIST 279
-#define BOOL 280
-#define COMPLEX 281
-#define IMAGINARY 282
-#define TYPEOF 283
-#define LABEL 284
-#define ENUM 285
-#define STRUCT 286
-#define UNION 287
-#define OTYPE 288
-#define FTYPE 289
-#define DTYPE 290
-#define TRAIT 291
-#define SIZEOF 292
-#define OFFSETOF 293
-#define ATTRIBUTE 294
-#define EXTENSION 295
-#define IF 296
-#define ELSE 297
-#define SWITCH 298
-#define CASE 299
-#define DEFAULT 300
-#define DO 301
-#define WHILE 302
-#define FOR 303
-#define BREAK 304
-#define CONTINUE 305
-#define GOTO 306
-#define RETURN 307
-#define CHOOSE 308
-#define DISABLE 309
-#define ENABLE 310
-#define FALLTHRU 311
-#define TRY 312
-#define CATCH 313
-#define CATCHRESUME 314
-#define FINALLY 315
-#define THROW 316
-#define THROWRESUME 317
-#define AT 318
-#define ASM 319
-#define ALIGNAS 320
-#define ALIGNOF 321
-#define ATOMIC 322
-#define GENERIC 323
-#define NORETURN 324
-#define STATICASSERT 325
-#define THREADLOCAL 326
-#define IDENTIFIER 327
-#define QUOTED_IDENTIFIER 328
-#define TYPEDEFname 329
-#define TYPEGENname 330
-#define ATTR_IDENTIFIER 331
-#define ATTR_TYPEDEFname 332
-#define ATTR_TYPEGENname 333
-#define INTEGERconstant 334
-#define CHARACTERconstant 335
-#define STRINGliteral 336
-#define REALDECIMALconstant 337
-#define REALFRACTIONconstant 338
-#define FLOATINGconstant 339
-#define ZERO 340
-#define ONE 341
-#define ARROW 342
-#define ICR 343
-#define DECR 344
-#define LS 345
-#define RS 346
-#define LE 347
-#define GE 348
-#define EQ 349
-#define NE 350
-#define ANDAND 351
-#define OROR 352
-#define ELLIPSIS 353
-#define MULTassign 354
-#define DIVassign 355
-#define MODassign 356
-#define PLUSassign 357
-#define MINUSassign 358
-#define LSassign 359
-#define RSassign 360
-#define ANDassign 361
-#define ERassign 362
-#define ORassign 363
-#define ATassign 364
-#define THEN 365
+#define ZERO_T 279
+#define ONE_T 280
+#define VALIST 281
+#define BOOL 282
+#define COMPLEX 283
+#define IMAGINARY 284
+#define TYPEOF 285
+#define LABEL 286
+#define ENUM 287
+#define STRUCT 288
+#define UNION 289
+#define OTYPE 290
+#define FTYPE 291
+#define DTYPE 292
+#define TRAIT 293
+#define SIZEOF 294
+#define OFFSETOF 295
+#define ATTRIBUTE 296
+#define EXTENSION 297
+#define IF 298
+#define ELSE 299
+#define SWITCH 300
+#define CASE 301
+#define DEFAULT 302
+#define DO 303
+#define WHILE 304
+#define FOR 305
+#define BREAK 306
+#define CONTINUE 307
+#define GOTO 308
+#define RETURN 309
+#define CHOOSE 310
+#define DISABLE 311
+#define ENABLE 312
+#define FALLTHRU 313
+#define TRY 314
+#define CATCH 315
+#define CATCHRESUME 316
+#define FINALLY 317
+#define THROW 318
+#define THROWRESUME 319
+#define AT 320
+#define ASM 321
+#define ALIGNAS 322
+#define ALIGNOF 323
+#define ATOMIC 324
+#define GENERIC 325
+#define NORETURN 326
+#define STATICASSERT 327
+#define THREADLOCAL 328
+#define IDENTIFIER 329
+#define QUOTED_IDENTIFIER 330
+#define TYPEDEFname 331
+#define TYPEGENname 332
+#define ATTR_IDENTIFIER 333
+#define ATTR_TYPEDEFname 334
+#define ATTR_TYPEGENname 335
+#define INTEGERconstant 336
+#define CHARACTERconstant 337
+#define STRINGliteral 338
+#define REALDECIMALconstant 339
+#define REALFRACTIONconstant 340
+#define FLOATINGconstant 341
+#define ZERO 342
+#define ONE 343
+#define ARROW 344
+#define ICR 345
+#define DECR 346
+#define LS 347
+#define RS 348
+#define LE 349
+#define GE 350
+#define EQ 351
+#define NE 352
+#define ANDAND 353
+#define OROR 354
+#define ELLIPSIS 355
+#define MULTassign 356
+#define DIVassign 357
+#define MODassign 358
+#define PLUSassign 359
+#define MINUSassign 360
+#define LSassign 361
+#define RSassign 362
+#define ANDassign 363
+#define ERassign 364
+#define ORassign 365
+#define ATassign 366
+#define THEN 367
 
 
@@ -286,5 +290,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 289 "Parser/parser.h"
+#line 293 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/parser.yy	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 26 17:35:53 2016
-// Update Count     : 2066
+// Last Modified On : Wed Dec 14 21:28:22 2016
+// Update Count     : 2090
 //
 
@@ -78,5 +78,5 @@
 %token RESTRICT											// C99
 %token FORALL LVALUE									// CFA
-%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
+%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED ZERO_T ONE_T
 %token VALIST											// GCC
 %token BOOL COMPLEX IMAGINARY							// C99
@@ -153,4 +153,5 @@
 %type<fctl> for_control_expression
 %type<en> subrange
+%type<constant> asm_name_opt
 %type<en> asm_operands_opt asm_operands_list asm_operand
 %type<label> label_list
@@ -362,5 +363,5 @@
 		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| zero_one
-		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
+		{ $$ = new ExpressionNode( build_constantZeroOne( *$1 ) ); }
 	| tuple
 	| '(' comma_expression ')'
@@ -412,5 +413,5 @@
 argument_expression:
 	// empty
-		{ $$ = 0; }										// use default argument
+		{ $$ = nullptr; }								// use default argument
 	| assignment_expression
 	;
@@ -443,5 +444,11 @@
 		{ $$ = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *$1 ), $2 ) ); }
 	| no_attr_identifier fraction_constants
-		{ $$ = new ExpressionNode( build_field_name_fraction_constants( build_varref( $1 ), $2 ) ); }
+		{
+			if( (*$1) == "0" || (*$1) == "1" ) {
+				$$ = new ExpressionNode( build_field_name_fraction_constants( build_constantZeroOne( *$1 ), $2 ) );
+			} else {
+				$$ = new ExpressionNode( build_field_name_fraction_constants( build_varref( $1 ), $2 ) );
+			}
+		}
 	;
 
@@ -678,5 +685,5 @@
 comma_expression_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| comma_expression
 	;
@@ -714,5 +721,5 @@
 	| '{'
 		// Two scopes are necessary because the block itself has a scope, but every declaration within the block also
-		// requires its own scope
+		// requires its own scope.
 	  push push
 	  local_label_declaration_opt						// GCC, local labels
@@ -768,5 +775,5 @@
 			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
 			// statement.
-			$$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
+			$$ = $7 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
 		}
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
@@ -775,5 +782,5 @@
 		{
 			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
-			$$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
+			$$ = $7 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
 		}
 	;
@@ -812,5 +819,5 @@
 switch_clause_list_opt:									// CFA
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| switch_clause_list
 	;
@@ -825,5 +832,5 @@
 choose_clause_list_opt:									// CFA
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| choose_clause_list
 	;
@@ -848,7 +855,7 @@
 fall_through:											// CFA
 	FALLTHRU
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| FALLTHRU ';'
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	;
 
@@ -984,5 +991,5 @@
 asm_operands_opt:										// GCC
 	// empty
-		{ $$ = 0; }										// use default argument
+		{ $$ = nullptr; }								// use default argument
 	| asm_operands_list
 	;
@@ -1003,8 +1010,9 @@
 asm_clobbers_list_opt:									// GCC
 	// empty
-		{ $$ = 0; }										// use default argument
+		{ $$ = nullptr; }								// use default argument
 	| string_literal
 		{ $$ = new ExpressionNode( $1 ); }
 	| asm_clobbers_list_opt ',' string_literal
+		// set_last return ParseNode *
 		{ $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
 	;
@@ -1027,5 +1035,5 @@
 declaration_list_opt:									// used at beginning of switch statement
 	pop
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| declaration_list
 	;
@@ -1039,5 +1047,5 @@
 old_declaration_list_opt:								// used to declare parameter types in K&R style functions
 	pop
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| old_declaration_list
 	;
@@ -1114,15 +1122,15 @@
 		{
 			typedefTable.setNextIdentifier( *$2 );
-			$$ = $1->addName( $2 );
+			$$ = $1->addName( $2 )->addAsmName( $3 );
 		}
 	| new_abstract_tuple identifier_or_type_name asm_name_opt
 		{
 			typedefTable.setNextIdentifier( *$2 );
-			$$ = $1->addName( $2 );
+			$$ = $1->addName( $2 )->addAsmName( $3 );
 		}
 	| type_qualifier_list new_abstract_tuple identifier_or_type_name asm_name_opt
 		{
 			typedefTable.setNextIdentifier( *$3 );
-			$$ = $2->addQualifiers( $1 )->addName( $3 );
+			$$ = $2->addQualifiers( $1 )->addName( $3 )->addAsmName( $4 );
 		}
 	;
@@ -1275,10 +1283,10 @@
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = ( $2->addType( $1 ))->addInitializer( $4 );
+			$$ = ( $2->addType( $1 ))->addAsmName( $3 )->addInitializer( $4 );
 		}
 	| declaring_list ',' attribute_list_opt declarator asm_name_opt initializer_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1->appendList( $1->cloneBaseType( $4->addInitializer( $6 ) ) );
+			$$ = $1->appendList( $1->cloneBaseType( $4->addAsmName( $5 )->addInitializer( $6 ) ) );
 		}
 	;
@@ -1300,5 +1308,5 @@
 type_qualifier_list_opt:								// GCC, used in asm_statement
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| type_qualifier_list
 	;
@@ -1410,4 +1418,8 @@
 	| VALIST											// GCC, __builtin_va_list
 		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+	| ZERO_T
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
+	| ONE_T
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::One ); }
 	;
 
@@ -1522,7 +1534,7 @@
 field_declaration_list:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| field_declaration_list field_declaration
-		{ $$ = $1 != 0 ? $1->appendList( $2 ) : $2; }
+		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
 	;
 
@@ -1573,5 +1585,5 @@
 bit_subrange_size_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| bit_subrange_size
 		{ $$ = $1; }
@@ -1610,5 +1622,5 @@
 enumerator_value_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| '=' constant_expression
 		{ $$ = $2; }
@@ -1619,5 +1631,5 @@
 new_parameter_type_list_opt:							// CFA
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| new_parameter_type_list
 	;
@@ -1654,5 +1666,5 @@
 parameter_type_list_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| parameter_type_list
 	;
@@ -1702,10 +1714,10 @@
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addType( $1 )->addInitializer( new InitializerNode( $3 ) );
+			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
 		}
 	| declaration_specifier type_parameter_redeclarator assignment_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $2->addType( $1 )->addInitializer( new InitializerNode( $3 ) );
+			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
 		}
 	;
@@ -1763,5 +1775,5 @@
 initializer_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| '=' initializer
 		{ $$ = $2; }
@@ -1777,5 +1789,5 @@
 initializer_list:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| initializer
 	| designation initializer					{ $$ = $2->set_designators( $1 ); }
@@ -1888,7 +1900,7 @@
 assertion_list_opt:										// CFA
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| assertion_list_opt assertion
-		{ $$ = $1 != 0 ? $1->appendList( $2 ) : $2; }
+		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
 	;
 
@@ -1902,5 +1914,5 @@
 		{ $$ = $4; }
 	| '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	;
 
@@ -2011,5 +2023,5 @@
 		{}												// empty input file
 	| external_definition_list
-		{ parseTree = parseTree != nullptr ? parseTree->appendList( $1 ) : $1;	}
+		{ parseTree = parseTree ? parseTree->appendList( $1 ) : $1;	}
 	;
 
@@ -2017,10 +2029,10 @@
 	external_definition
 	| external_definition_list push external_definition
-		{ $$ = $1 != nullptr ? $1->appendList( $3 ) : $3; }
+		{ $$ = $1 ? $1->appendList( $3 ) : $3; }
 	;
 
 external_definition_list_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| external_definition_list
 	;
@@ -2145,10 +2157,12 @@
 asm_name_opt:											// GCC
 	// empty
-	| ASM '(' string_literal_list ')' attribute_list_opt { delete $3; }	// FIX ME: unimplemented
+		{ $$ = nullptr; }
+	| ASM '(' string_literal ')' attribute_list_opt
+		{ $$ = $3; }
 	;
 
 attribute_list_opt:										// GCC
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| attribute_list
 	;
@@ -2163,5 +2177,5 @@
 	ATTRIBUTE '(' '(' attribute_parameter_list ')' ')'
 	//		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	;
 
@@ -2872,5 +2886,5 @@
 assignment_opt:
 	// empty
-		{ $$ = 0; }
+		{ $$ = nullptr; }
 	| '=' assignment_expression
 		{ $$ = $2; }
Index: src/Parser/parseutility.cc
===================================================================
--- src/Parser/parseutility.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/Parser/parseutility.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// parseutility.cc -- 
+// parseutility.cc --
 //
 // Author           : Rodolfo G. Esteves
@@ -12,5 +12,5 @@
 // Last Modified On : Sun Aug 14 23:45:03 2016
 // Update Count     : 3
-// 
+//
 
 #include "parseutility.h"
@@ -26,5 +26,5 @@
 	UntypedExpr *comparison = new UntypedExpr( new NameExpr( "?!=?" ) );
 	comparison->get_args().push_back( orig );
-	comparison->get_args().push_back( new NameExpr( "0" ) );
+	comparison->get_args().push_back( new ConstantExpr( Constant( new ZeroType( emptyQualifiers ), "0" ) ) );
 	return new CastExpr( comparison, new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
 }
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/ResolvExpr/CommonType.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -42,4 +42,5 @@
 		virtual void visit( OneType *oneType );
 
+		void getCommonWithVoidPointer( PointerType* voidPointer, PointerType* otherPointer );
 		template< typename RefType > void handleRefType( RefType *inst, Type *other );
 
@@ -143,28 +144,23 @@
 	}
 
-	/// true if a common type for t must be a complete type
-	bool requiredComplete( Type * t ) {
-		if ( TypeInstType * inst = dynamic_cast< TypeInstType * > ( t ) ) {
-			return inst->get_baseType()->isComplete();
+	void CommonType::getCommonWithVoidPointer( PointerType* voidPointer, PointerType* otherPointer ) {
+		if ( TypeInstType* var = dynamic_cast< TypeInstType* >( otherPointer->get_base() ) ) {
+			OpenVarSet::const_iterator entry = openVars.find( var->get_name() );
+			if ( entry != openVars.end() ) {
+				AssertionSet need, have;
+				WidenMode widen( widenFirst, widenSecond );
+				if ( entry != openVars.end() && ! bindVar(var, voidPointer->get_base(), entry->second, env, need, have, openVars, widen, indexer ) ) return;
+			}
 		}
-		return false;
+		result = voidPointer->clone();
+		result->get_qualifiers() += otherPointer->get_qualifiers();
 	}
 
 	void CommonType::visit( PointerType *pointerType ) {
 		if ( PointerType *otherPointer = dynamic_cast< PointerType* >( type2 ) ) {
-			// Note: relationship between formal and actual types is antisymmetric
-			//   void free(void *);
-			//   forall(otype T) void foo(T *);
-			//
-			// should be able to pass T* to free, but should not be able to pass a void* to foo.
-			// because of this, the requiredComplete check occurs only on the first, since it corresponds
-			// to the formal parameter type (though this may be incorrect in some cases, in which case
-			// perhaps the widen mode needs to incorporate another bit for whether this is a formal or actual context)
-			if ( widenFirst && dynamic_cast< VoidType* >( otherPointer->get_base() ) && ! isFtype(pointerType->get_base(), indexer) && ! requiredComplete( pointerType->get_base() ) ) {
-				result = otherPointer->clone();
-				result->get_qualifiers() += pointerType->get_qualifiers();
+			if ( widenFirst && dynamic_cast< VoidType* >( otherPointer->get_base() ) && ! isFtype(pointerType->get_base(), indexer) ) {
+				getCommonWithVoidPointer( otherPointer, pointerType );
 			} else if ( widenSecond && dynamic_cast< VoidType* >( pointerType->get_base() ) && ! isFtype(otherPointer->get_base(), indexer) ) {
-				result = pointerType->clone();
-				result->get_qualifiers() += otherPointer->get_qualifiers();
+				getCommonWithVoidPointer( pointerType, otherPointer );
 			} else if ( ( pointerType->get_base()->get_qualifiers() >= otherPointer->get_base()->get_qualifiers() || widenFirst )
 					   && ( pointerType->get_base()->get_qualifiers() <= otherPointer->get_base()->get_qualifiers() || widenSecond ) ) {
@@ -256,4 +252,7 @@
 					result->get_qualifiers() += zeroType->get_qualifiers();
 				}
+			} else if ( widenSecond && dynamic_cast< OneType* >( type2 ) ) {
+				result = new BasicType( zeroType->get_qualifiers(), BasicType::SignedInt );
+				result->get_qualifiers() += type2->get_qualifiers();
 			}
 		}
@@ -267,4 +266,7 @@
 					result->get_qualifiers() += oneType->get_qualifiers();
 				}
+			} else if ( widenSecond && dynamic_cast< ZeroType* >( type2 ) ) {
+				result = new BasicType( oneType->get_qualifiers(), BasicType::SignedInt );
+				result->get_qualifiers() += type2->get_qualifiers();
 			}
 		}
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/ResolvExpr/Resolver.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -404,4 +404,6 @@
 	template< typename AggrInst >
 	TypeSubstitution makeGenericSubstitutuion( AggrInst * inst ) {
+		assert( inst );
+		assert( inst->get_baseParameters() );
 		std::list< TypeDecl * > baseParams = *inst->get_baseParameters();
 		std::list< Expression * > typeSubs = inst->get_parameters();
@@ -444,5 +446,4 @@
 
 	void Resolver::resolveAggrInit( ReferenceToType * inst, InitIterator & init, InitIterator & initEnd ) {
-
 		if ( StructInstType * sit = dynamic_cast< StructInstType * >( inst ) ) {
 			TypeSubstitution sub = makeGenericSubstitutuion( sit );
@@ -455,5 +456,5 @@
 			}
 		} else if ( UnionInstType * uit = dynamic_cast< UnionInstType * >( inst ) ) {
-			TypeSubstitution sub = makeGenericSubstitutuion( sit );
+			TypeSubstitution sub = makeGenericSubstitutuion( uit );
 			UnionDecl * un = uit->get_baseUnion();
 			// only resolve to the first member of a union
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/ResolvExpr/Unify.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -31,14 +31,4 @@
 
 namespace ResolvExpr {
-	struct WidenMode {
-		WidenMode( bool widenFirst, bool widenSecond ): widenFirst( widenFirst ), widenSecond( widenSecond ) {}
-		WidenMode &operator|=( const WidenMode &other ) { widenFirst |= other.widenFirst; widenSecond |= other.widenSecond; return *this; }
-		WidenMode &operator&=( const WidenMode &other ) { widenFirst &= other.widenFirst; widenSecond &= other.widenSecond; return *this; }
-		WidenMode operator|( const WidenMode &other ) { WidenMode newWM( *this ); newWM |= other; return newWM; }
-		WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; }
-		operator bool() { return widenFirst && widenSecond; }
-
-		bool widenFirst : 1, widenSecond : 1;
-	};
 
 	class Unify : public Visitor {
Index: src/ResolvExpr/Unify.h
===================================================================
--- src/ResolvExpr/Unify.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/ResolvExpr/Unify.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Unify.h -- 
+// Unify.h --
 //
 // Author           : Richard C. Bilson
@@ -27,4 +27,16 @@
 
 namespace ResolvExpr {
+	struct WidenMode {
+		WidenMode( bool widenFirst, bool widenSecond ): widenFirst( widenFirst ), widenSecond( widenSecond ) {}
+		WidenMode &operator|=( const WidenMode &other ) { widenFirst |= other.widenFirst; widenSecond |= other.widenSecond; return *this; }
+		WidenMode &operator&=( const WidenMode &other ) { widenFirst &= other.widenFirst; widenSecond &= other.widenSecond; return *this; }
+		WidenMode operator|( const WidenMode &other ) { WidenMode newWM( *this ); newWM |= other; return newWM; }
+		WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; }
+		operator bool() { return widenFirst && widenSecond; }
+
+		bool widenFirst : 1, widenSecond : 1;
+	};
+
+	bool bindVar( TypeInstType *typeInst, Type *other, const TypeDecl::Data & data, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer );
 	bool unify( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, OpenVarSet &openVars, const SymTab::Indexer &indexer );
 	bool unify( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, OpenVarSet &openVars, const SymTab::Indexer &indexer, Type *&commonType );
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/SymTab/Autogen.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -88,5 +88,5 @@
 		if ( forward ) {
 			// generate: for ( int i = 0; i < 0; ++i )
-			begin = new NameExpr( "0" );
+			begin = new ConstantExpr( Constant( new ZeroType( emptyQualifiers ), "0" ) );
 			end = array->get_dimension()->clone();
 			cmp = new NameExpr( "?<?" );
@@ -96,6 +96,6 @@
 			begin = new UntypedExpr( new NameExpr( "?-?" ) );
 			((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );
-			((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) );
-			end = new NameExpr( "0" );
+			((UntypedExpr*)begin)->get_args().push_back( new ConstantExpr( Constant( new OneType( emptyQualifiers ), "1" ) ) );
+			end = new ConstantExpr( Constant( new ZeroType( emptyQualifiers ), "0" ) );
 			cmp = new NameExpr( "?>=?" );
 			update = new NameExpr( "--?" );
@@ -175,3 +175,2 @@
 } // namespace SymTab
 #endif // AUTOGEN_H
-
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/SynTree/Declaration.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 18 23:50:24 2016
-// Update Count     : 40
+// Last Modified On : Tue Dec 13 13:37:33 2016
+// Update Count     : 49
 //
 
@@ -69,10 +69,13 @@
 
 	std::string get_mangleName() const { return mangleName; }
-	void set_mangleName( std::string newValue ) { mangleName = newValue; }
+	DeclarationWithType * set_mangleName( std::string newValue ) { mangleName = newValue; return this; }
 
 	std::string get_scopedMangleName() const { return mangleName + "_" + std::to_string(scopeLevel); }
 
 	int get_scopeLevel() const { return scopeLevel; }
-	void set_scopeLevel( int newValue ) { scopeLevel = newValue; }
+	DeclarationWithType * set_scopeLevel( int newValue ) { scopeLevel = newValue; return this; }
+
+	ConstantExpr *get_asmName() const { return asmName; }
+	DeclarationWithType * set_asmName( ConstantExpr *newValue ) { asmName = newValue; return this; }
 
 	std::list< Attribute * >& get_attributes() { return attributes; }
@@ -87,8 +90,8 @@
 	// this represents the type with all types and typedefs expanded it is generated by SymTab::Validate::Pass2
 	std::string mangleName;
-	// need to remember the scope level at which the variable was declared, so that
-	// shadowed identifiers can be accessed
+	// need to remember the scope level at which the variable was declared, so that shadowed identifiers can be accessed
 	int scopeLevel = 0;
 
+	ConstantExpr *asmName;
 	std::list< Attribute * > attributes;
 };
@@ -106,4 +109,5 @@
 	Initializer *get_init() const { return init; }
 	void set_init( Initializer *newValue ) { init = newValue; }
+
 	Expression *get_bitfieldWidth() const { return bitfieldWidth; }
 	void set_bitfieldWidth( Expression *newValue ) { bitfieldWidth = newValue; }
Index: src/SynTree/DeclarationWithType.cc
===================================================================
--- src/SynTree/DeclarationWithType.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/SynTree/DeclarationWithType.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 18 23:50:41 2016
-// Update Count     : 4
+// Last Modified On : Tue Dec 13 14:49:43 2016
+// Update Count     : 7
 //
 
@@ -20,5 +20,5 @@
 
 DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes )
-		: Declaration( name, sc, linkage ), attributes( attributes ) {
+	: Declaration( name, sc, linkage ), asmName( nullptr ), attributes( attributes ) {
 }
 
@@ -26,8 +26,10 @@
 		: Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ) {
 	cloneAll( other.attributes, attributes );
+	asmName = maybeClone( other.asmName );
 }
 
 DeclarationWithType::~DeclarationWithType() {
 	deleteAll( attributes );
+	delete asmName;
 }
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/SynTree/Expression.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -438,5 +438,8 @@
 }
 
-NameExpr::NameExpr( std::string _name, Expression *_aname ) : Expression( _aname ), name(_name) {}
+NameExpr::NameExpr( std::string _name, Expression *_aname ) : Expression( _aname ), name(_name) {
+	assertf(_name != "0", "Zero is not a valid name\n");
+	assertf(_name != "1", "One is not a valid name\n");
+}
 
 NameExpr::NameExpr( const NameExpr &other ) : Expression( other ), name( other.name ) {
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/SynTree/Type.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -82,4 +82,6 @@
 	ForallList forall;
 };
+
+extern Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
 
 class VoidType : public Type {
Index: src/driver/Makefile.am
===================================================================
--- src/driver/Makefile.am	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/driver/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -16,5 +16,15 @@
 
 # applies to both programs
-AM_CXXFLAGS = -Wall
+AM_CXXFLAGS = -Wall -O2
+if BUILD_NO_LIB
+else
+AM_CXXFLAGS += -DHAVE_LIBCFA
+endif
+if BUILD_DEBUG
+AM_CXXFLAGS += -DHAVE_LIBCFA_DEBUG
+endif
+if BUILD_RELEASE
+AM_CXXFLAGS += -DHAVE_LIBCFA_RELEASE
+endif
 
 bin_PROGRAMS = cfa
Index: src/driver/Makefile.in
===================================================================
--- src/driver/Makefile.in	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/driver/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -36,4 +36,9 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@BUILD_NO_LIB_FALSE@am__append_1 = -DHAVE_LIBCFA
+@BUILD_DEBUG_TRUE@am__append_2 = -DHAVE_LIBCFA_DEBUG
+@BUILD_RELEASE_TRUE@am__append_3 = -DHAVE_LIBCFA_RELEASE
 bin_PROGRAMS = cfa$(EXEEXT)
 cc1lib_PROGRAMS = cc1$(EXEEXT)
@@ -92,4 +97,7 @@
 BACKEND_CC = @BACKEND_CC@
 CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
 CCDEPMODE = @CCDEPMODE@
 CFA_BACKEND_CC = @CFA_BACKEND_CC@
@@ -126,4 +134,5 @@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -157,5 +166,9 @@
 am__untar = @am__untar@
 bindir = @bindir@
+build = @build@
 build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
 builddir = @builddir@
 datadir = @datadir@
@@ -164,5 +177,9 @@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+host = @host@
 host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
 htmldir = @htmldir@
 includedir = @includedir@
@@ -190,5 +207,6 @@
 
 # applies to both programs
-AM_CXXFLAGS = -Wall
+AM_CXXFLAGS = -Wall -O2 $(am__append_1) $(am__append_2) \
+	$(am__append_3)
 cfa_SOURCES = cfa.cc
 
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/driver/cfa.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -231,11 +231,5 @@
 	} // if
 
-	string d;
-	if ( debug ) {
-		d = "-d";
-	} // if
-
 	// add the CFA include-library paths, which allow direct access to header files without directory qualification
-
 	args[nargs] = "-I" CFA_INCDIR;
 	nargs += 1;
@@ -244,14 +238,35 @@
 		nargs += 1;
 	} // if
+	args[nargs] = "-I" CFA_INCDIR "/concurrency";
+	nargs += 1;
 	args[nargs] = "-I" CFA_INCDIR "/containers";
 	nargs += 1;
 
+#ifdef HAVE_LIBCFA
 	if ( link ) {
+		#if ! defined(HAVE_LIBCFA_RELEASE)
+			if( !debug ) { 
+				cerr << "error: Option -nodebug is not available, libcfa was not installed." << endl;
+				exit( EXIT_FAILURE );
+				}
+		#endif
+		#if ! defined(HAVE_LIBCFA_DEBUG)
+			if( debug ) { 
+				cerr << "error: Option -debug is not available, libcfa-d was not installed." << endl;
+				exit( EXIT_FAILURE );
+				}
+		#endif
+
 		// include the cfa library in case it's needed
 		args[nargs] = "-L" CFA_LIBDIR;
 		nargs += 1;
-		args[nargs] = "-lcfa";
-		nargs += 1;
-	} // if
+		if( debug ) {
+			args[nargs] = "-lcfa-d";
+		} else {
+			args[nargs] = "-lcfa";
+		}
+		nargs += 1;
+	} // if
+#endif //HAVE_LIBCFA
 
 	// add the correct set of flags based on the type of compile this is
Index: src/examples/ArrayN.c
===================================================================
--- src/examples/ArrayN.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/examples/ArrayN.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,25 @@
+#include <fstream>
+
+// [unsigned, unsigned] offset_to_index(unsigned offset, unsigned sx, unsigned sy)
+// {
+//     return [offset / sx, offset % sy];
+// }
+
+forall(otype index_t)
+index_t offset_to_index(unsigned offset, index_t size)
+{
+    return [offset / size.0, offset % size.1];
+}
+
+int main(int argc, char* argv[])
+{
+    unsigned x = 0, y = 0, i = 0;
+    unsigned sx = 4, sy = 4;
+
+    i = 6;
+    [x, y] = offset_to_index(6, [sx, sy]);
+
+    sout | x | ' ' | y | endl;
+
+    return 0;
+}
Index: src/examples/Bench.c
===================================================================
--- src/examples/Bench.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/examples/Bench.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,93 @@
+
+
+#include <fstream>
+#include <threads>
+
+#include <unistd.h>					// sysconf
+#include <sys/times.h>					// times
+#include <time.h>
+
+inline unsigned long long int Time() {
+    timespec ts;
+    clock_gettime(
+#if defined( __linux__ )
+	 CLOCK_THREAD_CPUTIME_ID,
+#elif defined( __freebsd__ )
+	 CLOCK_PROF,
+#elif defined( __solaris__ )
+	 CLOCK_HIGHRES,
+#else
+    #error uC++ : internal error, unsupported architecture
+#endif
+	 &ts );
+    return 1000000000LL * ts.tv_sec + ts.tv_nsec;
+} // Time
+
+//=======================================
+// time coroutine
+//=======================================
+
+struct CoroutineResume {
+    int N;
+    coroutine c;
+};
+
+coroutine* get_coroutine(CoroutineResume* this);
+void co_main(CoroutineResume* this);
+
+void ?{}(CoroutineResume* this, int N) {
+      this->N = N;
+	prime(this);
+}
+
+coroutine* get_coroutine(CoroutineResume* this) {
+      return &this->c;
+}
+
+void co_main(CoroutineResume* this) {
+	for ( int i = 1; i <= this->N; i += 1 ) {
+		suspend();
+	} // for
+} // CoroutineResume::main
+
+void resumer(CoroutineResume* this) {
+	long long int StartTime, EndTime;
+
+	StartTime = Time();
+	for ( int i = 1; i <= this->N; i += 1 ) {
+		resume(this);
+	} // for
+	EndTime = Time();
+	sout | "\t " | ( EndTime - StartTime ) / this->N;
+} // CoroutineResume::resumer
+
+
+int main() {
+	const int NoOfTimes =
+#if defined( __U_DEBUG__ )				// takes longer so run fewer iterations
+	100000;
+#else
+	1000000;
+#endif // __U_DEBUG__
+
+	sout | "\t\tcreate\tcreate\t16i/4o\t16i/4o\tresume/\tsignal/" | endl;
+	sout | "(nsecs)";
+	sout | "\t\tdelete/\tdelete/\tbytes\tbytes\tsuspend\twait" | endl;
+	sout | "\t\tblock\tdynamic\tdirect\taccept\tcycle\tcycle" | endl;
+
+	sout | "class\t";
+	sout | "\t N/A\t N/A\t N/A";
+	sout | "\t N/A\t N/A\t N/A";
+	sout | "\t" | endl;
+
+	sout | "coroutine";
+	sout | "\t N/A\t N/A\t N/A";
+	sout | "\t N/A";
+	{
+		CoroutineResume resumer = { NoOfTimes };
+		resumer(&resumer);
+	}
+	sout | "\t N/A";
+
+	sout | "\t" | endl;
+}
Index: src/examples/Makefile.am
===================================================================
--- src/examples/Makefile.am	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/examples/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -16,9 +16,18 @@
 
 # applies to both programs
-CFLAGS = -g -Wall -Wno-unused-function # TEMPORARY: does not build with -O2
+CFLAGS =
+AM_CFLAGS = -g -Wall -Wno-unused-function -O2
 CC = @CFA_BINDIR@/cfa
 
-noinst_PROGRAMS = fstream_test vector_test avl_test # build but do not install
+noinst_PROGRAMS = fstream_test vector_test avl_test Bench # build but do not install
 fstream_test_SOURCES = fstream_test.c
 vector_test_SOURCES = vector_int.c array.c vector_test.c
 avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c
+
+Bench : Bench.c
+	@for ccflags in "-debug" "-nodebug"; do \
+		echo ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt Bench.c;\
+		${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt Bench.c;\
+		./a.out ; \
+	done ; \
+	rm -f ./a.out ;
Index: src/examples/Makefile.in
===================================================================
--- src/examples/Makefile.in	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/examples/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -36,6 +36,8 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
 noinst_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \
-	avl_test$(EXEEXT)
+	avl_test$(EXEEXT) Bench$(EXEEXT)
 subdir = src/examples
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
@@ -49,4 +51,7 @@
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
+Bench_SOURCES = Bench.c
+Bench_OBJECTS = Bench.$(OBJEXT)
+Bench_LDADD = $(LDADD)
 am_avl_test_OBJECTS = avl_test.$(OBJEXT) avl0.$(OBJEXT) avl1.$(OBJEXT) \
 	avl2.$(OBJEXT) avl3.$(OBJEXT) avl4.$(OBJEXT) \
@@ -84,7 +89,7 @@
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \
+SOURCES = Bench.c $(avl_test_SOURCES) $(fstream_test_SOURCES) \
 	$(vector_test_SOURCES)
-DIST_SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \
+DIST_SOURCES = Bench.c $(avl_test_SOURCES) $(fstream_test_SOURCES) \
 	$(vector_test_SOURCES)
 ETAGS = etags
@@ -101,4 +106,7 @@
 BACKEND_CC = @BACKEND_CC@
 CC = @CFA_BINDIR@/cfa
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
 CCDEPMODE = @CCDEPMODE@
 CFA_BACKEND_CC = @CFA_BACKEND_CC@
@@ -110,5 +118,5 @@
 
 # applies to both programs
-CFLAGS = -g -Wall -Wno-unused-function # TEMPORARY: does not build with -O2
+CFLAGS = 
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -137,4 +145,5 @@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -168,5 +177,9 @@
 am__untar = @am__untar@
 bindir = @bindir@
+build = @build@
 build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
 builddir = @builddir@
 datadir = @datadir@
@@ -175,5 +188,9 @@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+host = @host@
 host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
 htmldir = @htmldir@
 includedir = @includedir@
@@ -199,4 +216,5 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+AM_CFLAGS = -g -Wall -Wno-unused-function -O2
 fstream_test_SOURCES = fstream_test.c
 vector_test_SOURCES = vector_int.c array.c vector_test.c
@@ -255,4 +273,5 @@
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bench.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl-private.Po@am__quote@
@@ -580,4 +599,12 @@
 
 
+Bench : Bench.c
+	@for ccflags in "-debug" "-nodebug"; do \
+		echo ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt Bench.c;\
+		${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt Bench.c;\
+		./a.out ; \
+	done ; \
+	rm -f ./a.out ;
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
Index: src/examples/zero_one.c
===================================================================
--- src/examples/zero_one.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/examples/zero_one.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,24 @@
+#include <fstream>
+
+void foo(zero_t o)
+{
+	sout | "It's a Zero!" | endl;
+}
+
+void foo(one_t o)
+{
+	sout | "It's a One!" | endl;
+}
+
+void foo(int o)
+{
+	sout | "It's a Number!" | endl;
+}
+
+int main() 
+{
+	foo(0);
+	foo(1);
+	foo(2);
+	return 0;
+}
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/libcfa/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:54:01 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Fri Aug 26 12:03:37 2016
-## Update Count     : 199
+## Last Modified On : Wed Dec 14 15:17:30 2016
+## Update Count     : 211
 ###############################################################################
 
@@ -18,43 +18,28 @@
 AUTOMAKE_OPTIONS = subdir-objects
 
-lib_LIBRARIES = libcfa.a
+lib_LIBRARIES =
 
-# put into lib for now
-cfalibdir = ${libdir}
-cfalib_DATA = builtins.cf extras.cf prelude.cf
+if BUILD_RELEASE
+lib_LIBRARIES += libcfa.a
+endif
 
-# create extra forward types/declarations to reduce inclusion of library files
-extras.cf : extras.regx extras.c
-	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
+if BUILD_DEBUG
+lib_LIBRARIES += libcfa-d.a
+endif
 
-# create forward declarations for gcc builtins
-builtins.cf : builtins.c
-	${AM_V_GEN}if [ -e $< ] ; then \
-		@BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
-	fi
+libcfa_a-libcfa-prelude.o : libcfa-prelude.c
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -O2 -c -o $@ $<
 
-builtins.c : builtins.def prototypes.awk
-	${AM_V_GEN}if [ -e $< ] ; then \
-		@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
-	fi
+libcfa_d_a-libcfa-prelude.o : libcfa-prelude.c
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -D__CFA_DEBUG__ -O0 -c -o $@ $<
 
-builtins.def :
+EXTRA_FLAGS = -g -Wall -Wno-unused-function -I${abs_top_srcdir}/src/libcfa/libhdr -imacros libcfa-prelude.c @CFA_FLAGS@
 
-prototypes.awk :
-
-MAINTAINERCLEANFILES = builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
-
-#--------------------------------------------------
-
-libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
-	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
-
-libcfa-prelude.o : libcfa-prelude.c
-	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
-
-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
+AM_CCASFLAGS = @CFA_FLAGS@
+CFLAGS = -quiet -no-include-stdhdr -XCFA -t -B${abs_top_srcdir}/src/driver ${EXTRA_FLAGS}
 CC = ${abs_top_srcdir}/src/driver/cfa
 
-headers = limits stdlib math iostream fstream iterator rational containers/vector
+headers = limits stdlib math iostream fstream iterator rational assert containers/vector concurrency/threads
+runtimehdrs = concurrency
 libobjs = ${headers:=.o}
 
@@ -63,11 +48,22 @@
 	@true
 
+concurrency/libcfa_a-invoke.o : concurrency/invoke.c
+	${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<
+
+concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c
+	${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<
+
 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
 
-libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
+libsrc = libcfa-prelude.c ${headers:=.c} concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c
+
+libcfa_a_SOURCES = ${libsrc}
+libcfa_a_CFLAGS = -nodebug -O2
+libcfa_d_a_SOURCES = ${libsrc}
+libcfa_d_a_CFLAGS = -debug -O0
 
 stdhdr = ${shell echo stdhdr/*}
 
-nobase_include_HEADERS = ${headers} ${stdhdr}
+nobase_include_HEADERS = ${headers} ${stdhdr} concurrency/invoke.h
 
 CLEANFILES = libcfa-prelude.c
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/libcfa/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -18,5 +18,4 @@
 ######################## -*- Mode: Makefile-Automake -*- ######################
 ###############################################################################
-
 
 
@@ -38,4 +37,8 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@BUILD_RELEASE_TRUE@am__append_1 = libcfa.a
+@BUILD_DEBUG_TRUE@am__append_2 = libcfa-d.a
 subdir = src/libcfa
 DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
@@ -76,6 +79,5 @@
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cfalibdir)" \
-	"$(DESTDIR)$(includedir)"
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
 LIBRARIES = $(lib_LIBRARIES)
 AR = ar
@@ -87,11 +89,31 @@
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+libcfa_d_a_AR = $(AR) $(ARFLAGS)
+libcfa_d_a_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
+am__objects_1 = libcfa_d_a-limits.$(OBJEXT) \
+	libcfa_d_a-stdlib.$(OBJEXT) libcfa_d_a-math.$(OBJEXT) \
+	libcfa_d_a-iostream.$(OBJEXT) libcfa_d_a-fstream.$(OBJEXT) \
+	libcfa_d_a-iterator.$(OBJEXT) libcfa_d_a-rational.$(OBJEXT) \
+	libcfa_d_a-assert.$(OBJEXT) \
+	containers/libcfa_d_a-vector.$(OBJEXT) \
+	concurrency/libcfa_d_a-threads.$(OBJEXT)
+am__objects_2 = libcfa_d_a-libcfa-prelude.$(OBJEXT) $(am__objects_1) \
+	concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT) \
+	concurrency/libcfa_d_a-invoke.$(OBJEXT)
+am_libcfa_d_a_OBJECTS = $(am__objects_2)
+libcfa_d_a_OBJECTS = $(am_libcfa_d_a_OBJECTS)
 libcfa_a_AR = $(AR) $(ARFLAGS)
 libcfa_a_LIBADD =
-am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \
-	iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \
-	rational.$(OBJEXT) containers/vector.$(OBJEXT)
-am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
+am__objects_3 = libcfa_a-limits.$(OBJEXT) libcfa_a-stdlib.$(OBJEXT) \
+	libcfa_a-math.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \
+	libcfa_a-fstream.$(OBJEXT) libcfa_a-iterator.$(OBJEXT) \
+	libcfa_a-rational.$(OBJEXT) libcfa_a-assert.$(OBJEXT) \
+	containers/libcfa_a-vector.$(OBJEXT) \
+	concurrency/libcfa_a-threads.$(OBJEXT)
+am__objects_4 = libcfa_a-libcfa-prelude.$(OBJEXT) $(am__objects_3) \
+	concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT) \
+	concurrency/libcfa_a-invoke.$(OBJEXT)
+am_libcfa_a_OBJECTS = $(am__objects_4)
 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
@@ -99,4 +121,12 @@
 am__depfiles_maybe = depfiles
 am__mv = mv -f
+CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
+AM_V_CPPAS = $(am__v_CPPAS_@AM_V@)
+am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@)
+am__v_CPPAS_0 = @echo "  CPPAS " $@;
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -112,7 +142,6 @@
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(libcfa_a_SOURCES)
-DIST_SOURCES = $(libcfa_a_SOURCES)
-DATA = $(cfalib_DATA)
+SOURCES = $(libcfa_d_a_SOURCES) $(libcfa_a_SOURCES)
+DIST_SOURCES = $(libcfa_d_a_SOURCES) $(libcfa_a_SOURCES)
 HEADERS = $(nobase_include_HEADERS)
 ETAGS = etags
@@ -129,4 +158,7 @@
 BACKEND_CC = @BACKEND_CC@
 CC = ${abs_top_srcdir}/src/driver/cfa
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
 CCDEPMODE = @CCDEPMODE@
 CFA_BACKEND_CC = @CFA_BACKEND_CC@
@@ -136,5 +168,5 @@
 CFA_LIBDIR = @CFA_LIBDIR@
 CFA_PREFIX = @CFA_PREFIX@
-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
+CFLAGS = -quiet -no-include-stdhdr -XCFA -t -B${abs_top_srcdir}/src/driver ${EXTRA_FLAGS}
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -163,4 +195,5 @@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -194,5 +227,9 @@
 am__untar = @am__untar@
 bindir = @bindir@
+build = @build@
 build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
 builddir = @builddir@
 datadir = @datadir@
@@ -201,5 +238,9 @@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+host = @host@
 host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
 htmldir = @htmldir@
 includedir = @includedir@
@@ -228,20 +269,22 @@
 # create object files in directory with source files
 AUTOMAKE_OPTIONS = subdir-objects
-lib_LIBRARIES = libcfa.a
-
-# put into lib for now
-cfalibdir = ${libdir}
-cfalib_DATA = builtins.cf extras.cf prelude.cf
-MAINTAINERCLEANFILES = builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
-headers = limits stdlib math iostream fstream iterator rational containers/vector
+lib_LIBRARIES = $(am__append_1) $(am__append_2)
+EXTRA_FLAGS = -g -Wall -Wno-unused-function -I${abs_top_srcdir}/src/libcfa/libhdr -imacros libcfa-prelude.c @CFA_FLAGS@
+AM_CCASFLAGS = @CFA_FLAGS@
+headers = limits stdlib math iostream fstream iterator rational assert containers/vector concurrency/threads
+runtimehdrs = concurrency
 libobjs = ${headers:=.o}
-libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
+libsrc = libcfa-prelude.c ${headers:=.c} concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c
+libcfa_a_SOURCES = ${libsrc}
+libcfa_a_CFLAGS = -nodebug -O2
+libcfa_d_a_SOURCES = ${libsrc}
+libcfa_d_a_CFLAGS = -debug -O0
 stdhdr = ${shell echo stdhdr/*}
-nobase_include_HEADERS = ${headers} ${stdhdr}
+nobase_include_HEADERS = ${headers} ${stdhdr} concurrency/invoke.h
 CLEANFILES = libcfa-prelude.c
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .S .c .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
@@ -310,6 +353,29 @@
 	@$(MKDIR_P) containers/$(DEPDIR)
 	@: > containers/$(DEPDIR)/$(am__dirstamp)
-containers/vector.$(OBJEXT): containers/$(am__dirstamp) \
+containers/libcfa_d_a-vector.$(OBJEXT): containers/$(am__dirstamp) \
 	containers/$(DEPDIR)/$(am__dirstamp)
+concurrency/$(am__dirstamp):
+	@$(MKDIR_P) concurrency
+	@: > concurrency/$(am__dirstamp)
+concurrency/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) concurrency/$(DEPDIR)
+	@: > concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_d_a-threads.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT):  \
+	concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_d_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
+libcfa-d.a: $(libcfa_d_a_OBJECTS) $(libcfa_d_a_DEPENDENCIES) $(EXTRA_libcfa_d_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f libcfa-d.a
+	$(AM_V_AR)$(libcfa_d_a_AR) libcfa-d.a $(libcfa_d_a_OBJECTS) $(libcfa_d_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libcfa-d.a
+containers/libcfa_a-vector.$(OBJEXT): containers/$(am__dirstamp) \
+	containers/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_a-threads.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) 
 	$(AM_V_at)-rm -f libcfa.a
@@ -319,18 +385,56 @@
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
-	-rm -f containers/vector.$(OBJEXT)
+	-rm -f concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT)
+	-rm -f concurrency/libcfa_a-invoke.$(OBJEXT)
+	-rm -f concurrency/libcfa_a-threads.$(OBJEXT)
+	-rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT)
+	-rm -f concurrency/libcfa_d_a-threads.$(OBJEXT)
+	-rm -f containers/libcfa_a-vector.$(OBJEXT)
+	-rm -f containers/libcfa_d_a-vector.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iostream.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/vector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-assert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-fstream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-iostream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-iterator.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-libcfa-prelude.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-limits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-math.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-rational.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-stdlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-assert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-fstream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-iostream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-iterator.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-libcfa-prelude.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-limits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-math.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-rational.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-stdlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/CtxSwitch-@MACHINE_TYPE@.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-invoke.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-threads.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-invoke.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-threads.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-vector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_d_a-vector.Po@am__quote@
+
+.S.o:
+@am__fastdepCCAS_TRUE@	$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $<
+
+.S.obj:
+@am__fastdepCCAS_TRUE@	$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCCAS_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .c.o:
@@ -349,22 +453,312 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-install-cfalibDATA: $(cfalib_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(cfalibdir)" || $(MKDIR_P) "$(DESTDIR)$(cfalibdir)"
-	@list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cfalibdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(cfalibdir)" || exit $$?; \
-	done
-
-uninstall-cfalibDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(cfalibdir)'; $(am__uninstall_files_from_dir)
+
+libcfa_d_a-libcfa-prelude.obj: libcfa-prelude.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-libcfa-prelude.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-libcfa-prelude.Tpo -c -o libcfa_d_a-libcfa-prelude.obj `if test -f 'libcfa-prelude.c'; then $(CYGPATH_W) 'libcfa-prelude.c'; else $(CYGPATH_W) '$(srcdir)/libcfa-prelude.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-libcfa-prelude.Tpo $(DEPDIR)/libcfa_d_a-libcfa-prelude.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libcfa-prelude.c' object='libcfa_d_a-libcfa-prelude.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-libcfa-prelude.obj `if test -f 'libcfa-prelude.c'; then $(CYGPATH_W) 'libcfa-prelude.c'; else $(CYGPATH_W) '$(srcdir)/libcfa-prelude.c'; fi`
+
+libcfa_d_a-limits.o: limits.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-limits.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-limits.Tpo -c -o libcfa_d_a-limits.o `test -f 'limits.c' || echo '$(srcdir)/'`limits.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-limits.Tpo $(DEPDIR)/libcfa_d_a-limits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='limits.c' object='libcfa_d_a-limits.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-limits.o `test -f 'limits.c' || echo '$(srcdir)/'`limits.c
+
+libcfa_d_a-limits.obj: limits.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-limits.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-limits.Tpo -c -o libcfa_d_a-limits.obj `if test -f 'limits.c'; then $(CYGPATH_W) 'limits.c'; else $(CYGPATH_W) '$(srcdir)/limits.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-limits.Tpo $(DEPDIR)/libcfa_d_a-limits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='limits.c' object='libcfa_d_a-limits.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-limits.obj `if test -f 'limits.c'; then $(CYGPATH_W) 'limits.c'; else $(CYGPATH_W) '$(srcdir)/limits.c'; fi`
+
+libcfa_d_a-stdlib.o: stdlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-stdlib.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-stdlib.Tpo -c -o libcfa_d_a-stdlib.o `test -f 'stdlib.c' || echo '$(srcdir)/'`stdlib.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-stdlib.Tpo $(DEPDIR)/libcfa_d_a-stdlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='stdlib.c' object='libcfa_d_a-stdlib.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-stdlib.o `test -f 'stdlib.c' || echo '$(srcdir)/'`stdlib.c
+
+libcfa_d_a-stdlib.obj: stdlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-stdlib.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-stdlib.Tpo -c -o libcfa_d_a-stdlib.obj `if test -f 'stdlib.c'; then $(CYGPATH_W) 'stdlib.c'; else $(CYGPATH_W) '$(srcdir)/stdlib.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-stdlib.Tpo $(DEPDIR)/libcfa_d_a-stdlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='stdlib.c' object='libcfa_d_a-stdlib.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-stdlib.obj `if test -f 'stdlib.c'; then $(CYGPATH_W) 'stdlib.c'; else $(CYGPATH_W) '$(srcdir)/stdlib.c'; fi`
+
+libcfa_d_a-math.o: math.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-math.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-math.Tpo -c -o libcfa_d_a-math.o `test -f 'math.c' || echo '$(srcdir)/'`math.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-math.Tpo $(DEPDIR)/libcfa_d_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='math.c' object='libcfa_d_a-math.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-math.o `test -f 'math.c' || echo '$(srcdir)/'`math.c
+
+libcfa_d_a-math.obj: math.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-math.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-math.Tpo -c -o libcfa_d_a-math.obj `if test -f 'math.c'; then $(CYGPATH_W) 'math.c'; else $(CYGPATH_W) '$(srcdir)/math.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-math.Tpo $(DEPDIR)/libcfa_d_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='math.c' object='libcfa_d_a-math.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-math.obj `if test -f 'math.c'; then $(CYGPATH_W) 'math.c'; else $(CYGPATH_W) '$(srcdir)/math.c'; fi`
+
+libcfa_d_a-iostream.o: iostream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-iostream.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-iostream.Tpo -c -o libcfa_d_a-iostream.o `test -f 'iostream.c' || echo '$(srcdir)/'`iostream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-iostream.Tpo $(DEPDIR)/libcfa_d_a-iostream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iostream.c' object='libcfa_d_a-iostream.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-iostream.o `test -f 'iostream.c' || echo '$(srcdir)/'`iostream.c
+
+libcfa_d_a-iostream.obj: iostream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-iostream.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-iostream.Tpo -c -o libcfa_d_a-iostream.obj `if test -f 'iostream.c'; then $(CYGPATH_W) 'iostream.c'; else $(CYGPATH_W) '$(srcdir)/iostream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-iostream.Tpo $(DEPDIR)/libcfa_d_a-iostream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iostream.c' object='libcfa_d_a-iostream.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-iostream.obj `if test -f 'iostream.c'; then $(CYGPATH_W) 'iostream.c'; else $(CYGPATH_W) '$(srcdir)/iostream.c'; fi`
+
+libcfa_d_a-fstream.o: fstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-fstream.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-fstream.Tpo -c -o libcfa_d_a-fstream.o `test -f 'fstream.c' || echo '$(srcdir)/'`fstream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-fstream.Tpo $(DEPDIR)/libcfa_d_a-fstream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fstream.c' object='libcfa_d_a-fstream.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-fstream.o `test -f 'fstream.c' || echo '$(srcdir)/'`fstream.c
+
+libcfa_d_a-fstream.obj: fstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-fstream.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-fstream.Tpo -c -o libcfa_d_a-fstream.obj `if test -f 'fstream.c'; then $(CYGPATH_W) 'fstream.c'; else $(CYGPATH_W) '$(srcdir)/fstream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-fstream.Tpo $(DEPDIR)/libcfa_d_a-fstream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fstream.c' object='libcfa_d_a-fstream.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-fstream.obj `if test -f 'fstream.c'; then $(CYGPATH_W) 'fstream.c'; else $(CYGPATH_W) '$(srcdir)/fstream.c'; fi`
+
+libcfa_d_a-iterator.o: iterator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-iterator.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-iterator.Tpo -c -o libcfa_d_a-iterator.o `test -f 'iterator.c' || echo '$(srcdir)/'`iterator.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-iterator.Tpo $(DEPDIR)/libcfa_d_a-iterator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iterator.c' object='libcfa_d_a-iterator.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-iterator.o `test -f 'iterator.c' || echo '$(srcdir)/'`iterator.c
+
+libcfa_d_a-iterator.obj: iterator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-iterator.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-iterator.Tpo -c -o libcfa_d_a-iterator.obj `if test -f 'iterator.c'; then $(CYGPATH_W) 'iterator.c'; else $(CYGPATH_W) '$(srcdir)/iterator.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-iterator.Tpo $(DEPDIR)/libcfa_d_a-iterator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iterator.c' object='libcfa_d_a-iterator.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-iterator.obj `if test -f 'iterator.c'; then $(CYGPATH_W) 'iterator.c'; else $(CYGPATH_W) '$(srcdir)/iterator.c'; fi`
+
+libcfa_d_a-rational.o: rational.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-rational.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-rational.Tpo -c -o libcfa_d_a-rational.o `test -f 'rational.c' || echo '$(srcdir)/'`rational.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-rational.Tpo $(DEPDIR)/libcfa_d_a-rational.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rational.c' object='libcfa_d_a-rational.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-rational.o `test -f 'rational.c' || echo '$(srcdir)/'`rational.c
+
+libcfa_d_a-rational.obj: rational.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-rational.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-rational.Tpo -c -o libcfa_d_a-rational.obj `if test -f 'rational.c'; then $(CYGPATH_W) 'rational.c'; else $(CYGPATH_W) '$(srcdir)/rational.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-rational.Tpo $(DEPDIR)/libcfa_d_a-rational.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rational.c' object='libcfa_d_a-rational.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-rational.obj `if test -f 'rational.c'; then $(CYGPATH_W) 'rational.c'; else $(CYGPATH_W) '$(srcdir)/rational.c'; fi`
+
+libcfa_d_a-assert.o: assert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-assert.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-assert.Tpo -c -o libcfa_d_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-assert.Tpo $(DEPDIR)/libcfa_d_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='assert.c' object='libcfa_d_a-assert.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c
+
+libcfa_d_a-assert.obj: assert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-assert.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-assert.Tpo -c -o libcfa_d_a-assert.obj `if test -f 'assert.c'; then $(CYGPATH_W) 'assert.c'; else $(CYGPATH_W) '$(srcdir)/assert.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-assert.Tpo $(DEPDIR)/libcfa_d_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='assert.c' object='libcfa_d_a-assert.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-assert.obj `if test -f 'assert.c'; then $(CYGPATH_W) 'assert.c'; else $(CYGPATH_W) '$(srcdir)/assert.c'; fi`
+
+containers/libcfa_d_a-vector.o: containers/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT containers/libcfa_d_a-vector.o -MD -MP -MF containers/$(DEPDIR)/libcfa_d_a-vector.Tpo -c -o containers/libcfa_d_a-vector.o `test -f 'containers/vector.c' || echo '$(srcdir)/'`containers/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) containers/$(DEPDIR)/libcfa_d_a-vector.Tpo containers/$(DEPDIR)/libcfa_d_a-vector.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='containers/vector.c' object='containers/libcfa_d_a-vector.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o containers/libcfa_d_a-vector.o `test -f 'containers/vector.c' || echo '$(srcdir)/'`containers/vector.c
+
+containers/libcfa_d_a-vector.obj: containers/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT containers/libcfa_d_a-vector.obj -MD -MP -MF containers/$(DEPDIR)/libcfa_d_a-vector.Tpo -c -o containers/libcfa_d_a-vector.obj `if test -f 'containers/vector.c'; then $(CYGPATH_W) 'containers/vector.c'; else $(CYGPATH_W) '$(srcdir)/containers/vector.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) containers/$(DEPDIR)/libcfa_d_a-vector.Tpo containers/$(DEPDIR)/libcfa_d_a-vector.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='containers/vector.c' object='containers/libcfa_d_a-vector.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o containers/libcfa_d_a-vector.obj `if test -f 'containers/vector.c'; then $(CYGPATH_W) 'containers/vector.c'; else $(CYGPATH_W) '$(srcdir)/containers/vector.c'; fi`
+
+concurrency/libcfa_d_a-threads.o: concurrency/threads.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-threads.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo -c -o concurrency/libcfa_d_a-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_d_a-threads.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_d_a-threads.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
+
+concurrency/libcfa_d_a-threads.obj: concurrency/threads.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-threads.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo -c -o concurrency/libcfa_d_a-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_d_a-threads.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_d_a-threads.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
+
+concurrency/libcfa_d_a-invoke.obj: concurrency/invoke.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-invoke.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-invoke.Tpo -c -o concurrency/libcfa_d_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-invoke.Tpo concurrency/$(DEPDIR)/libcfa_d_a-invoke.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/invoke.c' object='concurrency/libcfa_d_a-invoke.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
+
+libcfa_a-libcfa-prelude.obj: libcfa-prelude.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-libcfa-prelude.obj -MD -MP -MF $(DEPDIR)/libcfa_a-libcfa-prelude.Tpo -c -o libcfa_a-libcfa-prelude.obj `if test -f 'libcfa-prelude.c'; then $(CYGPATH_W) 'libcfa-prelude.c'; else $(CYGPATH_W) '$(srcdir)/libcfa-prelude.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-libcfa-prelude.Tpo $(DEPDIR)/libcfa_a-libcfa-prelude.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libcfa-prelude.c' object='libcfa_a-libcfa-prelude.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-libcfa-prelude.obj `if test -f 'libcfa-prelude.c'; then $(CYGPATH_W) 'libcfa-prelude.c'; else $(CYGPATH_W) '$(srcdir)/libcfa-prelude.c'; fi`
+
+libcfa_a-limits.o: limits.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-limits.o -MD -MP -MF $(DEPDIR)/libcfa_a-limits.Tpo -c -o libcfa_a-limits.o `test -f 'limits.c' || echo '$(srcdir)/'`limits.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-limits.Tpo $(DEPDIR)/libcfa_a-limits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='limits.c' object='libcfa_a-limits.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-limits.o `test -f 'limits.c' || echo '$(srcdir)/'`limits.c
+
+libcfa_a-limits.obj: limits.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-limits.obj -MD -MP -MF $(DEPDIR)/libcfa_a-limits.Tpo -c -o libcfa_a-limits.obj `if test -f 'limits.c'; then $(CYGPATH_W) 'limits.c'; else $(CYGPATH_W) '$(srcdir)/limits.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-limits.Tpo $(DEPDIR)/libcfa_a-limits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='limits.c' object='libcfa_a-limits.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-limits.obj `if test -f 'limits.c'; then $(CYGPATH_W) 'limits.c'; else $(CYGPATH_W) '$(srcdir)/limits.c'; fi`
+
+libcfa_a-stdlib.o: stdlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-stdlib.o -MD -MP -MF $(DEPDIR)/libcfa_a-stdlib.Tpo -c -o libcfa_a-stdlib.o `test -f 'stdlib.c' || echo '$(srcdir)/'`stdlib.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-stdlib.Tpo $(DEPDIR)/libcfa_a-stdlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='stdlib.c' object='libcfa_a-stdlib.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-stdlib.o `test -f 'stdlib.c' || echo '$(srcdir)/'`stdlib.c
+
+libcfa_a-stdlib.obj: stdlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-stdlib.obj -MD -MP -MF $(DEPDIR)/libcfa_a-stdlib.Tpo -c -o libcfa_a-stdlib.obj `if test -f 'stdlib.c'; then $(CYGPATH_W) 'stdlib.c'; else $(CYGPATH_W) '$(srcdir)/stdlib.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-stdlib.Tpo $(DEPDIR)/libcfa_a-stdlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='stdlib.c' object='libcfa_a-stdlib.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-stdlib.obj `if test -f 'stdlib.c'; then $(CYGPATH_W) 'stdlib.c'; else $(CYGPATH_W) '$(srcdir)/stdlib.c'; fi`
+
+libcfa_a-math.o: math.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-math.o -MD -MP -MF $(DEPDIR)/libcfa_a-math.Tpo -c -o libcfa_a-math.o `test -f 'math.c' || echo '$(srcdir)/'`math.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-math.Tpo $(DEPDIR)/libcfa_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='math.c' object='libcfa_a-math.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-math.o `test -f 'math.c' || echo '$(srcdir)/'`math.c
+
+libcfa_a-math.obj: math.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-math.obj -MD -MP -MF $(DEPDIR)/libcfa_a-math.Tpo -c -o libcfa_a-math.obj `if test -f 'math.c'; then $(CYGPATH_W) 'math.c'; else $(CYGPATH_W) '$(srcdir)/math.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-math.Tpo $(DEPDIR)/libcfa_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='math.c' object='libcfa_a-math.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-math.obj `if test -f 'math.c'; then $(CYGPATH_W) 'math.c'; else $(CYGPATH_W) '$(srcdir)/math.c'; fi`
+
+libcfa_a-iostream.o: iostream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-iostream.o -MD -MP -MF $(DEPDIR)/libcfa_a-iostream.Tpo -c -o libcfa_a-iostream.o `test -f 'iostream.c' || echo '$(srcdir)/'`iostream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-iostream.Tpo $(DEPDIR)/libcfa_a-iostream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iostream.c' object='libcfa_a-iostream.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-iostream.o `test -f 'iostream.c' || echo '$(srcdir)/'`iostream.c
+
+libcfa_a-iostream.obj: iostream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-iostream.obj -MD -MP -MF $(DEPDIR)/libcfa_a-iostream.Tpo -c -o libcfa_a-iostream.obj `if test -f 'iostream.c'; then $(CYGPATH_W) 'iostream.c'; else $(CYGPATH_W) '$(srcdir)/iostream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-iostream.Tpo $(DEPDIR)/libcfa_a-iostream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iostream.c' object='libcfa_a-iostream.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-iostream.obj `if test -f 'iostream.c'; then $(CYGPATH_W) 'iostream.c'; else $(CYGPATH_W) '$(srcdir)/iostream.c'; fi`
+
+libcfa_a-fstream.o: fstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-fstream.o -MD -MP -MF $(DEPDIR)/libcfa_a-fstream.Tpo -c -o libcfa_a-fstream.o `test -f 'fstream.c' || echo '$(srcdir)/'`fstream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-fstream.Tpo $(DEPDIR)/libcfa_a-fstream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fstream.c' object='libcfa_a-fstream.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-fstream.o `test -f 'fstream.c' || echo '$(srcdir)/'`fstream.c
+
+libcfa_a-fstream.obj: fstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-fstream.obj -MD -MP -MF $(DEPDIR)/libcfa_a-fstream.Tpo -c -o libcfa_a-fstream.obj `if test -f 'fstream.c'; then $(CYGPATH_W) 'fstream.c'; else $(CYGPATH_W) '$(srcdir)/fstream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-fstream.Tpo $(DEPDIR)/libcfa_a-fstream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fstream.c' object='libcfa_a-fstream.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-fstream.obj `if test -f 'fstream.c'; then $(CYGPATH_W) 'fstream.c'; else $(CYGPATH_W) '$(srcdir)/fstream.c'; fi`
+
+libcfa_a-iterator.o: iterator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-iterator.o -MD -MP -MF $(DEPDIR)/libcfa_a-iterator.Tpo -c -o libcfa_a-iterator.o `test -f 'iterator.c' || echo '$(srcdir)/'`iterator.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-iterator.Tpo $(DEPDIR)/libcfa_a-iterator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iterator.c' object='libcfa_a-iterator.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-iterator.o `test -f 'iterator.c' || echo '$(srcdir)/'`iterator.c
+
+libcfa_a-iterator.obj: iterator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-iterator.obj -MD -MP -MF $(DEPDIR)/libcfa_a-iterator.Tpo -c -o libcfa_a-iterator.obj `if test -f 'iterator.c'; then $(CYGPATH_W) 'iterator.c'; else $(CYGPATH_W) '$(srcdir)/iterator.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-iterator.Tpo $(DEPDIR)/libcfa_a-iterator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iterator.c' object='libcfa_a-iterator.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-iterator.obj `if test -f 'iterator.c'; then $(CYGPATH_W) 'iterator.c'; else $(CYGPATH_W) '$(srcdir)/iterator.c'; fi`
+
+libcfa_a-rational.o: rational.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-rational.o -MD -MP -MF $(DEPDIR)/libcfa_a-rational.Tpo -c -o libcfa_a-rational.o `test -f 'rational.c' || echo '$(srcdir)/'`rational.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-rational.Tpo $(DEPDIR)/libcfa_a-rational.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rational.c' object='libcfa_a-rational.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-rational.o `test -f 'rational.c' || echo '$(srcdir)/'`rational.c
+
+libcfa_a-rational.obj: rational.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-rational.obj -MD -MP -MF $(DEPDIR)/libcfa_a-rational.Tpo -c -o libcfa_a-rational.obj `if test -f 'rational.c'; then $(CYGPATH_W) 'rational.c'; else $(CYGPATH_W) '$(srcdir)/rational.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-rational.Tpo $(DEPDIR)/libcfa_a-rational.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rational.c' object='libcfa_a-rational.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-rational.obj `if test -f 'rational.c'; then $(CYGPATH_W) 'rational.c'; else $(CYGPATH_W) '$(srcdir)/rational.c'; fi`
+
+libcfa_a-assert.o: assert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-assert.o -MD -MP -MF $(DEPDIR)/libcfa_a-assert.Tpo -c -o libcfa_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-assert.Tpo $(DEPDIR)/libcfa_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='assert.c' object='libcfa_a-assert.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c
+
+libcfa_a-assert.obj: assert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-assert.obj -MD -MP -MF $(DEPDIR)/libcfa_a-assert.Tpo -c -o libcfa_a-assert.obj `if test -f 'assert.c'; then $(CYGPATH_W) 'assert.c'; else $(CYGPATH_W) '$(srcdir)/assert.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-assert.Tpo $(DEPDIR)/libcfa_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='assert.c' object='libcfa_a-assert.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-assert.obj `if test -f 'assert.c'; then $(CYGPATH_W) 'assert.c'; else $(CYGPATH_W) '$(srcdir)/assert.c'; fi`
+
+containers/libcfa_a-vector.o: containers/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT containers/libcfa_a-vector.o -MD -MP -MF containers/$(DEPDIR)/libcfa_a-vector.Tpo -c -o containers/libcfa_a-vector.o `test -f 'containers/vector.c' || echo '$(srcdir)/'`containers/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) containers/$(DEPDIR)/libcfa_a-vector.Tpo containers/$(DEPDIR)/libcfa_a-vector.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='containers/vector.c' object='containers/libcfa_a-vector.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o containers/libcfa_a-vector.o `test -f 'containers/vector.c' || echo '$(srcdir)/'`containers/vector.c
+
+containers/libcfa_a-vector.obj: containers/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT containers/libcfa_a-vector.obj -MD -MP -MF containers/$(DEPDIR)/libcfa_a-vector.Tpo -c -o containers/libcfa_a-vector.obj `if test -f 'containers/vector.c'; then $(CYGPATH_W) 'containers/vector.c'; else $(CYGPATH_W) '$(srcdir)/containers/vector.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) containers/$(DEPDIR)/libcfa_a-vector.Tpo containers/$(DEPDIR)/libcfa_a-vector.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='containers/vector.c' object='containers/libcfa_a-vector.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o containers/libcfa_a-vector.obj `if test -f 'containers/vector.c'; then $(CYGPATH_W) 'containers/vector.c'; else $(CYGPATH_W) '$(srcdir)/containers/vector.c'; fi`
+
+concurrency/libcfa_a-threads.o: concurrency/threads.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-threads.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-threads.Tpo -c -o concurrency/libcfa_a-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_a-threads.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_a-threads.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-threads.o `test -f 'concurrency/threads.c' || echo '$(srcdir)/'`concurrency/threads.c
+
+concurrency/libcfa_a-threads.obj: concurrency/threads.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-threads.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-threads.Tpo -c -o concurrency/libcfa_a-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-threads.Tpo concurrency/$(DEPDIR)/libcfa_a-threads.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/threads.c' object='concurrency/libcfa_a-threads.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-threads.obj `if test -f 'concurrency/threads.c'; then $(CYGPATH_W) 'concurrency/threads.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/threads.c'; fi`
+
+concurrency/libcfa_a-invoke.obj: concurrency/invoke.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-invoke.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-invoke.Tpo -c -o concurrency/libcfa_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-invoke.Tpo concurrency/$(DEPDIR)/libcfa_a-invoke.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/invoke.c' object='concurrency/libcfa_a-invoke.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi`
 install-nobase_includeHEADERS: $(nobase_include_HEADERS)
 	@$(NORMAL_INSTALL)
@@ -473,7 +867,7 @@
 check-am: all-am
 check: check-am
-all-am: Makefile $(LIBRARIES) $(DATA) $(HEADERS)
+all-am: Makefile $(LIBRARIES) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cfalibdir)" "$(DESTDIR)$(includedir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
@@ -505,4 +899,6 @@
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f concurrency/$(DEPDIR)/$(am__dirstamp)
+	-rm -f concurrency/$(am__dirstamp)
 	-rm -f containers/$(DEPDIR)/$(am__dirstamp)
 	-rm -f containers/$(am__dirstamp)
@@ -511,5 +907,4 @@
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-am
 
@@ -517,5 +912,5 @@
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR) containers/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) concurrency/$(DEPDIR) containers/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
@@ -534,5 +929,5 @@
 info-am:
 
-install-data-am: install-cfalibDATA install-nobase_includeHEADERS
+install-data-am: install-nobase_includeHEADERS
 
 install-dvi: install-dvi-am
@@ -563,5 +958,5 @@
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR) containers/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) concurrency/$(DEPDIR) containers/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic \
@@ -580,6 +975,5 @@
 ps-am:
 
-uninstall-am: uninstall-cfalibDATA uninstall-libLIBRARIES \
-	uninstall-nobase_includeHEADERS
+uninstall-am: uninstall-libLIBRARIES uninstall-nobase_includeHEADERS
 
 .MAKE: install-am install-strip
@@ -588,8 +982,8 @@
 	clean-libLIBRARIES ctags distclean distclean-compile \
 	distclean-generic distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-cfalibDATA \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-libLIBRARIES install-man \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-libLIBRARIES install-man \
 	install-nobase_includeHEADERS install-pdf install-pdf-am \
 	install-ps install-ps-am install-strip installcheck \
@@ -597,34 +991,13 @@
 	maintainer-clean-generic maintainer-clean-local mostlyclean \
 	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-cfalibDATA \
-	uninstall-libLIBRARIES uninstall-nobase_includeHEADERS
-
-
-# create extra forward types/declarations to reduce inclusion of library files
-extras.cf : extras.regx extras.c
-	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
-
-# create forward declarations for gcc builtins
-builtins.cf : builtins.c
-	${AM_V_GEN}if [ -e $< ] ; then \
-		@BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
-	fi
-
-builtins.c : builtins.def prototypes.awk
-	${AM_V_GEN}if [ -e $< ] ; then \
-		@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
-	fi
-
-builtins.def :
-
-prototypes.awk :
-
-#--------------------------------------------------
-
-libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
-	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
-
-libcfa-prelude.o : libcfa-prelude.c
-	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
+	tags uninstall uninstall-am uninstall-libLIBRARIES \
+	uninstall-nobase_includeHEADERS
+
+
+libcfa_a-libcfa-prelude.o : libcfa-prelude.c
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -O2 -c -o $@ $<
+
+libcfa_d_a-libcfa-prelude.o : libcfa-prelude.c
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -D__CFA_DEBUG__ -O0 -c -o $@ $<
 
 # extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing
@@ -632,4 +1005,10 @@
 	@true
 
+concurrency/libcfa_a-invoke.o : concurrency/invoke.c
+	${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<
+
+concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c
+	${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<
+
 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
 
Index: src/libcfa/assert
===================================================================
--- src/libcfa/assert	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/assert	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,44 @@
+//
+// 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.
+//
+// assert --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+#ifndef __ASSERT_H__
+#define __ASSERT_H__
+
+#ifdef __CFORALL__
+extern "C" {
+#endif //__CFORALL__
+
+	#include <assert.h>
+
+	#ifdef NDEBUG
+		#define assertf(expr, fmt, ...) ((void)0)
+	#else
+		#define __STRINGIFY__(str) #str
+		#define __VSTRINGIFY__(str) __STRINGIFY__(str)
+		#define assertf(expr, fmt, ...) ((expr) ? ((void)0) : __assert_fail_f(__VSTRINGIFY__(expr), __FILE__, __LINE__, __PRETTY_FUNCTION__, fmt, ## __VA_ARGS__ ))
+
+		void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) __attribute__((noreturn));
+	#endif
+	
+#ifdef __CFORALL__
+} // extern "C"
+#endif //__CFORALL__
+
+#endif // __ASSERT_H__
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: src/libcfa/assert.c
===================================================================
--- src/libcfa/assert.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/assert.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,49 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// assert.c --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+#include "assert"
+#include "stdlib"										// abort
+
+extern "C" {
+	#include <stdarg.h>								// varargs
+	#include <stdio.h>								// fprintf
+
+	extern const char * __progname;						// global name of running executable (argv[0])
+
+	#define CFA_ASSERT_FMT "*CFA assertion error* from program \"%s\" in \"%s\" at line %d in file \"%s\""
+
+	// called by macro assert in assert.h
+	void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) {
+		fprintf( stderr, CFA_ASSERT_FMT ".\n", __progname, function, line, file );
+		abort();
+	}
+
+	// called by macro assertf
+	void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) {
+		fprintf( stderr, CFA_ASSERT_FMT ": ", __progname, function, line, file );
+		va_list args;
+		va_start( args, fmt );
+		vfprintf( stderr, fmt, args );
+		va_end( args );
+		fprintf( stderr, "\n" );
+		abort();
+	}
+
+}
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: c/libcfa/builtins.c
===================================================================
--- src/libcfa/builtins.c	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,217 +1,0 @@
-#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)
-#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);
-#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)
-
-#define BT_UINTMAX unsigned long int
-#define BT_UINT16 short int
-#define BT_UINT32 int
-#define BT_UINT64 long long int
-#define BT_UINT unsigned int
-#define BT_INTMAX long int
-#define BT_INTPTR int *
-#define BT_WINT unsigned int
-#define BT_INT int
-#define BT_ULONGLONG unsigned long long
-#define BT_ULONG unsigned long
-#define BT_UNSIGNED unsigned
-#define BT_COMPLEX_LONGDOUBLE _Complex long double
-#define BT_COMPLEX_DOUBLE _Complex double
-#define BT_COMPLEX_FLOAT _Complex float
-#define BT_LONGDOUBLEPTR long double *
-#define BT_LONGDOUBLE long double
-#define BT_LONGLONG long long
-#define BT_LONG long
-#define BT_DFLOAT32 _Decimal32
-#define BT_DFLOAT64 _Decimal64
-#define BT_DFLOAT128 _Decimal128
-#define BT_DOUBLEPTR double *
-#define BT_DOUBLE double
-#define BT_FLOATPTR float *
-#define BT_FLOAT float
-#define BT_CONST_PTR const void *
-#define BT_CONST_STRING const char *
-#define BT_PTR_FN_VOID_VAR_PTR_SIZE 
-#define BT_PTR_CONST_STRING char *const
-#define BT_PTRMODE_PTR 
-#define BT_PTRPTR void **
-#define BT_PTR void *
-#define BT_VOID void
-#define BT_STRING char *
-#define BT_FILEPTR struct _IO_FILE *
-#define BT_SIZE unsigned long
-#define BT_VAR ...
-#define BT_VALIST_ARG __builtin_va_list
-#define BT_VALIST_REF __builtin_va_list
-#define BT_UNWINDWORD void *
-#define BT_WORD 
-#define BT_SSIZE long int
-#define BT_PID int
-
-#define BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_LONGDOUBLE, NAME, BT_LONGDOUBLE)
-#define BT_FN_INT_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_VOID_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR)
-#define BT_FN_INT_CONST_PTR_CONST_PTR_SIZE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
-#define BT_FN_VOID_VALIST_REF(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_VALIST_REF)
-#define BT_FN_FLOAT_COMPLEX_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_COMPLEX_FLOAT)
-#define BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VAR)
-#define BT_FN_VOID_PTR_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_PTR)
-#define BT_FN_FLOAT_FLOAT_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_LONGDOUBLE)
-#define BT_FN_INT_UINT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_UINT)
-#define BT_FN_CONST_STRING(NAME) FUNC_SIMPLE(BT_CONST_STRING, NAME)
-#define BT_FN_FLOAT_FLOAT_FLOATPTR(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOATPTR)
-#define BT_FN_INT_INT_INT_INT_INT_INT_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_INT, BT_INT, BT_INT, BT_INT, BT_VAR)
-#define BT_FN_INT_INT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT)
-#define BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_INT_LONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_LONG)
-#define BT_FN_INT_STRING_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VAR)
-#define BT_FN_VOID_PTR_WORD_WORD_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_WORD, BT_WORD, BT_PTR)
-#define BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_CONST_PTR)
-#define BT_FN_INT_DFLOAT128(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DFLOAT128)
-#define BT_FN_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE)
-#define BT_FN_FLOAT_CONST_STRING(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_CONST_STRING)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_INT(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_INT)
-#define BT_FN_FLOAT_FLOAT_INT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_INT)
-#define BT_FN_INT_CONST_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING)
-#define BT_FN_INT_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_LONGDOUBLE)
-#define BT_FN_SIZE_CONST_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_STRING, BT_CONST_STRING)
-#define BT_FN_VOID_PTR_SIZE(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_SIZE)
-#define BT_FN_INT_CONST_STRING_PTR_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_PTR_CONST_STRING)
-#define BT_FN_DFLOAT64(NAME) FUNC_SIMPLE(BT_DFLOAT64, NAME)
-#define BT_FN_INT_UINTMAX(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_UINTMAX)
-#define BT_FN_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME)
-#define BT_FN_INT(NAME) FUNC_SIMPLE(BT_INT, NAME)
-#define BT_FN_FLOAT_FLOAT_FLOAT_INTPTR(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOAT, BT_INTPTR)
-#define BT_FN_DOUBLE_DOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_LONGDOUBLE)
-#define BT_FN_PTR_CONST_PTR_SIZE_VAR(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_CONST_PTR, BT_SIZE, BT_VAR)
-#define BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT(NAME) FUNC_SIMPLE(BT_COMPLEX_FLOAT, NAME, BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
-#define BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_COMPLEX_LONGDOUBLE)
-#define BT_FN_STRING_CONST_STRING_CONST_STRING_INT(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONG(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONG)
-#define BT_FN_COMPLEX_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_DOUBLE, NAME, BT_DOUBLE)
-#define BT_FN_VOID(NAME) FUNC_SIMPLE(BT_VOID, NAME)
-#define BT_FN_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT)
-#define BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_FLOAT, BT_FLOATPTR, BT_FLOATPTR)
-#define BT_FN_INT_DFLOAT64(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DFLOAT64)
-#define BT_FN_FLOAT_FLOAT_INTPTR(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_INTPTR)
-#define BT_FN_WINT_WINT(NAME) FUNC_SIMPLE(BT_WINT, NAME, BT_WINT)
-#define BT_FN_LONGLONG_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_LONGDOUBLE)
-#define BT_FN_DOUBLE_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLE)
-#define BT_FN_DFLOAT64_CONST_STRING(NAME) FUNC_SIMPLE(BT_DFLOAT64, NAME, BT_CONST_STRING)
-#define BT_FN_DOUBLE_DOUBLE_INT(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_INT)
-#define BT_FN_INTMAX_INTMAX(NAME) FUNC_SIMPLE(BT_INTMAX, NAME, BT_INTMAX)
-#define BT_FN_INT_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_VAR)
-#define BT_FN_LONG_LONG_LONG(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_LONG, BT_LONG)
-#define BT_FN_DOUBLE_DOUBLE_LONG(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_LONG)
-#define BT_FN_LONG_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_LONGDOUBLE)
-#define BT_FN_FLOAT_FLOAT_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOAT, BT_FLOAT)
-#define BT_FN_VOID_VALIST_REF_VAR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_VALIST_REF, BT_VAR)
-#define BT_FN_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING)
-#define BT_FN_VOID_VALIST_REF_VALIST_ARG(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_VALIST_REF, BT_VALIST_ARG)
-#define BT_FN_LONGDOUBLE_CONST_STRING(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_CONST_STRING)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_INTPTR)
-#define BT_FN_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_SIZE)
-#define BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
-#define BT_FN_STRING_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_STRING, BT_CONST_STRING)
-#define BT_FN_VOID_INT(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_INT)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLE)
-#define BT_FN_INT_ULONGLONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_ULONGLONG)
-#define BT_FN_INT_FILEPTR_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_CONST_STRING, BT_VAR)
-#define BT_FN_LONGLONG_DOUBLE(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_DOUBLE)
-#define BT_FN_INT_INT_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_CONST_STRING, BT_VAR)
-#define BT_FN_VOID_PTR_INT(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_INT)
-#define BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT(NAME) FUNC_SIMPLE(BT_COMPLEX_FLOAT, NAME, BT_COMPLEX_FLOAT)
-#define BT_FN_INT_WINT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_WINT)
-#define BT_FN_PTR_PTR_INT_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_INT, BT_SIZE)
-#define BT_FN_STRING_CONST_STRING_INT(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_INT)
-#define BT_FN_INT_FLOAT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FLOAT)
-#define BT_FN_DOUBLE_CONST_STRING(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_CONST_STRING)
-#define BT_FN_LONG_FLOAT(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_FLOAT)
-#define BT_FN_PTR_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_SIZE, BT_SIZE)
-#define BT_FN_STRING_STRING_CONST_STRING_SIZE(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_STRING, BT_CONST_STRING, BT_SIZE)
-#define BT_FN_LONGLONG_LONGLONG(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_LONGLONG)
-#define BT_FN_PTR_PTR(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR)
-#define BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_CONST_PTR, BT_SIZE, BT_SIZE)
-#define BT_FN_FLOAT_FLOAT_LONG(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_LONG)
-#define BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_LONGDOUBLE, NAME, BT_COMPLEX_LONGDOUBLE)
-#define BT_FN_PTR_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_SIZE)
-#define BT_FN_PTR_VAR(NAME) FUNC_SIMPLE(BT_PTR, NAME)
-#define BT_FN_SIZE_CONST_PTR_INT(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_PTR, BT_INT)
-#define BT_FN_INT_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING)
-#define BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_INT_STRING_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_DFLOAT32(NAME) FUNC_SIMPLE(BT_DFLOAT32, NAME)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_INTPTR)
-#define BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_STRING, BT_CONST_STRING, BT_SIZE, BT_SIZE)
-#define BT_FN_PTR_UINT(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_UINT)
-#define BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_DFLOAT128_CONST_STRING(NAME) FUNC_SIMPLE(BT_DFLOAT128, NAME, BT_CONST_STRING)
-#define BT_FN_DOUBLE_DOUBLE_DOUBLEPTR(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLEPTR)
-#define BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_SSIZE, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VAR)
-#define BT_FN_DFLOAT32_DFLOAT32(NAME) FUNC_SIMPLE(BT_DFLOAT32, NAME, BT_DFLOAT32)
-#define BT_FN_INT_PTR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_PTR)
-#define BT_FN_UINT32_UINT32(NAME) FUNC_SIMPLE(BT_UINT32, NAME, BT_UINT32)
-#define BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR_FN_VOID_VAR_PTR_SIZE)
-#define BT_FN_INT_DOUBLE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DOUBLE)
-#define BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VAR)
-#define BT_FN_INT_ULONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_ULONG)
-#define BT_FN_DOUBLE_DOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_INTPTR)
-#define BT_FN_UINT64_UINT64(NAME) FUNC_SIMPLE(BT_UINT64, NAME, BT_UINT64)
-#define BT_FN_STRING_CONST_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_CONST_STRING)
-#define BT_FN_INT_INT_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_PTR_PTR_INT_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_INT, BT_SIZE, BT_SIZE)
-#define BT_FN_DOUBLE_COMPLEX_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_COMPLEX_DOUBLE)
-#define BT_FN_VOID_CONST_PTR_VAR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_CONST_PTR, BT_VAR)
-#define BT_FN_INT_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME)
-#define BT_FN_INT_PTRPTR_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_PTRPTR, BT_SIZE, BT_SIZE)
-#define BT_FN_INT_CONST_STRING_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_VAR)
-#define BT_FN_INT_DFLOAT32(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DFLOAT32)
-#define BT_FN_DFLOAT64_DFLOAT64(NAME) FUNC_SIMPLE(BT_DFLOAT64, NAME, BT_DFLOAT64)
-#define BT_FN_VOID_CONST_PTR_PTR_SIZE(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_CONST_PTR, BT_PTR, BT_SIZE)
-#define BT_FN_UNWINDWORD_PTR(NAME) FUNC_SIMPLE(BT_UNWINDWORD, NAME, BT_PTR)
-#define BT_FN_FLOAT_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOAT)
-#define BT_FN_COMPLEX_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_COMPLEX_FLOAT, NAME, BT_FLOAT)
-#define BT_FN_UINT(NAME) FUNC_SIMPLE(BT_UINT, NAME)
-#define BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLE, BT_INTPTR)
-#define BT_FN_UINT16_UINT16(NAME) FUNC_SIMPLE(BT_UINT16, NAME, BT_UINT16)
-#define BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE)
-#define BT_FN_LONG_LONG(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_LONG)
-#define BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
-#define BT_FN_FLOAT_INT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_INT, BT_FLOAT)
-#define BT_FN_PTR(NAME) FUNC_SIMPLE(BT_PTR, NAME)
-#define BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_FILEPTR)
-#define BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_DOUBLE, BT_DOUBLEPTR, BT_DOUBLEPTR)
-#define BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_DOUBLE, NAME, BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
-#define BT_FN_LONG_DOUBLE(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_DOUBLE)
-#define BT_FN_SIZE_CONST_STRING(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_STRING)
-#define BT_FN_LONGLONG_FLOAT(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_FLOAT)
-#define BT_FN_INT_CONST_STRING_CONST_STRING_SIZE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
-#define BT_FN_PTR_PTR_CONST_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_CONST_PTR, BT_SIZE)
-#define BT_FN_DFLOAT128(NAME) FUNC_SIMPLE(BT_DFLOAT128, NAME)
-#define BT_FN_PID(NAME) FUNC_SIMPLE(BT_PID, NAME)
-#define BT_FN_INT_CONST_STRING_FILEPTR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_FILEPTR)
-#define BT_FN_INT_LONGLONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_LONGLONG)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
-#define BT_FN_INT_INT_FILEPTR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_FILEPTR)
-#define BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_LONGDOUBLE, NAME, BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
-#define BT_FN_VOID_PTRMODE_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTRMODE_PTR)
-#define BT_FN_INT_STRING_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_CONST_STRING, BT_VAR)
-#define BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_DOUBLE, NAME, BT_COMPLEX_DOUBLE)
-#define BT_FN_DFLOAT32_CONST_STRING(NAME) FUNC_SIMPLE(BT_DFLOAT32, NAME, BT_CONST_STRING)
-#define BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_PTR_CONST_STRING, BT_PTR_CONST_STRING)
-#define BT_FN_STRING_CONST_STRING_SIZE(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_SIZE)
-#define BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_INT, BT_CONST_STRING, BT_VAR)
-#define BT_FN_DFLOAT128_DFLOAT128(NAME) FUNC_SIMPLE(BT_DFLOAT128, NAME, BT_DFLOAT128)
-#define BT_FN_DOUBLE_INT_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_INT, BT_DOUBLE)
-#define BT_FN_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME)
-#define BT_FN_LONGDOUBLE_INT_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_INT, BT_LONGDOUBLE)
-#define BT_FN_PTR_CONST_PTR_INT_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_CONST_PTR, BT_INT, BT_SIZE)
-#define BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_LONGDOUBLE, BT_LONGDOUBLEPTR, BT_LONGDOUBLEPTR)
-#define BT_FN_INT_INTMAX(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INTMAX)
-#define BT_FN_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME)
-#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLEPTR)
-
-#include "builtins.def"
-
-extern const char *__PRETTY_FUNCTION__;
Index: c/libcfa/builtins.def
===================================================================
--- src/libcfa/builtins.def	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,874 +1,0 @@
-/* This file contains the definitions and documentation for the
-   builtins used in the GNU compiler.
-   Copyright (C) 2000-2014 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-/* Before including this file, you should define a macro:
-
-     DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
-                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)
-
-   This macro will be called once for each builtin function.  The
-   ENUM will be of type `enum built_in_function', and will indicate
-   which builtin function is being processed.  The NAME of the builtin
-   function (which will always start with `__builtin_') is a string
-   literal.  The CLASS is of type `enum built_in_class' and indicates
-   what kind of builtin is being processed.
-
-   Some builtins are actually two separate functions.  For example,
-   for `strcmp' there are two builtin functions; `__builtin_strcmp'
-   and `strcmp' itself.  Both behave identically.  Other builtins
-   define only the `__builtin' variant.  If BOTH_P is TRUE, then this
-   builtin has both variants; otherwise, it is has only the first
-   variant.
-
-   TYPE indicates the type of the function.  The symbols correspond to
-   enumerals from builtin-types.def.  If BOTH_P is true, then LIBTYPE
-   is the type of the non-`__builtin_' variant.  Otherwise, LIBTYPE
-   should be ignored.
-
-   If FALLBACK_P is true then, if for some reason, the compiler cannot
-   expand the builtin function directly, it will call the
-   corresponding library function (which does not have the
-   `__builtin_' prefix.
-
-   If NONANSI_P is true, then the non-`__builtin_' variant is not an
-   ANSI/ISO library function, and so we should pretend it does not
-   exist when compiling in ANSI conformant mode.
-
-   ATTRs is an attribute list as defined in builtin-attrs.def that
-   describes the attributes of this builtin function.
-
-   IMPLICIT specifies condition when the builtin can be produced by
-   compiler.  For instance C90 reserves floorf function, but does not
-   define it's meaning.  When user uses floorf we may assume that the
-   floorf has the meaning we expect, but we can't produce floorf by
-   simplifying floor((double)float) since the runtime need not implement
-   it.
-
-   The builtins is registered only if COND is true.  */
-
-/* A GCC builtin (like __builtin_saveregs) is provided by the
-   compiler, but does not correspond to a function in the standard
-   library.  */
-#undef DEF_GCC_BUILTIN
-#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
-	       false, false, false, ATTRS, true, true)
-
-/* Like DEF_GCC_BUILTIN, except we don't prepend "__builtin_".  */
-#undef DEF_SYNC_BUILTIN
-#define DEF_SYNC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
-  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
-	       false, false, false, ATTRS, true, true)
-
-/* A library builtin (like __builtin_strchr) is a builtin equivalent
-   of an ANSI/ISO standard library function.  In addition to the
-   `__builtin' version, we will create an ordinary version (e.g,
-   `strchr') as well.  If we cannot compute the answer using the
-   builtin function, we will fall back to the standard library
-   version.  */
-#undef DEF_LIB_BUILTIN
-#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
-	       true, true, false, ATTRS, true, true)
-
-/* Like DEF_LIB_BUILTIN, except that the function is not one that is
-   specified by ANSI/ISO C.  So, when we're being fully conformant we
-   ignore the version of these builtins that does not begin with
-   __builtin.  */
-#undef DEF_EXT_LIB_BUILTIN
-#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
-	       true, true, true, ATTRS, false, true)
-
-/* Like DEF_LIB_BUILTIN, except that the function is only a part of
-   the standard in C94 or above.  */
-#undef DEF_C94_BUILTIN
-#define DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
-	       true, true, !flag_isoc94, ATTRS, targetm.libc_has_function (function_c94), true)
-
-/* Like DEF_LIB_BUILTIN, except that the function is only a part of
-   the standard in C99 or above.  */
-#undef DEF_C99_BUILTIN
-#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
-	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
-
-/* Like DEF_C99_BUILTIN, but for complex math functions.  */
-#undef DEF_C99_COMPL_BUILTIN
-#define DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
-	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_math_complex), true)
-
-/* Builtin that is specified by C99 and C90 reserve the name for future use.
-   We can still recognize the builtin in C90 mode but we can't produce it
-   implicitly.  */
-#undef DEF_C99_C90RES_BUILTIN
-#define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
-	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
-
-/* Builtin that C99 reserve the name for future use. We can still recognize
-   the builtin in C99 mode but we can't produce it implicitly.  */
-#undef DEF_EXT_C99RES_BUILTIN
-#define DEF_EXT_C99RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)        \
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,   \
-	      true, true, true, ATTRS, false, true)
-
-/* Allocate the enum and the name for a builtin, but do not actually
-   define it here at all.  */
-#undef DEF_BUILTIN_STUB
-#define DEF_BUILTIN_STUB(ENUM, NAME) \
-  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
-	       false, ATTR_LAST, false, false)
-
-/* Builtin used by the implementation of GNU OpenMP.  None of these are
-   actually implemented in the compiler; they're all in libgomp.  */
-#undef DEF_GOMP_BUILTIN
-#define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-               false, true, true, ATTRS, false, \
-	       (flag_openmp || flag_tree_parallelize_loops))
-
-/* Builtin used by implementation of Cilk Plus.  Most of these are decomposed
-   by the compiler but a few are implemented in libcilkrts.  */ 
-#undef DEF_CILK_BUILTIN_STUB
-#define DEF_CILK_BUILTIN_STUB(ENUM, NAME) \
-  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
-	       false, ATTR_LAST, false, false)
-
-/* Builtin used by the implementation of GNU TM.  These
-   functions are mapped to the actual implementation of the STM library. */
-#undef DEF_TM_BUILTIN
-#define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-	       true, true, true, ATTRS, false, flag_tm)
-
-/* Builtin used by the implementation of libsanitizer. These
-   functions are mapped to the actual implementation of the 
-   libtsan library. */
-#undef DEF_SANITIZER_BUILTIN
-#define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
-  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-	       true, true, true, ATTRS, true, \
-	      (flag_sanitize & (SANITIZE_ADDRESS | SANITIZE_THREAD \
-				| SANITIZE_UNDEFINED)))
-
-#undef DEF_CILKPLUS_BUILTIN
-#define DEF_CILKPLUS_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
-  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_FN_INT_VAR, BT_LAST, \
-  	       false, false, false, ATTRS, false, flag_cilkplus) 
-
-/* Define an attribute list for math functions that are normally
-   "impure" because some of them may write into global memory for
-   `errno'.  If !flag_errno_math they are instead "const".  */
-#undef ATTR_MATHFN_ERRNO
-#define ATTR_MATHFN_ERRNO (flag_errno_math ? \
-	ATTR_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
-
-/* Define an attribute list for math functions that are normally
-   "const" but if flag_rounding_math is set they are instead "pure".
-   This distinction accounts for the fact that some math functions
-   check the rounding mode which is akin to examining global
-   memory.  */
-#undef ATTR_MATHFN_FPROUNDING
-#define ATTR_MATHFN_FPROUNDING (flag_rounding_math ? \
-	ATTR_PURE_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
-
-/* Define an attribute list for math functions that are normally
-   "impure" because some of them may write into global memory for
-   `errno'.  If !flag_errno_math, we can possibly use "pure" or
-   "const" depending on whether we care about FP rounding.  */
-#undef ATTR_MATHFN_FPROUNDING_ERRNO
-#define ATTR_MATHFN_FPROUNDING_ERRNO (flag_errno_math ? \
-	ATTR_NOTHROW_LEAF_LIST : ATTR_MATHFN_FPROUNDING)
-
-/* Define an attribute list for math functions that need to mind FP
-   rounding, but because they store into memory they are never "const"
-   or "pure".  Use of this macro is mainly for documentation and
-   maintenance purposes.  */
-#undef ATTR_MATHFN_FPROUNDING_STORE
-#define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST
-
-/* Define an attribute list for leaf functions that do not throw
-   exceptions normally, but may throw exceptions when using
-   -fnon-call-exceptions.  */
-#define ATTR_NOTHROWCALL_LEAF_LIST (flag_non_call_exceptions ? \
-	ATTR_LEAF_LIST : ATTR_NOTHROW_LEAF_LIST)
-
-/* Make sure 0 is not a legitimate builtin.  */
-DEF_BUILTIN_STUB(BUILT_IN_NONE, (const char *)0)
-
-/* Category: math builtins.  */
-DEF_LIB_BUILTIN        (BUILT_IN_ACOS, "acos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSF, "acosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ACOSH, "acosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ACOSHF, "acoshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ACOSHL, "acoshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSL, "acosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_ASIN, "asin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINF, "asinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ASINH, "asinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_ASINHF, "asinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_ASINHL, "asinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINL, "asinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_ATAN, "atan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_ATAN2, "atan2", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2F, "atan2f", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2L, "atan2l", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANF, "atanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_ATANH, "atanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ATANHF, "atanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ATANHL, "atanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANL, "atanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_CBRT, "cbrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_CBRTF, "cbrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_CBRTL, "cbrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_CEIL, "ceil", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILF, "ceilf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILL, "ceill", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_COPYSIGN, "copysign", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNF, "copysignf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNL, "copysignl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_COS, "cos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_COSF, "cosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_COSH, "cosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHF, "coshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHL, "coshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_COSL, "cosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREM, "drem", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREMF, "dremf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREML, "dreml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ERF, "erf", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_ERFC, "erfc", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ERFCF, "erfcf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ERFCL, "erfcl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ERFF, "erff", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_ERFL, "erfl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_EXP, "exp", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10, "exp10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10F, "exp10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10L, "exp10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_EXP2, "exp2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_EXP2F, "exp2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_EXP2L, "exp2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPF, "expf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPL, "expl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_EXPM1, "expm1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_EXPM1F, "expm1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_EXPM1L, "expm1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_FABS, "fabs", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSF, "fabsf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSL, "fabsl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_FABSD32, "fabsd32", BT_FN_DFLOAT32_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_FABSD64, "fabsd64", BT_FN_DFLOAT64_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_FABSD128, "fabsd128", BT_FN_DFLOAT128_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FDIM, "fdim", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_FDIMF, "fdimf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_FDIML, "fdiml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_FLOOR, "floor", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORF, "floorf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORL, "floorl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FMA, "fma", BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_FMAF, "fmaf", BT_FN_FLOAT_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_FMAL, "fmal", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_FMAX, "fmax", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FMAXF, "fmaxf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FMAXL, "fmaxl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FMIN, "fmin", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FMINF, "fminf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_FMINL, "fminl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_FMOD, "fmod", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODF, "fmodf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODL, "fmodl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA_R, "gamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF_R, "gammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL_R, "gammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_HYPOT, "hypot", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_HYPOTF, "hypotf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_HYPOTL, "hypotl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_ICEIL, "iceil", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_ICEILF, "iceilf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_ICEILL, "iceill", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_IFLOOR, "ifloor", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_IFLOORF, "ifloorf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_IFLOORL, "ifloorl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_ILOGB, "ilogb", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ILOGBF, "ilogbf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ILOGBL, "ilogbl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_INF, "inf", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_INFF, "inff", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_INFL, "infl", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN	       (BUILT_IN_INFD32, "infd32", BT_FN_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_INFD64, "infd64", BT_FN_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_INFD128, "infd128", BT_FN_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_IRINT, "irint", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_IRINTF, "irintf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_IRINTL, "irintl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_IROUND, "iround", BT_FN_INT_DOUBLE, ATTR_MATHFN_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_IROUNDF, "iroundf", BT_FN_INT_FLOAT, ATTR_MATHFN_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_IROUNDL, "iroundl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0, "j0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0F, "j0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0L, "j0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1, "j1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1F, "j1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1L, "j1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_JN, "jn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNF, "jnf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNL, "jnl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_LCEIL, "lceil", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LCEILF, "lceilf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LCEILL, "lceill", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN        (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN        (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMA_R, "lgamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAF_R, "lgammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAL_R, "lgammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_GCC_BUILTIN        (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LLFLOOR, "llfloor", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORF, "llfloorf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORL, "llfloorl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LLROUND, "llround", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LLROUNDF, "llroundf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LLROUNDL, "llroundl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_LOG, "log", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_LOG10, "log10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10F, "log10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10L, "log10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOG1P, "log1p", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOG1PF, "log1pf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOG1PL, "log1pl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOG2, "log2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOG2F, "log2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOG2L, "log2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOGB, "logb", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOGBF, "logbf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LOGBL, "logbl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGF, "logf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGL, "logl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LRINT, "lrint", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LRINTF, "lrintf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LRINTL, "lrintl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LROUND, "lround", BT_FN_LONG_DOUBLE, ATTR_MATHFN_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LROUNDF, "lroundf", BT_FN_LONG_FLOAT, ATTR_MATHFN_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_LROUNDL, "lroundl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_MODF, "modf", BT_FN_DOUBLE_DOUBLE_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFF, "modff", BT_FN_FLOAT_FLOAT_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFL, "modfl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN        (BUILT_IN_NAN, "nan", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_C99_BUILTIN        (BUILT_IN_NANF, "nanf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_C99_BUILTIN        (BUILT_IN_NANL, "nanl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN        (BUILT_IN_NAND32, "nand32", BT_FN_DFLOAT32_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN        (BUILT_IN_NAND64, "nand64", BT_FN_DFLOAT64_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN        (BUILT_IN_NAND128, "nand128", BT_FN_DFLOAT128_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN        (BUILT_IN_NANS, "nans", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN        (BUILT_IN_NANSF, "nansf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN        (BUILT_IN_NANSL, "nansl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_C99_BUILTIN        (BUILT_IN_NEARBYINT, "nearbyint", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTF, "nearbyintf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTL, "nearbyintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTER, "nextafter", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERF, "nextafterf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERL, "nextafterl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARD, "nexttoward", BT_FN_DOUBLE_DOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDF, "nexttowardf", BT_FN_FLOAT_FLOAT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDL, "nexttowardl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_POW, "pow", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10, "pow10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10F, "pow10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10L, "pow10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_POWF, "powf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN        (BUILT_IN_POWI, "powi", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN        (BUILT_IN_POWIF, "powif", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN        (BUILT_IN_POWIL, "powil", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_POWL, "powl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_REMAINDER, "remainder", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_REMAINDERF, "remainderf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_REMAINDERL, "remainderl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_REMQUO, "remquo", BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN        (BUILT_IN_REMQUOF, "remquof", BT_FN_FLOAT_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN        (BUILT_IN_REMQUOL, "remquol", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_BUILTIN        (BUILT_IN_RINT, "rint", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_RINTF, "rintf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_RINTL, "rintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_ROUND, "round", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_ROUNDF, "roundf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_ROUNDL, "roundl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALB, "scalb", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBF, "scalbf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBL, "scalbl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_SCALBLN, "scalbln", BT_FN_DOUBLE_DOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_SCALBLNF, "scalblnf", BT_FN_FLOAT_FLOAT_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_SCALBLNL, "scalblnl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_SCALBN, "scalbn", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_SCALBNF, "scalbnf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_SCALBNL, "scalbnl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBIT, "signbit", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITF, "signbitf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITL, "signbitl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD32, "signbitd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD64, "signbitd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD128, "signbitd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICAND, "significand", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDF, "significandf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDL, "significandl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_SIN, "sin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOS, "sincos", BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSF, "sincosf", BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSL, "sincosl", BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_SINF, "sinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_SINH, "sinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHF, "sinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHL, "sinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_SINL, "sinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_SQRT, "sqrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTF, "sqrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTL, "sqrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_LIB_BUILTIN        (BUILT_IN_TAN, "tan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_TANF, "tanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_LIB_BUILTIN        (BUILT_IN_TANH, "tanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHF, "tanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHL, "tanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_TANL, "tanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_BUILTIN        (BUILT_IN_TGAMMA, "tgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_TGAMMAF, "tgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_TGAMMAL, "tgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_C99_BUILTIN        (BUILT_IN_TRUNC, "trunc", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_TRUNCF, "truncf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_TRUNCL, "truncl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0, "y0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0F, "y0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0L, "y0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1, "y1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1F, "y1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1L, "y1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_YN, "yn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNF, "ynf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNL, "ynl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-
-/* Category: _Complex math builtins.  */
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABS, "cabs", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSF, "cabsf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSL, "cabsl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOS, "cacos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSF, "cacosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSH, "cacosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHF, "cacoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHL, "cacoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSL, "cacosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARG, "carg", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGF, "cargf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGL, "cargl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASIN, "casin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINF, "casinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINH, "casinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHF, "casinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHL, "casinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINL, "casinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATAN, "catan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANF, "catanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANH, "catanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHF, "catanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHL, "catanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANL, "catanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOS, "ccos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSF, "ccosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSH, "ccosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHF, "ccoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHL, "ccoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSL, "ccosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXP, "cexp", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPF, "cexpf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPL, "cexpl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN        (BUILT_IN_CEXPI, "cexpi", BT_FN_COMPLEX_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN        (BUILT_IN_CEXPIF, "cexpif", BT_FN_COMPLEX_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN        (BUILT_IN_CEXPIL, "cexpil", BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAG, "cimag", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGF, "cimagf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGL, "cimagl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOG, "clog", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGF, "clogf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGL, "clogl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10, "clog10", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10F, "clog10f", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10L, "clog10l", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJ, "conj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJF, "conjf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJL, "conjl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOW, "cpow", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWF, "cpowf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWL, "cpowl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJ, "cproj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJF, "cprojf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJL, "cprojl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREAL, "creal", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALF, "crealf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALL, "creall", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSIN, "csin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINF, "csinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINH, "csinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHF, "csinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHL, "csinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINL, "csinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRT, "csqrt", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTF, "csqrtf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTL, "csqrtl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTAN, "ctan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANF, "ctanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANH, "ctanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHF, "ctanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHL, "ctanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANL, "ctanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-
-/* Category: string/memory builtins.  */
-/* bcmp, bcopy and bzero have traditionally accepted NULL pointers
-   when the length parameter is zero, so don't apply attribute "nonnull".  */
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCMP, "bcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCOPY, "bcopy", BT_FN_VOID_CONST_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_BZERO, "bzero", BT_FN_VOID_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_INDEX, "index", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_MEMCHR, "memchr", BT_FN_PTR_CONST_PTR_INT_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_MEMCMP, "memcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_MEMCPY, "memcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_MEMMOVE, "memmove", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMPCPY, "mempcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_MEMSET, "memset", BT_FN_PTR_PTR_INT_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_RINDEX, "rindex", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPCPY, "stpcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY, "stpncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCASECMP, "strcasecmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRCAT, "strcat", BT_FN_STRING_STRING_CONST_STRING, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRCHR, "strchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRCMP, "strcmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRCPY, "strcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_RET1_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRCSPN, "strcspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRDUP, "strdup", BT_FN_STRING_CONST_STRING, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNDUP, "strndup", BT_FN_STRING_CONST_STRING_SIZE, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRLEN, "strlen", BT_FN_SIZE_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCASECMP, "strncasecmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRNCAT, "strncat", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRNCMP, "strncmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRNCPY, "strncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRPBRK, "strpbrk", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRRCHR, "strrchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRSPN, "strspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_STRSTR, "strstr", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
-
-/* Category: stdio builtins.  */
-DEF_LIB_BUILTIN        (BUILT_IN_FPRINTF, "fprintf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_UNLOCKED, "fprintf_unlocked", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
-DEF_LIB_BUILTIN        (BUILT_IN_PUTC, "putc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTC_UNLOCKED, "putc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_FPUTC, "fputc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_UNLOCKED, "fputc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
-DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
-DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTCHAR_UNLOCKED, "putchar_unlocked", BT_FN_INT_INT, ATTR_NULL)
-DEF_LIB_BUILTIN        (BUILT_IN_PUTS, "puts", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTS_UNLOCKED, "puts_unlocked", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2)
-DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_3_4)
-DEF_LIB_BUILTIN        (BUILT_IN_SPRINTF, "sprintf", BT_FN_INT_STRING_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_2_3)
-DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_NOTHROW_2_3)
-DEF_LIB_BUILTIN        (BUILT_IN_VFPRINTF, "vfprintf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
-DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
-DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0)
-DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0)
-DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_3_0)
-DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_2_0)
-DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_NOTHROW_2_0)
-
-/* Category: ctype builtins.  */
-DEF_LIB_BUILTIN        (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-
-/* Category: wctype builtins.  */
-DEF_C94_BUILTIN        (BUILT_IN_ISWALNUM, "iswalnum", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWALPHA, "iswalpha", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_ISWBLANK, "iswblank", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWCNTRL, "iswcntrl", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWDIGIT, "iswdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWGRAPH, "iswgraph", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWLOWER, "iswlower", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWPRINT, "iswprint", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWPUNCT, "iswpunct", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWSPACE, "iswspace", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWUPPER, "iswupper", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_ISWXDIGIT, "iswxdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_TOWLOWER, "towlower", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_C94_BUILTIN        (BUILT_IN_TOWUPPER, "towupper", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
-
-/* Category: miscellaneous builtins.  */
-DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_AGGREGATE_INCOMING_ADDRESS, "aggregate_incoming_address", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ALLOCA, "alloca", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_APPLY, "apply", BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, ATTR_NULL)
-DEF_GCC_BUILTIN        (BUILT_IN_APPLY_ARGS, "apply_args", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_BSWAP16, "bswap16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
-/* [trans-mem]: Adjust BUILT_IN_TM_CALLOC if BUILT_IN_CALLOC is changed.  */
-DEF_LIB_BUILTIN        (BUILT_IN_CALLOC, "calloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLASSIFY_TYPE, "classify_type", BT_FN_INT_VAR, ATTR_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLZ, "clz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLZIMAX, "clzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLZL, "clzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLZLL, "clzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CTZ, "ctz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CTZIMAX, "ctzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CTZL, "ctzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLRSB, "clrsb", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLRSBIMAX, "clrsbimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLRSBL, "clrsbl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_CLRSBLL, "clrsbll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2)
-DEF_GCC_BUILTIN        (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL)
-DEF_GCC_BUILTIN        (BUILT_IN_DWARF_SP_COLUMN, "dwarf_sp_column", BT_FN_UINT, ATTR_NULL)
-DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN, "eh_return", BT_FN_VOID_PTRMODE_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN_DATA_REGNO, "eh_return_data_regno", BT_FN_INT_INT, ATTR_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECL, "execl", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLP, "execlp", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLE, "execle", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_NOTHROW_SENTINEL_1)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECV, "execv", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVP, "execvp", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVE, "execve", BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_EXIT, "exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_EXPECT, "expect", BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_ASSUME_ALIGNED, "assume_aligned", BT_FN_PTR_CONST_PTR_SIZE_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_EXTEND_POINTER, "extend_pointer", BT_FN_UNWINDWORD_PTR, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_EXTRACT_RETURN_ADDR, "extract_return_addr", BT_FN_PTR_PTR, ATTR_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSIMAX, "ffsimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN        (BUILT_IN_FORK, "fork", BT_FN_PID, ATTR_NOTHROW_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UINT, ATTR_NULL)
-/* [trans-mem]: Adjust BUILT_IN_TM_FREE if BUILT_IN_FREE is changed.  */
-DEF_LIB_BUILTIN        (BUILT_IN_FREE, "free", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_FROB_RETURN_ADDR, "frob_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1)
-DEF_C99_BUILTIN        (BUILT_IN_IMAXABS, "imaxabs", BT_FN_INTMAX_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_INIT_DWARF_REG_SIZES, "init_dwarf_reg_size_table", BT_FN_VOID_PTR, ATTR_NULL)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITE, "finite", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEF, "finitef", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEL, "finitel", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED32, "finited32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED64, "finited64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED128, "finited128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_FPCLASSIFY, "fpclassify", BT_FN_INT_INT_INT_INT_INT_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISFINITE, "isfinite", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISINF_SIGN, "isinf_sign", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ISINF, "isinf", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFF, "isinff", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFL, "isinfl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD32, "isinfd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD64, "isinfd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD128, "isinfd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_C90RES_BUILTIN (BUILT_IN_ISNAN, "isnan", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANF, "isnanf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANL, "isnanl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND32, "isnand32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND64, "isnand64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND128, "isnand128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_ISNORMAL, "isnormal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISGREATER, "isgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISLESS, "isless", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISLESSEQUAL, "islessequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISLESSGREATER, "islessgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_ISUNORDERED, "isunordered", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
-DEF_LIB_BUILTIN        (BUILT_IN_LABS, "labs", BT_FN_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN_LLABS, "llabs", BT_FN_LONGLONG_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_LONGJMP, "longjmp", BT_FN_VOID_PTR_INT, ATTR_NORETURN_NOTHROW_LIST)
-/* [trans-mem]: Adjust BUILT_IN_TM_MALLOC if BUILT_IN_MALLOC is changed.  */
-DEF_LIB_BUILTIN        (BUILT_IN_MALLOC, "malloc", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_NEXT_ARG, "next_arg", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_PARITY, "parity", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_PARITYIMAX, "parityimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_PARITYL, "parityl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTIMAX, "popcountimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_POSIX_MEMALIGN, "posix_memalign", BT_FN_INT_PTRPTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_GCC_BUILTIN        (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NOVOPS_LEAF_LIST)
-DEF_LIB_BUILTIN        (BUILT_IN_REALLOC, "realloc", BT_FN_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UINT, ATTR_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL)
-DEF_GCC_BUILTIN        (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRFMON, "strfmon", BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_STRFMON_NOTHROW_3_4)
-DEF_LIB_BUILTIN        (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR, ATTR_FORMAT_STRFTIME_NOTHROW_3_0)
-DEF_GCC_BUILTIN        (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_UNREACHABLE, "unreachable", BT_FN_VOID, ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_UNWIND_INIT, "unwind_init", BT_FN_VOID, ATTR_NULL)
-DEF_GCC_BUILTIN        (BUILT_IN_UPDATE_SETJMP_BUF, "update_setjmp_buf", BT_FN_VOID_PTR_INT, ATTR_NULL)
-DEF_GCC_BUILTIN        (BUILT_IN_VA_COPY, "va_copy", BT_FN_VOID_VALIST_REF_VALIST_ARG, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_VA_END, "va_end", BT_FN_VOID_VALIST_REF, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_VA_START, "va_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK, "va_arg_pack", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK_LEN, "va_arg_pack_len", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN__EXIT, "_exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
-DEF_C99_BUILTIN        (BUILT_IN__EXIT2, "_Exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
-
-/* Implementing nested functions.  */
-DEF_BUILTIN_STUB (BUILT_IN_INIT_TRAMPOLINE, "__builtin_init_trampoline")
-DEF_BUILTIN_STUB (BUILT_IN_INIT_HEAP_TRAMPOLINE, "__builtin_init_heap_trampoline")
-DEF_BUILTIN_STUB (BUILT_IN_ADJUST_TRAMPOLINE, "__builtin_adjust_trampoline")
-DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto")
-
-/* Implementing __builtin_setjmp.  */
-DEF_BUILTIN_STUB (BUILT_IN_SETJMP_SETUP, "__builtin_setjmp_setup")
-DEF_BUILTIN_STUB (BUILT_IN_SETJMP_RECEIVER, "__builtin_setjmp_receiver")
-
-/* Implementing variable sized local variables.  */
-DEF_BUILTIN_STUB (BUILT_IN_STACK_SAVE, "__builtin_stack_save")
-DEF_BUILTIN_STUB (BUILT_IN_STACK_RESTORE, "__builtin_stack_restore")
-DEF_BUILTIN_STUB (BUILT_IN_ALLOCA_WITH_ALIGN, "__builtin_alloca_with_align")
-
-/* Object size checking builtins.  */
-DEF_GCC_BUILTIN	       (BUILT_IN_OBJECT_SIZE, "object_size", BT_FN_SIZE_CONST_PTR_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMCPY_CHK, "__memcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMMOVE_CHK, "__memmove_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMPCPY_CHK, "__mempcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMSET_CHK, "__memset_chk", BT_FN_PTR_PTR_INT_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPCPY_CHK, "__stpcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY_CHK, "__stpncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCAT_CHK, "__strcat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCPY_CHK, "__strcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCAT_CHK, "__strncat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCPY_CHK, "__strncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SNPRINTF_CHK, "__snprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_5_6)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_SPRINTF_CHK, "__sprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_4_5)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSNPRINTF_CHK, "__vsnprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_5_0)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSPRINTF_CHK, "__vsprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_4_0)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_CHK, "__fprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_3_4)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_CHK, "__printf_chk", BT_FN_INT_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_VFPRINTF_CHK, "__vfprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_3_0)
-DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF_CHK, "__vprintf_chk", BT_FN_INT_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
-
-/* Profiling hooks.  */
-DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_ENTER, "__cyg_profile_func_enter", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
-	     false, false, false, ATTR_NULL, true, true)
-DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_EXIT, "__cyg_profile_func_exit", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
-	     false, false, false, ATTR_NULL, true, true)
-
-/* TLS thread pointer related builtins.  */
-DEF_BUILTIN (BUILT_IN_THREAD_POINTER, "__builtin_thread_pointer",
-	     BUILT_IN_NORMAL, BT_FN_PTR, BT_LAST,
-	     false, false, true, ATTR_CONST_NOTHROW_LIST, true,
-	     targetm.have_tls)
-
-DEF_BUILTIN (BUILT_IN_SET_THREAD_POINTER, "__builtin_set_thread_pointer",
-	     BUILT_IN_NORMAL, BT_FN_VOID_PTR, BT_LAST,
-	     false, false, true, ATTR_NOTHROW_LIST, true,
-	     targetm.have_tls)
-
-/* TLS emulation.  */
-DEF_BUILTIN (BUILT_IN_EMUTLS_GET_ADDRESS, targetm.emutls.get_address,
-	     BUILT_IN_NORMAL,
-	     BT_FN_PTR_PTR,  BT_FN_PTR_PTR,
-	     true, true, true, ATTR_CONST_NOTHROW_NONNULL_LEAF, false,
-	     !targetm.have_tls)
-DEF_BUILTIN (BUILT_IN_EMUTLS_REGISTER_COMMON,
-	     targetm.emutls.register_common, BUILT_IN_NORMAL,
-	     BT_FN_VOID_PTR_WORD_WORD_PTR, BT_FN_VOID_PTR_WORD_WORD_PTR,
-	     true, true, true, ATTR_NOTHROW_LEAF_LIST, false,
-	     !targetm.have_tls)
-
-/* Exception support.  */
-DEF_BUILTIN_STUB (BUILT_IN_UNWIND_RESUME, "__builtin_unwind_resume")
-DEF_BUILTIN_STUB (BUILT_IN_CXA_END_CLEANUP, "__builtin_cxa_end_cleanup")
-DEF_BUILTIN_STUB (BUILT_IN_EH_POINTER, "__builtin_eh_pointer")
-DEF_BUILTIN_STUB (BUILT_IN_EH_FILTER, "__builtin_eh_filter")
-DEF_BUILTIN_STUB (BUILT_IN_EH_COPY_VALUES, "__builtin_eh_copy_values")
-
-/* __FILE__, __LINE__, __FUNCTION__ as builtins.  */
-DEF_GCC_BUILTIN (BUILT_IN_FILE, "FILE", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN (BUILT_IN_FUNCTION, "FUNCTION", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
-DEF_GCC_BUILTIN (BUILT_IN_LINE, "LINE", BT_FN_INT, ATTR_NOTHROW_LEAF_LIST)
-
-#if 0
-/* Synchronization Primitives.  */
-#include "sync-builtins.def"
-
-/* OpenMP builtins.  */
-#include "omp-builtins.def"
-
-/* Cilk keywords builtins.  */
-#include "cilk-builtins.def"
-
-/* GTM builtins. */
-#include "gtm-builtins.def"
-
-/* Sanitizer builtins. */
-#include "sanitizer.def"
-
-/* Cilk Plus builtins.  */
-#include "cilkplus.def"
-#endif
Index: src/libcfa/concurrency/CtxSwitch-i386.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-i386.S	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/CtxSwitch-i386.S	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,90 @@
+//                               -*- Mode: Asm -*-
+//
+// 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.
+//
+// CtxSwitch-i386.S --
+//
+// Author           : Thierry Delisle
+// Created On       : Tue Dec 6 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Tue Dec 6 12:27:26 2016
+// Update Count     : 0
+//
+// This  library is free  software; you  can redistribute  it and/or  modify it
+// under the terms of the GNU Lesser General Public License as published by the
+// Free Software  Foundation; either  version 2.1 of  the License, or  (at your
+// option) any later version.
+//
+// This library is distributed in the  hope that it will be useful, but WITHOUT
+// ANY  WARRANTY;  without even  the  implied  warranty  of MERCHANTABILITY  or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should  have received a  copy of the  GNU Lesser General  Public License
+// along  with this library.
+//
+
+// This context switch routine depends on the fact that the stack of a new
+// thread has been set up to look like the thread has saved its context in
+// the normal manner.
+//
+// void CtxSwitch( machine_context *from, machine_context *to );
+
+// Offsets in the context structure. This needs to be synchronized with the
+// high level code a little better.
+
+#define PTR_BYTE	4
+#define SP_OFFSET	( 0 * PTR_BYTE )
+#define FP_OFFSET	( 1 * PTR_BYTE )
+#define PC_OFFSET	( 2 * PTR_BYTE )
+
+.text
+	.align 2
+.globl	CtxSwitch
+CtxSwitch:
+
+	// Copy the "from" context argument from the stack to register eax
+	// Return address is at 0(%esp), with parameters following
+
+	movl 4(%esp),%eax
+
+	// Save volatile registers on the stack.
+
+	pushl %ebx
+	pushl %edi
+	pushl %esi
+
+	// Save old context in the "from" area.
+
+	movl %esp,SP_OFFSET(%eax)
+	movl %ebp,FP_OFFSET(%eax)
+//	movl 4(%ebp),%ebx	// save previous eip for debugger
+//	movl %ebx,PC_OFFSET(%eax)
+
+	// Copy the "to" context argument from the stack to register eax
+	// Having pushed three words (= 12 bytes) on the stack, the
+	// argument is now at 8 + 12 = 20(%esp)
+
+	movl 20(%esp),%eax
+
+	// Load new context from the "to" area.
+
+	movl SP_OFFSET(%eax),%esp
+	movl FP_OFFSET(%eax),%ebp
+
+	// Load volatile registers from the stack.
+
+	popl %esi
+	popl %edi
+	popl %ebx
+
+	// Return to thread.
+
+	ret
+
+// Local Variables: //
+// compile-command: "make install" //
+// End: //
Index: src/libcfa/concurrency/CtxSwitch-i686.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-i686.S	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/CtxSwitch-i686.S	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,1 @@
+CtxSwitch-i386.S
Index: src/libcfa/concurrency/CtxSwitch-x86_64.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-x86_64.S	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/CtxSwitch-x86_64.S	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,89 @@
+//                               -*- Mode: Asm -*- 
+//
+// 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.
+//
+// CtxSwitch-x86_64.S --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+// This  library is free  software; you  can redistribute  it and/or  modify it
+// under the terms of the GNU Lesser General Public License as published by the
+// Free Software  Foundation; either  version 2.1 of  the License, or  (at your
+// option) any later version.
+// 
+// This library is distributed in the  hope that it will be useful, but WITHOUT
+// ANY  WARRANTY;  without even  the  implied  warranty  of MERCHANTABILITY  or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+// 
+// You should  have received a  copy of the  GNU Lesser General  Public License
+// along  with this library.
+// 
+
+// This context switch routine depends on the fact that the stack of a new
+// thread has been set up to look like the thread has saved its context in
+// the normal manner.
+//
+// void CtxSwitch( machine_context *from, machine_context *to );
+
+// Offsets in the context structure. This needs to be synchronized with the
+// high level code a little better.
+
+#define PTR_BYTE	8
+#define SP_OFFSET	( 0 * PTR_BYTE )
+#define FP_OFFSET	( 1 * PTR_BYTE )
+#define PC_OFFSET	( 2 * PTR_BYTE )
+
+.text
+	.align 2
+.globl	CtxSwitch
+CtxSwitch:
+
+	// Save volatile registers on the stack.
+
+	pushq %r15
+	pushq %r14
+	pushq %r13
+	pushq %r12
+	pushq %rbx
+
+	// Save old context in the "from" area.
+
+	movq %rsp,SP_OFFSET(%rdi)
+	movq %rbp,FP_OFFSET(%rdi)
+
+	// Load new context from the "to" area.
+
+	movq SP_OFFSET(%rsi),%rsp
+	movq FP_OFFSET(%rsi),%rbp
+
+	// Load volatile registers from the stack.
+
+	popq %rbx
+	popq %r12
+	popq %r13
+	popq %r14
+	popq %r15
+
+	// Return to thread.
+
+	ret
+
+.text
+	.align 2
+.globl	CtxInvokeStub
+CtxInvokeStub:
+	movq %rbx, %rdi 
+	jmp *%r12
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/invoke.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,81 @@
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "libhdr.h"
+#include "invoke.h"
+
+#define __CFA_INVOKE_PRIVATE__
+#include "invoke.h"
+
+// magically invoke the "main" of the most derived class
+// Called from the kernel when starting a coroutine or task so must switch back to user mode.
+
+extern void __suspend_no_inline__F___1(void);
+
+void CtxInvokeCoroutine(
+      void (*main)(void *), 
+      struct coroutine *(*get_coroutine)(void *), 
+      void *this
+) {
+      LIB_DEBUG_PRINTF("Invoke : Received %p (main %p, get_c %p)\n", this, main, get_coroutine);
+
+      struct coroutine* cor = get_coroutine( this );
+
+      if(cor->state == Primed) {
+            __suspend_no_inline__F___1();
+      }
+
+      cor->state = Active;
+
+      main( this );
+}
+
+
+void CtxStart(
+      void (*main)(void *), 
+      struct coroutine *(*get_coroutine)(void *), 
+      void *this, 
+      void (*invoke)(void *)
+) {
+      LIB_DEBUG_PRINTF("StartCoroutine : Passing in %p (main %p, get_c %p) to %p\n", this, main, get_coroutine, invoke);
+
+      struct coStack_t* stack = &get_coroutine( this )->stack;
+
+#if defined( __i386__ )
+
+	struct FakeStack {
+	    void *fixedRegisters[3];		  	// fixed registers ebx, edi, esi (popped on 1st uSwitch, values unimportant)
+	    void *rturn;				      // where to go on return from uSwitch
+	    void *dummyReturn;				// fake return compiler would have pushed on call to uInvoke
+	    void *argument[3];				// for 16-byte ABI, 16-byte alignment starts here
+	    void *padding;				// padding to force 16-byte alignment, as "base" is 16-byte aligned
+	};
+
+	((struct machine_context_t *)stack->context)->SP = (char *)stack->base - sizeof( struct FakeStack );
+	((struct machine_context_t *)stack->context)->FP = NULL;		// terminate stack with NULL fp
+
+	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->dummyReturn = NULL;
+	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->argument[0] = this;     // argument to invoke
+	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->rturn = invoke;
+
+#elif defined( __x86_64__ )
+
+      struct FakeStack {
+            void *fixedRegisters[5];			// fixed registers rbx, r12, r13, r14, r15
+            void *rturn;					// where to go on return from uSwitch
+            void *dummyReturn;				// NULL return address to provide proper alignment
+      };
+
+      ((struct machine_context_t *)stack->context)->SP = (char *)stack->base - sizeof( struct FakeStack );
+      ((struct machine_context_t *)stack->context)->FP = NULL;		// terminate stack with NULL fp
+
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->dummyReturn = NULL;
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->rturn = CtxInvokeStub;
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[0] = this;
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[1] = invoke;
+#else
+      #error Only __i386__ and __x86_64__ is supported for threads in cfa
+#endif
+}
Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/invoke.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,56 @@
+#include <stdbool.h>
+#include <stdint.h>
+
+#ifdef __CFORALL__
+extern "C" {
+#endif
+
+#if ! defined(__CFA_INVOKE_PRIVATE__)
+#ifndef _INVOKE_H_
+#define _INVOKE_H_
+
+      #define unlikely(x)    __builtin_expect(!!(x), 0)
+
+      struct coStack_t {
+            unsigned int size;		// size of stack
+            void *storage;			// pointer to stack
+            void *limit;			// stack grows towards stack limit
+            void *base;				// base of stack
+            void *context;			// address of cfa_context_t
+            void *top;				// address of top of storage
+            bool userStack;	
+      };
+
+      enum coroutine_state { Start, Inactive, Active, Halt, Primed };
+
+      struct coroutine {
+            struct coStack_t stack;
+            const char *name;			// textual name for coroutine/task, initialized by uC++ generated code
+            int errno_;				// copy of global UNIX variable errno
+            enum coroutine_state state;	// current execution status for coroutine
+            bool notHalted;			// indicate if execuation state is not halted
+
+            struct coroutine *starter;	// first coroutine to resume this one
+            struct coroutine *last;		// last coroutine to resume this one
+      };
+
+#endif //_INVOKE_H_
+#else //! defined(__CFA_INVOKE_PRIVATE__)
+#ifndef _INVOKE_PRIVATE_H_
+#define _INVOKE_PRIVATE_H_
+      
+      struct machine_context_t {
+            void *SP;
+            void *FP;
+            void *PC;
+      };
+
+      // assembler routines that performs the context switch
+      extern void CtxInvokeStub( void );
+      void CtxSwitch( void *from, void *to ) asm ("CtxSwitch");
+
+#endif //_INVOKE_PRIVATE_H_
+#endif //! defined(__CFA_INVOKE_PRIVATE__)
+#ifdef __CFORALL__
+}
+#endif
Index: src/libcfa/concurrency/threads
===================================================================
--- src/libcfa/concurrency/threads	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/threads	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,118 @@
+//                              -*- Mode: CFA -*-
+//
+// 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.
+//
+// threads --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+#ifndef __THREADS_H__
+#define __THREADS_H__
+
+#include "assert"       //
+#include "invoke.h"
+
+//-----------------------------------------------------------------------------
+// Coroutine trait
+// Anything that implements this trait can be resumed.
+// Anything that is resumed is a coroutine.
+trait is_coroutine(dtype T) {
+      void co_main(T* this);
+      coroutine* get_coroutine(T* this);
+};
+
+//-----------------------------------------------------------------------------
+// Ctors and dtors
+void ?{}(coStack_t* this);
+void ?{}(coroutine* this);
+void ^?{}(coStack_t* this);
+void ^?{}(coroutine* this);
+
+//-----------------------------------------------------------------------------
+// Public coroutine API
+static inline void suspend();
+
+forall(dtype T | is_coroutine(T))
+static inline void resume(T* cor);
+
+forall(dtype T | is_coroutine(T))
+void prime(T* cor);
+
+//-----------------------------------------------------------------------------
+// PRIVATE exposed because of inline
+
+// Start coroutine routines
+extern "C" {
+      forall(dtype T | is_coroutine(T))
+      void CtxInvokeCoroutine(T* this);
+
+      forall(dtype T | is_coroutine(T))
+      void CtxStart(T* this, void (*invoke)(T*));
+}
+
+// Get current coroutine
+extern coroutine* current_coroutine; //PRIVATE, never use directly
+static inline coroutine* this_coroutine(void) {
+	return current_coroutine;
+}
+
+// Private wrappers for context switch and stack creation
+extern void corCxtSw(coroutine* src, coroutine* dst);
+extern void create_stack( coStack_t* this, unsigned int storageSize );
+
+// Suspend implementation inlined for performance
+static inline void suspend() {
+      coroutine* src = this_coroutine();		// optimization
+
+	assertf( src->last != 0, 
+		"Attempt to suspend coroutine %.256s (%p) that has never been resumed.\n"
+		"Possible cause is a suspend executed in a member called by a coroutine user rather than by the coroutine main.",
+		src->name, src );
+	assertf( src->last->notHalted, 
+		"Attempt by coroutine %.256s (%p) to suspend back to terminated coroutine %.256s (%p).\n"
+		"Possible cause is terminated coroutine's main routine has already returned.",
+		src->name, src, src->last->name, src->last );
+
+	corCxtSw( src, src->last );
+}
+
+// Resume implementation inlined for performance
+forall(dtype T | is_coroutine(T))
+static inline void resume(T* cor) {
+	coroutine* src = this_coroutine();		// optimization
+	coroutine* dst = get_coroutine(cor);
+
+      if( unlikely(!dst->stack.base) ) {
+		create_stack(&dst->stack, dst->stack.size);
+		CtxStart(cor, CtxInvokeCoroutine);
+	}
+
+      // not resuming self ?
+	if ( src != dst ) {
+		assertf( dst->notHalted , 
+			"Attempt by coroutine %.256s (%p) to resume terminated coroutine %.256s (%p).\n"
+			"Possible cause is terminated coroutine's main routine has already returned.",
+			src->name, src, dst->name, dst );
+
+            // set last resumer
+		dst->last = src;
+	} // if
+
+      // always done for performance testing
+	corCxtSw( src, dst );
+}
+
+#endif //__THREADS_H__
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: src/libcfa/concurrency/threads.c
===================================================================
--- src/libcfa/concurrency/threads.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/concurrency/threads.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,182 @@
+//
+// 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.
+//
+// threads.c --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+extern "C" {
+#include <stddef.h>
+#include <malloc.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/mman.h>
+}
+
+#include "threads"
+#include "libhdr.h"
+
+#define __CFA_INVOKE_PRIVATE__
+#include "invoke.h"
+
+//-----------------------------------------------------------------------------
+// Global state variables
+
+// minimum feasible stack size in bytes
+#define MinStackSize 1000
+static size_t pageSize = 0;				// architecture pagesize HACK, should go in proper runtime singleton
+
+//Extra private desctructor for the main
+//FIXME the main should not actually allocate a stack
+//Since the main is never resumed the extra stack does not cause 
+//any problem but it is wasted memory
+void ?{}(coStack_t* this, size_t size);
+void ?{}(coroutine* this, size_t size);
+
+//Main coroutine
+//FIXME do not construct a stack for the main
+coroutine main_coroutine = { 1000 };
+
+//Current coroutine
+//Will need to be in TLS when multi-threading is added
+coroutine* current_coroutine = &main_coroutine;
+
+//-----------------------------------------------------------------------------
+// Coroutine ctors and dtors
+void ?{}(coStack_t* this) {
+	this->size		= 10240;	// size of stack
+	this->storage	= NULL;	// pointer to stack
+	this->limit		= NULL;	// stack grows towards stack limit
+	this->base		= NULL;	// base of stack
+	this->context	= NULL;	// address of cfa_context_t
+	this->top		= NULL;	// address of top of storage
+	this->userStack	= false;	
+}
+
+void ?{}(coStack_t* this, size_t size) {
+	this{};
+	this->size = size;
+
+	create_stack(this, this->size);
+}
+
+void ?{}(coroutine* this) {
+	this->name = "Anonymous Coroutine";
+	this->errno_ = 0;
+	this->state = Start;
+      this->notHalted = true;
+	this->starter = NULL;
+	this->last = NULL;
+}
+
+void ?{}(coroutine* this, size_t size) {
+	this{};
+	(&this->stack){size};
+}
+
+void ^?{}(coStack_t* this) {
+	if ( ! this->userStack ) {
+		LIB_DEBUG_DO(
+			if ( mprotect( this->storage, pageSize, PROT_READ | PROT_WRITE ) == -1 ) {
+				abortf( "(coStack_t *)%p.^?{}() : internal error, mprotect failure, error(%d) %s.", this, errno, strerror( errno ) );
+			}
+		);
+		free( this->storage );
+	}
+}
+
+void ^?{}(coroutine* this) {}
+
+// Part of the Public API
+// Not inline since only ever called once per coroutine
+forall(dtype T | is_coroutine(T))
+void prime(T* cor) {
+	coroutine* this = get_coroutine(cor);
+	assert(this->state == Start);
+
+	this->state = Primed;
+	resume(cor);
+}
+
+// We need to call suspend from invoke.c, so we expose this wrapper that
+// is not inline (We can't inline Cforall in C)
+void suspend_no_inline(void) {
+	suspend();
+}
+
+void corCxtSw(coroutine* src, coroutine* dst) {
+	// THREAD_GETMEM( This )->disableInterrupts();
+
+	// set state of current coroutine to inactive
+	src->state = Inactive;
+
+	// set new coroutine that task is executing
+	current_coroutine = dst;			
+
+	// context switch to specified coroutine
+	CtxSwitch( src->stack.context, dst->stack.context );
+	// when CtxSwitch returns we are back in the src coroutine		
+
+	// set state of new coroutine to active
+	src->state = Active;
+
+	// THREAD_GETMEM( This )->enableInterrupts();
+} //ctxSwitchDirect
+
+void create_stack( coStack_t* this, unsigned int storageSize ) {
+	//TEMP HACK do this on proper kernel startup
+	if(pageSize == 0ul) pageSize = sysconf( _SC_PAGESIZE );
+
+	size_t cxtSize = libCeiling( sizeof(machine_context_t), 8 ); // minimum alignment
+
+	if ( (intptr_t)this->storage == 0 ) {
+		this->userStack = false;
+		this->size = libCeiling( storageSize, 16 );
+		// use malloc/memalign because "new" raises an exception for out-of-memory
+		
+		// assume malloc has 8 byte alignment so add 8 to allow rounding up to 16 byte alignment
+		LIB_DEBUG_DO( this->storage = memalign( pageSize, cxtSize + this->size + pageSize ) );
+		LIB_NO_DEBUG_DO( this->storage = malloc( cxtSize + this->size + 8 ) );
+
+		LIB_DEBUG_DO(
+			if ( mprotect( this->storage, pageSize, PROT_NONE ) == -1 ) {
+				abortf( "(uMachContext &)%p.createContext() : internal error, mprotect failure, error(%d) %s.", this, (int)errno, strerror( (int)errno ) );
+			} // if
+		);
+
+		if ( (intptr_t)this->storage == 0 ) {
+			abortf( "Attempt to allocate %d bytes of storage for coroutine or task execution-state but insufficient memory available.", this->size );
+		} // if
+
+		LIB_DEBUG_DO( this->limit = (char *)this->storage + pageSize );
+		LIB_NO_DEBUG_DO( this->limit = (char *)libCeiling( (unsigned long)this->storage, 16 ) ); // minimum alignment
+
+	} else {
+		assertf( ((size_t)this->storage & (libAlign() - 1)) != 0ul, "Stack storage %p for task/coroutine must be aligned on %d byte boundary.", this->storage, (int)libAlign() );
+		this->userStack = true;
+		this->size = storageSize - cxtSize;
+
+		if ( this->size % 16 != 0u ) this->size -= 8;
+
+		this->limit = (char *)libCeiling( (unsigned long)this->storage, 16 ); // minimum alignment
+	} // if
+	assertf( this->size >= MinStackSize, "Stack size %d provides less than minimum of %d bytes for a stack.", this->size, MinStackSize );
+
+	this->base = (char *)this->limit + this->size;
+	this->context = this->base;
+	this->top = (char *)this->context + cxtSize;
+}
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: c/libcfa/extras.c
===================================================================
--- src/libcfa/extras.c	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,3 +1,0 @@
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
Index: c/libcfa/extras.regx
===================================================================
--- src/libcfa/extras.regx	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,8 +1,0 @@
-typedef.* size_t;
-typedef.* ptrdiff_t;
-extern.* abort\(.*\).*
-extern.* atexit\(.*\).*
-extern.* exit\(.*\).*
-extern.* free\(.*\).*
-extern.*\*malloc\(.*\).*
-extern.* printf\(.*\).*
Index: src/libcfa/libhdr.h
===================================================================
--- src/libcfa/libhdr.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/libhdr.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,28 @@
+//
+// 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.
+//
+// libhdr.h --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+#ifndef __LIB_HDR_H__
+#define __LIB_HDR_H__
+
+#include "libalign.h"
+#include "libdebug.h"
+#include "libtools.h"
+
+#endif //__LIB_HDR_H__
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: src/libcfa/libhdr/libalign.h
===================================================================
--- src/libcfa/libhdr/libalign.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/libhdr/libalign.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,68 @@
+//                              -*- Mode: C++ -*- 
+//
+// 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.
+//
+// libdebug.h --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+// This  library is free  software; you  can redistribute  it and/or  modify it
+// under the terms of the GNU Lesser General Public License as published by the
+// Free Software  Foundation; either  version 2.1 of  the License, or  (at your
+// option) any later version.
+// 
+// This library is distributed in the  hope that it will be useful, but WITHOUT
+// ANY  WARRANTY;  without even  the  implied  warranty  of MERCHANTABILITY  or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+// 
+// You should  have received a  copy of the  GNU Lesser General  Public License
+// along  with this library.
+// 
+
+
+#ifndef __LIB_ALIGN_H__
+#define __LIB_ALIGN_H__
+
+#include "assert"
+
+// Minimum size used to align memory boundaries for memory allocations. 
+#define libAlign() (sizeof(double))
+
+// Check for power of 2
+static inline bool libPow2( unsigned long int value ) {
+    // clears all bits below value, rounding value down to the next lower multiple of value
+    return (value & (value - 1ul)) == 0ul;
+} // libPow2
+
+
+// Returns value aligned at the floor of align.
+static inline unsigned long int libFloor( unsigned long int value, unsigned long int align ) {
+    assert( libPow2( align ) );
+    // clears all bits above or equal to align, getting (value % align), the phase of value with regards to align
+    return value & -align;
+} // libFloor
+
+
+// Returns value aligned at the ceiling of align.
+
+static inline unsigned long int libCeiling( unsigned long int value, unsigned long int align ) {
+    assert( libPow2( align ) );
+    // "negate, round down, negate" is the same as round up
+    return -libFloor( -value, align );
+} // uCeiling
+
+
+#endif // __LIB_ALIGN_H__
+
+
+// Local Variables: //
+// compile-command: "make install" //
+// End: //
Index: src/libcfa/libhdr/libdebug.h
===================================================================
--- src/libcfa/libhdr/libdebug.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/libhdr/libdebug.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,40 @@
+//
+// 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.
+//
+// libdebug.h --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+#ifndef __LIB_DEBUG_H__
+#define __LIB_DEBUG_H__
+
+#ifdef __CFA_DEBUG__
+      #define LIB_DEBUG_DO(x) x
+      #define LIB_NO_DEBUG_DO(x) ((void)0)
+#else
+      #define LIB_DEBUG_DO(x) ((void)0)
+      #define LIB_NO_DEBUG_DO(x) x      
+#endif
+
+#ifdef __CFA_DEBUG_PRINT__
+      #define LIB_DEBUG_PRINTF(...)   printf (__VA_ARGS__)
+      #define LIB_DEBUG_FPRINTF(...) fprintf (stderr, __VA_ARGS__)
+#else
+      #define LIB_DEBUG_PRINTF(...)  ((void)0)
+      #define LIB_DEBUG_FPRINTF(...) ((void)0)
+#endif
+
+#endif //__LIB_DEBUG_H__
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: src/libcfa/libhdr/libtools.h
===================================================================
--- src/libcfa/libhdr/libtools.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/libcfa/libhdr/libtools.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,32 @@
+//
+// 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.
+//
+// ools.h --
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Nov 28 12:27:26 2016
+// Last Modified By : Thierry Delisle
+// Last Modified On : Mon Nov 28 12:27:26 2016
+// Update Count     : 0
+//
+
+#ifndef __LIB_TOOLS_H__
+#define __LIB_TOOLS_H__
+
+// void abortf( const char *fmt, ... ) {
+//     abort();
+//     // CONTROL NEVER REACHES HERE!
+// } // libAbort
+
+#define abortf(...) abort();
+
+
+#endif //__LIB_TOOLS_H__
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: c/libcfa/prelude.cf
===================================================================
--- src/libcfa/prelude.cf	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,800 +1,0 @@
-//                               -*- Mode: C -*-
-//
-// Copyright (C) Glen Ditchfield 1994, 1999
-//
-// prelude.cf -- Standard Cforall Preample for C99
-//
-// Author           : Glen Ditchfield
-// Created On       : Sat Nov 29 07:23:41 2014
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 18:04:40 2016
-// Update Count     : 92
-//
-
-# 2 "prelude.cf"  // needed for error messages from this file
-
-// Section numbers from: http://plg.uwaterloo.ca/~cforall/refrat.pdf
-
-// ------------------------------------------------------------
-//
-// Section 4.1 Primary Expressions
-//
-// ------------------------------------------------------------
-
-const int 0, 1;
-
-forall ( dtype DT ) const DT * const	0;
-forall ( ftype FT ) FT * const		0;
-
-// ------------------------------------------------------------
-//
-// Section 4.2 Postfix Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?++( _Bool * ),				?++( volatile _Bool * );
-_Bool			?--( _Bool * ),				?--( volatile _Bool * );
-unsigned char		?++( unsigned char * ),			?++( volatile unsigned char * );
-signed int		?++( signed int * ),			?++( volatile signed int * );
-signed int		?--( signed int * ),			?--( volatile signed int * );
-unsigned int		?++( unsigned int * ),			?++( volatile unsigned int * );
-unsigned int		?--( unsigned int * ),			?--( volatile unsigned int * );
-signed long int		?++( signed long int * ),		?++( volatile signed long int * );
-signed long int		?--( signed long int * ),		?--( volatile signed long int * );
-unsigned long int	?++( unsigned long int * ),		?++( volatile unsigned long int * );
-unsigned long int	?--( unsigned long int * ),		?--( volatile unsigned long int * );
-signed long long int	?++( signed long long int * ),		?++( volatile signed long long int * );
-signed long long int	?--( signed long long int * ),		?--( volatile signed long long int * );
-unsigned long long int	?++( unsigned long long int * ),	?++( volatile unsigned long long int * );
-unsigned long long int	?--( unsigned long long int * ),	?--( volatile unsigned long long int * );
-float			?++( float * ),				?++( volatile float * );
-float			?--( float * ),				?--( volatile float * );
-double			?++( double * ),			?++( volatile double * );
-double			?--( double * ),			?--( volatile double * );
-long double		?++( long double * ),			?++( volatile long double * );
-long double		?--( long double * ),			?--( volatile long double * );
-float _Complex		?++( float _Complex * ),		?++( volatile float _Complex * );
-float _Complex		?--( float _Complex * ),		?--( volatile float _Complex * );
-double _Complex		?++( double _Complex * ),		?++( volatile double _Complex * );
-double _Complex		?--( double _Complex * ),		?--( volatile double _Complex * );
-long double _Complex	?++( long double _Complex * ),		?++( volatile long double _Complex * );
-long double _Complex	?--( long double _Complex * ),		?--( volatile long double _Complex * );
-
-forall( otype T ) T *			 ?++(		     T ** );
-forall( otype T ) const T *		 ?++( const	     T ** );
-forall( otype T ) volatile T *		 ?++(	    volatile T ** );
-forall( otype T ) const volatile T *	 ?++( const volatile T ** );
-forall( otype T ) T *			 ?--(		     T ** );
-forall( otype T ) const T *		 ?--( const	     T ** );
-forall( otype T ) volatile T *		 ?--(	    volatile T ** );
-forall( otype T ) const volatile T *	 ?--( const volatile T ** );
-
-forall( otype T ) lvalue T		 ?[?](		      T *,	    ptrdiff_t );
-forall( otype T ) const lvalue T	 ?[?]( const	      T *,	    ptrdiff_t );
-forall( otype T ) volatile lvalue T	 ?[?](       volatile T *,	    ptrdiff_t );
-forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,	    ptrdiff_t );
-forall( otype T ) lvalue T		 ?[?](		ptrdiff_t,		  T * );
-forall( otype T ) const lvalue T	 ?[?](		ptrdiff_t, const	  T * );
-forall( otype T ) volatile lvalue T	 ?[?](		ptrdiff_t,	 volatile T * );
-forall( otype T ) const volatile lvalue T ?[?](		ptrdiff_t, const volatile T * );
-
-// ------------------------------------------------------------
-//
-// Section 4.3 Unary Operators
-//
-// ------------------------------------------------------------
-
-_Bool			++?( _Bool * ),				--?( _Bool * );
-signed int		++?( signed int * ),			--?( signed int * );
-unsigned int		++?( unsigned int * ),			--?( unsigned int * );
-signed long int		++?( signed long int * ),		--?( signed long int * );
-unsigned long int	++?( unsigned long int * ),		--?( unsigned long int * );
-signed long long int	++?( signed long long int * ),		--?( signed long long int * );
-unsigned long long int	++?( unsigned long long int * ),	--?( unsigned long long int * );
-float			++?( float * ),				--?( float * );
-double			++?( double * ),			--?( double * );
-long double		++?( long double * ),			--?( long double * );
-float _Complex		++?( float _Complex * ),		--?( float _Complex * );
-double _Complex		++?( double _Complex * ),		--?( double _Complex * );
-long double _Complex	++?( long double _Complex * ),		--?( long double _Complex * );
-
-forall( otype T ) T *			 ++?(		     T ** );
-forall( otype T ) const T *		 ++?( const	     T ** );
-forall( otype T ) volatile T *		 ++?(	    volatile T ** );
-forall( otype T ) const volatile T *	 ++?( const volatile T ** );
-forall( otype T ) T *			 --?(		     T ** );
-forall( otype T ) const T *		 --?( const	     T ** );
-forall( otype T ) volatile T *		 --?(	    volatile T ** );
-forall( otype T ) const volatile T *	 --?( const volatile T ** );
-
-forall( dtype T | sized(T) ) lvalue T		 *?(		     T * );
-forall( dtype T | sized(T) ) const lvalue T		 *?( const	     T * );
-forall( dtype T | sized(T) ) volatile lvalue T	 *?(       volatile  T * );
-forall( dtype T | sized(T) ) const volatile lvalue T *?( const volatile  T * );
-forall( ftype FT ) lvalue FT		 *?( FT * );
-
-_Bool			+?( _Bool ),			-?( _Bool ),			~?( _Bool );
-signed int		+?( signed int ),		-?( signed int ),		~?( signed int );
-unsigned int		+?( unsigned int ),		-?( unsigned int ),		~?( unsigned int );
-signed long int		+?( signed long int ),		-?( signed long int ),		~?( signed long int );
-unsigned long int	+?( unsigned long int ),	-?( unsigned long int ),	~?( unsigned long int );
-signed long long int	+?( signed long long int ),	-?( signed long long int ),	~?( signed long long int );
-unsigned long long int	+?( unsigned long long int ),	-?( unsigned long long int ),	~?( unsigned long long int );
-float			+?( float ),			-?( float );
-double			+?( double ),			-?( double );
-long double		+?( long double ),		-?( long double );
-float _Complex		+?( float _Complex ),		-?( float _Complex );
-double _Complex		+?( double _Complex ),		-?( double _Complex );
-long double _Complex	+?( long double _Complex ),	-?( long double _Complex );
-
-signed int	!?( signed int ),		!?( unsigned int ),
-		!?( long int ),			!?( unsigned long int ),
-		!?( long long int ),		!?( unsigned long long int ),
-		!?( float ),			!?( double ),			!?( long double ),
-		!?( float _Complex ),		!?( double _Complex ),		!?( long double _Complex );
-
-forall ( dtype DT ) int !?( const volatile DT * );
-forall ( ftype FT ) int !?( FT * );
-
-// ------------------------------------------------------------
-//
-// Section 4.5 Multiplicative Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?*?( _Bool, _Bool ),					?/?( _Bool, _Bool ),				?%?( _Bool, _Bool );
-signed int		?*?( signed int, signed int ),				?/?( signed int, signed int ),			?%?( signed int, signed int );
-unsigned int		?*?( unsigned int, unsigned int ),			?/?( unsigned int, unsigned int ),		?%?( unsigned int, unsigned int );
-signed long int		?*?( signed long int, signed long int ),		?/?( signed long int, signed long int ),	?%?( signed long int, signed long int );
-unsigned long int	?*?( unsigned long int, unsigned long int ),		?/?( unsigned long int, unsigned long int ),	?%?( unsigned long int, unsigned long int );
-signed long long int	?*?( signed long long int, signed long long int ),	?/?( signed long long int, signed long long int ), ?%?( signed long long int, signed long long int );
-unsigned long long int	?*?( unsigned long long int, unsigned long long int ),	?/?( unsigned long long int, unsigned long long int ), ?%?( unsigned long long int, unsigned long long int );
-float			?*?( float, float ),					?/?( float, float );
-double			?*?( double, double ),					?/?( double, double );
-long double		?*?( long double, long double ),			?/?( long double, long double );
-// gcc does not support _Imaginary
-//float _Imaginary	?*?( float _Imaginary, float _Imaginary),		?/?( float _Imaginary, float _Imaginary );
-//double _Imaginary	?*?( double _Imaginary, double _Imaginary),		?/?( double _Imaginary, double _Imaginary );
-//long double _Imaginary	?*?( long double _Imaginary, long double _Imaginary),	?/?( long double _Imaginary, long double _Imaginary );
-float _Complex		?*?( float _Complex, float _Complex ),			?/?( float _Complex, float _Complex );
-double _Complex		?*?( double _Complex, double _Complex ),		?/?( double _Complex, double _Complex );
-long double _Complex	?*?( long double _Complex, long double _Complex ),	?/?( long double _Complex, long double _Complex );
-
-// ------------------------------------------------------------
-//
-// Section 4.6 Additive Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?+?( _Bool, _Bool ),					?-?( _Bool, _Bool );
-signed int		?+?( signed int, signed int ),				?-?( signed int, signed int );
-unsigned int		?+?( unsigned int, unsigned int ),			?-?( unsigned int, unsigned int );
-signed long int		?+?( signed long int, signed long int ),		?-?( signed long int, signed long int );
-unsigned long int	?+?( unsigned long int, unsigned long int ),		?-?( unsigned long int, unsigned long int );
-signed long long int	?+?( signed long long int, long long int  signed),	?-?( signed long long int, signed long long int );
-unsigned long long int	?+?( unsigned long long int, unsigned long long int ),	?-?( unsigned long long int, unsigned long long int );
-float			?+?( float, float ),					?-?( float, float );
-double			?+?( double, double ),					?-?( double, double );
-long double		?+?( long double, long double ),			?-?( long double, long double );
-float _Complex		?+?( float _Complex, float _Complex ),			?-?( float _Complex, float _Complex );
-double _Complex		?+?( double _Complex, double _Complex ),		?-?( double _Complex, double _Complex );
-long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
-
-forall( otype T ) T *			?+?(		    T *,	  ptrdiff_t );
-forall( otype T ) T *			?+?(	      ptrdiff_t,		T * );
-forall( otype T ) const T *		?+?( const	    T *,	  ptrdiff_t );
-forall( otype T ) const T *		?+?(	      ptrdiff_t, const		T * );
-forall( otype T ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
-forall( otype T ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
-forall( otype T ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
-forall( otype T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
-forall( otype T ) T *			?-?(		    T *,	  ptrdiff_t );
-forall( otype T ) const T *		?-?( const	    T *,	  ptrdiff_t );
-forall( otype T ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
-forall( otype T ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
-forall( otype T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
-
-// ------------------------------------------------------------
-//
-// Section 4.7 Bitwise Shift Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?<<?( _Bool, _Bool ),					?>>?( _Bool, _Bool );
-signed int		?<<?( signed int, signed int ),				?>>?( signed int, signed int );
-unsigned int		?<<?( unsigned int, unsigned int ),			?>>?( unsigned int, unsigned int );
-signed long int		?<<?( signed long int, signed long int ),		?>>?( signed long int, signed long int );
-unsigned long int	?<<?( unsigned long int, unsigned long int ),		?>>?( unsigned long int, unsigned long int );
-signed long long int	?<<?( signed long long int, signed long long int ),	?>>?( signed long long int, signed long long int );
-unsigned long long int	?<<?( unsigned long long int, unsigned long long int ),	?>>?( unsigned long long int, unsigned long long int );
-
-// ------------------------------------------------------------
-//
-// Section 4.8 Relational Operators
-//
-// ------------------------------------------------------------
-
-signed int ?<?( _Bool, _Bool ),						?<=?( _Bool, _Bool ),
-	   ?>?( _Bool, _Bool ),						?>=?( _Bool, _Bool );
-signed int ?<?( unsigned char, unsigned char ),				?<=?( unsigned char, unsigned char ),
-	   ?>?( unsigned char, unsigned char ),				?>=?( unsigned char, unsigned char );
-signed int ?<?( signed int, signed int ),				?<=?( signed int, signed int ),
-	   ?>?( signed int, signed int ),				?>=?( signed int, signed int );
-signed int ?<?( unsigned int, unsigned int ),				?<=?( unsigned int, unsigned int ),
-	   ?>?( unsigned int, unsigned int ),				?>=?( unsigned int, unsigned int );
-signed int ?<?( signed long int, signed long int ),			?<=?( signed long int, signed long int ),
-	   ?>?( signed long int, signed long int ),			?>=?( signed long int, signed long int );
-signed int ?<?( unsigned long int, unsigned long int ),			?<=?( unsigned long int, unsigned long int ),
-	   ?>?( unsigned long int, unsigned long int ),			?>=?( unsigned long int, unsigned long int );
-signed int ?<?( signed long long int, signed long long int ),		?<=?( signed long long int, signed long long int ),
-	   ?>?( signed long long int, signed long long int ),		?>=?( signed long long int, signed long long int );
-signed int ?<?( unsigned long long int, unsigned long long int ),	?<=?( unsigned long long int, unsigned long long int ),
-	   ?>?( unsigned long long int, unsigned long long int ),	?>=?( unsigned long long int, unsigned long long int );
-signed int ?<?( float, float ),						?<=?( float, float ),
-	   ?>?( float, float ),						?>=?( float, float );
-signed int ?<?( double, double ),					?<=?( double, double ),
-	   ?>?( double, double ),					?>=?( double, double );
-signed int ?<?( long double, long double ),				?<=?( long double, long double ),
-	   ?>?( long double, long double ),				?>=?( long double, long double );
-
-forall( dtype DT ) signed int ?<?(  const volatile DT *, const volatile DT * );
-forall( dtype DT ) signed int ?>?(  const volatile DT *, const volatile DT * );
-forall( dtype DT ) signed int ?<=?( const volatile DT *, const volatile DT * );
-forall( dtype DT ) signed int ?>=?( const volatile DT *, const volatile DT * );
-
-// ------------------------------------------------------------
-//
-// Section 4.9 Equality Operators
-//
-// ------------------------------------------------------------
-
-signed int ?==?( _Bool, _Bool ),					?!=?( _Bool, _Bool );
-signed int ?==?( signed int, signed int ),				?!=?( signed int, signed int );
-signed int ?==?( unsigned int, unsigned int ),				?!=?( unsigned int, unsigned int );
-signed int ?==?( signed long int, signed long int ),			?!=?( signed long int, signed long int );
-signed int ?==?( unsigned long int, unsigned long int ),		?!=?( unsigned long int, unsigned long int );
-signed int ?==?( signed long long int, long long int  signed),		?!=?( signed long long int, signed long long int );
-signed int ?==?( unsigned long long int, unsigned long long int ),	?!=?( unsigned long long int, unsigned long long int );
-signed int ?==?( float, float ),					?!=?( float, float );
-signed int ?==?( double, double ),					?!=?( double, double );
-signed int ?==?( long double, long double ),				?!=?( long double, long double );
-signed int ?==?( float _Complex, float _Complex ),			?!=?( float _Complex, float _Complex );
-signed int ?==?( double _Complex, double _Complex ),			?!=?( double _Complex, double _Complex );
-signed int ?==?( long double _Complex, long double _Complex ),		?!=?( long double _Complex, long double _Complex );
-
-forall( dtype DT ) signed int ?==?(		   DT *,		DT * );
-forall( dtype DT ) signed int ?==?( const	   DT *, const		DT * );
-forall( dtype DT ) signed int ?==?(       volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?==?( const volatile DT *, const volatile DT * );
-forall( ftype FT ) signed int ?==?( FT *, FT * );
-forall( dtype DT ) signed int ?!=?(		   DT *,		DT * );
-forall( dtype DT ) signed int ?!=?( const	   DT *, const		DT * );
-forall( dtype DT ) signed int ?!=?(       volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?!=?( const volatile DT *, const volatile DT * );
-forall( ftype FT ) signed int ?!=?( FT *, FT * );
-
-forall( dtype DT ) signed int ?==?( const volatile DT   *, const volatile void * );
-forall( dtype DT ) signed int ?==?( const volatile void *, const volatile DT * );
-forall( dtype DT ) signed int ?!=?( const volatile DT   *, const volatile void * );
-forall( dtype DT ) signed int ?!=?( const volatile void *, const volatile DT * );
-
-forall( dtype DT ) signed int ?==?( const volatile DT *, forall( dtype DT2 )const DT2 * );
-forall( dtype DT ) signed int ?==?( forall( dtype DT2 )const DT2 *, const volatile DT * );
-forall( ftype FT ) signed int ?==?( FT *, forall( ftype FT2 )FT2 * );
-forall( ftype FT ) signed int ?==?( forall( ftype FT2 )FT2 *, FT * );
-forall( dtype DT ) signed int ?!=?( const volatile DT *, forall( dtype DT2 )const DT2 * );
-forall( dtype DT ) signed int ?!=?( forall( dtype DT2 )const DT2 *, const volatile DT * );
-forall( ftype FT ) signed int ?!=?( FT *, forall( ftype FT2 )FT2 * );
-forall( ftype FT ) signed int ?!=?( forall( ftype FT2 )FT2 *, FT * );
-
-// ------------------------------------------------------------
-//
-// Section 4.10 Bitwise AND Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?&?( _Bool, _Bool );
-signed int		?&?( signed int, signed int );
-unsigned int		?&?( unsigned int, unsigned int );
-signed long int		?&?( signed long int, signed long int );
-unsigned long int	?&?( unsigned long int, unsigned long int );
-signed long long int	?&?( signed long long int, signed long long int );
-unsigned long long int	?&?( unsigned long long int, unsigned long long int );
-
-// ------------------------------------------------------------
-//
-// Section 4.11 Bitwise XOR Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?^?( _Bool, _Bool );
-signed int		?^?( signed int, signed int );
-unsigned int		?^?( unsigned int, unsigned int );
-signed long int		?^?( signed long int, signed long int );
-unsigned long int	?^?( unsigned long int, unsigned long int );
-signed long long int	?^?( signed long long int, signed long long int );
-unsigned long long int	?^?( unsigned long long int, unsigned long long int );
-
-// ------------------------------------------------------------
-//
-// Section 4.12 Bitwise OR Operators
-//
-// ------------------------------------------------------------
-
-_Bool			?|?( _Bool, _Bool );
-signed int		?|?( signed int, signed int );
-unsigned int		?|?( unsigned int, unsigned int );
-signed long int		?|?( signed long int, signed long int );
-unsigned long int	?|?( unsigned long int, unsigned long int );
-signed long long int	?|?( signed long long int, signed long long int );
-unsigned long long int	?|?( unsigned long long int, unsigned long long int );
-
-// ------------------------------------------------------------
-//
-// Section 4.16 Assignment Operator
-//
-// ------------------------------------------------------------
-
-forall( ftype FT ) FT *			?=?( FT **, FT * );
-forall( ftype FT ) FT *			?=?( FT * volatile *, FT * );
-
-forall( dtype DT ) DT *			?=?(		     DT *	   *,			DT * );
-forall( dtype DT ) DT *			?=?(		     DT * volatile *,			DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT *	   *,			DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT * volatile *,			DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT *	   *, const		DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT * volatile *, const		DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,			DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,			DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,	    volatile	DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,	    volatile	DT * );
-
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,			DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *,			DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *, const		DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *, const		DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *,	    volatile	DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *,	    volatile	DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *, const volatile	DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *, const volatile	DT * );
-
-forall( dtype DT ) DT *			?=?(		     DT *	   *,			void * );
-forall( dtype DT ) DT *			?=?(		     DT * volatile *,			void * );
-forall( dtype DT ) const DT *		?=?( const	     DT *	   *,			void * );
-forall( dtype DT ) const DT *		?=?( const	     DT * volatile *,			void * );
-forall( dtype DT ) const DT *		?=?( const	     DT *	   *, const		void * );
-forall( dtype DT ) const DT *		?=?( const	     DT * volatile *, const		void * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,			void * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,			void * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,	    volatile	void * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,	    volatile	void * );
-
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,			void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *,			void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *, const		void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *, const		void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,	    volatile	void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *,	    volatile	void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *, const volatile	void * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *, const volatile	void * );
-
-forall( dtype DT ) void *		 ?=?(		     void *	     *,			DT * );
-forall( dtype DT ) void *		 ?=?(		     void * volatile *,			DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void *	     *,			DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void * volatile *,			DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void *	     *, const		DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void * volatile *, const		DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     *,			DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile *,			DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     *,	      volatile	DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile *,	      volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *,			DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *,			DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *, const		DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *, const		DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *,	      volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *,	      volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *, const volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *, const volatile	DT * );
-
-void *			?=?(		    void *	    *,		      void * );
-void *			?=?(		    void * volatile *,		      void * );
-const void *		?=?( const	    void *	    *,		      void * );
-const void *		?=?( const	    void * volatile *,		      void * );
-const void *		?=?( const	    void *	    *, const	      void * );
-const void *		?=?( const	    void * volatile *, const	      void * );
-volatile void *		?=?(	   volatile void *	    *,		      void * );
-volatile void *		?=?(	   volatile void * volatile *,		      void * );
-volatile void *		?=?(	   volatile void *	    *,	     volatile void * );
-volatile void *		?=?(	   volatile void * volatile *,	     volatile void * );
-const volatile void *	?=?( const volatile void *	    *,		      void * );
-const volatile void *	?=?( const volatile void * volatile *,		      void * );
-const volatile void *	?=?( const volatile void *	    *, const	      void * );
-const volatile void *	?=?( const volatile void * volatile *, const	      void * );
-const volatile void *	?=?( const volatile void *	    *,	     volatile void * );
-const volatile void *	?=?( const volatile void * volatile *,	     volatile void * );
-const volatile void *	?=?( const volatile void *	    *, const volatile void * );
-const volatile void *	?=?( const volatile void * volatile *, const volatile void * );
-
-//forall( dtype DT ) DT *			?=?(		    DT *	  *, forall( dtype DT2 ) const DT2 * );
-//forall( dtype DT ) DT *			?=?(		    DT * volatile *, forall( dtype DT2 ) const DT2 * );
-forall( dtype DT ) const DT *		?=?( const	    DT *	  *, forall( dtype DT2 ) const DT2 * );
-forall( dtype DT ) const DT *		?=?( const	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
-//forall( dtype DT ) volatile DT *	?=?( volatile	    DT *	  *, forall( dtype DT2 ) const DT2 * );
-//forall( dtype DT ) volatile DT *	?=?( volatile	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile DT *	  *, forall( dtype DT2 ) const DT2 * );
-forall( dtype DT ) const volatile DT *	?=?( const volatile DT * volatile *, forall( dtype DT2 ) const DT2 * );
-
-forall( ftype FT ) FT *			?=?( FT *	   *, forall( ftype FT2 ) FT2 * );
-forall( ftype FT ) FT *			?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
-
-forall( otype T ) T *			?+=?(		     T *	  *, ptrdiff_t );
-forall( otype T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
-forall( otype T ) const T *		?+=?( const	     T *	  *, ptrdiff_t );
-forall( otype T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
-forall( otype T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
-forall( otype T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
-forall( otype T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
-forall( otype T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
-forall( otype T ) T *			?-=?(		     T *	  *, ptrdiff_t );
-forall( otype T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
-forall( otype T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
-forall( otype T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
-forall( otype T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
-forall( otype T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
-forall( otype T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
-forall( otype T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
-
-_Bool			?=?( _Bool *, _Bool ),					?=?( volatile _Bool *, _Bool );
-char			?=?( char *, char ),					?=?( volatile char *, char );
-char signed		?=?( char signed *, char signed ),			?=?( volatile char signed *, char signed );
-char unsigned		?=?( char unsigned *, char unsigned ),			?=?( volatile char unsigned *, char unsigned );
-int short		?=?( int short *, int short ),				?=?( volatile int short *, int short );
-int short unsigned	?=?( int short unsigned *, int short unsigned ),	?=?( volatile int short unsigned *, int short unsigned );
-signed int		?=?( signed int *, signed int ),			?=?( volatile signed int *, signed int );
-unsigned int		?=?( unsigned *, unsigned ),				?=?( volatile unsigned *, unsigned );
-signed long int		?=?( signed long int *, signed long int ),		?=?( volatile signed long int *, signed long int );
-unsigned long int	?=?( unsigned long int *, unsigned long int ),		?=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?=?( signed long long int *, signed long long int ),	?=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?=?( unsigned long long int *, unsigned long long int ), ?=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?*=?( _Bool *, _Bool ),					?*=?( volatile _Bool *, _Bool );
-char			?*=?( char *, char ),					?*=?( volatile char *, char );
-char signed		?*=?( char signed *, char signed ),			?*=?( volatile char signed *, char signed );
-char unsigned		?*=?( char unsigned *, char unsigned ),			?*=?( volatile char unsigned *, char unsigned );
-int short		?*=?( int short *, int short ),				?*=?( volatile int short *, int short );
-int short unsigned	?*=?( int short unsigned *, int short unsigned ),	?*=?( volatile int short unsigned *, int short unsigned );
-signed int		?*=?( signed int *, signed int ),			?*=?( volatile signed int *, signed int );
-unsigned int		?*=?( unsigned *, unsigned ),				?*=?( volatile unsigned *, unsigned );
-signed long int		?*=?( signed long int *, signed long int ),		?*=?( volatile signed long int *, signed long int );
-unsigned long int	?*=?( unsigned long int *, unsigned long int ),		?*=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?*=?( signed long long int *, signed long long int ),	?*=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?*=?( unsigned long long int *, unsigned long long int ), ?*=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?/=?( _Bool *, _Bool ),					?/=?( volatile _Bool *, _Bool );
-char			?/=?( char *, char ),					?/=?( volatile char *, char );
-char signed		?/=?( char signed *, char signed ),			?/=?( volatile char signed *, char signed );
-char unsigned		?/=?( char unsigned *, char unsigned ),			?/=?( volatile char unsigned *, char unsigned );
-int short		?/=?( int short *, int short ),				?/=?( volatile int short *, int short );
-int short unsigned	?/=?( int short unsigned *, int short unsigned ),	?/=?( volatile int short unsigned *, int short unsigned );
-signed int		?/=?( signed int *, signed int ),			?/=?( volatile signed int *, signed int );
-unsigned int		?/=?( unsigned *, unsigned ),				?/=?( volatile unsigned *, unsigned );
-signed long int		?/=?( signed long int *, signed long int ),		?/=?( volatile signed long int *, signed long int );
-unsigned long int	?/=?( unsigned long int *, unsigned long int ),		?/=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?/=?( signed long long int *, signed long long int ),	?/=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?/=?( unsigned long long int *, unsigned long long int ), ?/=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?%=?( _Bool *, _Bool ),					?%=?( volatile _Bool *, _Bool );
-char			?%=?( char *, char ),					?%=?( volatile char *, char );
-char signed		?%=?( char signed *, char signed ),			?%=?( volatile char signed *, char signed );
-char unsigned		?%=?( char unsigned *, char unsigned ),			?%=?( volatile char unsigned *, char unsigned );
-int short		?%=?( int short *, int short ),				?%=?( volatile int short *, int short );
-int short unsigned	?%=?( int short unsigned *, int short unsigned ),	?%=?( volatile int short unsigned *, int short unsigned );
-signed int		?%=?( signed int *, signed int ),			?%=?( volatile signed int *, signed int );
-unsigned int		?%=?( unsigned *, unsigned ),				?%=?( volatile unsigned *, unsigned );
-signed long int		?%=?( signed long int *, signed long int ),		?%=?( volatile signed long int *, signed long int );
-unsigned long int	?%=?( unsigned long int *, unsigned long int ),		?%=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?%=?( signed long long int *, signed long long int ),	?%=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?%=?( unsigned long long int *, unsigned long long int ), ?%=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?+=?( _Bool *, _Bool ),					?+=?( volatile _Bool *, _Bool );
-char			?+=?( char *, char ),					?+=?( volatile char *, char );
-char signed		?+=?( char signed *, char signed ),			?+=?( volatile char signed *, char signed );
-char unsigned		?+=?( char unsigned *, char unsigned ),			?+=?( volatile char unsigned *, char unsigned );
-int short		?+=?( int short *, int short ),				?+=?( volatile int short *, int short );
-int short unsigned	?+=?( int short unsigned *, int short unsigned ),	?+=?( volatile int short unsigned *, int short unsigned );
-signed int		?+=?( signed int *, signed int ),			?+=?( volatile signed int *, signed int );
-unsigned int		?+=?( unsigned *, unsigned ),				?+=?( volatile unsigned *, unsigned );
-signed long int		?+=?( signed long int *, signed long int ),		?+=?( volatile signed long int *, signed long int );
-unsigned long int	?+=?( unsigned long int *, unsigned long int ),		?+=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?+=?( signed long long int *, signed long long int ),	?+=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?+=?( unsigned long long int *, unsigned long long int ), ?+=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?-=?( _Bool *, _Bool ),					?-=?( volatile _Bool *, _Bool );
-char			?-=?( char *, char ),					?-=?( volatile char *, char );
-char signed		?-=?( char signed *, char signed ),			?-=?( volatile char signed *, char signed );
-char unsigned		?-=?( char unsigned *, char unsigned ),			?-=?( volatile char unsigned *, char unsigned );
-int short		?-=?( int short *, int short ),				?-=?( volatile int short *, int short );
-int short unsigned	?-=?( int short unsigned *, int short unsigned ),	?-=?( volatile int short unsigned *, int short unsigned );
-signed int		?-=?( signed int *, signed int ),			?-=?( volatile signed int *, signed int );
-unsigned int		?-=?( unsigned *, unsigned ),				?-=?( volatile unsigned *, unsigned );
-signed long int		?-=?( signed long int *, signed long int ),		?-=?( volatile signed long int *, signed long int );
-unsigned long int	?-=?( unsigned long int *, unsigned long int ),		?-=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?-=?( signed long long int *, signed long long int ),	?-=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?-=?( unsigned long long int *, unsigned long long int ), ?-=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?<<=?( _Bool *, _Bool ),				?<<=?( volatile _Bool *, _Bool );
-char			?<<=?( char *, char ),					?<<=?( volatile char *, char );
-char signed		?<<=?( char signed *, char signed ),			?<<=?( volatile char signed *, char signed );
-char unsigned		?<<=?( char unsigned *, char unsigned ),		?<<=?( volatile char unsigned *, char unsigned );
-int short		?<<=?( int short *, int short ),			?<<=?( volatile int short *, int short );
-int short unsigned	?<<=?( int short unsigned *, int short unsigned ),	?<<=?( volatile int short unsigned *, int short unsigned );
-signed int		?<<=?( signed int *, signed int ),			?<<=?( volatile signed int *, signed int );
-unsigned int		?<<=?( unsigned *, unsigned ),				?<<=?( volatile unsigned *, unsigned );
-signed long int		?<<=?( signed long int *, signed long int ),		?<<=?( volatile signed long int *, signed long int );
-unsigned long int	?<<=?( unsigned long int *, unsigned long int ),	?<<=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?<<=?( signed long long int *, signed long long int ),	?<<=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?<<=?( unsigned long long int *, unsigned long long int ), ?<<=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?>>=?( _Bool *, _Bool ),				?>>=?( volatile _Bool *, _Bool );
-char			?>>=?( char *, char ),					?>>=?( volatile char *, char );
-char signed		?>>=?( char signed *, char signed ),			?>>=?( volatile char signed *, char signed );
-char unsigned		?>>=?( char unsigned *, char unsigned ),		?>>=?( volatile char unsigned *, char unsigned );
-int short		?>>=?( int short *, int short ),			?>>=?( volatile int short *, int short );
-int short unsigned	?>>=?( int short unsigned *, int short unsigned ),	?>>=?( volatile int short unsigned *, int short unsigned );
-signed int		?>>=?( signed int *, signed int ),			?>>=?( volatile signed int *, signed int );
-unsigned int		?>>=?( unsigned *, unsigned ),				?>>=?( volatile unsigned *, unsigned );
-signed long int		?>>=?( signed long int *, signed long int ),		?>>=?( volatile signed long int *, signed long int );
-unsigned long int	?>>=?( unsigned long int *, unsigned long int ),	?>>=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?>>=?( signed long long int *, signed long long int ),	?>>=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?>>=?( unsigned long long int *, unsigned long long int ), ?>>=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?&=?( _Bool *, _Bool ),					?&=?( volatile _Bool *, _Bool );
-char			?&=?( char *, char ),					?&=?( volatile char *, char );
-char signed		?&=?( char signed *, char signed ),			?&=?( volatile char signed *, char signed );
-char unsigned		?&=?( char unsigned *, char unsigned ),			?&=?( volatile char unsigned *, char unsigned );
-int short		?&=?( int short *, int short ),				?&=?( volatile int short *, int short );
-int short unsigned	?&=?( int short unsigned *, int short unsigned ),	?&=?( volatile int short unsigned *, int short unsigned );
-signed int		?&=?( signed int *, signed int ),			?&=?( volatile signed int *, signed int );
-unsigned int		?&=?( unsigned *, unsigned ),				?&=?( volatile unsigned *, unsigned );
-signed long int		?&=?( signed long int *, signed long int ),		?&=?( volatile signed long int *, signed long int );
-unsigned long int	?&=?( unsigned long int *, unsigned long int ),		?&=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?&=?( signed long long int *, signed long long int ),	?&=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?&=?( unsigned long long int *, unsigned long long int ), ?&=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?|=?( _Bool *, _Bool ),					?|=?( volatile _Bool *, _Bool );
-char			?|=?( char *, char ),					?|=?( volatile char *, char );
-char signed		?|=?( char signed *, char signed ),			?|=?( volatile char signed *, char signed );
-char unsigned		?|=?( char unsigned *, char unsigned ),			?|=?( volatile char unsigned *, char unsigned );
-int short		?|=?( int short *, int short ),				?|=?( volatile int short *, int short );
-int short unsigned	?|=?( int short unsigned *, int short unsigned ),	?|=?( volatile int short unsigned *, int short unsigned );
-signed int		?|=?( signed int *, signed int ),			?|=?( volatile signed int *, signed int );
-unsigned int		?|=?( unsigned *, unsigned ),				?|=?( volatile unsigned *, unsigned );
-signed long int		?|=?( signed long int *, signed long int ),		?|=?( volatile signed long int *, signed long int );
-unsigned long int	?|=?( unsigned long int *, unsigned long int ),		?|=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?|=?( signed long long int *, signed long long int ),	?|=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?|=?( unsigned long long int *, unsigned long long int ), ?|=?( volatile unsigned long long int *, unsigned long long int );
-
-_Bool			?^=?( _Bool *, _Bool ),					?^=?( volatile _Bool *, _Bool );
-char			?^=?( char *, char ),					?^=?( volatile char *, char );
-char signed		?^=?( char signed *, char signed ),			?^=?( volatile char signed *, char signed );
-char unsigned		?^=?( char unsigned *, char unsigned ),			?^=?( volatile char unsigned *, char unsigned );
-int short		?^=?( int short *, int short ),				?^=?( volatile int short *, int short );
-int short unsigned	?^=?( int short unsigned *, int short unsigned ),	?^=?( volatile int short unsigned *, int short unsigned );
-signed int		?^=?( signed int *, signed int ),			?^=?( volatile signed int *, signed int );
-unsigned int		?^=?( unsigned *, unsigned ),				?^=?( volatile unsigned *, unsigned );
-signed long int		?^=?( signed long int *, signed long int ),		?^=?( volatile signed long int *, signed long int );
-unsigned long int	?^=?( unsigned long int *, unsigned long int ),		?^=?( volatile unsigned long int *, unsigned long int );
-signed long long int	?^=?( signed long long int *, signed long long int ),	?^=?( volatile signed long long int *, signed long long int );
-unsigned long long int	?^=?( unsigned long long int *, unsigned long long int ), ?^=?( volatile unsigned long long int *, unsigned long long int );
-
-float			?=?(  float *, float ), ?=?(  volatile float *, float ),
-			?*=?( float *, float ), ?*=?( volatile float *, float ),
-			?/=?( float *, float ), ?/=?( volatile float *, float ),
-			?+=?( float *, float ), ?+=?( volatile float *, float ),
-			?-=?( float *, float ), ?-=?( volatile float *, float );
-
-double			?=?(  double *, double ), ?=?(  volatile double *, double ),
-			?*=?( double *, double ), ?*=?( volatile double *, double ),
-			?/=?( double *, double ), ?/=?( volatile double *, double ),
-			?+=?( double *, double ), ?+=?( volatile double *, double ),
-			?-=?( double *, double ), ?-=?( volatile double *, double );
-
-long double		?=?(  long double *, long double ), ?=?(  volatile long double *, long double ),
-			?*=?( long double *, long double ), ?*=?( volatile long double *, long double ),
-			?/=?( long double *, long double ), ?/=?( volatile long double *, long double ),
-			?+=?( long double *, long double ), ?+=?( volatile long double *, long double ),
-			?-=?( long double *, long double ), ?-=?( volatile long double *, long double );
-
-float _Complex		?=?(  float _Complex *, float _Complex ), ?=?(  volatile float _Complex *, float _Complex ),
-			?*=?( float _Complex *, float _Complex ), ?*=?( volatile float _Complex *, float _Complex ),
-			?/=?( float _Complex *, float _Complex ), ?/=?( volatile float _Complex *, float _Complex ),
-			?+=?( float _Complex *, float _Complex ), ?+=?( volatile float _Complex *, float _Complex ),
-			?-=?( float _Complex *, float _Complex ), ?-=?( volatile float _Complex *, float _Complex );
-
-double _Complex		?=?(  double _Complex *, double _Complex ), ?=?(  volatile double _Complex *, double _Complex ),
-			?*=?( double _Complex *, double _Complex ), ?*=?( volatile double _Complex *, double _Complex ),
-			?/=?( double _Complex *, double _Complex ), ?/=?( volatile double _Complex *, double _Complex ),
-			?+=?( double _Complex *, double _Complex ), ?+=?( volatile double _Complex *, double _Complex ),
-			?-=?( double _Complex *, double _Complex ), ?-=?( volatile double _Complex *, double _Complex );
-
-long double _Complex	?=?(  long double _Complex *, long double _Complex ), ?=?(  volatile long double _Complex *, long double _Complex ),
-			?*=?( long double _Complex *, long double _Complex ), ?*=?( volatile long double _Complex *, long double _Complex ),
-			?/=?( long double _Complex *, long double _Complex ), ?/=?( volatile long double _Complex *, long double _Complex ),
-			?+=?( long double _Complex *, long double _Complex ), ?+=?( volatile long double _Complex *, long double _Complex ),
-			?-=?( long double _Complex *, long double _Complex ), ?-=?( volatile long double _Complex *, long double _Complex );
-
-
-
-
-
-// ------------------------------------------------------------
-//
-// Section ??? Constructors and Destructors
-//
-// ------------------------------------------------------------
-
-// default ctor
-void	?{}( _Bool * );
-void	?{}( char * );
-void	?{}( unsigned char * );
-void	?{}( char signed * );
-void	?{}( int short * );
-void	?{}( int short unsigned * );
-void	?{}( signed int * );
-void	?{}( unsigned int * );
-void	?{}( signed long int * );
-void	?{}( unsigned long int * );
-void	?{}( signed long long int * );
-void	?{}( unsigned long long int * );
-void	?{}( float * );
-void	?{}( double * );
-void	?{}( long double * );
-void	?{}( float _Complex * );
-void	?{}( double _Complex * );
-void	?{}( long double _Complex * );
-
-// copy ctor
-void	?{}( _Bool *, _Bool );
-void	?{}( char *, char );
-void	?{}( unsigned char *, unsigned char );
-void	?{}( char signed *, char signed );
-void	?{}( int short *, int short );
-void	?{}( int short unsigned *, int short unsigned );
-void	?{}( signed int *, signed int);
-void	?{}( unsigned int *, unsigned int);
-void	?{}( signed long int *, signed long int);
-void	?{}( unsigned long int *, unsigned long int);
-void	?{}( signed long long int *, signed long long int);
-void	?{}( unsigned long long int *, unsigned long long int);
-void	?{}( float *, float);
-void	?{}( double *, double);
-void	?{}( long double *, long double);
-void	?{}( float _Complex *, float _Complex);
-void	?{}( double _Complex *, double _Complex);
-void	?{}( long double _Complex *, long double _Complex);
-
-// dtor
-void	^?{}( _Bool * );
-void	^?{}( char * );
-void	^?{}( char unsigned * );
-void	^?{}( char signed * );
-void	^?{}( int short * );
-void	^?{}( int short unsigned * );
-void	^?{}( signed int * );
-void	^?{}( unsigned int * );
-void	^?{}( signed long int * );
-void	^?{}( unsigned long int * );
-void	^?{}( signed long long int * );
-void	^?{}( unsigned long long int * );
-void	^?{}( float * );
-void	^?{}( double * );
-void	^?{}( long double * );
-void	^?{}( float _Complex * );
-void	^?{}( double _Complex * );
-void	^?{}( long double _Complex * );
-
-// // default ctor
-// forall( dtype DT ) void	 ?{}(		     DT ** );
-// forall( dtype DT ) void	 ?{}( const	     DT ** );
-// forall( dtype DT ) void	 ?{}(	    volatile DT ** );
-// forall( dtype DT ) void	 ?{}( const volatile DT ** );
-
-// // copy ctor
-// forall( dtype DT ) void	 ?{}(		     DT **, DT* );
-// forall( dtype DT ) void	 ?{}( const	     DT **, DT* );
-// forall( dtype DT ) void	 ?{}(	    volatile DT **, DT* );
-// forall( dtype DT ) void	 ?{}( const volatile DT **, DT* );
-
-// // dtor
-// forall( dtype DT ) void	^?{}(		     DT ** );
-// forall( dtype DT ) void	^?{}( const	     DT ** );
-// forall( dtype DT ) void	^?{}(	    volatile DT ** );
-// forall( dtype DT ) void	^?{}( const volatile DT ** );
-
-// copied from assignment section
-// copy constructors
-forall( ftype FT ) void ?{}( FT **, FT * );
-forall( ftype FT ) void ?{}( FT * volatile *, FT * );
-
-forall( dtype DT ) void ?{}(		     DT *	   *,			DT * );
-forall( dtype DT ) void ?{}( const	     DT *	   *,			DT * );
-forall( dtype DT ) void ?{}( const	     DT *	   *, const		DT * );
-forall( dtype DT ) void ?{}(	   volatile  DT *	   *,			DT * );
-forall( dtype DT ) void ?{}(	   volatile  DT *	   *,	    volatile	DT * );
-
-forall( dtype DT ) void ?{}( const volatile  DT *	   *,			DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   *, const		DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   *,	    volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   *, const volatile	DT * );
-
-forall( dtype DT ) void ?{}(		     DT *	   *,			void * );
-forall( dtype DT ) void ?{}( const	     DT *	   *,			void * );
-forall( dtype DT ) void ?{}( const	     DT *	   *, const		void * );
-forall( dtype DT ) void ?{}(	   volatile  DT *	   *,			void * );
-forall( dtype DT ) void ?{}(	   volatile  DT *	   *,	    volatile	void * );
-
-forall( dtype DT ) void ?{}( const volatile  DT *	   *,			void * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   *, const		void * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   *,	    volatile	void * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   *, const volatile	void * );
-
-forall( dtype DT ) void ?{}(		     void *	     *,			DT * );
-forall( dtype DT ) void ?{}( const	     void *	     *,			DT * );
-forall( dtype DT ) void ?{}( const	     void *	     *, const		DT * );
-forall( dtype DT ) void ?{}(	    volatile void *	     *,			DT * );
-forall( dtype DT ) void ?{}(	    volatile void *	     *,	      volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     *,			DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     *, const		DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     *,	      volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     *, const volatile	DT * );
-
-void 	?{}(		    void *	    *,		      void * );
-void 	?{}( const	    void *	    *,		      void * );
-void 	?{}( const	    void *	    *, const	      void * );
-void 	?{}(	   volatile void *	    *,		      void * );
-void 	?{}(	   volatile void *	    *,	     volatile void * );
-void 	?{}( const volatile void *	    *,		      void * );
-void 	?{}( const volatile void *	    *, const	      void * );
-void 	?{}( const volatile void *	    *,	     volatile void * );
-void 	?{}( const volatile void *	    *, const volatile void * );
-
-//forall( dtype DT ) void ?{}(		    DT *	  *, forall( dtype DT2 ) const DT2 * );
-//forall( dtype DT ) void ?{}(		    DT * volatile *, forall( dtype DT2 ) const DT2 * );
-forall( dtype DT ) void ?{}( const	    DT *	  *, forall( dtype DT2 ) const DT2 * );
-//forall( dtype DT ) void ?{}( volatile	    DT *	  *, forall( dtype DT2 ) const DT2 * );
-//forall( dtype DT ) void ?{}( volatile	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
-forall( dtype DT ) void ?{}( const volatile DT *	  *, forall( dtype DT2 ) const DT2 * );
-
-forall( ftype FT ) void	?{}( FT *	   *, forall( ftype FT2 ) FT2 * );
-
-// default ctors
-forall( ftype FT ) void	?{}( FT *	   * );
-
-forall( dtype DT ) void	?{}(		     DT *	   *);
-forall( dtype DT ) void	?{}( const	     DT *	   *);
-forall( dtype DT ) void	?{}(	   volatile  DT *	   *);
-forall( dtype DT ) void ?{}( const volatile  DT *	   *);
-
-void 	?{}(		    void *	    *);
-void 	?{}( const	    void *	    *);
-void 	?{}(	   volatile void *	    *);
-void 	?{}( const volatile void *	    *);
-
-// dtors
-forall( ftype FT ) void	^?{}( FT *	   * );
-
-forall( dtype DT ) void	^?{}(		     DT *	   *);
-forall( dtype DT ) void	^?{}( const	     DT *	   *);
-forall( dtype DT ) void	^?{}(	   volatile  DT *	   *);
-forall( dtype DT ) void ^?{}( const volatile  DT *	   *);
-
-void 	^?{}(		    void *	    *);
-void 	^?{}( const	    void *	    *);
-void 	^?{}(	   volatile void *	    *);
-void 	^?{}( const volatile void *	    *);
-
-// Local Variables: //
-// mode: c //
-// tab-width: 8 //
-// End: //
Index: c/libcfa/prototypes.awk
===================================================================
--- src/libcfa/prototypes.awk	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,135 +1,0 @@
-#
-# Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-#
-# The contents of this file are covered under the licence agreement in the
-# file "LICENCE" distributed with Cforall.
-#
-# prototypes.awk -- 
-#
-# Author           : Peter A. Buhr
-# Created On       : Sat May 16 07:57:37 2015
-# Last Modified By : Peter A. Buhr
-# Last Modified On : Tue Jul  5 14:32:52 2016
-# Update Count     : 32
-# 
-
-# http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def
-
-BEGIN {
-    FS = "("
-    # order so string search is longest string
-    types[0]  = "UINTMAX";					vtypes[0]  = "unsigned long int"
-    types[1]  = "UINT16";					vtypes[1]  = "short int"
-    types[2]  = "UINT32";					vtypes[2]  = "int"
-    types[3]  = "UINT64";					vtypes[3]  = "long long int"
-    types[4]  = "UINT";						vtypes[4]  = "unsigned int"
-    types[5]  = "INTMAX";					vtypes[5]  = "long int"
-    types[6]  = "INTPTR";					vtypes[6]  = "int *"
-    types[7]  = "WINT";						vtypes[7]  = "unsigned int"
-    types[8]  = "INT";						vtypes[8]  = "int"
-    types[9]  = "ULONGLONG";				vtypes[9]  = "unsigned long long"
-    types[10] = "ULONG";					vtypes[10] = "unsigned long"
-    types[11] = "UNSIGNED";					vtypes[11] = "unsigned"
-    types[12] = "COMPLEX_LONGDOUBLE";		vtypes[12] = "_Complex long double"
-    types[13] = "COMPLEX_DOUBLE";			vtypes[13] = "_Complex double"
-    types[14] = "COMPLEX_FLOAT";			vtypes[14] = "_Complex float"
-    types[15] = "LONGDOUBLEPTR";			vtypes[15] = "long double *"
-    types[16] = "LONGDOUBLE";				vtypes[16] = "long double"
-    types[17] = "LONGLONG";					vtypes[17] = "long long"
-    types[18] = "LONG";						vtypes[18] = "long"
-    types[19] = "DFLOAT32";					vtypes[19] = "_Decimal32"
-    types[20] = "DFLOAT64";					vtypes[20] = "_Decimal64"
-    types[21] = "DFLOAT128";				vtypes[21] = "_Decimal128"
-    types[22] = "DOUBLEPTR";				vtypes[22] = "double *"
-    types[23] = "DOUBLE";					vtypes[23] = "double"
-    types[24] = "FLOATPTR";					vtypes[24] = "float *"
-    types[25] = "FLOAT";					vtypes[25] = "float"
-    types[26] = "CONST_PTR";				vtypes[26] = "const void *"
-    types[27] = "CONST_STRING";				vtypes[27] = "const char *"
-    types[28] = "PTR_FN_VOID_VAR_PTR_SIZE";	vtypes[28] = ""
-    types[29] = "PTR_CONST_STRING";			vtypes[29] = "char *const"
-    types[30] = "PTRMODE_PTR";				vtypes[30] = ""
-    types[31] = "PTRPTR";					vtypes[31] = "void **"
-    types[32] = "PTR";						vtypes[32] = "void *"
-    types[33] = "VOID";						vtypes[33] = "void"
-    types[34] = "STRING";					vtypes[34] = "char *"
-    types[35] = "FILEPTR";					vtypes[35] = "struct _IO_FILE *"
-    types[36] = "SIZE";						vtypes[36] = "unsigned long"
-    types[37] = "VAR";						vtypes[37] = "..."
-    types[38] = "VALIST_ARG";				vtypes[38] = "__builtin_va_list"
-    types[39] = "VALIST_REF";				vtypes[39] = "__builtin_va_list"
-    types[40] = "UNWINDWORD";				vtypes[40] = "void *"
-    types[41] = "WORD";						vtypes[41] = ""
-    types[42] = "SSIZE";					vtypes[42] = "long int"
-    types[43] = "PID";						vtypes[43] = "int"
-    N = 44
-} # BEGIN
-
-/^BT_/ { prototypes[$1] = $1 }
-
-END {
-    printf( "#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)\n" );
-    printf( "#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);\n" );
-    printf( "#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)\n\n" );
-
-    # generate C types for macros names
-    for ( i = 0; i < N; i += 1 ) {
-		printf( "#define BT_%s %s\n", types[i], vtypes[i] )
-    } # for
-    printf( "\n" )
-
-    for ( prototype in prototypes ) {
-		if ( index( "BT_LAST", prototype ) == 1 ) {
-			continue
-		} # if
-
-		printf( "#define %s(NAME) FUNC_SIMPLE(", prototype )
-
-		if ( sub( "BT_FN_", "", prototype ) == 0 ) {
-			printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype )
-			exit 0
-		} # if
-
-		# generate function return type as macro
-		for ( t = 0; t < N; t += 1 ) {					# find longest match 
-			type = types[t];
-			if ( index( prototype, type ) == 1 ) {		# found match
-				printf( "BT_%s, NAME", type )
-				sub( type, "", prototype )
-				break;
-			} # if
-		} # for
-
-		# generate function parameter types as macro
-		if ( index( prototype, "VAR" ) != 2 ) {			# C-style empty parameters ?
-			for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed
-				sub( "_", "", prototype)				# remove "_"
-				printf( ", ", type )
-				temp = prototype
-				for ( t = 0; t < N; t += 1 ) {			# find longest match
-					type = types[t];
-					if ( index( prototype, type ) == 1 ) { # found match
-						printf( "BT_%s", type )
-						sub( type, "", prototype )
-						break;
-					} # if
-				} # for
-				if ( temp == prototype ) {				# no match found for parameter in macro table
-					printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype )
-					exit 0
-				} # if
-			} # for
-		} # if
-		printf( ")\n" )
-    } # for
-
-	# extras
-	printf( "\n#include \"builtins.def\"\n\n" );
-	printf( "extern const char *__PRETTY_FUNCTION__;\n" );
-} # END
-
-# Local Variables: #
-# tab-width: 4 #
-# mode: awk #
-# compile-command: "make install" #
-# End: #
Index: c/libcfa/prototypes.c
===================================================================
--- src/libcfa/prototypes.c	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ 	(revision )
@@ -1,2 +1,0 @@
-#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)
-#include "builtins.def"
Index: src/libcfa/stdhdr/assert.h
===================================================================
--- src/libcfa/stdhdr/assert.h	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/libcfa/stdhdr/assert.h	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -14,7 +14,14 @@
 // 
 
+#ifdef __CFORALL__
 extern "C" {
-#include_next <assert.h>								// has internal check for multiple expansion
+#endif //__CFORALL__
+
+// has internal check for multiple expansion
+#include_next <assert.h>
+
+#ifdef __CFORALL__
 } // extern "C"
+#endif //__CFORALL__
 
 // Local Variables: //
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/main.cc	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Oct 30 10:11:38 2016
-// Update Count     : 435
+// Last Modified On : Wed Dec 14 14:35:54 2016
+// Update Count     : 436
 //
 
@@ -178,10 +178,10 @@
 		if ( ! nopreludep ) {							// include gcc builtins
 			// -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here.
-			FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
+			FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
 			assertf( builtins, "cannot open builtins.cf\n" );
 			parse( builtins, LinkageSpec::Compiler );
 
 			// read the extra prelude in, if not generating the cfa library
-			FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
+			FILE * extras = fopen( libcfap | treep ? "../prelude/extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
 			assertf( extras, "cannot open extras.cf\n" );
 			parse( extras, LinkageSpec::C );
@@ -189,5 +189,5 @@
 			if ( ! libcfap ) {
 				// read the prelude in, if not generating the cfa library
-				FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
+				FILE * prelude = fopen( treep ? "../prelude/prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
 				assertf( prelude, "cannot open prelude.cf\n" );
 				parse( prelude, LinkageSpec::Intrinsic );
Index: src/prelude/Makefile.am
===================================================================
--- src/prelude/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,48 @@
+######################## -*- Mode: Makefile-Automake -*- ######################
+##
+## Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+##
+## The contents of this file are covered under the licence agreement in the
+## file "LICENCE" distributed with Cforall.
+##
+## Makefile.am --
+##
+## Author           : Peter A. Buhr
+## Created On       : Sun May 31 08:54:01 2015
+## Last Modified By : Peter A. Buhr
+## Last Modified On : Wed Dec 14 15:00:35 2016
+## Update Count     : 205
+###############################################################################
+
+# create object files in directory with source files
+AUTOMAKE_OPTIONS = subdir-objects
+
+# put into lib for now
+cfalibdir = ${libdir}
+cfalib_DATA = builtins.cf extras.cf prelude.cf
+noinst_DATA = ../libcfa/libcfa-prelude.c
+
+# create extra forward types/declarations to reduce inclusion of library files
+extras.cf : extras.regx extras.c
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
+
+# create forward declarations for gcc builtins
+builtins.cf : builtins.c
+	${AM_V_GEN}if [ -e $< ] ; then \
+		@BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
+	fi
+
+builtins.c : builtins.def prototypes.awk
+	${AM_V_GEN}if [ -e $< ] ; then \
+		@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
+	fi
+
+builtins.def :
+
+prototypes.awk :
+
+../libcfa/libcfa-prelude.c : prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
+	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+
+
+MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
Index: src/prelude/Makefile.in
===================================================================
--- src/prelude/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,445 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+######################## -*- Mode: Makefile-Automake -*- ######################
+###############################################################################
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/prelude
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(cfalibdir)"
+DATA = $(cfalib_DATA) $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BACKEND_CC = @BACKEND_CC@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFA_BACKEND_CC = @CFA_BACKEND_CC@
+CFA_BINDIR = @CFA_BINDIR@
+CFA_FLAGS = @CFA_FLAGS@
+CFA_INCDIR = @CFA_INCDIR@
+CFA_LIBDIR = @CFA_LIBDIR@
+CFA_PREFIX = @CFA_PREFIX@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# create object files in directory with source files
+AUTOMAKE_OPTIONS = subdir-objects
+
+# put into lib for now
+cfalibdir = ${libdir}
+cfalib_DATA = builtins.cf extras.cf prelude.cf
+noinst_DATA = ../libcfa/libcfa-prelude.c
+MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prelude/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/prelude/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-cfalibDATA: $(cfalib_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(cfalibdir)" || $(MKDIR_P) "$(DESTDIR)$(cfalibdir)"
+	@list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cfalibdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(cfalibdir)" || exit $$?; \
+	done
+
+uninstall-cfalibDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(cfalibdir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(cfalibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cfalibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cfalibDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am html html-am info info-am \
+	install install-am install-cfalibDATA install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am uninstall uninstall-am uninstall-cfalibDATA
+
+
+# create extra forward types/declarations to reduce inclusion of library files
+extras.cf : extras.regx extras.c
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
+
+# create forward declarations for gcc builtins
+builtins.cf : builtins.c
+	${AM_V_GEN}if [ -e $< ] ; then \
+		@BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
+	fi
+
+builtins.c : builtins.def prototypes.awk
+	${AM_V_GEN}if [ -e $< ] ; then \
+		@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
+	fi
+
+builtins.def :
+
+prototypes.awk :
+
+../libcfa/libcfa-prelude.c : prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
+	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: src/prelude/builtins.c
===================================================================
--- src/prelude/builtins.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/builtins.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,217 @@
+#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)
+#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);
+#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)
+
+#define BT_UINTMAX unsigned long int
+#define BT_UINT16 short int
+#define BT_UINT32 int
+#define BT_UINT64 long long int
+#define BT_UINT unsigned int
+#define BT_INTMAX long int
+#define BT_INTPTR int *
+#define BT_WINT unsigned int
+#define BT_INT int
+#define BT_ULONGLONG unsigned long long
+#define BT_ULONG unsigned long
+#define BT_UNSIGNED unsigned
+#define BT_COMPLEX_LONGDOUBLE _Complex long double
+#define BT_COMPLEX_DOUBLE _Complex double
+#define BT_COMPLEX_FLOAT _Complex float
+#define BT_LONGDOUBLEPTR long double *
+#define BT_LONGDOUBLE long double
+#define BT_LONGLONG long long
+#define BT_LONG long
+#define BT_DFLOAT32 _Decimal32
+#define BT_DFLOAT64 _Decimal64
+#define BT_DFLOAT128 _Decimal128
+#define BT_DOUBLEPTR double *
+#define BT_DOUBLE double
+#define BT_FLOATPTR float *
+#define BT_FLOAT float
+#define BT_CONST_PTR const void *
+#define BT_CONST_STRING const char *
+#define BT_PTR_FN_VOID_VAR_PTR_SIZE 
+#define BT_PTR_CONST_STRING char *const
+#define BT_PTRMODE_PTR 
+#define BT_PTRPTR void **
+#define BT_PTR void *
+#define BT_VOID void
+#define BT_STRING char *
+#define BT_FILEPTR struct _IO_FILE *
+#define BT_SIZE unsigned long
+#define BT_VAR ...
+#define BT_VALIST_ARG __builtin_va_list
+#define BT_VALIST_REF __builtin_va_list
+#define BT_UNWINDWORD void *
+#define BT_WORD 
+#define BT_SSIZE long int
+#define BT_PID int
+
+#define BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_LONGDOUBLE, NAME, BT_LONGDOUBLE)
+#define BT_FN_INT_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_VOID_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR)
+#define BT_FN_INT_CONST_PTR_CONST_PTR_SIZE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
+#define BT_FN_VOID_VALIST_REF(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_VALIST_REF)
+#define BT_FN_FLOAT_COMPLEX_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_COMPLEX_FLOAT)
+#define BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VAR)
+#define BT_FN_VOID_PTR_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_PTR)
+#define BT_FN_FLOAT_FLOAT_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_LONGDOUBLE)
+#define BT_FN_INT_UINT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_UINT)
+#define BT_FN_CONST_STRING(NAME) FUNC_SIMPLE(BT_CONST_STRING, NAME)
+#define BT_FN_FLOAT_FLOAT_FLOATPTR(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOATPTR)
+#define BT_FN_INT_INT_INT_INT_INT_INT_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_INT, BT_INT, BT_INT, BT_INT, BT_VAR)
+#define BT_FN_INT_INT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT)
+#define BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_INT_LONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_LONG)
+#define BT_FN_INT_STRING_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VAR)
+#define BT_FN_VOID_PTR_WORD_WORD_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_WORD, BT_WORD, BT_PTR)
+#define BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_CONST_PTR)
+#define BT_FN_INT_DFLOAT128(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DFLOAT128)
+#define BT_FN_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE)
+#define BT_FN_FLOAT_CONST_STRING(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_CONST_STRING)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_INT(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_INT)
+#define BT_FN_FLOAT_FLOAT_INT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_INT)
+#define BT_FN_INT_CONST_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING)
+#define BT_FN_INT_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_LONGDOUBLE)
+#define BT_FN_SIZE_CONST_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_STRING, BT_CONST_STRING)
+#define BT_FN_VOID_PTR_SIZE(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_SIZE)
+#define BT_FN_INT_CONST_STRING_PTR_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_PTR_CONST_STRING)
+#define BT_FN_DFLOAT64(NAME) FUNC_SIMPLE(BT_DFLOAT64, NAME)
+#define BT_FN_INT_UINTMAX(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_UINTMAX)
+#define BT_FN_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME)
+#define BT_FN_INT(NAME) FUNC_SIMPLE(BT_INT, NAME)
+#define BT_FN_FLOAT_FLOAT_FLOAT_INTPTR(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOAT, BT_INTPTR)
+#define BT_FN_DOUBLE_DOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_LONGDOUBLE)
+#define BT_FN_PTR_CONST_PTR_SIZE_VAR(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_CONST_PTR, BT_SIZE, BT_VAR)
+#define BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT(NAME) FUNC_SIMPLE(BT_COMPLEX_FLOAT, NAME, BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
+#define BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_COMPLEX_LONGDOUBLE)
+#define BT_FN_STRING_CONST_STRING_CONST_STRING_INT(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONG(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONG)
+#define BT_FN_COMPLEX_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_DOUBLE, NAME, BT_DOUBLE)
+#define BT_FN_VOID(NAME) FUNC_SIMPLE(BT_VOID, NAME)
+#define BT_FN_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT)
+#define BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_FLOAT, BT_FLOATPTR, BT_FLOATPTR)
+#define BT_FN_INT_DFLOAT64(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DFLOAT64)
+#define BT_FN_FLOAT_FLOAT_INTPTR(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_INTPTR)
+#define BT_FN_WINT_WINT(NAME) FUNC_SIMPLE(BT_WINT, NAME, BT_WINT)
+#define BT_FN_LONGLONG_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_LONGDOUBLE)
+#define BT_FN_DOUBLE_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLE)
+#define BT_FN_DFLOAT64_CONST_STRING(NAME) FUNC_SIMPLE(BT_DFLOAT64, NAME, BT_CONST_STRING)
+#define BT_FN_DOUBLE_DOUBLE_INT(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_INT)
+#define BT_FN_INTMAX_INTMAX(NAME) FUNC_SIMPLE(BT_INTMAX, NAME, BT_INTMAX)
+#define BT_FN_INT_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_VAR)
+#define BT_FN_LONG_LONG_LONG(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_LONG, BT_LONG)
+#define BT_FN_DOUBLE_DOUBLE_LONG(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_LONG)
+#define BT_FN_LONG_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_LONGDOUBLE)
+#define BT_FN_FLOAT_FLOAT_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOAT, BT_FLOAT)
+#define BT_FN_VOID_VALIST_REF_VAR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_VALIST_REF, BT_VAR)
+#define BT_FN_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING)
+#define BT_FN_VOID_VALIST_REF_VALIST_ARG(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_VALIST_REF, BT_VALIST_ARG)
+#define BT_FN_LONGDOUBLE_CONST_STRING(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_CONST_STRING)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_INTPTR)
+#define BT_FN_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_SIZE)
+#define BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
+#define BT_FN_STRING_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_STRING, BT_CONST_STRING)
+#define BT_FN_VOID_INT(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_INT)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLE)
+#define BT_FN_INT_ULONGLONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_ULONGLONG)
+#define BT_FN_INT_FILEPTR_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_CONST_STRING, BT_VAR)
+#define BT_FN_LONGLONG_DOUBLE(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_DOUBLE)
+#define BT_FN_INT_INT_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_CONST_STRING, BT_VAR)
+#define BT_FN_VOID_PTR_INT(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTR, BT_INT)
+#define BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT(NAME) FUNC_SIMPLE(BT_COMPLEX_FLOAT, NAME, BT_COMPLEX_FLOAT)
+#define BT_FN_INT_WINT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_WINT)
+#define BT_FN_PTR_PTR_INT_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_INT, BT_SIZE)
+#define BT_FN_STRING_CONST_STRING_INT(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_INT)
+#define BT_FN_INT_FLOAT(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FLOAT)
+#define BT_FN_DOUBLE_CONST_STRING(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_CONST_STRING)
+#define BT_FN_LONG_FLOAT(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_FLOAT)
+#define BT_FN_PTR_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_SIZE, BT_SIZE)
+#define BT_FN_STRING_STRING_CONST_STRING_SIZE(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_STRING, BT_CONST_STRING, BT_SIZE)
+#define BT_FN_LONGLONG_LONGLONG(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_LONGLONG)
+#define BT_FN_PTR_PTR(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR)
+#define BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_CONST_PTR, BT_SIZE, BT_SIZE)
+#define BT_FN_FLOAT_FLOAT_LONG(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_LONG)
+#define BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_LONGDOUBLE, NAME, BT_COMPLEX_LONGDOUBLE)
+#define BT_FN_PTR_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_SIZE)
+#define BT_FN_PTR_VAR(NAME) FUNC_SIMPLE(BT_PTR, NAME)
+#define BT_FN_SIZE_CONST_PTR_INT(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_PTR, BT_INT)
+#define BT_FN_INT_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING)
+#define BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_INT_STRING_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_DFLOAT32(NAME) FUNC_SIMPLE(BT_DFLOAT32, NAME)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_INTPTR)
+#define BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_STRING, BT_CONST_STRING, BT_SIZE, BT_SIZE)
+#define BT_FN_PTR_UINT(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_UINT)
+#define BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_DFLOAT128_CONST_STRING(NAME) FUNC_SIMPLE(BT_DFLOAT128, NAME, BT_CONST_STRING)
+#define BT_FN_DOUBLE_DOUBLE_DOUBLEPTR(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLEPTR)
+#define BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_SSIZE, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VAR)
+#define BT_FN_DFLOAT32_DFLOAT32(NAME) FUNC_SIMPLE(BT_DFLOAT32, NAME, BT_DFLOAT32)
+#define BT_FN_INT_PTR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_PTR)
+#define BT_FN_UINT32_UINT32(NAME) FUNC_SIMPLE(BT_UINT32, NAME, BT_UINT32)
+#define BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR_FN_VOID_VAR_PTR_SIZE)
+#define BT_FN_INT_DOUBLE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DOUBLE)
+#define BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VAR)
+#define BT_FN_INT_ULONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_ULONG)
+#define BT_FN_DOUBLE_DOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_INTPTR)
+#define BT_FN_UINT64_UINT64(NAME) FUNC_SIMPLE(BT_UINT64, NAME, BT_UINT64)
+#define BT_FN_STRING_CONST_STRING_CONST_STRING(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_CONST_STRING)
+#define BT_FN_INT_INT_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_PTR_PTR_INT_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_INT, BT_SIZE, BT_SIZE)
+#define BT_FN_DOUBLE_COMPLEX_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_COMPLEX_DOUBLE)
+#define BT_FN_VOID_CONST_PTR_VAR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_CONST_PTR, BT_VAR)
+#define BT_FN_INT_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME)
+#define BT_FN_INT_PTRPTR_SIZE_SIZE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_PTRPTR, BT_SIZE, BT_SIZE)
+#define BT_FN_INT_CONST_STRING_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_VAR)
+#define BT_FN_INT_DFLOAT32(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_DFLOAT32)
+#define BT_FN_DFLOAT64_DFLOAT64(NAME) FUNC_SIMPLE(BT_DFLOAT64, NAME, BT_DFLOAT64)
+#define BT_FN_VOID_CONST_PTR_PTR_SIZE(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_CONST_PTR, BT_PTR, BT_SIZE)
+#define BT_FN_UNWINDWORD_PTR(NAME) FUNC_SIMPLE(BT_UNWINDWORD, NAME, BT_PTR)
+#define BT_FN_FLOAT_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_FLOAT, BT_FLOAT)
+#define BT_FN_COMPLEX_FLOAT_FLOAT(NAME) FUNC_SIMPLE(BT_COMPLEX_FLOAT, NAME, BT_FLOAT)
+#define BT_FN_UINT(NAME) FUNC_SIMPLE(BT_UINT, NAME)
+#define BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_DOUBLE, BT_DOUBLE, BT_INTPTR)
+#define BT_FN_UINT16_UINT16(NAME) FUNC_SIMPLE(BT_UINT16, NAME, BT_UINT16)
+#define BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE)
+#define BT_FN_LONG_LONG(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_LONG)
+#define BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
+#define BT_FN_FLOAT_INT_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME, BT_INT, BT_FLOAT)
+#define BT_FN_PTR(NAME) FUNC_SIMPLE(BT_PTR, NAME)
+#define BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_FILEPTR)
+#define BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_DOUBLE, BT_DOUBLEPTR, BT_DOUBLEPTR)
+#define BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_DOUBLE, NAME, BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
+#define BT_FN_LONG_DOUBLE(NAME) FUNC_SIMPLE(BT_LONG, NAME, BT_DOUBLE)
+#define BT_FN_SIZE_CONST_STRING(NAME) FUNC_SIMPLE(BT_SIZE, NAME, BT_CONST_STRING)
+#define BT_FN_LONGLONG_FLOAT(NAME) FUNC_SIMPLE(BT_LONGLONG, NAME, BT_FLOAT)
+#define BT_FN_INT_CONST_STRING_CONST_STRING_SIZE(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
+#define BT_FN_PTR_PTR_CONST_PTR_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_PTR, BT_CONST_PTR, BT_SIZE)
+#define BT_FN_DFLOAT128(NAME) FUNC_SIMPLE(BT_DFLOAT128, NAME)
+#define BT_FN_PID(NAME) FUNC_SIMPLE(BT_PID, NAME)
+#define BT_FN_INT_CONST_STRING_FILEPTR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_FILEPTR)
+#define BT_FN_INT_LONGLONG(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_LONGLONG)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
+#define BT_FN_INT_INT_FILEPTR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INT, BT_FILEPTR)
+#define BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_LONGDOUBLE, NAME, BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
+#define BT_FN_VOID_PTRMODE_PTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_PTRMODE_PTR)
+#define BT_FN_INT_STRING_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_STRING, BT_CONST_STRING, BT_VAR)
+#define BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE(NAME) FUNC_SIMPLE(BT_COMPLEX_DOUBLE, NAME, BT_COMPLEX_DOUBLE)
+#define BT_FN_DFLOAT32_CONST_STRING(NAME) FUNC_SIMPLE(BT_DFLOAT32, NAME, BT_CONST_STRING)
+#define BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_CONST_STRING, BT_PTR_CONST_STRING, BT_PTR_CONST_STRING)
+#define BT_FN_STRING_CONST_STRING_SIZE(NAME) FUNC_SIMPLE(BT_STRING, NAME, BT_CONST_STRING, BT_SIZE)
+#define BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_FILEPTR, BT_INT, BT_CONST_STRING, BT_VAR)
+#define BT_FN_DFLOAT128_DFLOAT128(NAME) FUNC_SIMPLE(BT_DFLOAT128, NAME, BT_DFLOAT128)
+#define BT_FN_DOUBLE_INT_DOUBLE(NAME) FUNC_SIMPLE(BT_DOUBLE, NAME, BT_INT, BT_DOUBLE)
+#define BT_FN_FLOAT(NAME) FUNC_SIMPLE(BT_FLOAT, NAME)
+#define BT_FN_LONGDOUBLE_INT_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_INT, BT_LONGDOUBLE)
+#define BT_FN_PTR_CONST_PTR_INT_SIZE(NAME) FUNC_SIMPLE(BT_PTR, NAME, BT_CONST_PTR, BT_INT, BT_SIZE)
+#define BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR(NAME) FUNC_SIMPLE(BT_VOID, NAME, BT_LONGDOUBLE, BT_LONGDOUBLEPTR, BT_LONGDOUBLEPTR)
+#define BT_FN_INT_INTMAX(NAME) FUNC_SIMPLE(BT_INT, NAME, BT_INTMAX)
+#define BT_FN_LONGDOUBLE(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME)
+#define BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR(NAME) FUNC_SIMPLE(BT_LONGDOUBLE, NAME, BT_LONGDOUBLE, BT_LONGDOUBLEPTR)
+
+#include "builtins.def"
+
+extern const char *__PRETTY_FUNCTION__;
Index: src/prelude/builtins.def
===================================================================
--- src/prelude/builtins.def	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/builtins.def	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,874 @@
+/* This file contains the definitions and documentation for the
+   builtins used in the GNU compiler.
+   Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
+                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)
+
+   This macro will be called once for each builtin function.  The
+   ENUM will be of type `enum built_in_function', and will indicate
+   which builtin function is being processed.  The NAME of the builtin
+   function (which will always start with `__builtin_') is a string
+   literal.  The CLASS is of type `enum built_in_class' and indicates
+   what kind of builtin is being processed.
+
+   Some builtins are actually two separate functions.  For example,
+   for `strcmp' there are two builtin functions; `__builtin_strcmp'
+   and `strcmp' itself.  Both behave identically.  Other builtins
+   define only the `__builtin' variant.  If BOTH_P is TRUE, then this
+   builtin has both variants; otherwise, it is has only the first
+   variant.
+
+   TYPE indicates the type of the function.  The symbols correspond to
+   enumerals from builtin-types.def.  If BOTH_P is true, then LIBTYPE
+   is the type of the non-`__builtin_' variant.  Otherwise, LIBTYPE
+   should be ignored.
+
+   If FALLBACK_P is true then, if for some reason, the compiler cannot
+   expand the builtin function directly, it will call the
+   corresponding library function (which does not have the
+   `__builtin_' prefix.
+
+   If NONANSI_P is true, then the non-`__builtin_' variant is not an
+   ANSI/ISO library function, and so we should pretend it does not
+   exist when compiling in ANSI conformant mode.
+
+   ATTRs is an attribute list as defined in builtin-attrs.def that
+   describes the attributes of this builtin function.
+
+   IMPLICIT specifies condition when the builtin can be produced by
+   compiler.  For instance C90 reserves floorf function, but does not
+   define it's meaning.  When user uses floorf we may assume that the
+   floorf has the meaning we expect, but we can't produce floorf by
+   simplifying floor((double)float) since the runtime need not implement
+   it.
+
+   The builtins is registered only if COND is true.  */
+
+/* A GCC builtin (like __builtin_saveregs) is provided by the
+   compiler, but does not correspond to a function in the standard
+   library.  */
+#undef DEF_GCC_BUILTIN
+#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
+	       false, false, false, ATTRS, true, true)
+
+/* Like DEF_GCC_BUILTIN, except we don't prepend "__builtin_".  */
+#undef DEF_SYNC_BUILTIN
+#define DEF_SYNC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
+	       false, false, false, ATTRS, true, true)
+
+/* A library builtin (like __builtin_strchr) is a builtin equivalent
+   of an ANSI/ISO standard library function.  In addition to the
+   `__builtin' version, we will create an ordinary version (e.g,
+   `strchr') as well.  If we cannot compute the answer using the
+   builtin function, we will fall back to the standard library
+   version.  */
+#undef DEF_LIB_BUILTIN
+#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, false, ATTRS, true, true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is not one that is
+   specified by ANSI/ISO C.  So, when we're being fully conformant we
+   ignore the version of these builtins that does not begin with
+   __builtin.  */
+#undef DEF_EXT_LIB_BUILTIN
+#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, true, ATTRS, false, true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C94 or above.  */
+#undef DEF_C94_BUILTIN
+#define DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc94, ATTRS, targetm.libc_has_function (function_c94), true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C99 or above.  */
+#undef DEF_C99_BUILTIN
+#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
+
+/* Like DEF_C99_BUILTIN, but for complex math functions.  */
+#undef DEF_C99_COMPL_BUILTIN
+#define DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_math_complex), true)
+
+/* Builtin that is specified by C99 and C90 reserve the name for future use.
+   We can still recognize the builtin in C90 mode but we can't produce it
+   implicitly.  */
+#undef DEF_C99_C90RES_BUILTIN
+#define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
+
+/* Builtin that C99 reserve the name for future use. We can still recognize
+   the builtin in C99 mode but we can't produce it implicitly.  */
+#undef DEF_EXT_C99RES_BUILTIN
+#define DEF_EXT_C99RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)        \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,   \
+	      true, true, true, ATTRS, false, true)
+
+/* Allocate the enum and the name for a builtin, but do not actually
+   define it here at all.  */
+#undef DEF_BUILTIN_STUB
+#define DEF_BUILTIN_STUB(ENUM, NAME) \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
+	       false, ATTR_LAST, false, false)
+
+/* Builtin used by the implementation of GNU OpenMP.  None of these are
+   actually implemented in the compiler; they're all in libgomp.  */
+#undef DEF_GOMP_BUILTIN
+#define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, true, true, ATTRS, false, \
+	       (flag_openmp || flag_tree_parallelize_loops))
+
+/* Builtin used by implementation of Cilk Plus.  Most of these are decomposed
+   by the compiler but a few are implemented in libcilkrts.  */ 
+#undef DEF_CILK_BUILTIN_STUB
+#define DEF_CILK_BUILTIN_STUB(ENUM, NAME) \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
+	       false, ATTR_LAST, false, false)
+
+/* Builtin used by the implementation of GNU TM.  These
+   functions are mapped to the actual implementation of the STM library. */
+#undef DEF_TM_BUILTIN
+#define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       true, true, true, ATTRS, false, flag_tm)
+
+/* Builtin used by the implementation of libsanitizer. These
+   functions are mapped to the actual implementation of the 
+   libtsan library. */
+#undef DEF_SANITIZER_BUILTIN
+#define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       true, true, true, ATTRS, true, \
+	      (flag_sanitize & (SANITIZE_ADDRESS | SANITIZE_THREAD \
+				| SANITIZE_UNDEFINED)))
+
+#undef DEF_CILKPLUS_BUILTIN
+#define DEF_CILKPLUS_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_FN_INT_VAR, BT_LAST, \
+  	       false, false, false, ATTRS, false, flag_cilkplus) 
+
+/* Define an attribute list for math functions that are normally
+   "impure" because some of them may write into global memory for
+   `errno'.  If !flag_errno_math they are instead "const".  */
+#undef ATTR_MATHFN_ERRNO
+#define ATTR_MATHFN_ERRNO (flag_errno_math ? \
+	ATTR_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
+
+/* Define an attribute list for math functions that are normally
+   "const" but if flag_rounding_math is set they are instead "pure".
+   This distinction accounts for the fact that some math functions
+   check the rounding mode which is akin to examining global
+   memory.  */
+#undef ATTR_MATHFN_FPROUNDING
+#define ATTR_MATHFN_FPROUNDING (flag_rounding_math ? \
+	ATTR_PURE_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
+
+/* Define an attribute list for math functions that are normally
+   "impure" because some of them may write into global memory for
+   `errno'.  If !flag_errno_math, we can possibly use "pure" or
+   "const" depending on whether we care about FP rounding.  */
+#undef ATTR_MATHFN_FPROUNDING_ERRNO
+#define ATTR_MATHFN_FPROUNDING_ERRNO (flag_errno_math ? \
+	ATTR_NOTHROW_LEAF_LIST : ATTR_MATHFN_FPROUNDING)
+
+/* Define an attribute list for math functions that need to mind FP
+   rounding, but because they store into memory they are never "const"
+   or "pure".  Use of this macro is mainly for documentation and
+   maintenance purposes.  */
+#undef ATTR_MATHFN_FPROUNDING_STORE
+#define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST
+
+/* Define an attribute list for leaf functions that do not throw
+   exceptions normally, but may throw exceptions when using
+   -fnon-call-exceptions.  */
+#define ATTR_NOTHROWCALL_LEAF_LIST (flag_non_call_exceptions ? \
+	ATTR_LEAF_LIST : ATTR_NOTHROW_LEAF_LIST)
+
+/* Make sure 0 is not a legitimate builtin.  */
+DEF_BUILTIN_STUB(BUILT_IN_NONE, (const char *)0)
+
+/* Category: math builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ACOS, "acos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSF, "acosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSH, "acosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSHF, "acoshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSHL, "acoshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSL, "acosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_ASIN, "asin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINF, "asinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ASINH, "asinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ASINHF, "asinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ASINHL, "asinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINL, "asinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_ATAN, "atan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_ATAN2, "atan2", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2F, "atan2f", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2L, "atan2l", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANF, "atanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ATANH, "atanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ATANHF, "atanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ATANHL, "atanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANL, "atanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRT, "cbrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRTF, "cbrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRTL, "cbrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_CEIL, "ceil", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILF, "ceilf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILL, "ceill", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGN, "copysign", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNF, "copysignf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNL, "copysignl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_COS, "cos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSF, "cosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_COSH, "cosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHF, "coshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHL, "coshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSL, "cosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREM, "drem", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREMF, "dremf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREML, "dreml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERF, "erf", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ERFC, "erfc", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFCF, "erfcf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFCL, "erfcl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFF, "erff", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ERFL, "erfl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_EXP, "exp", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10, "exp10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10F, "exp10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10L, "exp10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2, "exp2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2F, "exp2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2L, "exp2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPF, "expf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPL, "expl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1, "expm1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1F, "expm1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1L, "expm1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FABS, "fabs", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSF, "fabsf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSL, "fabsl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD32, "fabsd32", BT_FN_DFLOAT32_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD64, "fabsd64", BT_FN_DFLOAT64_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD128, "fabsd128", BT_FN_DFLOAT128_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FDIM, "fdim", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FDIMF, "fdimf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FDIML, "fdiml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FLOOR, "floor", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORF, "floorf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORL, "floorl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMA, "fma", BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAF, "fmaf", BT_FN_FLOAT_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAL, "fmal", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAX, "fmax", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMAXF, "fmaxf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMAXL, "fmaxl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMIN, "fmin", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMINF, "fminf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMINL, "fminl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FMOD, "fmod", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODF, "fmodf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODL, "fmodl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA_R, "gamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF_R, "gammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL_R, "gammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOT, "hypot", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOTF, "hypotf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOTL, "hypotl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEIL, "iceil", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEILF, "iceilf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEILL, "iceill", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOOR, "ifloor", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOORF, "ifloorf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOORL, "ifloorl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGB, "ilogb", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGBF, "ilogbf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGBL, "ilogbl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_INF, "inf", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFF, "inff", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFL, "infl", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN	       (BUILT_IN_INFD32, "infd32", BT_FN_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFD64, "infd64", BT_FN_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFD128, "infd128", BT_FN_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINT, "irint", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINTF, "irintf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINTL, "irintl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUND, "iround", BT_FN_INT_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUNDF, "iroundf", BT_FN_INT_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUNDL, "iroundl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0, "j0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0F, "j0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0L, "j0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1, "j1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1F, "j1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1L, "j1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JN, "jn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNF, "jnf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNL, "jnl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEIL, "lceil", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEILF, "lceilf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEILL, "lceill", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMA_R, "lgamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAF_R, "lgammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAL_R, "lgammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOOR, "llfloor", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORF, "llfloorf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORL, "llfloorl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUND, "llround", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUNDF, "llroundf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUNDL, "llroundl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_LOG, "log", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_LOG10, "log10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10F, "log10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10L, "log10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1P, "log1p", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1PF, "log1pf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1PL, "log1pl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2, "log2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2F, "log2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2L, "log2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGB, "logb", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGBF, "logbf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGBL, "logbl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGF, "logf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGL, "logl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINT, "lrint", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINTF, "lrintf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINTL, "lrintl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUND, "lround", BT_FN_LONG_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUNDF, "lroundf", BT_FN_LONG_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUNDL, "lroundl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_MODF, "modf", BT_FN_DOUBLE_DOUBLE_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFF, "modff", BT_FN_FLOAT_FLOAT_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFL, "modfl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_NAN, "nan", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NANF, "nanf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NANL, "nanl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND32, "nand32", BT_FN_DFLOAT32_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND64, "nand64", BT_FN_DFLOAT64_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND128, "nand128", BT_FN_DFLOAT128_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANS, "nans", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANSF, "nansf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANSL, "nansl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINT, "nearbyint", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTF, "nearbyintf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTL, "nearbyintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTER, "nextafter", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERF, "nextafterf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERL, "nextafterl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARD, "nexttoward", BT_FN_DOUBLE_DOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDF, "nexttowardf", BT_FN_FLOAT_FLOAT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDL, "nexttowardl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_POW, "pow", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10, "pow10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10F, "pow10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10L, "pow10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_POWF, "powf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_POWI, "powi", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_POWIF, "powif", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_POWIL, "powil", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_POWL, "powl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDER, "remainder", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDERF, "remainderf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDERL, "remainderl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUO, "remquo", BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUOF, "remquof", BT_FN_FLOAT_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUOL, "remquol", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_RINT, "rint", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_RINTF, "rintf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_RINTL, "rintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ROUND, "round", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ROUNDF, "roundf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ROUNDL, "roundl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALB, "scalb", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBF, "scalbf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBL, "scalbl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLN, "scalbln", BT_FN_DOUBLE_DOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLNF, "scalblnf", BT_FN_FLOAT_FLOAT_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLNL, "scalblnl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBN, "scalbn", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBNF, "scalbnf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBNL, "scalbnl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBIT, "signbit", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITF, "signbitf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITL, "signbitl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD32, "signbitd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD64, "signbitd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD128, "signbitd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICAND, "significand", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDF, "significandf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDL, "significandl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_SIN, "sin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOS, "sincos", BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSF, "sincosf", BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSL, "sincosl", BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINF, "sinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_SINH, "sinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHF, "sinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHL, "sinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINL, "sinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_SQRT, "sqrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTF, "sqrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTL, "sqrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_TAN, "tan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANF, "tanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_TANH, "tanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHF, "tanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHL, "tanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANL, "tanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMA, "tgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMAF, "tgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMAL, "tgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNC, "trunc", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNCF, "truncf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNCL, "truncl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0, "y0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0F, "y0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0L, "y0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1, "y1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1F, "y1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1L, "y1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YN, "yn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNF, "ynf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNL, "ynl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+
+/* Category: _Complex math builtins.  */
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABS, "cabs", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSF, "cabsf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSL, "cabsl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOS, "cacos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSF, "cacosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSH, "cacosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHF, "cacoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHL, "cacoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSL, "cacosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARG, "carg", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGF, "cargf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGL, "cargl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASIN, "casin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINF, "casinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINH, "casinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHF, "casinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHL, "casinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINL, "casinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATAN, "catan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANF, "catanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANH, "catanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHF, "catanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHL, "catanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANL, "catanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOS, "ccos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSF, "ccosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSH, "ccosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHF, "ccoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHL, "ccoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSL, "ccosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXP, "cexp", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPF, "cexpf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPL, "cexpl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPI, "cexpi", BT_FN_COMPLEX_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPIF, "cexpif", BT_FN_COMPLEX_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPIL, "cexpil", BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAG, "cimag", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGF, "cimagf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGL, "cimagl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOG, "clog", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGF, "clogf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGL, "clogl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10, "clog10", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10F, "clog10f", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10L, "clog10l", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJ, "conj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJF, "conjf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJL, "conjl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOW, "cpow", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWF, "cpowf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWL, "cpowl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJ, "cproj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJF, "cprojf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJL, "cprojl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREAL, "creal", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALF, "crealf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALL, "creall", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSIN, "csin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINF, "csinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINH, "csinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHF, "csinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHL, "csinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINL, "csinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRT, "csqrt", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTF, "csqrtf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTL, "csqrtl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTAN, "ctan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANF, "ctanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANH, "ctanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHF, "ctanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHL, "ctanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANL, "ctanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+
+/* Category: string/memory builtins.  */
+/* bcmp, bcopy and bzero have traditionally accepted NULL pointers
+   when the length parameter is zero, so don't apply attribute "nonnull".  */
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCMP, "bcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCOPY, "bcopy", BT_FN_VOID_CONST_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BZERO, "bzero", BT_FN_VOID_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_INDEX, "index", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCHR, "memchr", BT_FN_PTR_CONST_PTR_INT_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCMP, "memcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCPY, "memcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMMOVE, "memmove", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMPCPY, "mempcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMSET, "memset", BT_FN_PTR_PTR_INT_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_RINDEX, "rindex", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPCPY, "stpcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY, "stpncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCASECMP, "strcasecmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCAT, "strcat", BT_FN_STRING_STRING_CONST_STRING, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCHR, "strchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCMP, "strcmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCPY, "strcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCSPN, "strcspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRDUP, "strdup", BT_FN_STRING_CONST_STRING, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNDUP, "strndup", BT_FN_STRING_CONST_STRING_SIZE, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRLEN, "strlen", BT_FN_SIZE_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCASECMP, "strncasecmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCAT, "strncat", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCMP, "strncmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCPY, "strncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRPBRK, "strpbrk", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRRCHR, "strrchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRSPN, "strspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRSTR, "strstr", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+
+/* Category: stdio builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_FPRINTF, "fprintf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_UNLOCKED, "fprintf_unlocked", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTC, "putc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTC_UNLOCKED, "putc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FPUTC, "fputc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_UNLOCKED, "fputc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTCHAR_UNLOCKED, "putchar_unlocked", BT_FN_INT_INT, ATTR_NULL)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTS, "puts", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTS_UNLOCKED, "puts_unlocked", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2)
+DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_3_4)
+DEF_LIB_BUILTIN        (BUILT_IN_SPRINTF, "sprintf", BT_FN_INT_STRING_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_NOTHROW_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_VFPRINTF, "vfprintf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
+DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
+DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_3_0)
+DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_2_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_NOTHROW_2_0)
+
+/* Category: ctype builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+/* Category: wctype builtins.  */
+DEF_C94_BUILTIN        (BUILT_IN_ISWALNUM, "iswalnum", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWALPHA, "iswalpha", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISWBLANK, "iswblank", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWCNTRL, "iswcntrl", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWDIGIT, "iswdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWGRAPH, "iswgraph", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWLOWER, "iswlower", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWPRINT, "iswprint", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWPUNCT, "iswpunct", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWSPACE, "iswspace", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWUPPER, "iswupper", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWXDIGIT, "iswxdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_TOWLOWER, "towlower", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_TOWUPPER, "towupper", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+/* Category: miscellaneous builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_AGGREGATE_INCOMING_ADDRESS, "aggregate_incoming_address", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ALLOCA, "alloca", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_APPLY, "apply", BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_APPLY_ARGS, "apply_args", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP16, "bswap16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+/* [trans-mem]: Adjust BUILT_IN_TM_CALLOC if BUILT_IN_CALLOC is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_CALLOC, "calloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLASSIFY_TYPE, "classify_type", BT_FN_INT_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZ, "clz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZIMAX, "clzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZL, "clzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZLL, "clzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZ, "ctz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZIMAX, "ctzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZL, "ctzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSB, "clrsb", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBIMAX, "clrsbimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBL, "clrsbl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBLL, "clrsbll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2)
+DEF_GCC_BUILTIN        (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_DWARF_SP_COLUMN, "dwarf_sp_column", BT_FN_UINT, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN, "eh_return", BT_FN_VOID_PTRMODE_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN_DATA_REGNO, "eh_return_data_regno", BT_FN_INT_INT, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECL, "execl", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLP, "execlp", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLE, "execle", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_NOTHROW_SENTINEL_1)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECV, "execv", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVP, "execvp", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVE, "execve", BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_EXIT, "exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXPECT, "expect", BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ASSUME_ALIGNED, "assume_aligned", BT_FN_PTR_CONST_PTR_SIZE_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXTEND_POINTER, "extend_pointer", BT_FN_UNWINDWORD_PTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXTRACT_RETURN_ADDR, "extract_return_addr", BT_FN_PTR_PTR, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSIMAX, "ffsimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_FORK, "fork", BT_FN_PID, ATTR_NOTHROW_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UINT, ATTR_NULL)
+/* [trans-mem]: Adjust BUILT_IN_TM_FREE if BUILT_IN_FREE is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_FREE, "free", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FROB_RETURN_ADDR, "frob_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1)
+DEF_C99_BUILTIN        (BUILT_IN_IMAXABS, "imaxabs", BT_FN_INTMAX_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INIT_DWARF_REG_SIZES, "init_dwarf_reg_size_table", BT_FN_VOID_PTR, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITE, "finite", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEF, "finitef", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEL, "finitel", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED32, "finited32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED64, "finited64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED128, "finited128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FPCLASSIFY, "fpclassify", BT_FN_INT_INT_INT_INT_INT_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISFINITE, "isfinite", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISINF_SIGN, "isinf_sign", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ISINF, "isinf", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFF, "isinff", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFL, "isinfl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD32, "isinfd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD64, "isinfd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD128, "isinfd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ISNAN, "isnan", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANF, "isnanf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANL, "isnanl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND32, "isnand32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND64, "isnand64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND128, "isnand128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ISNORMAL, "isnormal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISGREATER, "isgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESS, "isless", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESSEQUAL, "islessequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESSGREATER, "islessgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISUNORDERED, "isunordered", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_LABS, "labs", BT_FN_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LLABS, "llabs", BT_FN_LONGLONG_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LONGJMP, "longjmp", BT_FN_VOID_PTR_INT, ATTR_NORETURN_NOTHROW_LIST)
+/* [trans-mem]: Adjust BUILT_IN_TM_MALLOC if BUILT_IN_MALLOC is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_MALLOC, "malloc", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_NEXT_ARG, "next_arg", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITY, "parity", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYIMAX, "parityimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYL, "parityl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTIMAX, "popcountimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POSIX_MEMALIGN, "posix_memalign", BT_FN_INT_PTRPTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NOVOPS_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_REALLOC, "realloc", BT_FN_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UINT, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRFMON, "strfmon", BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_STRFMON_NOTHROW_3_4)
+DEF_LIB_BUILTIN        (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR, ATTR_FORMAT_STRFTIME_NOTHROW_3_0)
+DEF_GCC_BUILTIN        (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UNREACHABLE, "unreachable", BT_FN_VOID, ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UNWIND_INIT, "unwind_init", BT_FN_VOID, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_UPDATE_SETJMP_BUF, "update_setjmp_buf", BT_FN_VOID_PTR_INT, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_COPY, "va_copy", BT_FN_VOID_VALIST_REF_VALIST_ARG, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_END, "va_end", BT_FN_VOID_VALIST_REF, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_START, "va_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK, "va_arg_pack", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK_LEN, "va_arg_pack_len", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN__EXIT, "_exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN__EXIT2, "_Exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+
+/* Implementing nested functions.  */
+DEF_BUILTIN_STUB (BUILT_IN_INIT_TRAMPOLINE, "__builtin_init_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_INIT_HEAP_TRAMPOLINE, "__builtin_init_heap_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_ADJUST_TRAMPOLINE, "__builtin_adjust_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto")
+
+/* Implementing __builtin_setjmp.  */
+DEF_BUILTIN_STUB (BUILT_IN_SETJMP_SETUP, "__builtin_setjmp_setup")
+DEF_BUILTIN_STUB (BUILT_IN_SETJMP_RECEIVER, "__builtin_setjmp_receiver")
+
+/* Implementing variable sized local variables.  */
+DEF_BUILTIN_STUB (BUILT_IN_STACK_SAVE, "__builtin_stack_save")
+DEF_BUILTIN_STUB (BUILT_IN_STACK_RESTORE, "__builtin_stack_restore")
+DEF_BUILTIN_STUB (BUILT_IN_ALLOCA_WITH_ALIGN, "__builtin_alloca_with_align")
+
+/* Object size checking builtins.  */
+DEF_GCC_BUILTIN	       (BUILT_IN_OBJECT_SIZE, "object_size", BT_FN_SIZE_CONST_PTR_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMCPY_CHK, "__memcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMMOVE_CHK, "__memmove_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMPCPY_CHK, "__mempcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMSET_CHK, "__memset_chk", BT_FN_PTR_PTR_INT_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPCPY_CHK, "__stpcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY_CHK, "__stpncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCAT_CHK, "__strcat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCPY_CHK, "__strcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCAT_CHK, "__strncat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCPY_CHK, "__strncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SNPRINTF_CHK, "__snprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_5_6)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SPRINTF_CHK, "__sprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_4_5)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSNPRINTF_CHK, "__vsnprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_5_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSPRINTF_CHK, "__vsprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_4_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_CHK, "__fprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_3_4)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_CHK, "__printf_chk", BT_FN_INT_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VFPRINTF_CHK, "__vfprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_3_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF_CHK, "__vprintf_chk", BT_FN_INT_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
+
+/* Profiling hooks.  */
+DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_ENTER, "__cyg_profile_func_enter", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
+	     false, false, false, ATTR_NULL, true, true)
+DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_EXIT, "__cyg_profile_func_exit", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
+	     false, false, false, ATTR_NULL, true, true)
+
+/* TLS thread pointer related builtins.  */
+DEF_BUILTIN (BUILT_IN_THREAD_POINTER, "__builtin_thread_pointer",
+	     BUILT_IN_NORMAL, BT_FN_PTR, BT_LAST,
+	     false, false, true, ATTR_CONST_NOTHROW_LIST, true,
+	     targetm.have_tls)
+
+DEF_BUILTIN (BUILT_IN_SET_THREAD_POINTER, "__builtin_set_thread_pointer",
+	     BUILT_IN_NORMAL, BT_FN_VOID_PTR, BT_LAST,
+	     false, false, true, ATTR_NOTHROW_LIST, true,
+	     targetm.have_tls)
+
+/* TLS emulation.  */
+DEF_BUILTIN (BUILT_IN_EMUTLS_GET_ADDRESS, targetm.emutls.get_address,
+	     BUILT_IN_NORMAL,
+	     BT_FN_PTR_PTR,  BT_FN_PTR_PTR,
+	     true, true, true, ATTR_CONST_NOTHROW_NONNULL_LEAF, false,
+	     !targetm.have_tls)
+DEF_BUILTIN (BUILT_IN_EMUTLS_REGISTER_COMMON,
+	     targetm.emutls.register_common, BUILT_IN_NORMAL,
+	     BT_FN_VOID_PTR_WORD_WORD_PTR, BT_FN_VOID_PTR_WORD_WORD_PTR,
+	     true, true, true, ATTR_NOTHROW_LEAF_LIST, false,
+	     !targetm.have_tls)
+
+/* Exception support.  */
+DEF_BUILTIN_STUB (BUILT_IN_UNWIND_RESUME, "__builtin_unwind_resume")
+DEF_BUILTIN_STUB (BUILT_IN_CXA_END_CLEANUP, "__builtin_cxa_end_cleanup")
+DEF_BUILTIN_STUB (BUILT_IN_EH_POINTER, "__builtin_eh_pointer")
+DEF_BUILTIN_STUB (BUILT_IN_EH_FILTER, "__builtin_eh_filter")
+DEF_BUILTIN_STUB (BUILT_IN_EH_COPY_VALUES, "__builtin_eh_copy_values")
+
+/* __FILE__, __LINE__, __FUNCTION__ as builtins.  */
+DEF_GCC_BUILTIN (BUILT_IN_FILE, "FILE", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_FUNCTION, "FUNCTION", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LINE, "LINE", BT_FN_INT, ATTR_NOTHROW_LEAF_LIST)
+
+#if 0
+/* Synchronization Primitives.  */
+#include "sync-builtins.def"
+
+/* OpenMP builtins.  */
+#include "omp-builtins.def"
+
+/* Cilk keywords builtins.  */
+#include "cilk-builtins.def"
+
+/* GTM builtins. */
+#include "gtm-builtins.def"
+
+/* Sanitizer builtins. */
+#include "sanitizer.def"
+
+/* Cilk Plus builtins.  */
+#include "cilkplus.def"
+#endif
Index: src/prelude/extras.c
===================================================================
--- src/prelude/extras.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/extras.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,3 @@
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
Index: src/prelude/extras.regx
===================================================================
--- src/prelude/extras.regx	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/extras.regx	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,8 @@
+typedef.* size_t;
+typedef.* ptrdiff_t;
+extern.* abort\(.*\).*
+extern.* atexit\(.*\).*
+extern.* exit\(.*\).*
+extern.* free\(.*\).*
+extern.*\*malloc\(.*\).*
+extern.* printf\(.*\).*
Index: src/prelude/prelude.cf
===================================================================
--- src/prelude/prelude.cf	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/prelude.cf	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,808 @@
+//                               -*- Mode: C -*-
+//
+// Copyright (C) Glen Ditchfield 1994, 1999
+//
+// prelude.cf -- Standard Cforall Preample for C99
+//
+// Author           : Glen Ditchfield
+// Created On       : Sat Nov 29 07:23:41 2014
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Jul  5 18:04:40 2016
+// Update Count     : 92
+//
+
+# 2 "prelude.cf"  // needed for error messages from this file
+
+// Section numbers from: http://plg.uwaterloo.ca/~cforall/refrat.pdf
+
+// ------------------------------------------------------------
+//
+// Section 4.1 Primary Expressions
+//
+// ------------------------------------------------------------
+
+//We have none
+
+// ------------------------------------------------------------
+//
+// Section 4.2 Postfix Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?++( _Bool * ),				?++( volatile _Bool * );
+_Bool			?--( _Bool * ),				?--( volatile _Bool * );
+unsigned char		?++( unsigned char * ),			?++( volatile unsigned char * );
+signed int		?++( signed int * ),			?++( volatile signed int * );
+signed int		?--( signed int * ),			?--( volatile signed int * );
+unsigned int		?++( unsigned int * ),			?++( volatile unsigned int * );
+unsigned int		?--( unsigned int * ),			?--( volatile unsigned int * );
+signed long int		?++( signed long int * ),		?++( volatile signed long int * );
+signed long int		?--( signed long int * ),		?--( volatile signed long int * );
+unsigned long int	?++( unsigned long int * ),		?++( volatile unsigned long int * );
+unsigned long int	?--( unsigned long int * ),		?--( volatile unsigned long int * );
+signed long long int	?++( signed long long int * ),		?++( volatile signed long long int * );
+signed long long int	?--( signed long long int * ),		?--( volatile signed long long int * );
+unsigned long long int	?++( unsigned long long int * ),	?++( volatile unsigned long long int * );
+unsigned long long int	?--( unsigned long long int * ),	?--( volatile unsigned long long int * );
+float			?++( float * ),				?++( volatile float * );
+float			?--( float * ),				?--( volatile float * );
+double			?++( double * ),			?++( volatile double * );
+double			?--( double * ),			?--( volatile double * );
+long double		?++( long double * ),			?++( volatile long double * );
+long double		?--( long double * ),			?--( volatile long double * );
+float _Complex		?++( float _Complex * ),		?++( volatile float _Complex * );
+float _Complex		?--( float _Complex * ),		?--( volatile float _Complex * );
+double _Complex		?++( double _Complex * ),		?++( volatile double _Complex * );
+double _Complex		?--( double _Complex * ),		?--( volatile double _Complex * );
+long double _Complex	?++( long double _Complex * ),		?++( volatile long double _Complex * );
+long double _Complex	?--( long double _Complex * ),		?--( volatile long double _Complex * );
+
+forall( otype T ) T *			 ?++(		     T ** );
+forall( otype T ) const T *		 ?++( const	     T ** );
+forall( otype T ) volatile T *		 ?++(	    volatile T ** );
+forall( otype T ) const volatile T *	 ?++( const volatile T ** );
+forall( otype T ) T *			 ?--(		     T ** );
+forall( otype T ) const T *		 ?--( const	     T ** );
+forall( otype T ) volatile T *		 ?--(	    volatile T ** );
+forall( otype T ) const volatile T *	 ?--( const volatile T ** );
+
+forall( otype T ) lvalue T		 ?[?](		      T *,	    ptrdiff_t );
+forall( otype T ) const lvalue T	 ?[?]( const	      T *,	    ptrdiff_t );
+forall( otype T ) volatile lvalue T	 ?[?](       volatile T *,	    ptrdiff_t );
+forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,	    ptrdiff_t );
+forall( otype T ) lvalue T		 ?[?](		ptrdiff_t,		  T * );
+forall( otype T ) const lvalue T	 ?[?](		ptrdiff_t, const	  T * );
+forall( otype T ) volatile lvalue T	 ?[?](		ptrdiff_t,	 volatile T * );
+forall( otype T ) const volatile lvalue T ?[?](		ptrdiff_t, const volatile T * );
+
+// ------------------------------------------------------------
+//
+// Section 4.3 Unary Operators
+//
+// ------------------------------------------------------------
+
+_Bool			++?( _Bool * ),				--?( _Bool * );
+signed int		++?( signed int * ),			--?( signed int * );
+unsigned int		++?( unsigned int * ),			--?( unsigned int * );
+signed long int		++?( signed long int * ),		--?( signed long int * );
+unsigned long int	++?( unsigned long int * ),		--?( unsigned long int * );
+signed long long int	++?( signed long long int * ),		--?( signed long long int * );
+unsigned long long int	++?( unsigned long long int * ),	--?( unsigned long long int * );
+float			++?( float * ),				--?( float * );
+double			++?( double * ),			--?( double * );
+long double		++?( long double * ),			--?( long double * );
+float _Complex		++?( float _Complex * ),		--?( float _Complex * );
+double _Complex		++?( double _Complex * ),		--?( double _Complex * );
+long double _Complex	++?( long double _Complex * ),		--?( long double _Complex * );
+
+forall( otype T ) T *			 ++?(		     T ** );
+forall( otype T ) const T *		 ++?( const	     T ** );
+forall( otype T ) volatile T *		 ++?(	    volatile T ** );
+forall( otype T ) const volatile T *	 ++?( const volatile T ** );
+forall( otype T ) T *			 --?(		     T ** );
+forall( otype T ) const T *		 --?( const	     T ** );
+forall( otype T ) volatile T *		 --?(	    volatile T ** );
+forall( otype T ) const volatile T *	 --?( const volatile T ** );
+
+forall( dtype T | sized(T) ) lvalue T		 *?(		     T * );
+forall( dtype T | sized(T) ) const lvalue T		 *?( const	     T * );
+forall( dtype T | sized(T) ) volatile lvalue T	 *?(       volatile  T * );
+forall( dtype T | sized(T) ) const volatile lvalue T *?( const volatile  T * );
+forall( ftype FT ) lvalue FT		 *?( FT * );
+
+_Bool			+?( _Bool ),			-?( _Bool ),			~?( _Bool );
+signed int		+?( signed int ),		-?( signed int ),		~?( signed int );
+unsigned int		+?( unsigned int ),		-?( unsigned int ),		~?( unsigned int );
+signed long int		+?( signed long int ),		-?( signed long int ),		~?( signed long int );
+unsigned long int	+?( unsigned long int ),	-?( unsigned long int ),	~?( unsigned long int );
+signed long long int	+?( signed long long int ),	-?( signed long long int ),	~?( signed long long int );
+unsigned long long int	+?( unsigned long long int ),	-?( unsigned long long int ),	~?( unsigned long long int );
+float			+?( float ),			-?( float );
+double			+?( double ),			-?( double );
+long double		+?( long double ),		-?( long double );
+float _Complex		+?( float _Complex ),		-?( float _Complex );
+double _Complex		+?( double _Complex ),		-?( double _Complex );
+long double _Complex	+?( long double _Complex ),	-?( long double _Complex );
+
+signed int	!?( signed int ),		!?( unsigned int ),
+		!?( long int ),			!?( unsigned long int ),
+		!?( long long int ),		!?( unsigned long long int ),
+		!?( float ),			!?( double ),			!?( long double ),
+		!?( float _Complex ),		!?( double _Complex ),		!?( long double _Complex );
+
+forall ( dtype DT ) int !?( const volatile DT * );
+forall ( ftype FT ) int !?( FT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.5 Multiplicative Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?*?( _Bool, _Bool ),					?/?( _Bool, _Bool ),				?%?( _Bool, _Bool );
+signed int		?*?( signed int, signed int ),				?/?( signed int, signed int ),			?%?( signed int, signed int );
+unsigned int		?*?( unsigned int, unsigned int ),			?/?( unsigned int, unsigned int ),		?%?( unsigned int, unsigned int );
+signed long int		?*?( signed long int, signed long int ),		?/?( signed long int, signed long int ),	?%?( signed long int, signed long int );
+unsigned long int	?*?( unsigned long int, unsigned long int ),		?/?( unsigned long int, unsigned long int ),	?%?( unsigned long int, unsigned long int );
+signed long long int	?*?( signed long long int, signed long long int ),	?/?( signed long long int, signed long long int ), ?%?( signed long long int, signed long long int );
+unsigned long long int	?*?( unsigned long long int, unsigned long long int ),	?/?( unsigned long long int, unsigned long long int ), ?%?( unsigned long long int, unsigned long long int );
+float			?*?( float, float ),					?/?( float, float );
+double			?*?( double, double ),					?/?( double, double );
+long double		?*?( long double, long double ),			?/?( long double, long double );
+// gcc does not support _Imaginary
+//float _Imaginary	?*?( float _Imaginary, float _Imaginary),		?/?( float _Imaginary, float _Imaginary );
+//double _Imaginary	?*?( double _Imaginary, double _Imaginary),		?/?( double _Imaginary, double _Imaginary );
+//long double _Imaginary	?*?( long double _Imaginary, long double _Imaginary),	?/?( long double _Imaginary, long double _Imaginary );
+float _Complex		?*?( float _Complex, float _Complex ),			?/?( float _Complex, float _Complex );
+double _Complex		?*?( double _Complex, double _Complex ),		?/?( double _Complex, double _Complex );
+long double _Complex	?*?( long double _Complex, long double _Complex ),	?/?( long double _Complex, long double _Complex );
+
+// ------------------------------------------------------------
+//
+// Section 4.6 Additive Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?+?( _Bool, _Bool ),					?-?( _Bool, _Bool );
+signed int		?+?( signed int, signed int ),				?-?( signed int, signed int );
+unsigned int		?+?( unsigned int, unsigned int ),			?-?( unsigned int, unsigned int );
+signed long int		?+?( signed long int, signed long int ),		?-?( signed long int, signed long int );
+unsigned long int	?+?( unsigned long int, unsigned long int ),		?-?( unsigned long int, unsigned long int );
+signed long long int	?+?( signed long long int, long long int  signed),	?-?( signed long long int, signed long long int );
+unsigned long long int	?+?( unsigned long long int, unsigned long long int ),	?-?( unsigned long long int, unsigned long long int );
+float			?+?( float, float ),					?-?( float, float );
+double			?+?( double, double ),					?-?( double, double );
+long double		?+?( long double, long double ),			?-?( long double, long double );
+float _Complex		?+?( float _Complex, float _Complex ),			?-?( float _Complex, float _Complex );
+double _Complex		?+?( double _Complex, double _Complex ),		?-?( double _Complex, double _Complex );
+long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
+
+forall( otype T ) T *			?+?(		    T *,	  ptrdiff_t );
+forall( otype T ) T *			?+?(	      ptrdiff_t,		T * );
+forall( otype T ) const T *		?+?( const	    T *,	  ptrdiff_t );
+forall( otype T ) const T *		?+?(	      ptrdiff_t, const		T * );
+forall( otype T ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
+forall( otype T ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
+forall( otype T ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
+forall( otype T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
+forall( otype T ) T *			?-?(		    T *,	  ptrdiff_t );
+forall( otype T ) const T *		?-?( const	    T *,	  ptrdiff_t );
+forall( otype T ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
+forall( otype T ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
+forall( otype T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
+
+// ------------------------------------------------------------
+//
+// Section 4.7 Bitwise Shift Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?<<?( _Bool, _Bool ),					?>>?( _Bool, _Bool );
+signed int		?<<?( signed int, signed int ),				?>>?( signed int, signed int );
+unsigned int		?<<?( unsigned int, unsigned int ),			?>>?( unsigned int, unsigned int );
+signed long int		?<<?( signed long int, signed long int ),		?>>?( signed long int, signed long int );
+unsigned long int	?<<?( unsigned long int, unsigned long int ),		?>>?( unsigned long int, unsigned long int );
+signed long long int	?<<?( signed long long int, signed long long int ),	?>>?( signed long long int, signed long long int );
+unsigned long long int	?<<?( unsigned long long int, unsigned long long int ),	?>>?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.8 Relational Operators
+//
+// ------------------------------------------------------------
+
+signed int ?<?( _Bool, _Bool ),						?<=?( _Bool, _Bool ),
+	   ?>?( _Bool, _Bool ),						?>=?( _Bool, _Bool );
+signed int ?<?( unsigned char, unsigned char ),				?<=?( unsigned char, unsigned char ),
+	   ?>?( unsigned char, unsigned char ),				?>=?( unsigned char, unsigned char );
+signed int ?<?( signed int, signed int ),				?<=?( signed int, signed int ),
+	   ?>?( signed int, signed int ),				?>=?( signed int, signed int );
+signed int ?<?( unsigned int, unsigned int ),				?<=?( unsigned int, unsigned int ),
+	   ?>?( unsigned int, unsigned int ),				?>=?( unsigned int, unsigned int );
+signed int ?<?( signed long int, signed long int ),			?<=?( signed long int, signed long int ),
+	   ?>?( signed long int, signed long int ),			?>=?( signed long int, signed long int );
+signed int ?<?( unsigned long int, unsigned long int ),			?<=?( unsigned long int, unsigned long int ),
+	   ?>?( unsigned long int, unsigned long int ),			?>=?( unsigned long int, unsigned long int );
+signed int ?<?( signed long long int, signed long long int ),		?<=?( signed long long int, signed long long int ),
+	   ?>?( signed long long int, signed long long int ),		?>=?( signed long long int, signed long long int );
+signed int ?<?( unsigned long long int, unsigned long long int ),	?<=?( unsigned long long int, unsigned long long int ),
+	   ?>?( unsigned long long int, unsigned long long int ),	?>=?( unsigned long long int, unsigned long long int );
+signed int ?<?( float, float ),						?<=?( float, float ),
+	   ?>?( float, float ),						?>=?( float, float );
+signed int ?<?( double, double ),					?<=?( double, double ),
+	   ?>?( double, double ),					?>=?( double, double );
+signed int ?<?( long double, long double ),				?<=?( long double, long double ),
+	   ?>?( long double, long double ),				?>=?( long double, long double );
+
+forall( dtype DT ) signed int ?<?(  const volatile DT *, const volatile DT * );
+forall( dtype DT ) signed int ?>?(  const volatile DT *, const volatile DT * );
+forall( dtype DT ) signed int ?<=?( const volatile DT *, const volatile DT * );
+forall( dtype DT ) signed int ?>=?( const volatile DT *, const volatile DT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.9 Equality Operators
+//
+// ------------------------------------------------------------
+
+signed int ?==?( _Bool, _Bool ),							?!=?( _Bool, _Bool );
+signed int ?==?( signed int, signed int ),					?!=?( signed int, signed int );
+signed int ?==?( unsigned int, unsigned int ),					?!=?( unsigned int, unsigned int );
+signed int ?==?( signed long int, signed long int ),				?!=?( signed long int, signed long int );
+signed int ?==?( unsigned long int, unsigned long int ),			?!=?( unsigned long int, unsigned long int );
+signed int ?==?( signed long long int, long long int  signed),		?!=?( signed long long int, signed long long int );
+signed int ?==?( unsigned long long int, unsigned long long int ),	?!=?( unsigned long long int, unsigned long long int );
+signed int ?==?( float, float ),							?!=?( float, float );
+signed int ?==?( double, double ),							?!=?( double, double );
+signed int ?==?( long double, long double ),					?!=?( long double, long double );
+signed int ?==?( float _Complex, float _Complex ),				?!=?( float _Complex, float _Complex );
+signed int ?==?( double _Complex, double _Complex ),				?!=?( double _Complex, double _Complex );
+signed int ?==?( long double _Complex, long double _Complex ),		?!=?( long double _Complex, long double _Complex );
+signed int ?==?( zero_t, zero_t ),							?!=?( zero_t, zero_t );
+signed int ?==?( one_t, one_t ),							?!=?( one_t, one_t );
+
+forall( dtype DT ) signed int ?==?(		   DT *,		DT * );
+forall( dtype DT ) signed int ?==?( const	   DT *, const		DT * );
+forall( dtype DT ) signed int ?==?(       volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?==?( const volatile DT *, const volatile DT * );
+forall( ftype FT ) signed int ?==?( FT *, FT * );
+forall( dtype DT ) signed int ?!=?(		   DT *,		DT * );
+forall( dtype DT ) signed int ?!=?( const	   DT *, const		DT * );
+forall( dtype DT ) signed int ?!=?(       volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?!=?( const volatile DT *, const volatile DT * );
+forall( ftype FT ) signed int ?!=?( FT *, FT * );
+
+// forall( dtype DT ) signed int ?==?( const volatile DT   *, const volatile void * );
+// forall( dtype DT ) signed int ?==?( const volatile void *, const volatile DT * );
+// forall( dtype DT ) signed int ?!=?( const volatile DT   *, const volatile void * );
+// forall( dtype DT ) signed int ?!=?( const volatile void *, const volatile DT * );
+
+// forall( dtype DT ) signed int ?==?( const volatile DT *, forall( dtype DT2 )const DT2 * );
+// forall( dtype DT ) signed int ?==?( forall( dtype DT2 )const DT2 *, const volatile DT * );
+// forall( ftype FT ) signed int ?==?( FT *, forall( ftype FT2 )FT2 * );
+// forall( ftype FT ) signed int ?==?( forall( ftype FT2 )FT2 *, FT * );
+// forall( dtype DT ) signed int ?!=?( const volatile DT *, forall( dtype DT2 )const DT2 * );
+// forall( dtype DT ) signed int ?!=?( forall( dtype DT2 )const DT2 *, const volatile DT * );
+// forall( ftype FT ) signed int ?!=?( FT *, forall( ftype FT2 )FT2 * );
+// forall( ftype FT ) signed int ?!=?( forall( ftype FT2 )FT2 *, FT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.10 Bitwise AND Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?&?( _Bool, _Bool );
+signed int		?&?( signed int, signed int );
+unsigned int		?&?( unsigned int, unsigned int );
+signed long int		?&?( signed long int, signed long int );
+unsigned long int	?&?( unsigned long int, unsigned long int );
+signed long long int	?&?( signed long long int, signed long long int );
+unsigned long long int	?&?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.11 Bitwise XOR Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?^?( _Bool, _Bool );
+signed int		?^?( signed int, signed int );
+unsigned int		?^?( unsigned int, unsigned int );
+signed long int		?^?( signed long int, signed long int );
+unsigned long int	?^?( unsigned long int, unsigned long int );
+signed long long int	?^?( signed long long int, signed long long int );
+unsigned long long int	?^?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.12 Bitwise OR Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?|?( _Bool, _Bool );
+signed int		?|?( signed int, signed int );
+unsigned int		?|?( unsigned int, unsigned int );
+signed long int		?|?( signed long int, signed long int );
+unsigned long int	?|?( unsigned long int, unsigned long int );
+signed long long int	?|?( signed long long int, signed long long int );
+unsigned long long int	?|?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.16 Assignment Operator
+//
+// ------------------------------------------------------------
+
+forall( ftype FT ) FT *			?=?( FT **, FT * );
+forall( ftype FT ) FT *			?=?( FT * volatile *, FT * );
+
+forall( dtype DT ) DT *			?=?(		     DT *	   *,			DT * );
+forall( dtype DT ) DT *			?=?(		     DT * volatile *,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   *,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   *, const		DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *, const		DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,			DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,			DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,	    volatile	DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,	    volatile	DT * );
+
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,			DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *,			DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *, const		DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *, const		DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *,	    volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *,	    volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *, const volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *, const volatile	DT * );
+
+forall( dtype DT ) DT *			?=?(		     DT *	   *,			void * );
+forall( dtype DT ) DT *			?=?(		     DT * volatile *,			void * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   *,			void * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *,			void * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   *, const		void * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *, const		void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,			void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,			void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,	    volatile	void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,	    volatile	void * );
+
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,			void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *,			void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *, const		void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *, const		void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,	    volatile	void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *,	    volatile	void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *, const volatile	void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *, const volatile	void * );
+
+forall( dtype DT ) void *		 ?=?(		     void *	     *,			DT * );
+forall( dtype DT ) void *		 ?=?(		     void * volatile *,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void *	     *,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void * volatile *,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void *	     *, const		DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void * volatile *, const		DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     *,			DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile *,			DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     *,	      volatile	DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile *,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *,			DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *,			DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *, const		DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *, const		DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *, const volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *, const volatile	DT * );
+
+void *			?=?(		    void *	    *,		      void * );
+void *			?=?(		    void * volatile *,		      void * );
+const void *		?=?( const	    void *	    *,		      void * );
+const void *		?=?( const	    void * volatile *,		      void * );
+const void *		?=?( const	    void *	    *, const	      void * );
+const void *		?=?( const	    void * volatile *, const	      void * );
+volatile void *		?=?(	   volatile void *	    *,		      void * );
+volatile void *		?=?(	   volatile void * volatile *,		      void * );
+volatile void *		?=?(	   volatile void *	    *,	     volatile void * );
+volatile void *		?=?(	   volatile void * volatile *,	     volatile void * );
+const volatile void *	?=?( const volatile void *	    *,		      void * );
+const volatile void *	?=?( const volatile void * volatile *,		      void * );
+const volatile void *	?=?( const volatile void *	    *, const	      void * );
+const volatile void *	?=?( const volatile void * volatile *, const	      void * );
+const volatile void *	?=?( const volatile void *	    *,	     volatile void * );
+const volatile void *	?=?( const volatile void * volatile *,	     volatile void * );
+const volatile void *	?=?( const volatile void *	    *, const volatile void * );
+const volatile void *	?=?( const volatile void * volatile *, const volatile void * );
+
+//forall( dtype DT ) DT *			?=?(		    DT *	  *, forall( dtype DT2 ) const DT2 * );
+//forall( dtype DT ) DT *			?=?(		    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const DT *		?=?( const	    DT *	  *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const DT *		?=?( const	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+//forall( dtype DT ) volatile DT *	?=?( volatile	    DT *	  *, forall( dtype DT2 ) const DT2 * );
+//forall( dtype DT ) volatile DT *	?=?( volatile	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile DT *	  *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile DT * volatile *, forall( dtype DT2 ) const DT2 * );
+
+forall( ftype FT ) FT *			?=?( FT *	   *, forall( ftype FT2 ) FT2 * );
+forall( ftype FT ) FT *			?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
+
+forall( otype T ) T *			?+=?(		     T *	  *, ptrdiff_t );
+forall( otype T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
+forall( otype T ) const T *		?+=?( const	     T *	  *, ptrdiff_t );
+forall( otype T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
+forall( otype T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
+forall( otype T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
+forall( otype T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
+forall( otype T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
+forall( otype T ) T *			?-=?(		     T *	  *, ptrdiff_t );
+forall( otype T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
+forall( otype T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
+forall( otype T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
+forall( otype T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
+forall( otype T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
+forall( otype T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
+forall( otype T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
+
+_Bool			?=?( _Bool *, _Bool ),					?=?( volatile _Bool *, _Bool );
+char			?=?( char *, char ),					?=?( volatile char *, char );
+char signed		?=?( char signed *, char signed ),			?=?( volatile char signed *, char signed );
+char unsigned		?=?( char unsigned *, char unsigned ),			?=?( volatile char unsigned *, char unsigned );
+int short		?=?( int short *, int short ),				?=?( volatile int short *, int short );
+int short unsigned	?=?( int short unsigned *, int short unsigned ),	?=?( volatile int short unsigned *, int short unsigned );
+signed int		?=?( signed int *, signed int ),			?=?( volatile signed int *, signed int );
+unsigned int		?=?( unsigned *, unsigned ),				?=?( volatile unsigned *, unsigned );
+signed long int		?=?( signed long int *, signed long int ),		?=?( volatile signed long int *, signed long int );
+unsigned long int	?=?( unsigned long int *, unsigned long int ),		?=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?=?( signed long long int *, signed long long int ),	?=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?=?( unsigned long long int *, unsigned long long int ), ?=?( volatile unsigned long long int *, unsigned long long int );
+zero_t		?=?( zero_t *, zero_t );
+one_t			?=?( one_t *, one_t );
+
+
+_Bool			?*=?( _Bool *, _Bool ),					?*=?( volatile _Bool *, _Bool );
+char			?*=?( char *, char ),					?*=?( volatile char *, char );
+char signed		?*=?( char signed *, char signed ),			?*=?( volatile char signed *, char signed );
+char unsigned		?*=?( char unsigned *, char unsigned ),			?*=?( volatile char unsigned *, char unsigned );
+int short		?*=?( int short *, int short ),				?*=?( volatile int short *, int short );
+int short unsigned	?*=?( int short unsigned *, int short unsigned ),	?*=?( volatile int short unsigned *, int short unsigned );
+signed int		?*=?( signed int *, signed int ),			?*=?( volatile signed int *, signed int );
+unsigned int		?*=?( unsigned *, unsigned ),				?*=?( volatile unsigned *, unsigned );
+signed long int		?*=?( signed long int *, signed long int ),		?*=?( volatile signed long int *, signed long int );
+unsigned long int	?*=?( unsigned long int *, unsigned long int ),		?*=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?*=?( signed long long int *, signed long long int ),	?*=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?*=?( unsigned long long int *, unsigned long long int ), ?*=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?/=?( _Bool *, _Bool ),					?/=?( volatile _Bool *, _Bool );
+char			?/=?( char *, char ),					?/=?( volatile char *, char );
+char signed		?/=?( char signed *, char signed ),			?/=?( volatile char signed *, char signed );
+char unsigned		?/=?( char unsigned *, char unsigned ),			?/=?( volatile char unsigned *, char unsigned );
+int short		?/=?( int short *, int short ),				?/=?( volatile int short *, int short );
+int short unsigned	?/=?( int short unsigned *, int short unsigned ),	?/=?( volatile int short unsigned *, int short unsigned );
+signed int		?/=?( signed int *, signed int ),			?/=?( volatile signed int *, signed int );
+unsigned int		?/=?( unsigned *, unsigned ),				?/=?( volatile unsigned *, unsigned );
+signed long int		?/=?( signed long int *, signed long int ),		?/=?( volatile signed long int *, signed long int );
+unsigned long int	?/=?( unsigned long int *, unsigned long int ),		?/=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?/=?( signed long long int *, signed long long int ),	?/=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?/=?( unsigned long long int *, unsigned long long int ), ?/=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?%=?( _Bool *, _Bool ),					?%=?( volatile _Bool *, _Bool );
+char			?%=?( char *, char ),					?%=?( volatile char *, char );
+char signed		?%=?( char signed *, char signed ),			?%=?( volatile char signed *, char signed );
+char unsigned		?%=?( char unsigned *, char unsigned ),			?%=?( volatile char unsigned *, char unsigned );
+int short		?%=?( int short *, int short ),				?%=?( volatile int short *, int short );
+int short unsigned	?%=?( int short unsigned *, int short unsigned ),	?%=?( volatile int short unsigned *, int short unsigned );
+signed int		?%=?( signed int *, signed int ),			?%=?( volatile signed int *, signed int );
+unsigned int		?%=?( unsigned *, unsigned ),				?%=?( volatile unsigned *, unsigned );
+signed long int		?%=?( signed long int *, signed long int ),		?%=?( volatile signed long int *, signed long int );
+unsigned long int	?%=?( unsigned long int *, unsigned long int ),		?%=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?%=?( signed long long int *, signed long long int ),	?%=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?%=?( unsigned long long int *, unsigned long long int ), ?%=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?+=?( _Bool *, _Bool ),					?+=?( volatile _Bool *, _Bool );
+char			?+=?( char *, char ),					?+=?( volatile char *, char );
+char signed		?+=?( char signed *, char signed ),			?+=?( volatile char signed *, char signed );
+char unsigned		?+=?( char unsigned *, char unsigned ),			?+=?( volatile char unsigned *, char unsigned );
+int short		?+=?( int short *, int short ),				?+=?( volatile int short *, int short );
+int short unsigned	?+=?( int short unsigned *, int short unsigned ),	?+=?( volatile int short unsigned *, int short unsigned );
+signed int		?+=?( signed int *, signed int ),			?+=?( volatile signed int *, signed int );
+unsigned int		?+=?( unsigned *, unsigned ),				?+=?( volatile unsigned *, unsigned );
+signed long int		?+=?( signed long int *, signed long int ),		?+=?( volatile signed long int *, signed long int );
+unsigned long int	?+=?( unsigned long int *, unsigned long int ),		?+=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?+=?( signed long long int *, signed long long int ),	?+=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?+=?( unsigned long long int *, unsigned long long int ), ?+=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?-=?( _Bool *, _Bool ),					?-=?( volatile _Bool *, _Bool );
+char			?-=?( char *, char ),					?-=?( volatile char *, char );
+char signed		?-=?( char signed *, char signed ),			?-=?( volatile char signed *, char signed );
+char unsigned		?-=?( char unsigned *, char unsigned ),			?-=?( volatile char unsigned *, char unsigned );
+int short		?-=?( int short *, int short ),				?-=?( volatile int short *, int short );
+int short unsigned	?-=?( int short unsigned *, int short unsigned ),	?-=?( volatile int short unsigned *, int short unsigned );
+signed int		?-=?( signed int *, signed int ),			?-=?( volatile signed int *, signed int );
+unsigned int		?-=?( unsigned *, unsigned ),				?-=?( volatile unsigned *, unsigned );
+signed long int		?-=?( signed long int *, signed long int ),		?-=?( volatile signed long int *, signed long int );
+unsigned long int	?-=?( unsigned long int *, unsigned long int ),		?-=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?-=?( signed long long int *, signed long long int ),	?-=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?-=?( unsigned long long int *, unsigned long long int ), ?-=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?<<=?( _Bool *, _Bool ),				?<<=?( volatile _Bool *, _Bool );
+char			?<<=?( char *, char ),					?<<=?( volatile char *, char );
+char signed		?<<=?( char signed *, char signed ),			?<<=?( volatile char signed *, char signed );
+char unsigned		?<<=?( char unsigned *, char unsigned ),		?<<=?( volatile char unsigned *, char unsigned );
+int short		?<<=?( int short *, int short ),			?<<=?( volatile int short *, int short );
+int short unsigned	?<<=?( int short unsigned *, int short unsigned ),	?<<=?( volatile int short unsigned *, int short unsigned );
+signed int		?<<=?( signed int *, signed int ),			?<<=?( volatile signed int *, signed int );
+unsigned int		?<<=?( unsigned *, unsigned ),				?<<=?( volatile unsigned *, unsigned );
+signed long int		?<<=?( signed long int *, signed long int ),		?<<=?( volatile signed long int *, signed long int );
+unsigned long int	?<<=?( unsigned long int *, unsigned long int ),	?<<=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?<<=?( signed long long int *, signed long long int ),	?<<=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?<<=?( unsigned long long int *, unsigned long long int ), ?<<=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?>>=?( _Bool *, _Bool ),				?>>=?( volatile _Bool *, _Bool );
+char			?>>=?( char *, char ),					?>>=?( volatile char *, char );
+char signed		?>>=?( char signed *, char signed ),			?>>=?( volatile char signed *, char signed );
+char unsigned		?>>=?( char unsigned *, char unsigned ),		?>>=?( volatile char unsigned *, char unsigned );
+int short		?>>=?( int short *, int short ),			?>>=?( volatile int short *, int short );
+int short unsigned	?>>=?( int short unsigned *, int short unsigned ),	?>>=?( volatile int short unsigned *, int short unsigned );
+signed int		?>>=?( signed int *, signed int ),			?>>=?( volatile signed int *, signed int );
+unsigned int		?>>=?( unsigned *, unsigned ),				?>>=?( volatile unsigned *, unsigned );
+signed long int		?>>=?( signed long int *, signed long int ),		?>>=?( volatile signed long int *, signed long int );
+unsigned long int	?>>=?( unsigned long int *, unsigned long int ),	?>>=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?>>=?( signed long long int *, signed long long int ),	?>>=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?>>=?( unsigned long long int *, unsigned long long int ), ?>>=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?&=?( _Bool *, _Bool ),					?&=?( volatile _Bool *, _Bool );
+char			?&=?( char *, char ),					?&=?( volatile char *, char );
+char signed		?&=?( char signed *, char signed ),			?&=?( volatile char signed *, char signed );
+char unsigned		?&=?( char unsigned *, char unsigned ),			?&=?( volatile char unsigned *, char unsigned );
+int short		?&=?( int short *, int short ),				?&=?( volatile int short *, int short );
+int short unsigned	?&=?( int short unsigned *, int short unsigned ),	?&=?( volatile int short unsigned *, int short unsigned );
+signed int		?&=?( signed int *, signed int ),			?&=?( volatile signed int *, signed int );
+unsigned int		?&=?( unsigned *, unsigned ),				?&=?( volatile unsigned *, unsigned );
+signed long int		?&=?( signed long int *, signed long int ),		?&=?( volatile signed long int *, signed long int );
+unsigned long int	?&=?( unsigned long int *, unsigned long int ),		?&=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?&=?( signed long long int *, signed long long int ),	?&=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?&=?( unsigned long long int *, unsigned long long int ), ?&=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?|=?( _Bool *, _Bool ),					?|=?( volatile _Bool *, _Bool );
+char			?|=?( char *, char ),					?|=?( volatile char *, char );
+char signed		?|=?( char signed *, char signed ),			?|=?( volatile char signed *, char signed );
+char unsigned		?|=?( char unsigned *, char unsigned ),			?|=?( volatile char unsigned *, char unsigned );
+int short		?|=?( int short *, int short ),				?|=?( volatile int short *, int short );
+int short unsigned	?|=?( int short unsigned *, int short unsigned ),	?|=?( volatile int short unsigned *, int short unsigned );
+signed int		?|=?( signed int *, signed int ),			?|=?( volatile signed int *, signed int );
+unsigned int		?|=?( unsigned *, unsigned ),				?|=?( volatile unsigned *, unsigned );
+signed long int		?|=?( signed long int *, signed long int ),		?|=?( volatile signed long int *, signed long int );
+unsigned long int	?|=?( unsigned long int *, unsigned long int ),		?|=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?|=?( signed long long int *, signed long long int ),	?|=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?|=?( unsigned long long int *, unsigned long long int ), ?|=?( volatile unsigned long long int *, unsigned long long int );
+
+_Bool			?^=?( _Bool *, _Bool ),					?^=?( volatile _Bool *, _Bool );
+char			?^=?( char *, char ),					?^=?( volatile char *, char );
+char signed		?^=?( char signed *, char signed ),			?^=?( volatile char signed *, char signed );
+char unsigned		?^=?( char unsigned *, char unsigned ),			?^=?( volatile char unsigned *, char unsigned );
+int short		?^=?( int short *, int short ),				?^=?( volatile int short *, int short );
+int short unsigned	?^=?( int short unsigned *, int short unsigned ),	?^=?( volatile int short unsigned *, int short unsigned );
+signed int		?^=?( signed int *, signed int ),			?^=?( volatile signed int *, signed int );
+unsigned int		?^=?( unsigned *, unsigned ),				?^=?( volatile unsigned *, unsigned );
+signed long int		?^=?( signed long int *, signed long int ),		?^=?( volatile signed long int *, signed long int );
+unsigned long int	?^=?( unsigned long int *, unsigned long int ),		?^=?( volatile unsigned long int *, unsigned long int );
+signed long long int	?^=?( signed long long int *, signed long long int ),	?^=?( volatile signed long long int *, signed long long int );
+unsigned long long int	?^=?( unsigned long long int *, unsigned long long int ), ?^=?( volatile unsigned long long int *, unsigned long long int );
+
+float			?=?(  float *, float ), ?=?(  volatile float *, float ),
+			?*=?( float *, float ), ?*=?( volatile float *, float ),
+			?/=?( float *, float ), ?/=?( volatile float *, float ),
+			?+=?( float *, float ), ?+=?( volatile float *, float ),
+			?-=?( float *, float ), ?-=?( volatile float *, float );
+
+double			?=?(  double *, double ), ?=?(  volatile double *, double ),
+			?*=?( double *, double ), ?*=?( volatile double *, double ),
+			?/=?( double *, double ), ?/=?( volatile double *, double ),
+			?+=?( double *, double ), ?+=?( volatile double *, double ),
+			?-=?( double *, double ), ?-=?( volatile double *, double );
+
+long double		?=?(  long double *, long double ), ?=?(  volatile long double *, long double ),
+			?*=?( long double *, long double ), ?*=?( volatile long double *, long double ),
+			?/=?( long double *, long double ), ?/=?( volatile long double *, long double ),
+			?+=?( long double *, long double ), ?+=?( volatile long double *, long double ),
+			?-=?( long double *, long double ), ?-=?( volatile long double *, long double );
+
+float _Complex		?=?(  float _Complex *, float _Complex ), ?=?(  volatile float _Complex *, float _Complex ),
+			?*=?( float _Complex *, float _Complex ), ?*=?( volatile float _Complex *, float _Complex ),
+			?/=?( float _Complex *, float _Complex ), ?/=?( volatile float _Complex *, float _Complex ),
+			?+=?( float _Complex *, float _Complex ), ?+=?( volatile float _Complex *, float _Complex ),
+			?-=?( float _Complex *, float _Complex ), ?-=?( volatile float _Complex *, float _Complex );
+
+double _Complex		?=?(  double _Complex *, double _Complex ), ?=?(  volatile double _Complex *, double _Complex ),
+			?*=?( double _Complex *, double _Complex ), ?*=?( volatile double _Complex *, double _Complex ),
+			?/=?( double _Complex *, double _Complex ), ?/=?( volatile double _Complex *, double _Complex ),
+			?+=?( double _Complex *, double _Complex ), ?+=?( volatile double _Complex *, double _Complex ),
+			?-=?( double _Complex *, double _Complex ), ?-=?( volatile double _Complex *, double _Complex );
+
+long double _Complex	?=?(  long double _Complex *, long double _Complex ), ?=?(  volatile long double _Complex *, long double _Complex ),
+			?*=?( long double _Complex *, long double _Complex ), ?*=?( volatile long double _Complex *, long double _Complex ),
+			?/=?( long double _Complex *, long double _Complex ), ?/=?( volatile long double _Complex *, long double _Complex ),
+			?+=?( long double _Complex *, long double _Complex ), ?+=?( volatile long double _Complex *, long double _Complex ),
+			?-=?( long double _Complex *, long double _Complex ), ?-=?( volatile long double _Complex *, long double _Complex );
+
+
+
+
+
+// ------------------------------------------------------------
+//
+// Section ??? Constructors and Destructors
+//
+// ------------------------------------------------------------
+
+// default ctor
+void	?{}( _Bool * );
+void	?{}( char * );
+void	?{}( unsigned char * );
+void	?{}( char signed * );
+void	?{}( int short * );
+void	?{}( int short unsigned * );
+void	?{}( signed int * );
+void	?{}( unsigned int * );
+void	?{}( signed long int * );
+void	?{}( unsigned long int * );
+void	?{}( signed long long int * );
+void	?{}( unsigned long long int * );
+void	?{}( float * );
+void	?{}( double * );
+void	?{}( long double * );
+void	?{}( float _Complex * );
+void	?{}( double _Complex * );
+void	?{}( long double _Complex * );
+void	?{}( zero_t * );
+void	?{}( one_t * );
+
+// copy ctor
+void	?{}( _Bool *, _Bool );
+void	?{}( char *, char );
+void	?{}( unsigned char *, unsigned char );
+void	?{}( char signed *, char signed );
+void	?{}( int short *, int short );
+void	?{}( int short unsigned *, int short unsigned );
+void	?{}( signed int *, signed int);
+void	?{}( unsigned int *, unsigned int);
+void	?{}( signed long int *, signed long int);
+void	?{}( unsigned long int *, unsigned long int);
+void	?{}( signed long long int *, signed long long int);
+void	?{}( unsigned long long int *, unsigned long long int);
+void	?{}( float *, float);
+void	?{}( double *, double);
+void	?{}( long double *, long double);
+void	?{}( float _Complex *, float _Complex);
+void	?{}( double _Complex *, double _Complex);
+void	?{}( long double _Complex *, long double _Complex);
+void	?{}( zero_t *, zero_t );
+void	?{}( one_t *, one_t );
+
+// dtor
+void	^?{}( _Bool * );
+void	^?{}( char * );
+void	^?{}( char unsigned * );
+void	^?{}( char signed * );
+void	^?{}( int short * );
+void	^?{}( int short unsigned * );
+void	^?{}( signed int * );
+void	^?{}( unsigned int * );
+void	^?{}( signed long int * );
+void	^?{}( unsigned long int * );
+void	^?{}( signed long long int * );
+void	^?{}( unsigned long long int * );
+void	^?{}( float * );
+void	^?{}( double * );
+void	^?{}( long double * );
+void	^?{}( float _Complex * );
+void	^?{}( double _Complex * );
+void	^?{}( long double _Complex * );
+void	^?{}( zero_t * );
+void	^?{}( one_t * );
+
+// // default ctor
+// forall( dtype DT ) void	 ?{}(		     DT ** );
+// forall( dtype DT ) void	 ?{}( const	     DT ** );
+// forall( dtype DT ) void	 ?{}(	    volatile DT ** );
+// forall( dtype DT ) void	 ?{}( const volatile DT ** );
+
+// // copy ctor
+// forall( dtype DT ) void	 ?{}(		     DT **, DT* );
+// forall( dtype DT ) void	 ?{}( const	     DT **, DT* );
+// forall( dtype DT ) void	 ?{}(	    volatile DT **, DT* );
+// forall( dtype DT ) void	 ?{}( const volatile DT **, DT* );
+
+// // dtor
+// forall( dtype DT ) void	^?{}(		     DT ** );
+// forall( dtype DT ) void	^?{}( const	     DT ** );
+// forall( dtype DT ) void	^?{}(	    volatile DT ** );
+// forall( dtype DT ) void	^?{}( const volatile DT ** );
+
+// copied from assignment section
+// copy constructors
+forall( ftype FT ) void ?{}( FT **, FT * );
+forall( ftype FT ) void ?{}( FT * volatile *, FT * );
+
+forall( dtype DT ) void ?{}(		     DT *	   *,			DT * );
+forall( dtype DT ) void ?{}( const	     DT *	   *,			DT * );
+forall( dtype DT ) void ?{}( const	     DT *	   *, const		DT * );
+forall( dtype DT ) void ?{}(	   volatile  DT *	   *,			DT * );
+forall( dtype DT ) void ?{}(	   volatile  DT *	   *,	    volatile	DT * );
+
+forall( dtype DT ) void ?{}( const volatile  DT *	   *,			DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   *, const		DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   *,	    volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   *, const volatile	DT * );
+
+forall( dtype DT ) void ?{}(		     DT *	   *,			void * );
+forall( dtype DT ) void ?{}( const	     DT *	   *,			void * );
+forall( dtype DT ) void ?{}( const	     DT *	   *, const		void * );
+forall( dtype DT ) void ?{}(	   volatile  DT *	   *,			void * );
+forall( dtype DT ) void ?{}(	   volatile  DT *	   *,	    volatile	void * );
+
+forall( dtype DT ) void ?{}( const volatile  DT *	   *,			void * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   *, const		void * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   *,	    volatile	void * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   *, const volatile	void * );
+
+forall( dtype DT ) void ?{}(		     void *	     *,			DT * );
+forall( dtype DT ) void ?{}( const	     void *	     *,			DT * );
+forall( dtype DT ) void ?{}( const	     void *	     *, const		DT * );
+forall( dtype DT ) void ?{}(	    volatile void *	     *,			DT * );
+forall( dtype DT ) void ?{}(	    volatile void *	     *,	      volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     *,			DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     *, const		DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     *,	      volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     *, const volatile	DT * );
+
+void 	?{}(		    void *	    *,		      void * );
+void 	?{}( const	    void *	    *,		      void * );
+void 	?{}( const	    void *	    *, const	      void * );
+void 	?{}(	   volatile void *	    *,		      void * );
+void 	?{}(	   volatile void *	    *,	     volatile void * );
+void 	?{}( const volatile void *	    *,		      void * );
+void 	?{}( const volatile void *	    *, const	      void * );
+void 	?{}( const volatile void *	    *,	     volatile void * );
+void 	?{}( const volatile void *	    *, const volatile void * );
+
+//forall( dtype DT ) void ?{}(		    DT *	  *, forall( dtype DT2 ) const DT2 * );
+//forall( dtype DT ) void ?{}(		    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) void ?{}( const	    DT *	  *, forall( dtype DT2 ) const DT2 * );
+//forall( dtype DT ) void ?{}( volatile	    DT *	  *, forall( dtype DT2 ) const DT2 * );
+//forall( dtype DT ) void ?{}( volatile	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) void ?{}( const volatile DT *	  *, forall( dtype DT2 ) const DT2 * );
+
+forall( ftype FT ) void	?{}( FT *	   *, forall( ftype FT2 ) FT2 * );
+
+// default ctors
+forall( ftype FT ) void	?{}( FT *	   * );
+
+forall( dtype DT ) void	?{}(		     DT *	   *);
+forall( dtype DT ) void	?{}( const	     DT *	   *);
+forall( dtype DT ) void	?{}(	   volatile  DT *	   *);
+forall( dtype DT ) void ?{}( const volatile  DT *	   *);
+
+void 	?{}(		    void *	    *);
+void 	?{}( const	    void *	    *);
+void 	?{}(	   volatile void *	    *);
+void 	?{}( const volatile void *	    *);
+
+// dtors
+forall( ftype FT ) void	^?{}( FT *	   * );
+
+forall( dtype DT ) void	^?{}(		     DT *	   *);
+forall( dtype DT ) void	^?{}( const	     DT *	   *);
+forall( dtype DT ) void	^?{}(	   volatile  DT *	   *);
+forall( dtype DT ) void ^?{}( const volatile  DT *	   *);
+
+void 	^?{}(		    void *	    *);
+void 	^?{}( const	    void *	    *);
+void 	^?{}(	   volatile void *	    *);
+void 	^?{}( const volatile void *	    *);
+
+// Local Variables: //
+// mode: c //
+// tab-width: 8 //
+// End: //
Index: src/prelude/prototypes.awk
===================================================================
--- src/prelude/prototypes.awk	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/prototypes.awk	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,135 @@
+#
+# Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+#
+# The contents of this file are covered under the licence agreement in the
+# file "LICENCE" distributed with Cforall.
+#
+# prototypes.awk -- 
+#
+# Author           : Peter A. Buhr
+# Created On       : Sat May 16 07:57:37 2015
+# Last Modified By : Peter A. Buhr
+# Last Modified On : Tue Jul  5 14:32:52 2016
+# Update Count     : 32
+# 
+
+# http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def
+
+BEGIN {
+    FS = "("
+    # order so string search is longest string
+    types[0]  = "UINTMAX";					vtypes[0]  = "unsigned long int"
+    types[1]  = "UINT16";					vtypes[1]  = "short int"
+    types[2]  = "UINT32";					vtypes[2]  = "int"
+    types[3]  = "UINT64";					vtypes[3]  = "long long int"
+    types[4]  = "UINT";						vtypes[4]  = "unsigned int"
+    types[5]  = "INTMAX";					vtypes[5]  = "long int"
+    types[6]  = "INTPTR";					vtypes[6]  = "int *"
+    types[7]  = "WINT";						vtypes[7]  = "unsigned int"
+    types[8]  = "INT";						vtypes[8]  = "int"
+    types[9]  = "ULONGLONG";				vtypes[9]  = "unsigned long long"
+    types[10] = "ULONG";					vtypes[10] = "unsigned long"
+    types[11] = "UNSIGNED";					vtypes[11] = "unsigned"
+    types[12] = "COMPLEX_LONGDOUBLE";		vtypes[12] = "_Complex long double"
+    types[13] = "COMPLEX_DOUBLE";			vtypes[13] = "_Complex double"
+    types[14] = "COMPLEX_FLOAT";			vtypes[14] = "_Complex float"
+    types[15] = "LONGDOUBLEPTR";			vtypes[15] = "long double *"
+    types[16] = "LONGDOUBLE";				vtypes[16] = "long double"
+    types[17] = "LONGLONG";					vtypes[17] = "long long"
+    types[18] = "LONG";						vtypes[18] = "long"
+    types[19] = "DFLOAT32";					vtypes[19] = "_Decimal32"
+    types[20] = "DFLOAT64";					vtypes[20] = "_Decimal64"
+    types[21] = "DFLOAT128";				vtypes[21] = "_Decimal128"
+    types[22] = "DOUBLEPTR";				vtypes[22] = "double *"
+    types[23] = "DOUBLE";					vtypes[23] = "double"
+    types[24] = "FLOATPTR";					vtypes[24] = "float *"
+    types[25] = "FLOAT";					vtypes[25] = "float"
+    types[26] = "CONST_PTR";				vtypes[26] = "const void *"
+    types[27] = "CONST_STRING";				vtypes[27] = "const char *"
+    types[28] = "PTR_FN_VOID_VAR_PTR_SIZE";	vtypes[28] = ""
+    types[29] = "PTR_CONST_STRING";			vtypes[29] = "char *const"
+    types[30] = "PTRMODE_PTR";				vtypes[30] = ""
+    types[31] = "PTRPTR";					vtypes[31] = "void **"
+    types[32] = "PTR";						vtypes[32] = "void *"
+    types[33] = "VOID";						vtypes[33] = "void"
+    types[34] = "STRING";					vtypes[34] = "char *"
+    types[35] = "FILEPTR";					vtypes[35] = "struct _IO_FILE *"
+    types[36] = "SIZE";						vtypes[36] = "unsigned long"
+    types[37] = "VAR";						vtypes[37] = "..."
+    types[38] = "VALIST_ARG";				vtypes[38] = "__builtin_va_list"
+    types[39] = "VALIST_REF";				vtypes[39] = "__builtin_va_list"
+    types[40] = "UNWINDWORD";				vtypes[40] = "void *"
+    types[41] = "WORD";						vtypes[41] = ""
+    types[42] = "SSIZE";					vtypes[42] = "long int"
+    types[43] = "PID";						vtypes[43] = "int"
+    N = 44
+} # BEGIN
+
+/^BT_/ { prototypes[$1] = $1 }
+
+END {
+    printf( "#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)\n" );
+    printf( "#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);\n" );
+    printf( "#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)\n\n" );
+
+    # generate C types for macros names
+    for ( i = 0; i < N; i += 1 ) {
+		printf( "#define BT_%s %s\n", types[i], vtypes[i] )
+    } # for
+    printf( "\n" )
+
+    for ( prototype in prototypes ) {
+		if ( index( "BT_LAST", prototype ) == 1 ) {
+			continue
+		} # if
+
+		printf( "#define %s(NAME) FUNC_SIMPLE(", prototype )
+
+		if ( sub( "BT_FN_", "", prototype ) == 0 ) {
+			printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype )
+			exit 0
+		} # if
+
+		# generate function return type as macro
+		for ( t = 0; t < N; t += 1 ) {					# find longest match 
+			type = types[t];
+			if ( index( prototype, type ) == 1 ) {		# found match
+				printf( "BT_%s, NAME", type )
+				sub( type, "", prototype )
+				break;
+			} # if
+		} # for
+
+		# generate function parameter types as macro
+		if ( index( prototype, "VAR" ) != 2 ) {			# C-style empty parameters ?
+			for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed
+				sub( "_", "", prototype)				# remove "_"
+				printf( ", ", type )
+				temp = prototype
+				for ( t = 0; t < N; t += 1 ) {			# find longest match
+					type = types[t];
+					if ( index( prototype, type ) == 1 ) { # found match
+						printf( "BT_%s", type )
+						sub( type, "", prototype )
+						break;
+					} # if
+				} # for
+				if ( temp == prototype ) {				# no match found for parameter in macro table
+					printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype )
+					exit 0
+				} # if
+			} # for
+		} # if
+		printf( ")\n" )
+    } # for
+
+	# extras
+	printf( "\n#include \"builtins.def\"\n\n" );
+	printf( "extern const char *__PRETTY_FUNCTION__;\n" );
+} # END
+
+# Local Variables: #
+# tab-width: 4 #
+# mode: awk #
+# compile-command: "make install" #
+# End: #
Index: src/prelude/prototypes.c
===================================================================
--- src/prelude/prototypes.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/prelude/prototypes.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,2 @@
+#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)
+#include "builtins.def"
Index: src/tests/.expect/32/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/32/declarationSpecifier.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/32/declarationSpecifier.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -20,16 +20,16 @@
 static inline void ___constructor__F_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1);
 static inline void ___destructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1);
+static inline void ___constructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))=___src__13s__anonymous0_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
     ((void)((*___dst__P13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
     return ((struct __anonymous0 )___src__13s__anonymous0_1);
-}
-static inline void ___constructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))=___src__13s__anonymous0_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous0_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous0_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__P13s__anonymous0_1, int __i__i_1){
@@ -44,16 +44,16 @@
 static inline void ___constructor__F_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1);
 static inline void ___destructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1);
+static inline void ___constructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))=___src__13s__anonymous1_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
     ((void)((*___dst__P13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
     return ((struct __anonymous1 )___src__13s__anonymous1_1);
-}
-static inline void ___constructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))=___src__13s__anonymous1_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous1_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous1_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__P13s__anonymous1_1, int __i__i_1){
@@ -68,16 +68,16 @@
 static inline void ___constructor__F_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1);
 static inline void ___destructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1);
+static inline void ___constructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))=___src__13s__anonymous2_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
     ((void)((*___dst__P13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
     return ((struct __anonymous2 )___src__13s__anonymous2_1);
-}
-static inline void ___constructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))=___src__13s__anonymous2_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous2_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous2_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__P13s__anonymous2_1, int __i__i_1){
@@ -92,16 +92,16 @@
 static inline void ___constructor__F_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1);
 static inline void ___destructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1);
+static inline void ___constructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))=___src__13s__anonymous3_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
     ((void)((*___dst__P13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
     return ((struct __anonymous3 )___src__13s__anonymous3_1);
-}
-static inline void ___constructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))=___src__13s__anonymous3_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous3_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous3_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__P13s__anonymous3_1, int __i__i_1){
@@ -116,16 +116,16 @@
 static inline void ___constructor__F_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1);
 static inline void ___destructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1);
+static inline void ___constructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))=___src__13s__anonymous4_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
     ((void)((*___dst__P13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
     return ((struct __anonymous4 )___src__13s__anonymous4_1);
-}
-static inline void ___constructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))=___src__13s__anonymous4_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous4_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous4_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__P13s__anonymous4_1, int __i__i_1){
@@ -140,16 +140,16 @@
 static inline void ___constructor__F_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1);
 static inline void ___destructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1);
+static inline void ___constructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))=___src__13s__anonymous5_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
     ((void)((*___dst__P13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
     return ((struct __anonymous5 )___src__13s__anonymous5_1);
-}
-static inline void ___constructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))=___src__13s__anonymous5_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous5_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous5_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__P13s__anonymous5_1, int __i__i_1){
@@ -164,16 +164,16 @@
 static inline void ___constructor__F_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1);
 static inline void ___destructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1);
+static inline void ___constructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))=___src__13s__anonymous6_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
     ((void)((*___dst__P13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
     return ((struct __anonymous6 )___src__13s__anonymous6_1);
-}
-static inline void ___constructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))=___src__13s__anonymous6_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous6_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous6_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__P13s__anonymous6_1, int __i__i_1){
@@ -188,16 +188,16 @@
 static inline void ___constructor__F_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1);
 static inline void ___destructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1);
+static inline void ___constructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))=___src__13s__anonymous7_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
+    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
     ((void)((*___dst__P13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
     return ((struct __anonymous7 )___src__13s__anonymous7_1);
-}
-static inline void ___constructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))=___src__13s__anonymous7_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous7_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1){
-    ((void)((*((int *)(&(*___dst__P13s__anonymous7_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__P13s__anonymous7_1, int __i__i_1){
@@ -220,16 +220,16 @@
 static inline void ___constructor__F_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1);
 static inline void ___destructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1);
+static inline void ___constructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))=___src__13s__anonymous8_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
     ((void)((*___dst__P13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
     return ((struct __anonymous8 )___src__13s__anonymous8_1);
-}
-static inline void ___constructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
-    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1){
-    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))=___src__13s__anonymous8_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous8_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1){
-    ((void)((*((short *)(&(*___dst__P13s__anonymous8_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__P13s__anonymous8_1, short __i__s_1){
@@ -244,16 +244,16 @@
 static inline void ___constructor__F_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1);
 static inline void ___destructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1);
+static inline void ___constructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))=___src__13s__anonymous9_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
+    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
     ((void)((*___dst__P13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
     return ((struct __anonymous9 )___src__13s__anonymous9_1);
-}
-static inline void ___constructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
-    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1){
-    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))=___src__13s__anonymous9_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P13s__anonymous9_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1){
-    ((void)((*((short *)(&(*___dst__P13s__anonymous9_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__P13s__anonymous9_1, short __i__s_1){
@@ -268,16 +268,16 @@
 static inline void ___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1);
 static inline void ___destructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1);
+static inline void ___constructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))=___src__14s__anonymous10_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
     ((void)((*___dst__P14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
     return ((struct __anonymous10 )___src__14s__anonymous10_1);
-}
-static inline void ___constructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))=___src__14s__anonymous10_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous10_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous10_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__P14s__anonymous10_1, short __i__s_1){
@@ -292,16 +292,16 @@
 static inline void ___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1);
 static inline void ___destructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1);
+static inline void ___constructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))=___src__14s__anonymous11_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
     ((void)((*___dst__P14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
     return ((struct __anonymous11 )___src__14s__anonymous11_1);
-}
-static inline void ___constructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))=___src__14s__anonymous11_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous11_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous11_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__P14s__anonymous11_1, short __i__s_1){
@@ -316,16 +316,16 @@
 static inline void ___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1);
 static inline void ___destructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1);
+static inline void ___constructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))=___src__14s__anonymous12_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
     ((void)((*___dst__P14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
     return ((struct __anonymous12 )___src__14s__anonymous12_1);
-}
-static inline void ___constructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))=___src__14s__anonymous12_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous12_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous12_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__P14s__anonymous12_1, short __i__s_1){
@@ -340,16 +340,16 @@
 static inline void ___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1);
 static inline void ___destructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1);
+static inline void ___constructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))=___src__14s__anonymous13_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
     ((void)((*___dst__P14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
     return ((struct __anonymous13 )___src__14s__anonymous13_1);
-}
-static inline void ___constructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))=___src__14s__anonymous13_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous13_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous13_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__P14s__anonymous13_1, short __i__s_1){
@@ -364,16 +364,16 @@
 static inline void ___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1);
 static inline void ___destructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1);
+static inline void ___constructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))=___src__14s__anonymous14_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
     ((void)((*___dst__P14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
     return ((struct __anonymous14 )___src__14s__anonymous14_1);
-}
-static inline void ___constructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))=___src__14s__anonymous14_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous14_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous14_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__P14s__anonymous14_1, short __i__s_1){
@@ -388,16 +388,16 @@
 static inline void ___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1);
 static inline void ___destructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1);
+static inline void ___constructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))=___src__14s__anonymous15_1.__i__s_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
+    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ^?{} */);
+}
 static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
     ((void)((*___dst__P14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
     return ((struct __anonymous15 )___src__14s__anonymous15_1);
-}
-static inline void ___constructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))=___src__14s__anonymous15_1.__i__s_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous15_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1){
-    ((void)((*((short *)(&(*___dst__P14s__anonymous15_1).__i__s_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__P14s__anonymous15_1, short __i__s_1){
@@ -428,16 +428,16 @@
 static inline void ___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1);
 static inline void ___destructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1);
+static inline void ___constructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))=___src__14s__anonymous16_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
     ((void)((*___dst__P14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
     return ((struct __anonymous16 )___src__14s__anonymous16_1);
-}
-static inline void ___constructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))=___src__14s__anonymous16_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous16_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous16_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__P14s__anonymous16_1, int __i__i_1){
@@ -452,16 +452,16 @@
 static inline void ___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1);
 static inline void ___destructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1);
+static inline void ___constructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))=___src__14s__anonymous17_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
     ((void)((*___dst__P14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
     return ((struct __anonymous17 )___src__14s__anonymous17_1);
-}
-static inline void ___constructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))=___src__14s__anonymous17_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous17_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous17_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__P14s__anonymous17_1, int __i__i_1){
@@ -476,16 +476,16 @@
 static inline void ___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1);
 static inline void ___destructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1);
+static inline void ___constructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))=___src__14s__anonymous18_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
     ((void)((*___dst__P14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
     return ((struct __anonymous18 )___src__14s__anonymous18_1);
-}
-static inline void ___constructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))=___src__14s__anonymous18_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous18_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous18_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__P14s__anonymous18_1, int __i__i_1){
@@ -500,16 +500,16 @@
 static inline void ___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1);
 static inline void ___destructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1);
+static inline void ___constructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))=___src__14s__anonymous19_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
     ((void)((*___dst__P14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
     return ((struct __anonymous19 )___src__14s__anonymous19_1);
-}
-static inline void ___constructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))=___src__14s__anonymous19_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous19_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous19_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__P14s__anonymous19_1, int __i__i_1){
@@ -524,16 +524,16 @@
 static inline void ___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1);
 static inline void ___destructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1);
+static inline void ___constructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))=___src__14s__anonymous20_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
     ((void)((*___dst__P14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
     return ((struct __anonymous20 )___src__14s__anonymous20_1);
-}
-static inline void ___constructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))=___src__14s__anonymous20_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous20_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous20_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__P14s__anonymous20_1, int __i__i_1){
@@ -548,16 +548,16 @@
 static inline void ___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1);
 static inline void ___destructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1);
+static inline void ___constructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))=___src__14s__anonymous21_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
     ((void)((*___dst__P14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
     return ((struct __anonymous21 )___src__14s__anonymous21_1);
-}
-static inline void ___constructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))=___src__14s__anonymous21_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous21_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous21_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__P14s__anonymous21_1, int __i__i_1){
@@ -572,16 +572,16 @@
 static inline void ___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1);
 static inline void ___destructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1);
+static inline void ___constructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))=___src__14s__anonymous22_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
     ((void)((*___dst__P14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
     return ((struct __anonymous22 )___src__14s__anonymous22_1);
-}
-static inline void ___constructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))=___src__14s__anonymous22_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous22_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous22_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__P14s__anonymous22_1, int __i__i_1){
@@ -596,16 +596,16 @@
 static inline void ___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1);
 static inline void ___destructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1);
+static inline void ___constructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))=___src__14s__anonymous23_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
+    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ^?{} */);
+}
 static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
     ((void)((*___dst__P14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
     return ((struct __anonymous23 )___src__14s__anonymous23_1);
-}
-static inline void ___constructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))=___src__14s__anonymous23_1.__i__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P14s__anonymous23_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1){
-    ((void)((*((int *)(&(*___dst__P14s__anonymous23_1).__i__i_1)))) /* ^?{} */);
 }
 static inline void ___constructor__F_P14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__P14s__anonymous23_1, int __i__i_1){
@@ -622,6 +622,6 @@
 static inline volatile const short __f48__FCVs___1();
 int main(int __argc__i_1, const char **__argv__PPCc_1){
-    int _retVal0 = { 0 };
-    ((void)(_retVal0=0) /* ?{} */);
-    return ((int )_retVal0);
-}
+    int ___retval_main__i_1;
+    ((void)(___retval_main__i_1=((int )0)) /* ?{} */);
+    return ((int )___retval_main__i_1);
+}
Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/32/extension.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -61,20 +61,14 @@
 }
 static inline void ___constructor__F_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
-    void *_tmp_cp_ret0;
-    ((void)((_tmp_cp_ret0=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret0));
-    ((void)(_tmp_cp_ret0) /* ^?{} */);
+    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
 }
 static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
 }
 static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
-    void *_tmp_cp_ret1;
-    ((void)((_tmp_cp_ret1=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret1));
-    ((void)(_tmp_cp_ret1) /* ^?{} */);
+    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
     return ((union U )___src__2uU_1);
 }
 static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
-    void *_tmp_cp_ret2;
-    ((void)((_tmp_cp_ret2=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int ))) , _tmp_cp_ret2));
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int )));
 }
 __extension__ enum E {
@@ -97,12 +91,12 @@
     __extension__ int __c__i_2;
     ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
-    int _tmp_cp_ret3;
-    ((void)((_tmp_cp_ret3=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret3));
-    ((void)(_tmp_cp_ret3) /* ^?{} */);
+    int _tmp_cp_ret0;
+    ((void)((_tmp_cp_ret0=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret0));
+    ((void)(_tmp_cp_ret0) /* ^?{} */);
     ((void)__extension__ sizeof(3));
-    ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
+    ((void)__extension__ (((int )(3!=((int )0))) || ((int )(4!=((int )0)))));
     ((void)__extension__ __alignof__(__extension__ __a__i_2));
-    ((void)(((int )(__extension__ __a__i_2!=0)) || ((int )((((int )(__extension__ __b__i_2!=0)) && ((int )(__extension__ __c__i_2!=0)))!=0))));
-    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=0)) ? __extension__ __c__i_2 : __extension__ __c__i_2));
+    ((void)(((int )(__extension__ __a__i_2!=((int )0))) || ((int )((((int )(__extension__ __b__i_2!=((int )0))) && ((int )(__extension__ __c__i_2!=((int )0))))!=((int )0)))));
+    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=((int )0))) ? __extension__ __c__i_2 : __extension__ __c__i_2));
     ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
     ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
Index: src/tests/.expect/32/gccExtensions.txt
===================================================================
--- src/tests/.expect/32/gccExtensions.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/32/gccExtensions.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -5,5 +5,5 @@
 extern void exit(int __status);
 extern int printf(const char *__restrict __format, ...);
-extern int __x__i_1;
+extern int __x__i_1 asm ( "xx" );
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     int ___retval_main__i_1;
@@ -11,6 +11,6 @@
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
-    static int __y__i_2;
-    static int *__z__Pi_2;
+    static int __y__i_2 asm ( "yy" );
+    static int *__z__Pi_2 asm ( "zz" );
     int __src__i_2;
     int __dst__i_2;
@@ -160,5 +160,5 @@
     int __m2__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
     int __m3__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
-    ((void)(___retval_main__i_1=0) /* ?{} */);
+    ((void)(___retval_main__i_1=((int )0)) /* ?{} */);
     return ((int )___retval_main__i_1);
 }
Index: src/tests/.expect/64/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/64/declarationSpecifier.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/64/declarationSpecifier.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -623,5 +623,5 @@
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     int ___retval_main__i_1;
-    ((void)(___retval_main__i_1=0) /* ?{} */);
+    ((void)(___retval_main__i_1=((int )0)) /* ?{} */);
     return ((int )___retval_main__i_1);
 }
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/64/extension.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -61,20 +61,14 @@
 }
 static inline void ___constructor__F_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
-    void *_tmp_cp_ret0;
-    ((void)((_tmp_cp_ret0=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret0));
-    ((void)(_tmp_cp_ret0) /* ^?{} */);
+    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
 }
 static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
 }
 static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
-    void *_tmp_cp_ret1;
-    ((void)((_tmp_cp_ret1=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret1));
-    ((void)(_tmp_cp_ret1) /* ^?{} */);
+    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
     return ((union U )___src__2uU_1);
 }
 static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
-    void *_tmp_cp_ret2;
-    ((void)((_tmp_cp_ret2=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int ))) , _tmp_cp_ret2));
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    ((void)__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int )));
 }
 __extension__ enum E {
@@ -97,12 +91,12 @@
     __extension__ int __c__i_2;
     ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
-    int _tmp_cp_ret3;
-    ((void)((_tmp_cp_ret3=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret3));
-    ((void)(_tmp_cp_ret3) /* ^?{} */);
+    int _tmp_cp_ret0;
+    ((void)((_tmp_cp_ret0=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret0));
+    ((void)(_tmp_cp_ret0) /* ^?{} */);
     ((void)__extension__ sizeof(3));
-    ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
+    ((void)__extension__ (((int )(3!=((int )0))) || ((int )(4!=((int )0)))));
     ((void)__extension__ __alignof__(__extension__ __a__i_2));
-    ((void)(((int )(__extension__ __a__i_2!=0)) || ((int )((((int )(__extension__ __b__i_2!=0)) && ((int )(__extension__ __c__i_2!=0)))!=0))));
-    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=0)) ? __extension__ __c__i_2 : __extension__ __c__i_2));
+    ((void)(((int )(__extension__ __a__i_2!=((int )0))) || ((int )((((int )(__extension__ __b__i_2!=((int )0))) && ((int )(__extension__ __c__i_2!=((int )0))))!=((int )0)))));
+    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=((int )0))) ? __extension__ __c__i_2 : __extension__ __c__i_2));
     ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
     ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
Index: src/tests/.expect/64/gccExtensions.txt
===================================================================
--- src/tests/.expect/64/gccExtensions.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/64/gccExtensions.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -5,5 +5,5 @@
 extern void exit(int __status);
 extern int printf(const char *__restrict __format, ...);
-extern int __x__i_1;
+extern int __x__i_1 asm ( "xx" );
 int main(int __argc__i_1, const char **__argv__PPCc_1){
     int ___retval_main__i_1;
@@ -11,6 +11,6 @@
     asm ( "nop" :  :  :  );
     asm ( "nop" :  :  :  );
-    static int __y__i_2;
-    static int *__z__Pi_2;
+    static int __y__i_2 asm ( "yy" );
+    static int *__z__Pi_2 asm ( "zz" );
     int __src__i_2;
     int __dst__i_2;
@@ -160,5 +160,5 @@
     int __m2__A0A0i_2[((long unsigned int )10)][((long unsigned int )10)];
     int __m3__A0A0i_2[((long unsigned int )10)][((long unsigned int )10)];
-    ((void)(___retval_main__i_1=0) /* ?{} */);
+    ((void)(___retval_main__i_1=((int )0)) /* ?{} */);
     return ((int )___retval_main__i_1);
 }
Index: src/tests/.expect/castError.txt
===================================================================
--- src/tests/.expect/castError.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/castError.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: Can't choose between 3 alternatives for expression Cast of:
   Name: f
Index: src/tests/.expect/completeTypeError.txt
===================================================================
--- src/tests/.expect/completeTypeError.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/completeTypeError.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: No reasonable alternatives for expression Applying untyped: 
   Name: *?
Index: src/tests/.expect/constant0-1DP.txt
===================================================================
--- src/tests/.expect/constant0-1DP.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/constant0-1DP.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: duplicate object definition for 0: signed int
 Error: duplicate object definition for 0: const signed int
Index: src/tests/.expect/constant0-1NDDP.txt
===================================================================
--- src/tests/.expect/constant0-1NDDP.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/constant0-1NDDP.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: duplicate object definition for 0: signed int
 Error: duplicate object definition for 0: const signed int
Index: src/tests/.expect/coroutine.txt
===================================================================
--- src/tests/.expect/coroutine.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/tests/.expect/coroutine.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,10 @@
+0 0
+1 1
+1 1
+2 2
+3 3
+5 5
+8 8
+13 13
+21 21
+34 34
Index: src/tests/.expect/declarationErrors.txt
===================================================================
--- src/tests/.expect/declarationErrors.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/declarationErrors.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: duplicate static in declaration of x1: static const volatile short int 
 
Index: src/tests/.expect/dtor-early-exit-ERR1.txt
===================================================================
--- src/tests/.expect/dtor-early-exit-ERR1.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/dtor-early-exit-ERR1.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: jump to label 'L1' crosses initialization of y Branch (Goto)
 
Index: src/tests/.expect/dtor-early-exit-ERR2.txt
===================================================================
--- src/tests/.expect/dtor-early-exit-ERR2.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/dtor-early-exit-ERR2.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: jump to label 'L2' crosses initialization of y Branch (Goto)
 
Index: src/tests/.expect/memberCtors-ERR1.txt
===================================================================
--- src/tests/.expect/memberCtors-ERR1.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/memberCtors-ERR1.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: in void ?{}(struct B *b), field a2 used before being constructed
 make: *** [memberCtors-ERR1] Error 1
Index: src/tests/.expect/scopeErrors.txt
===================================================================
--- src/tests/.expect/scopeErrors.txt	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/.expect/scopeErrors.txt	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -1,3 +1,2 @@
-CFA Version 1.0.0 (debug)
 Error: duplicate object definition for thisIsAnError: signed int
 Error: duplicate function definition for butThisIsAnError: function
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/Makefile.am	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -15,6 +15,9 @@
 ###############################################################################
 
+debug=yes
+
 # applies to both programs
-CFLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ # TEMPORARY: does not build with -O2
+EXTRA_FLAGS =
+CFLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ ${EXTRA_FLAGS}
 CC = @CFA_BINDIR@/cfa
 
@@ -30,5 +33,5 @@
 
 all-tests :
-	@+python test.py --all		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
+	@+python test.py --all --debug=${debug}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
@@ -54,5 +57,5 @@
 
 declarationSpecifier: declarationSpecifier.c
-	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o ${@}
+	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 gccExtensions : gccExtensions.c
@@ -63,6 +66,6 @@
 
 memberCtors-ERR1: memberCtors.c
-	${CC} ${CFALGS} -DERR1 ${<} -o ${@}
+	${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
 
 completeTypeError : completeTypeError.c
-	${CC} ${CFALGS} -DERR1 ${<} -o ${@}
+	${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/Makefile.in	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -35,4 +35,6 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
 EXTRA_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \
 	avl_test$(EXEEXT) constant0-1DP$(EXEEXT) \
@@ -111,4 +113,7 @@
 BACKEND_CC = @BACKEND_CC@
 CC = @CFA_BINDIR@/cfa
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
 CCDEPMODE = @CCDEPMODE@
 CFA_BACKEND_CC = @CFA_BACKEND_CC@
@@ -118,7 +123,5 @@
 CFA_LIBDIR = @CFA_LIBDIR@
 CFA_PREFIX = @CFA_PREFIX@
-
-# applies to both programs
-CFLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ # TEMPORARY: does not build with -O2
+CFLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ ${EXTRA_FLAGS}
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -147,4 +150,5 @@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -178,5 +182,9 @@
 am__untar = @am__untar@
 bindir = @bindir@
+build = @build@
 build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
 builddir = @builddir@
 datadir = @datadir@
@@ -185,5 +193,9 @@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+host = @host@
 host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
 htmldir = @htmldir@
 includedir = @includedir@
@@ -209,4 +221,8 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+debug = yes
+
+# applies to both programs
+EXTRA_FLAGS = 
 fstream_test_SOURCES = fstream_test.c
 vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c
@@ -638,5 +654,5 @@
 
 all-tests :
-	@+python test.py --all		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
+	@+python test.py --all --debug=${debug}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
@@ -662,5 +678,5 @@
 
 declarationSpecifier: declarationSpecifier.c
-	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o ${@}
+	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 gccExtensions : gccExtensions.c
@@ -671,8 +687,8 @@
 
 memberCtors-ERR1: memberCtors.c
-	${CC} ${CFALGS} -DERR1 ${<} -o ${@}
+	${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
 
 completeTypeError : completeTypeError.c
-	${CC} ${CFALGS} -DERR1 ${<} -o ${@}
+	${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
Index: src/tests/coroutine.c
===================================================================
--- src/tests/coroutine.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/tests/coroutine.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,65 @@
+#include <fstream>
+#include <threads>
+
+struct Fibonacci {
+      int fn; // used for communication
+      coroutine c;
+};
+
+void ?{}(Fibonacci* this) {
+      this->fn = 0;
+}
+
+coroutine* get_coroutine(Fibonacci* this) {
+      return &this->c;
+}
+
+void co_main(Fibonacci* this) {
+#ifdef MORE_DEBUG
+      sout | "Starting main of coroutine " | this | endl;
+      sout | "Started from " | this->c.last | endl;
+#endif
+      int fn1, fn2; 		// retained between resumes
+      this->fn = 0;
+      fn1 = this->fn;
+      suspend(); 		// return to last resume
+
+      this->fn = 1;
+      fn2 = fn1;
+      fn1 = this->fn;
+      suspend(); 		// return to last resume
+
+      for ( ;; ) {
+            this->fn = fn1 + fn2;
+            fn2 = fn1;
+            fn1 = this->fn;
+            suspend(); 	// return to last resume
+      }
+}
+
+int next(Fibonacci* this) {
+      resume(this); // transfer to last suspend
+      return this->fn;
+}
+
+int main() {
+      Fibonacci f1, f2;
+#ifdef MORE_DEBUG      
+      Fibonacci *pf1 = &f1, *pf2 = &f2;
+      coroutine *cf1 = &f1.c, *cf2 = &f2.c;
+      covptr_t  *vf1 = vtable(pf1), *vf2 = vtable(pf2);
+      coroutine *cv1 = get_coroutine(vf1), *cv2 = get_coroutine(vf2);
+      Fibonacci *ov1 = (Fibonacci *)get_object(vf1), *ov2 = (Fibonacci *)get_object(vf2);
+
+      sout | "User coroutines : " | pf1 | ' ' | pf2 | endl;
+      sout | "Coroutine data  : " | cf1 | ' ' | cf2 | endl;
+      sout | "Vptr address    : " | vf1 | ' ' | vf2 | endl;
+      sout | "Vptr obj data   : " | ov1 | ' ' | ov2 | endl;
+      sout | "Vptr cor data   : " | cv1 | ' ' | cv2 | endl;
+#endif
+      for ( int i = 1; i <= 10; i += 1 ) {
+            sout | next(&f1) | ' ' | next(&f2) | endl;
+      }
+
+      return 0;
+}
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision 5802a4f31015077b7a4161befcee3c8e98f2d693)
+++ src/tests/test.py	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -104,5 +104,5 @@
 #               running test functions
 ################################################################################
-def run_single_test(test, generate, dry_run):
+def run_single_test(test, generate, dry_run, debug):
 
 	# find the output file based on the test name and options flag
@@ -113,6 +113,8 @@
 	sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
 
+	options = "-debug" if debug else "-nodebug";
+
 	# build, skipping to next test on error
-	make_ret, _ = sh("%s %s 2> %s 1> /dev/null" % (make_cmd, test.name, out_file), dry_run)
+	make_ret, _ = sh("""%s EXTRA_FLAGS="-quiet %s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
 
 	# if the make command succeds continue otherwise skip to diff
@@ -165,10 +167,10 @@
 	return retcode, error
 
-def run_test_instance(t, generate, dry_run) :
+def run_test_instance(t, generate, dry_run, debug) :
 	# print formated name
 	name_txt = "%20s  " % t.name
 
 	#run the test instance and collect the result
-	test_failed, error = run_single_test(t, generate, dry_run)
+	test_failed, error = run_single_test(t, generate, dry_run, debug)
 
 	# update output based on current action
@@ -194,5 +196,5 @@
 
 # run the given list of tests with the given parameters
-def run_tests(tests, generate, dry_run, jobs) :
+def run_tests(tests, generate, dry_run, jobs, debug) :
 	# clean the sandbox from previous commands
 	sh("%s clean > /dev/null 2>&1" % make_cmd, dry_run)
@@ -207,5 +209,5 @@
 	pool = Pool(jobs)
 	try :
-		results = pool.map_async(partial(run_test_instance, generate=generate, dry_run=dry_run), tests ).get(99999999)
+		results = pool.map_async(partial(run_test_instance, generate=generate, dry_run=dry_run, debug=debug), tests ).get(99999999)
 	except KeyboardInterrupt:
 		pool.terminate()
@@ -222,4 +224,13 @@
 	return 0
 
+def yes_no(string):
+	if string == "yes" :
+		return True
+	if string == "no" :
+		return False
+	raise argparse.ArgumentTypeError(msg)
+	return False
+
+
 ################################################################################
 #               main loop
@@ -227,4 +238,5 @@
 # create a parser with the arguments for the tests script
 parser = argparse.ArgumentParser(description='Script which runs cforall tests')
+parser.add_argument('--debug', help='Run all tests in debug or release', type=yes_no, default='no')
 parser.add_argument('--dry-run', help='Don\'t run the tests, only output the commands', action='store_true')
 parser.add_argument('--list', help='List all test available', action='store_true')
@@ -296,5 +308,5 @@
 	sys.exit(1)
 
-print('Running on %i cores' % options.jobs)
+print('Running (%s) on %i cores' % ("debug" if options.debug else "no debug", options.jobs))
 make_cmd = "make" if make_flags else ("make -j%i" % options.jobs)
 
@@ -305,3 +317,3 @@
 else :
 	# otherwise run all tests and make sure to return the correct error code
-	sys.exit( run_tests(tests, options.regenerate_expected, options.dry_run, options.jobs) )
+	sys.exit( run_tests(tests, options.regenerate_expected, options.dry_run, options.jobs, options.debug) )
Index: src/tests/voidPtr.c
===================================================================
--- src/tests/voidPtr.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
+++ src/tests/voidPtr.c	(revision 66f8528e75e91260ef63ddd93ec58ba5e42ae5dc)
@@ -0,0 +1,17 @@
+int main() {
+	int i, j;
+	void *a = &i, *b = &j;
+
+	if ( a == 0 ) {
+		abort();
+	}
+
+	if ( a == b ) {
+		abort();
+	}
+
+	if ( ! a ) {
+		abort();
+	}	
+}
+
