widl: Update to Wine 7.0-rc2.
diff --git a/mingw-w64-tools/widl/Makefile.am b/mingw-w64-tools/widl/Makefile.am
index 0dee2e7..847b882 100644
--- a/mingw-w64-tools/widl/Makefile.am
+++ b/mingw-w64-tools/widl/Makefile.am
@@ -20,6 +20,9 @@
   src/parser.yy.c \
   src/port/getopt.c \
   src/port/port.c \
+  src/ppy.tab.h \
+  src/ppl.yy.c \
+  src/ppy.tab.c \
   src/proxy.c \
   src/register.c \
   src/server.c \
@@ -28,12 +31,9 @@
   src/typetree.c \
   src/utils.c \
   src/widl.c \
+  src/wpp_private.h \
+  src/wpp.c \
   src/write_msft.c \
-  src/wpp/wpp_private.h \
-  src/wpp/ppy.tab.h \
-  src/wpp/ppl.yy.c \
-  src/wpp/ppy.tab.c \
-  src/wpp/wpp.c \
   src/pathtools.c \
   include/pshpack1.h \
   include/pshpack2.h \
@@ -45,7 +45,6 @@
   include/windef.h \
   include/poppack.h \
   include/config.h.in \
-  include/wine/wpp.h \
   include/wine/list.h \
   include/wine/port.h \
   include/wine/rpcfc.h \
@@ -56,7 +55,7 @@
   include/pathtools.h \
   include/winnt.rh
 
-widl_CPPFLAGS = -I$(top_srcdir)/include -DINCLUDEDIR=\""@WIDL_INCLUDEDIR@"\" -DBIN_TO_INCLUDEDIR=\""@BIN_TO_INCLUDEDIR@"\"
+widl_CPPFLAGS = -I$(top_srcdir)/include -DINCLUDEDIR=\""@WIDL_INCLUDEDIR@"\" -DBIN_TO_INCLUDEDIR=\""@BIN_TO_INCLUDEDIR@"\" -DBIN_TO_DLLDIR=\""@BIN_TO_INCLUDEDIR@"\" -DDLLDIR="\"@prefix@/lib\""
 widl_CFLAGS = -O3 -g -Wall -Wformat -Wpacked -Wmissing-declarations -Wimplicit-function-declaration -Wmissing-prototypes -Wstrict-aliasing=2
 
 DISTCHECK_CONFIGURE_FLAGS = --host=$(host) --target=$(target)
diff --git a/mingw-w64-tools/widl/Makefile.in b/mingw-w64-tools/widl/Makefile.in
index b5213ee..0689470 100644
--- a/mingw-w64-tools/widl/Makefile.in
+++ b/mingw-w64-tools/widl/Makefile.in
@@ -111,12 +111,12 @@
 	src/widl-hash.$(OBJEXT) src/widl-header.$(OBJEXT) \
 	src/widl-parser.tab.$(OBJEXT) src/widl-parser.yy.$(OBJEXT) \
 	src/port/widl-getopt.$(OBJEXT) src/port/widl-port.$(OBJEXT) \
+	src/widl-ppl.yy.$(OBJEXT) src/widl-ppy.tab.$(OBJEXT) \
 	src/widl-proxy.$(OBJEXT) src/widl-register.$(OBJEXT) \
 	src/widl-server.$(OBJEXT) src/widl-typegen.$(OBJEXT) \
 	src/widl-typelib.$(OBJEXT) src/widl-typetree.$(OBJEXT) \
 	src/widl-utils.$(OBJEXT) src/widl-widl.$(OBJEXT) \
-	src/widl-write_msft.$(OBJEXT) src/wpp/widl-ppl.yy.$(OBJEXT) \
-	src/wpp/widl-ppy.tab.$(OBJEXT) src/wpp/widl-wpp.$(OBJEXT) \
+	src/widl-wpp.$(OBJEXT) src/widl-write_msft.$(OBJEXT) \
 	src/widl-pathtools.$(OBJEXT)
 widl_OBJECTS = $(am_widl_OBJECTS)
 widl_LDADD = $(LDADD)
@@ -141,16 +141,15 @@
 	src/$(DEPDIR)/widl-expr.Po src/$(DEPDIR)/widl-hash.Po \
 	src/$(DEPDIR)/widl-header.Po src/$(DEPDIR)/widl-parser.tab.Po \
 	src/$(DEPDIR)/widl-parser.yy.Po \
-	src/$(DEPDIR)/widl-pathtools.Po src/$(DEPDIR)/widl-proxy.Po \
+	src/$(DEPDIR)/widl-pathtools.Po src/$(DEPDIR)/widl-ppl.yy.Po \
+	src/$(DEPDIR)/widl-ppy.tab.Po src/$(DEPDIR)/widl-proxy.Po \
 	src/$(DEPDIR)/widl-register.Po src/$(DEPDIR)/widl-server.Po \
 	src/$(DEPDIR)/widl-typegen.Po src/$(DEPDIR)/widl-typelib.Po \
 	src/$(DEPDIR)/widl-typetree.Po src/$(DEPDIR)/widl-utils.Po \
-	src/$(DEPDIR)/widl-widl.Po src/$(DEPDIR)/widl-write_msft.Po \
+	src/$(DEPDIR)/widl-widl.Po src/$(DEPDIR)/widl-wpp.Po \
+	src/$(DEPDIR)/widl-write_msft.Po \
 	src/port/$(DEPDIR)/widl-getopt.Po \
-	src/port/$(DEPDIR)/widl-port.Po \
-	src/wpp/$(DEPDIR)/widl-ppl.yy.Po \
-	src/wpp/$(DEPDIR)/widl-ppy.tab.Po \
-	src/wpp/$(DEPDIR)/widl-wpp.Po
+	src/port/$(DEPDIR)/widl-port.Po
 am__mv = mv -f
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -345,6 +344,9 @@
   src/parser.yy.c \
   src/port/getopt.c \
   src/port/port.c \
+  src/ppy.tab.h \
+  src/ppl.yy.c \
+  src/ppy.tab.c \
   src/proxy.c \
   src/register.c \
   src/server.c \
@@ -353,12 +355,9 @@
   src/typetree.c \
   src/utils.c \
   src/widl.c \
+  src/wpp_private.h \
+  src/wpp.c \
   src/write_msft.c \
-  src/wpp/wpp_private.h \
-  src/wpp/ppy.tab.h \
-  src/wpp/ppl.yy.c \
-  src/wpp/ppy.tab.c \
-  src/wpp/wpp.c \
   src/pathtools.c \
   include/pshpack1.h \
   include/pshpack2.h \
@@ -381,7 +380,7 @@
   include/pathtools.h \
   include/winnt.rh
 
-widl_CPPFLAGS = -I$(top_srcdir)/include -DINCLUDEDIR=\""@WIDL_INCLUDEDIR@"\" -DBIN_TO_INCLUDEDIR=\""@BIN_TO_INCLUDEDIR@"\"
+widl_CPPFLAGS = -I$(top_srcdir)/include -DINCLUDEDIR=\""@WIDL_INCLUDEDIR@"\" -DBIN_TO_INCLUDEDIR=\""@BIN_TO_INCLUDEDIR@"\" -DBIN_TO_DLLDIR=\""@BIN_TO_INCLUDEDIR@"\" -DDLLDIR="\"@prefix@/lib\""
 widl_CFLAGS = -O3 -g -Wall -Wformat -Wpacked -Wmissing-declarations -Wimplicit-function-declaration -Wmissing-prototypes -Wstrict-aliasing=2
 DISTCHECK_CONFIGURE_FLAGS = --host=$(host) --target=$(target)
 all: all-am
@@ -506,6 +505,10 @@
 	src/port/$(DEPDIR)/$(am__dirstamp)
 src/port/widl-port.$(OBJEXT): src/port/$(am__dirstamp) \
 	src/port/$(DEPDIR)/$(am__dirstamp)
+src/widl-ppl.yy.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/widl-ppy.tab.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
 src/widl-proxy.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/widl-register.$(OBJEXT): src/$(am__dirstamp) \
@@ -522,20 +525,10 @@
 	src/$(DEPDIR)/$(am__dirstamp)
 src/widl-widl.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
+src/widl-wpp.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
 src/widl-write_msft.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/wpp/$(am__dirstamp):
-	@$(MKDIR_P) src/wpp
-	@: > src/wpp/$(am__dirstamp)
-src/wpp/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) src/wpp/$(DEPDIR)
-	@: > src/wpp/$(DEPDIR)/$(am__dirstamp)
-src/wpp/widl-ppl.yy.$(OBJEXT): src/wpp/$(am__dirstamp) \
-	src/wpp/$(DEPDIR)/$(am__dirstamp)
-src/wpp/widl-ppy.tab.$(OBJEXT): src/wpp/$(am__dirstamp) \
-	src/wpp/$(DEPDIR)/$(am__dirstamp)
-src/wpp/widl-wpp.$(OBJEXT): src/wpp/$(am__dirstamp) \
-	src/wpp/$(DEPDIR)/$(am__dirstamp)
 src/widl-pathtools.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 
@@ -547,7 +540,6 @@
 	-rm -f *.$(OBJEXT)
 	-rm -f src/*.$(OBJEXT)
 	-rm -f src/port/*.$(OBJEXT)
-	-rm -f src/wpp/*.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
@@ -559,6 +551,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-parser.tab.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-parser.yy.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-pathtools.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-ppl.yy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-ppy.tab.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-proxy.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-register.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-server.Po@am__quote@ # am--include-marker
@@ -567,12 +561,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-typetree.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-utils.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-widl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-wpp.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-write_msft.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/port/$(DEPDIR)/widl-getopt.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/port/$(DEPDIR)/widl-port.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@src/wpp/$(DEPDIR)/widl-ppl.yy.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@src/wpp/$(DEPDIR)/widl-ppy.tab.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@src/wpp/$(DEPDIR)/widl-wpp.Po@am__quote@ # am--include-marker
 
 $(am__depfiles_remade):
 	@$(MKDIR_P) $(@D)
@@ -708,6 +700,34 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/port/widl-port.obj `if test -f 'src/port/port.c'; then $(CYGPATH_W) 'src/port/port.c'; else $(CYGPATH_W) '$(srcdir)/src/port/port.c'; fi`
 
+src/widl-ppl.yy.o: src/ppl.yy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-ppl.yy.o -MD -MP -MF src/$(DEPDIR)/widl-ppl.yy.Tpo -c -o src/widl-ppl.yy.o `test -f 'src/ppl.yy.c' || echo '$(srcdir)/'`src/ppl.yy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-ppl.yy.Tpo src/$(DEPDIR)/widl-ppl.yy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ppl.yy.c' object='src/widl-ppl.yy.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-ppl.yy.o `test -f 'src/ppl.yy.c' || echo '$(srcdir)/'`src/ppl.yy.c
+
+src/widl-ppl.yy.obj: src/ppl.yy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-ppl.yy.obj -MD -MP -MF src/$(DEPDIR)/widl-ppl.yy.Tpo -c -o src/widl-ppl.yy.obj `if test -f 'src/ppl.yy.c'; then $(CYGPATH_W) 'src/ppl.yy.c'; else $(CYGPATH_W) '$(srcdir)/src/ppl.yy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-ppl.yy.Tpo src/$(DEPDIR)/widl-ppl.yy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ppl.yy.c' object='src/widl-ppl.yy.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-ppl.yy.obj `if test -f 'src/ppl.yy.c'; then $(CYGPATH_W) 'src/ppl.yy.c'; else $(CYGPATH_W) '$(srcdir)/src/ppl.yy.c'; fi`
+
+src/widl-ppy.tab.o: src/ppy.tab.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-ppy.tab.o -MD -MP -MF src/$(DEPDIR)/widl-ppy.tab.Tpo -c -o src/widl-ppy.tab.o `test -f 'src/ppy.tab.c' || echo '$(srcdir)/'`src/ppy.tab.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-ppy.tab.Tpo src/$(DEPDIR)/widl-ppy.tab.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ppy.tab.c' object='src/widl-ppy.tab.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-ppy.tab.o `test -f 'src/ppy.tab.c' || echo '$(srcdir)/'`src/ppy.tab.c
+
+src/widl-ppy.tab.obj: src/ppy.tab.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-ppy.tab.obj -MD -MP -MF src/$(DEPDIR)/widl-ppy.tab.Tpo -c -o src/widl-ppy.tab.obj `if test -f 'src/ppy.tab.c'; then $(CYGPATH_W) 'src/ppy.tab.c'; else $(CYGPATH_W) '$(srcdir)/src/ppy.tab.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-ppy.tab.Tpo src/$(DEPDIR)/widl-ppy.tab.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ppy.tab.c' object='src/widl-ppy.tab.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-ppy.tab.obj `if test -f 'src/ppy.tab.c'; then $(CYGPATH_W) 'src/ppy.tab.c'; else $(CYGPATH_W) '$(srcdir)/src/ppy.tab.c'; fi`
+
 src/widl-proxy.o: src/proxy.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-proxy.o -MD -MP -MF src/$(DEPDIR)/widl-proxy.Tpo -c -o src/widl-proxy.o `test -f 'src/proxy.c' || echo '$(srcdir)/'`src/proxy.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-proxy.Tpo src/$(DEPDIR)/widl-proxy.Po
@@ -820,6 +840,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-widl.obj `if test -f 'src/widl.c'; then $(CYGPATH_W) 'src/widl.c'; else $(CYGPATH_W) '$(srcdir)/src/widl.c'; fi`
 
+src/widl-wpp.o: src/wpp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-wpp.o -MD -MP -MF src/$(DEPDIR)/widl-wpp.Tpo -c -o src/widl-wpp.o `test -f 'src/wpp.c' || echo '$(srcdir)/'`src/wpp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-wpp.Tpo src/$(DEPDIR)/widl-wpp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp.c' object='src/widl-wpp.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-wpp.o `test -f 'src/wpp.c' || echo '$(srcdir)/'`src/wpp.c
+
+src/widl-wpp.obj: src/wpp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-wpp.obj -MD -MP -MF src/$(DEPDIR)/widl-wpp.Tpo -c -o src/widl-wpp.obj `if test -f 'src/wpp.c'; then $(CYGPATH_W) 'src/wpp.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-wpp.Tpo src/$(DEPDIR)/widl-wpp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp.c' object='src/widl-wpp.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-wpp.obj `if test -f 'src/wpp.c'; then $(CYGPATH_W) 'src/wpp.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp.c'; fi`
+
 src/widl-write_msft.o: src/write_msft.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-write_msft.o -MD -MP -MF src/$(DEPDIR)/widl-write_msft.Tpo -c -o src/widl-write_msft.o `test -f 'src/write_msft.c' || echo '$(srcdir)/'`src/write_msft.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-write_msft.Tpo src/$(DEPDIR)/widl-write_msft.Po
@@ -834,48 +868,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-write_msft.obj `if test -f 'src/write_msft.c'; then $(CYGPATH_W) 'src/write_msft.c'; else $(CYGPATH_W) '$(srcdir)/src/write_msft.c'; fi`
 
-src/wpp/widl-ppl.yy.o: src/wpp/ppl.yy.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/wpp/widl-ppl.yy.o -MD -MP -MF src/wpp/$(DEPDIR)/widl-ppl.yy.Tpo -c -o src/wpp/widl-ppl.yy.o `test -f 'src/wpp/ppl.yy.c' || echo '$(srcdir)/'`src/wpp/ppl.yy.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/wpp/$(DEPDIR)/widl-ppl.yy.Tpo src/wpp/$(DEPDIR)/widl-ppl.yy.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp/ppl.yy.c' object='src/wpp/widl-ppl.yy.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/wpp/widl-ppl.yy.o `test -f 'src/wpp/ppl.yy.c' || echo '$(srcdir)/'`src/wpp/ppl.yy.c
-
-src/wpp/widl-ppl.yy.obj: src/wpp/ppl.yy.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/wpp/widl-ppl.yy.obj -MD -MP -MF src/wpp/$(DEPDIR)/widl-ppl.yy.Tpo -c -o src/wpp/widl-ppl.yy.obj `if test -f 'src/wpp/ppl.yy.c'; then $(CYGPATH_W) 'src/wpp/ppl.yy.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp/ppl.yy.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/wpp/$(DEPDIR)/widl-ppl.yy.Tpo src/wpp/$(DEPDIR)/widl-ppl.yy.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp/ppl.yy.c' object='src/wpp/widl-ppl.yy.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/wpp/widl-ppl.yy.obj `if test -f 'src/wpp/ppl.yy.c'; then $(CYGPATH_W) 'src/wpp/ppl.yy.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp/ppl.yy.c'; fi`
-
-src/wpp/widl-ppy.tab.o: src/wpp/ppy.tab.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/wpp/widl-ppy.tab.o -MD -MP -MF src/wpp/$(DEPDIR)/widl-ppy.tab.Tpo -c -o src/wpp/widl-ppy.tab.o `test -f 'src/wpp/ppy.tab.c' || echo '$(srcdir)/'`src/wpp/ppy.tab.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/wpp/$(DEPDIR)/widl-ppy.tab.Tpo src/wpp/$(DEPDIR)/widl-ppy.tab.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp/ppy.tab.c' object='src/wpp/widl-ppy.tab.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/wpp/widl-ppy.tab.o `test -f 'src/wpp/ppy.tab.c' || echo '$(srcdir)/'`src/wpp/ppy.tab.c
-
-src/wpp/widl-ppy.tab.obj: src/wpp/ppy.tab.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/wpp/widl-ppy.tab.obj -MD -MP -MF src/wpp/$(DEPDIR)/widl-ppy.tab.Tpo -c -o src/wpp/widl-ppy.tab.obj `if test -f 'src/wpp/ppy.tab.c'; then $(CYGPATH_W) 'src/wpp/ppy.tab.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp/ppy.tab.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/wpp/$(DEPDIR)/widl-ppy.tab.Tpo src/wpp/$(DEPDIR)/widl-ppy.tab.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp/ppy.tab.c' object='src/wpp/widl-ppy.tab.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/wpp/widl-ppy.tab.obj `if test -f 'src/wpp/ppy.tab.c'; then $(CYGPATH_W) 'src/wpp/ppy.tab.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp/ppy.tab.c'; fi`
-
-src/wpp/widl-wpp.o: src/wpp/wpp.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/wpp/widl-wpp.o -MD -MP -MF src/wpp/$(DEPDIR)/widl-wpp.Tpo -c -o src/wpp/widl-wpp.o `test -f 'src/wpp/wpp.c' || echo '$(srcdir)/'`src/wpp/wpp.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/wpp/$(DEPDIR)/widl-wpp.Tpo src/wpp/$(DEPDIR)/widl-wpp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp/wpp.c' object='src/wpp/widl-wpp.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/wpp/widl-wpp.o `test -f 'src/wpp/wpp.c' || echo '$(srcdir)/'`src/wpp/wpp.c
-
-src/wpp/widl-wpp.obj: src/wpp/wpp.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/wpp/widl-wpp.obj -MD -MP -MF src/wpp/$(DEPDIR)/widl-wpp.Tpo -c -o src/wpp/widl-wpp.obj `if test -f 'src/wpp/wpp.c'; then $(CYGPATH_W) 'src/wpp/wpp.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp/wpp.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/wpp/$(DEPDIR)/widl-wpp.Tpo src/wpp/$(DEPDIR)/widl-wpp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wpp/wpp.c' object='src/wpp/widl-wpp.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) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/wpp/widl-wpp.obj `if test -f 'src/wpp/wpp.c'; then $(CYGPATH_W) 'src/wpp/wpp.c'; else $(CYGPATH_W) '$(srcdir)/src/wpp/wpp.c'; fi`
-
 src/widl-pathtools.o: src/pathtools.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-pathtools.o -MD -MP -MF src/$(DEPDIR)/widl-pathtools.Tpo -c -o src/widl-pathtools.o `test -f 'src/pathtools.c' || echo '$(srcdir)/'`src/pathtools.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-pathtools.Tpo src/$(DEPDIR)/widl-pathtools.Po
@@ -1157,8 +1149,6 @@
 	-rm -f src/$(am__dirstamp)
 	-rm -f src/port/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/port/$(am__dirstamp)
-	-rm -f src/wpp/$(DEPDIR)/$(am__dirstamp)
-	-rm -f src/wpp/$(am__dirstamp)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -1176,6 +1166,8 @@
 	-rm -f src/$(DEPDIR)/widl-parser.tab.Po
 	-rm -f src/$(DEPDIR)/widl-parser.yy.Po
 	-rm -f src/$(DEPDIR)/widl-pathtools.Po
+	-rm -f src/$(DEPDIR)/widl-ppl.yy.Po
+	-rm -f src/$(DEPDIR)/widl-ppy.tab.Po
 	-rm -f src/$(DEPDIR)/widl-proxy.Po
 	-rm -f src/$(DEPDIR)/widl-register.Po
 	-rm -f src/$(DEPDIR)/widl-server.Po
@@ -1184,12 +1176,10 @@
 	-rm -f src/$(DEPDIR)/widl-typetree.Po
 	-rm -f src/$(DEPDIR)/widl-utils.Po
 	-rm -f src/$(DEPDIR)/widl-widl.Po
+	-rm -f src/$(DEPDIR)/widl-wpp.Po
 	-rm -f src/$(DEPDIR)/widl-write_msft.Po
 	-rm -f src/port/$(DEPDIR)/widl-getopt.Po
 	-rm -f src/port/$(DEPDIR)/widl-port.Po
-	-rm -f src/wpp/$(DEPDIR)/widl-ppl.yy.Po
-	-rm -f src/wpp/$(DEPDIR)/widl-ppy.tab.Po
-	-rm -f src/wpp/$(DEPDIR)/widl-wpp.Po
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-hdr distclean-tags
@@ -1244,6 +1234,8 @@
 	-rm -f src/$(DEPDIR)/widl-parser.tab.Po
 	-rm -f src/$(DEPDIR)/widl-parser.yy.Po
 	-rm -f src/$(DEPDIR)/widl-pathtools.Po
+	-rm -f src/$(DEPDIR)/widl-ppl.yy.Po
+	-rm -f src/$(DEPDIR)/widl-ppy.tab.Po
 	-rm -f src/$(DEPDIR)/widl-proxy.Po
 	-rm -f src/$(DEPDIR)/widl-register.Po
 	-rm -f src/$(DEPDIR)/widl-server.Po
@@ -1252,12 +1244,10 @@
 	-rm -f src/$(DEPDIR)/widl-typetree.Po
 	-rm -f src/$(DEPDIR)/widl-utils.Po
 	-rm -f src/$(DEPDIR)/widl-widl.Po
+	-rm -f src/$(DEPDIR)/widl-wpp.Po
 	-rm -f src/$(DEPDIR)/widl-write_msft.Po
 	-rm -f src/port/$(DEPDIR)/widl-getopt.Po
 	-rm -f src/port/$(DEPDIR)/widl-port.Po
-	-rm -f src/wpp/$(DEPDIR)/widl-ppl.yy.Po
-	-rm -f src/wpp/$(DEPDIR)/widl-ppy.tab.Po
-	-rm -f src/wpp/$(DEPDIR)/widl-wpp.Po
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
diff --git a/mingw-w64-tools/widl/VERSION b/mingw-w64-tools/widl/VERSION
index 01f38bd..beaf6b3 100644
--- a/mingw-w64-tools/widl/VERSION
+++ b/mingw-w64-tools/widl/VERSION
@@ -1 +1 @@
-WIDL version 6.12
+WIDL version 7.0-rc2
diff --git a/mingw-w64-tools/widl/configure b/mingw-w64-tools/widl/configure
index 95b1d25..b2c2716 100755
--- a/mingw-w64-tools/widl/configure
+++ b/mingw-w64-tools/widl/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for widl 6.12.
+# Generated by GNU Autoconf 2.71 for widl 7.0-rc2.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -610,8 +610,8 @@
 # Identity of this package.
 PACKAGE_NAME='widl'
 PACKAGE_TARNAME='widl'
-PACKAGE_VERSION='6.12'
-PACKAGE_STRING='widl 6.12'
+PACKAGE_VERSION='7.0-rc2'
+PACKAGE_STRING='widl 7.0-rc2'
 PACKAGE_BUGREPORT='mingw-w64-public@lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1319,7 +1319,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures widl 6.12 to adapt to many kinds of systems.
+\`configure' configures widl 7.0-rc2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1391,7 +1391,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of widl 6.12:";;
+     short | recursive ) echo "Configuration of widl 7.0-rc2:";;
    esac
   cat <<\_ACEOF
 
@@ -1493,7 +1493,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-widl configure 6.12
+widl configure 7.0-rc2
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1905,7 +1905,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by widl $as_me 6.12, which was
+It was created by widl $as_me 7.0-rc2, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3296,7 +3296,7 @@
 
 # Define the identity of the package.
  PACKAGE='widl'
- VERSION='6.12'
+ VERSION='7.0-rc2'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5784,7 +5784,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by widl $as_me 6.12, which was
+This file was extended by widl $as_me 7.0-rc2, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -5852,7 +5852,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-widl config.status 6.12
+widl config.status 7.0-rc2
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff --git a/mingw-w64-tools/widl/include/basetsd.h b/mingw-w64-tools/widl/include/basetsd.h
index 761af4d..a4774a2 100644
--- a/mingw-w64-tools/widl/include/basetsd.h
+++ b/mingw-w64-tools/widl/include/basetsd.h
@@ -19,8 +19,8 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#ifndef __WINE_BASETSD_H
-#define __WINE_BASETSD_H
+#ifndef _BASETSD_H_
+#define _BASETSD_H_
 
 #ifdef __cplusplus
 extern "C" {
@@ -303,4 +303,4 @@
 } /* extern "C" */
 #endif /* defined(__cplusplus) */
 
-#endif /* !defined(__WINE_BASETSD_H) */
+#endif /* !defined(_BASETSD_H_) */
diff --git a/mingw-w64-tools/widl/include/concurrencysal.h b/mingw-w64-tools/widl/include/concurrencysal.h
new file mode 100644
index 0000000..fc86045
--- /dev/null
+++ b/mingw-w64-tools/widl/include/concurrencysal.h
@@ -0,0 +1,48 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef CONCURRENCYSAL_HXX
+#define CONCURRENCYSAL_HXX
+
+#define _Benign_race_begin_
+#define _Benign_race_end_
+#define _No_competing_thread_begin_
+#define _No_competing_thread_end_
+
+#define _Acquires_exclusive_lock_(lock)
+#define _Acquires_lock_(lock)
+#define _Acquires_nonreentrant_lock_(lock)
+#define _Acquires_shared_lock_(lock)
+#define _Analysis_assume_lock_acquired_(lock)
+#define _Analysis_assume_lock_released_(lock)
+#define _Analysis_assume_lock_held_(lock)
+#define _Analysis_assume_lock_not_held_(lock)
+#define _Analysis_assume_same_lock_(lock1, lock2)
+#define _Analysis_suppress_lock_checking_(lock)
+#define _Create_lock_level_(level)
+#define _Csalcat1_(x,y)
+#define _Csalcat2_(x,y)
+#define _Function_ignore_lock_checking_(lock)
+#define _Guarded_by_(lock)
+#define _Has_lock_kind_(kind)
+#define _Has_lock_level_(level)
+#define _Interlocked_
+#define _Internal_lock_level_order_(a,b)
+#define _Lock_level_order_(a,b)
+#define _No_competing_thread_
+#define _Post_same_lock_(lock1,lock2)
+#define _Releases_exclusive_lock_(lock)
+#define _Releases_lock_(lock)
+#define _Releases_nonreentrant_lock_(lock)
+#define _Releases_shared_lock_(lock)
+#define _Requires_exclusive_lock_held_(lock)
+#define _Requires_shared_lock_held_(lock)
+#define _Requires_lock_held_(lock)
+#define _Requires_lock_not_held_(lock)
+#define _Requires_no_locks_held_
+#define _Write_guarded_by_(lock)
+
+#endif
diff --git a/mingw-w64-tools/widl/include/driverspecs.h b/mingw-w64-tools/widl/include/driverspecs.h
new file mode 100644
index 0000000..509a2bd
--- /dev/null
+++ b/mingw-w64-tools/widl/include/driverspecs.h
@@ -0,0 +1,55 @@
+/*
+ * PROJECT:         ReactOS DDK
+ * COPYRIGHT:       This file is in the Public Domain.
+ * FILE:            driverspecs.h
+ * ABSTRACT:        This header stubs out Driver Verifier annotations to
+ *                  allow drivers using them to compile with our header set.
+ */
+
+#ifndef DRIVERSPECS_H
+#define DRIVERSPECS_H
+
+#include <specstrings.h>
+#include <concurrencysal.h>
+
+#define _IRQL_raises_(x)
+#define _IRQL_requires_(x)
+#define _IRQL_requires_max_(x)
+#define _IRQL_requires_min_(x)
+#define _IRQL_requires_same_
+#define _IRQL_restores_
+#define _IRQL_saves_
+
+#define __drv_aliasesMem
+#define __drv_allocatesMem(kind)
+#define __drv_arg(x,y)
+#define __drv_at(x,y)
+#define __drv_deref(x)
+#define __drv_dispatchType(x)
+#define __drv_dispatchType_other
+#define __drv_formatString(x)
+#define __drv_freesMem(kind)
+#define __drv_in(x)
+#define __drv_in_deref(x)
+#define __drv_maxIRQL(x)
+#define __drv_nonConstant
+#define __drv_out(x)
+#define __drv_out_deref(x)
+#define __drv_raisesIRQL(x)
+#define __drv_requiresIRQL(x)
+#define __drv_restoresIRQL
+#define __drv_restoresIRQLGlobal(x,y)
+#define __drv_savesIRQL
+#define __drv_savesIRQLGlobal(x,y)
+#define __drv_setsIRQL(x)
+#define __drv_useCancelIRQL
+#define __drv_valueIs(x)
+#define __drv_when(x,y)
+
+#define __internal_kernel_driver
+#define __kernel_code
+#define __kernel_driver
+#define __user_code
+#define __user_driver
+
+#endif
diff --git a/mingw-w64-tools/widl/include/guiddef.h b/mingw-w64-tools/widl/include/guiddef.h
index a25b3a7..d09ea98 100644
--- a/mingw-w64-tools/widl/include/guiddef.h
+++ b/mingw-w64-tools/widl/include/guiddef.h
@@ -86,6 +86,14 @@
 
 #undef DEFINE_GUID
 
+#ifndef DECLSPEC_HIDDEN
+# if defined(__GNUC__) && !defined(__MINGW32__) && !defined(__CYGWIN__)
+#  define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
+# else
+#  define DECLSPEC_HIDDEN
+# endif
+#endif
+
 #ifdef INITGUID
 #ifdef __cplusplus
 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
diff --git a/mingw-w64-tools/widl/include/namespaceapi.h b/mingw-w64-tools/widl/include/namespaceapi.h
new file mode 100644
index 0000000..9446806
--- /dev/null
+++ b/mingw-w64-tools/widl/include/namespaceapi.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2021 Mohamad Al-Jaf
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _NAMESPACEAPI_H_
+#define _NAMESPACEAPI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PRIVATE_NAMESPACE_FLAG_DESTROY 0x00000001
+
+WINBASEAPI BOOL    WINAPI AddSIDToBoundaryDescriptor(HANDLE*,PSID);
+WINBASEAPI BOOLEAN WINAPI ClosePrivateNamespace(HANDLE,ULONG);
+WINBASEAPI HANDLE  WINAPI CreateBoundaryDescriptorW(LPCWSTR,ULONG);
+WINBASEAPI HANDLE  WINAPI CreatePrivateNamespaceW(LPSECURITY_ATTRIBUTES,LPVOID,LPCWSTR);
+WINBASEAPI void    WINAPI DeleteBoundaryDescriptor(HANDLE);
+WINBASEAPI HANDLE  WINAPI OpenPrivateNamespaceW(LPVOID,LPCWSTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NAMESPACEAPI_H_ */
diff --git a/mingw-w64-tools/widl/include/processthreadsapi.h b/mingw-w64-tools/widl/include/processthreadsapi.h
new file mode 100644
index 0000000..8cdaff4
--- /dev/null
+++ b/mingw-w64-tools/widl/include/processthreadsapi.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2021 Brendan Shanks for CodeWeavers
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _PROCESSTHREADSAPI_H
+#define _PROCESSTHREADSAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WINBASEAPI HRESULT WINAPI GetThreadDescription(HANDLE,PWSTR *);
+WINBASEAPI HRESULT WINAPI SetThreadDescription(HANDLE,PCWSTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _PROCESSTHREADSAPI_H */
diff --git a/mingw-w64-tools/widl/include/sal.h b/mingw-w64-tools/widl/include/sal.h
new file mode 100644
index 0000000..72803a1
--- /dev/null
+++ b/mingw-w64-tools/widl/include/sal.h
@@ -0,0 +1,430 @@
+/*
+ * Copyright (C) 2018 Alistair Leslie-Hughes
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_SAL_H__
+#define __WINE_SAL_H__
+
+#define _Always_(exp)
+
+#define _Analysis_noreturn_
+
+#define _At_(a, b)
+#define _At_buffer_(a, b, c, d)
+
+#define _Check_return_
+
+#define _COM_Outptr_
+#define _COM_Outptr_result_maybenull_
+
+#define _Deref_in_range_(cnt)
+#define _Deref_out_
+#define _Deref_out_z_
+#define _Deref_out_opt_
+#define _Deref_out_opt_z_
+#define _Deref_out_range_(x, y)
+#define _Deref_post_maybenull_
+#define _Deref_post_opt_cap_(count)
+#define _Deref_post_opt_valid_
+#define _Deref_post_opt_z_cap_(count)
+#define _Deref_post_valid_
+#define _Deref_post_z_
+#define _Deref_pre_maybenull_
+#define _Deref_pre_z_
+#define _Deref_prepost_opt_z_
+#define _Deref_ret_z_
+
+#define _Field_range_(min, max)
+
+#define _In_
+#define _In_bytecount_(count)
+#define _In_bytecount_c_(count)
+#define _In_bytecount_x_(count)
+#define _In_count_(count)
+#define _In_count_c_(count)
+#define _In_count_x_(count)
+#define _In_opt_
+#define _In_opt_bytecount_(count)
+#define _In_opt_bytecount_c_(count)
+#define _In_opt_bytecount_x_(count)
+#define _In_opt_count_(count)
+#define _In_opt_count_c_(count)
+#define _In_opt_count_x_(count)
+#define _In_opt_ptrdiff_count_(count)
+#define _In_opt_z_
+#define _In_opt_z_count_(count)
+#define _In_opt_z_count_c_(count)
+#define _In_opt_z_bytecount_(count)
+#define _In_opt_z_bytecount_c_(count)
+#define _In_ptrdiff_count_(count)
+#define _In_range_(min, max)
+#define _In_reads_(count)
+#define _In_reads_bytes_(count)
+#define _In_reads_bytes_opt_(count)
+#define _In_reads_opt_(count)
+#define _In_reads_opt_z_(count)
+#define _In_reads_or_z_(count)
+#define _In_reads_or_z_opt_(count)
+#define _In_reads_z_(count)
+#define _In_z_
+#define _In_z_bytecount_(count)
+#define _In_z_bytecount_c_(count)
+#define _In_z_count_(count)
+#define _In_z_count_c_(count)
+
+#define _Inout_
+#define _Inout_bytecap_x_(count)
+#define _Inout_cap_(count)
+#define _Inout_opt_
+#define _Inout_opt_cap_c_(count)
+#define _Inout_opt_z_
+#define _Inout_opt_z_bytecap_(count)
+#define _Inout_updates_(count)
+#define _Inout_updates_bytes_(count)
+#define _Inout_updates_bytes_all_opt_(count)
+#define _Inout_updates_bytes_opt_(count)
+#define _Inout_updates_opt_(count)
+#define _Inout_updates_z_(count)
+#define _Inout_updates_opt_z_(count)
+#define _Inout_z_
+#define _Inout_z_bytecap_(count)
+#define _Inout_z_cap_(count)
+#define _Inout_z_cap_c_(count)
+
+#define _Must_inspect_result_
+
+#define _Null_
+#define _Null_terminated_
+
+#define _Out_
+#define _Outptr_
+#define _Out_bytecap_(count)
+#define _Out_bytecap_c_(count)
+#define _Out_bytecap_x_(count)
+#define _Out_bytecapcount_(count)
+#define _Out_bytecap_post_bytecount_(count1, count2)
+#define _Out_cap_(count)
+#define _Out_cap_c_(count)
+#define _Out_cap_m_(count1, count2)
+#define _Out_cap_x_(count)
+#define _Out_cap_post_count_(count1, count2)
+#define _Out_opt_
+#define _Out_opt_bytecap_(count)
+#define _Out_opt_bytecap_c_(count)
+#define _Out_opt_bytecap_x_(count)
+#define _Out_opt_bytecap_post_bytecount_(count1, count2)
+#define _Out_opt_bytecapcount_(count)
+#define _Out_opt_cap_(count)
+#define _Out_opt_cap_m_(count1, count2)
+#define _Out_opt_cap_c_(count)
+#define _Out_opt_cap_x_(count)
+#define _Out_opt_cap_post_count_(count1, count2)
+#define _Out_opt_ptrdiff_cap_(count)
+#define _Out_opt_z_bytecap_(count)
+#define _Out_opt_z_bytecap_c_(count)
+#define _Out_opt_z_bytecap_x_(count)
+#define _Out_opt_z_bytecap_post_bytecount_(count1, count2)
+#define _Out_opt_z_cap_(count)
+#define _Out_opt_z_cap_c_(count)
+#define _Out_opt_z_cap_m_(count1, count2)
+#define _Out_opt_z_cap_x_(count)
+#define _Out_opt_z_cap_post_count_(count1, count2)
+#define _Out_ptrdiff_cap_(count)
+#define _Out_writes_(count)
+#define _Out_writes_all_(count)
+#define _Out_writes_bytes_(count)
+#define _Out_writes_bytes_all_(count)
+#define _Out_writes_bytes_all_opt_(count)
+#define _Out_writes_bytes_opt_(count)
+#define _Out_writes_bytes_to_(count1, count2)
+#define _Out_writes_bytes_to_opt_(count1, count2)
+#define _Out_writes_opt_(count)
+#define _Out_writes_opt_z_(count)
+#define _Out_writes_to_(count1, count2)
+#define _Out_writes_to_opt_(count1, count2)
+#define _Out_writes_z_(count)
+#define _Out_z_bytecap_(count)
+#define _Out_z_bytecap_c_(count)
+#define _Out_z_bytecap_x_(count)
+#define _Out_z_bytecap_post_bytecount_(count1, count2)
+#define _Out_z_cap_(count)
+#define _Out_z_cap_c_(count)
+#define _Out_z_cap_m_(count1, count2)
+#define _Out_z_cap_x_(count)
+#define _Out_z_cap_post_count_(count1, count2)
+
+#define _Outptr_opt_
+#define _Outptr_opt_result_buffer_(count)
+#define _Outptr_opt_result_maybenull_
+#define _Outptr_opt_result_z_
+#define _Outptr_result_buffer_(count)
+#define _Outptr_result_buffer_all_maybenull_(ptr)
+#define _Outptr_result_buffer_maybenull_(count)
+#define _Outptr_result_maybenull_
+#define _Outptr_result_maybenull_z_
+#define _Outptr_result_nullonfailure_
+#define _Outptr_result_z_
+
+#define _Post_count_(count)
+#define _Post_count_c_(count)
+#define _Post_equal_to_(exp)
+#define _Post_invalid_
+#define _Post_maybez_
+#define _Post_ptr_invalid_
+#define _Post_readable_byte_size_(count)
+#define _Post_readable_size_(count)
+#define _Post_satisfies_(exp)
+#define _Post_writable_byte_size_(count)
+#define _Post_writable_size_(count)
+#define _Post_z_
+
+#define _Pre_cap_for_(count)
+#define _Pre_maybenull_
+#define _Pre_notnull_
+#define _Pre_null_
+#define _Pre_opt_z_
+#define _Pre_valid_
+#define _Pre_writable_size_(count)
+#define _Pre_z_
+#define _Prepost_z_
+
+#define _Printf_format_string_
+#define _Printf_format_string_params_(count)
+
+#define _Reserved_
+
+#define _Result_nullonfailure_
+
+#define _Ret_maybenull_
+#define _Ret_maybenull_z_
+#define _Ret_notnull_
+#define _Ret_opt_
+#define _Ret_opt_bytecap_(count)
+#define _Ret_opt_bytecap_x_(count)
+#define _Ret_opt_z_cap_(count)
+#define _Ret_range_(exp,exp2)
+#define _Ret_writes_bytes_maybenull_(count)
+#define _Ret_writes_z_(count)
+#define _Ret_z_
+
+#define _Return_type_success_(count)
+
+#define _Scanf_format_string_
+#define _Scanf_format_string_params_(count)
+#define _Scanf_s_format_string_
+#define _Scanf_s_format_string_params_(count)
+
+#define _Success_(exp)
+
+#define _When_(exp1, exp2)
+
+#define __bcount(size)
+#define __bcount_opt(size)
+
+#define __deref_bcount(size)
+#define __deref_bcount_opt(size)
+#define __deref_ecount(size)
+#define __deref_ecount_opt(size)
+#define __deref_inout
+#define __deref_inout_bcount(size)
+#define __deref_inout_bcount_full(size)
+#define __deref_inout_bcount_full_opt(size)
+#define __deref_inout_bcount_nz(size)
+#define __deref_inout_bcount_nz_opt(size)
+#define __deref_inout_bcount_opt(size)
+#define __deref_inout_bcount_part(size,length)
+#define __deref_inout_bcount_part_opt(size,length)
+#define __deref_inout_bcount_z(size)
+#define __deref_inout_bcount_z_opt(size)
+#define __deref_inout_ecount(size)
+#define __deref_inout_ecount_full(size)
+#define __deref_inout_ecount_full_opt(size)
+#define __deref_inout_ecount_nz(size)
+#define __deref_inout_ecount_nz_opt(size)
+#define __deref_inout_ecount_opt(size)
+#define __deref_inout_ecount_part(size,length)
+#define __deref_inout_ecount_part_opt(size,length)
+#define __deref_inout_ecount_z(size)
+#define __deref_inout_ecount_z_opt(size)
+#define __deref_inout_nz
+#define __deref_inout_nz_opt
+#define __deref_inout_opt
+#define __deref_inout_z
+#define __deref_inout_z_opt
+#define __deref_opt_bcount(size)
+#define __deref_opt_bcount_opt(size)
+#define __deref_opt_ecount(size)
+#define __deref_opt_ecount_opt(size)
+#define __deref_opt_inout
+#define __deref_opt_inout_bcount(size)
+#define __deref_opt_inout_bcount_full(size)
+#define __deref_opt_inout_bcount_full_opt(size)
+#define __deref_opt_inout_bcount_nz(size)
+#define __deref_opt_inout_bcount_nz_opt(size)
+#define __deref_opt_inout_bcount_opt(size)
+#define __deref_opt_inout_bcount_part(size,length)
+#define __deref_opt_inout_bcount_part_opt(size,length)
+#define __deref_opt_inout_bcount_z(size)
+#define __deref_opt_inout_bcount_z_opt(size)
+#define __deref_opt_inout_ecount(size)
+#define __deref_opt_inout_ecount_full(size)
+#define __deref_opt_inout_ecount_full_opt(size)
+#define __deref_opt_inout_ecount_nz(size)
+#define __deref_opt_inout_ecount_nz_opt(size)
+#define __deref_opt_inout_ecount_opt(size)
+#define __deref_opt_inout_ecount_part(size,length)
+#define __deref_opt_inout_ecount_part_opt(size,length)
+#define __deref_opt_inout_ecount_z(size)
+#define __deref_opt_inout_ecount_z_opt(size)
+#define __deref_opt_inout_nz
+#define __deref_opt_inout_nz_opt
+#define __deref_opt_inout_opt
+#define __deref_opt_inout_z
+#define __deref_opt_inout_z_opt
+#define __deref_opt_out
+#define __deref_opt_out_bcount(size)
+#define __deref_opt_out_bcount_full(size)
+#define __deref_opt_out_bcount_full_opt(size)
+#define __deref_opt_out_bcount_nz_opt(size)
+#define __deref_opt_out_bcount_opt(size)
+#define __deref_opt_out_bcount_part(size,length)
+#define __deref_opt_out_bcount_part_opt(size,length)
+#define __deref_opt_out_bcount_z_opt(size)
+#define __deref_opt_out_ecount(size)
+#define __deref_opt_out_ecount_full(size)
+#define __deref_opt_out_ecount_full_opt(size)
+#define __deref_opt_out_ecount_nz_opt(size)
+#define __deref_opt_out_ecount_opt(size)
+#define __deref_opt_out_ecount_part(size,length)
+#define __deref_opt_out_ecount_part_opt(size,length)
+#define __deref_opt_out_ecount_z_opt(size)
+#define __deref_opt_out_nz_opt
+#define __deref_opt_out_opt
+#define __deref_opt_out_z
+#define __deref_opt_out_z_opt
+#define __deref_out
+#define __deref_out_bcount(size)
+#define __deref_out_bcount_full(size)
+#define __deref_out_bcount_full_opt(size)
+#define __deref_out_bcount_nz(size)
+#define __deref_out_bcount_nz_opt(size)
+#define __deref_out_bcount_opt(size)
+#define __deref_out_bcount_part(size,length)
+#define __deref_out_bcount_part_opt(size,length)
+#define __deref_out_bcount_z(size)
+#define __deref_out_bcount_z_opt(size)
+#define __deref_out_ecount(size)
+#define __deref_out_ecount_full(size)
+#define __deref_out_ecount_full_opt(size)
+#define __deref_out_ecount_nz(size)
+#define __deref_out_ecount_nz_opt(size)
+#define __deref_out_ecount_opt(size)
+#define __deref_out_ecount_part(size,length)
+#define __deref_out_ecount_part_opt(size,length)
+#define __deref_out_ecount_z(size)
+#define __deref_out_ecount_z_opt(size)
+#define __deref_out_nz
+#define __deref_out_nz_opt
+#define __deref_out_opt
+#define __deref_out_z
+#define __deref_out_z_opt
+
+#define __ecount(size)
+#define __ecount_opt(size)
+
+/* #define __in */ /* conflicts with system headers */
+#define __in_bcount(size)
+#define __in_bcount_nz(size)
+#define __in_bcount_nz_opt(size)
+#define __in_bcount_opt(size)
+#define __in_bcount_z(size)
+#define __in_bcount_z_opt(size)
+#define __in_ecount(size)
+#define __in_ecount_nz(size)
+#define __in_ecount_nz_opt(size)
+#define __in_ecount_opt(size)
+#define __in_ecount_z(size)
+#define __in_ecount_z_opt(size)
+#define __in_nz
+#define __in_nz_opt
+#define __in_opt
+#define __in_z
+#define __in_z_opt
+#define __inout
+#define __inout_bcount(size)
+#define __inout_bcount_full(size)
+#define __inout_bcount_full_opt(size)
+#define __inout_bcount_nz(size)
+#define __inout_bcount_nz_opt(size)
+#define __inout_bcount_opt(size)
+#define __inout_bcount_part(size,length)
+#define __inout_bcount_part_opt(size,length)
+#define __inout_bcount_z(size)
+#define __inout_bcount_z_opt(size)
+#define __inout_ecount(size)
+#define __inout_ecount_full(size)
+#define __inout_ecount_full_opt(size)
+#define __inout_ecount_nz(size)
+#define __inout_ecount_nz_opt(size)
+#define __inout_ecount_opt(size)
+#define __inout_ecount_part(size,length)
+#define __inout_ecount_part_opt(size,length)
+#define __inout_ecount_z(size)
+#define __inout_ecount_z_opt(size)
+#define __inout_ecount_z_opt(size)
+#define __inout_nz
+#define __inout_nz_opt
+#define __inout_opt
+#define __inout_z
+#define __inout_z_opt
+
+/* #define __out */ /* conflicts with system headers */
+#define __out_bcount(size)
+#define __out_bcount_full(size)
+#define __out_bcount_full_opt(size)
+#define __out_bcount_full_z(size)
+#define __out_bcount_full_z_opt(size)
+#define __out_bcount_nz(size)
+#define __out_bcount_nz_opt(size)
+#define __out_bcount_opt(size)
+#define __out_bcount_part(size,length)
+#define __out_bcount_part_opt(size,length)
+#define __out_bcount_part_z(size,length)
+#define __out_bcount_part_z_opt(size,length)
+#define __out_bcount_z(size)
+#define __out_bcount_z_opt(size)
+#define __out_ecount(size)
+#define __out_ecount_full(size)
+#define __out_ecount_full_opt(size)
+#define __out_ecount_full_z(size)
+#define __out_ecount_full_z_opt(size)
+#define __out_ecount_nz(size)
+#define __out_ecount_nz_opt(size)
+#define __out_ecount_opt(size)
+#define __out_ecount_part(size,length)
+#define __out_ecount_part_opt(size,length)
+#define __out_ecount_part_z(size,length)
+#define __out_ecount_part_z_opt(size,length)
+#define __out_ecount_z(size)
+#define __out_ecount_z_opt(size)
+#define __out_nz
+#define __out_nz_opt
+#define __out_opt
+#define __out_z
+#define __out_z_opt
+
+#endif
diff --git a/mingw-w64-tools/widl/include/specstrings.h b/mingw-w64-tools/widl/include/specstrings.h
new file mode 100644
index 0000000..f2636a4
--- /dev/null
+++ b/mingw-w64-tools/widl/include/specstrings.h
@@ -0,0 +1,340 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef SPECSTRINGS_H
+#define SPECSTRINGS_H
+
+#define __specstrings
+
+#include <sal.h>
+
+#ifdef __cplusplus
+#ifndef __nothrow
+#define __nothrow __declspec(nothrow)
+#endif
+extern "C" {
+#else
+#ifndef __nothrow
+#define __nothrow
+#endif
+#endif
+
+#define SAL__deref_in
+#define SAL__deref_in_ecount(size)
+#define SAL__deref_in_bcount(size)
+
+#define SAL__deref_in_opt
+#define SAL__deref_in_ecount_opt(size)
+#define SAL__deref_in_bcount_opt(size)
+
+#define SAL__deref_opt_in
+#define SAL__deref_opt_in_ecount(size)
+#define SAL__deref_opt_in_bcount(size)
+
+#define SAL__deref_opt_in_opt
+#define SAL__deref_opt_in_ecount_opt(size)
+#define SAL__deref_opt_in_bcount_opt(size)
+
+#define SAL__out_awcount(expr,size)
+#define SAL__in_awcount(expr,size)
+
+/* Renamed __null to SAL__null for avoiding private keyword conflicts between
+   gcc and MS world.  */
+#define SAL__null
+#define SAL__notnull
+#define SAL__maybenull
+#define SAL__readonly
+#define SAL__notreadonly
+#define SAL__maybereadonly
+#define SAL__valid
+#define SAL__notvalid
+#define SAL__maybevalid
+#define SAL__readableTo(extent)
+#define SAL__elem_readableTo(size)
+#define SAL__byte_readableTo(size)
+#define SAL__writableTo(size)
+#define SAL__elem_writableTo(size)
+#define SAL__byte_writableTo(size)
+#define SAL__deref
+#define SAL__pre
+#define SAL__post
+#define SAL__precond(expr)
+#define SAL__postcond(expr)
+#define SAL__exceptthat
+#define SAL__execeptthat
+#define SAL__inner_success(expr)
+#define SAL__inner_checkReturn
+#define SAL__inner_typefix(ctype)
+#define SAL__inner_override
+#define SAL__inner_callback
+#define SAL__inner_blocksOn(resource)
+#define SAL__inner_fallthrough_dec
+#define SAL__inner_fallthrough
+#define __refparam
+#define SAL__inner_control_entrypoint(category)
+#define SAL__inner_data_entrypoint(category)
+
+#define SAL__ecount(size)
+#define SAL__bcount(size)
+
+#define SAL__in
+#define SAL__in_opt
+#define SAL__in_nz
+#define SAL__in_nz_opt
+#define SAL__in_z
+#define SAL__in_z_opt
+#define SAL__in_ecount(size)
+#define SAL__in_ecount_nz(size)
+#define SAL__in_ecount_z(size)
+#define SAL__in_bcount(size)
+#define SAL__in_bcount_z(size)
+#define SAL__in_bcount_nz(size)
+#define SAL__in_ecount_opt(size)
+#define SAL__in_bcount_opt(size)
+#define SAL__in_ecount_z_opt(size)
+#define SAL__in_bcount_z_opt(size)
+#define SAL__in_ecount_nz_opt(size)
+#define SAL__in_bcount_nz_opt(size)
+
+#define SAL__out
+#define SAL__out_ecount(size)
+#define SAL__out_z
+#define SAL__out_nz
+#define SAL__out_nz_opt
+#define SAL__out_z_opt
+#define SAL__out_ecount_part(size,length)
+#define SAL__out_ecount_full(size)
+#define SAL__out_ecount_nz(size)
+#define SAL__out_ecount_z(size)
+#define SAL__out_ecount_part_z(size,length)
+#define SAL__out_ecount_full_z(size)
+#define SAL__out_bcount(size)
+#define SAL__out_bcount_part(size,length)
+#define SAL__out_bcount_full(size)
+#define SAL__out_bcount_z(size)
+#define SAL__out_bcount_part_z(size,length)
+#define SAL__out_bcount_full_z(size)
+#define SAL__out_bcount_nz(size)
+
+#define SAL__inout
+#define SAL__inout_ecount(size)
+#define SAL__inout_bcount(size)
+#define SAL__inout_ecount_part(size,length)
+#define SAL__inout_bcount_part(size,length)
+#define SAL__inout_ecount_full(size)
+#define SAL__inout_bcount_full(size)
+#define SAL__inout_z
+#define SAL__inout_ecount_z(size)
+#define SAL__inout_bcount_z(size)
+#define SAL__inout_nz
+#define SAL__inout_ecount_nz(size)
+#define SAL__inout_bcount_nz(size)
+#define SAL__ecount_opt(size)
+#define SAL__bcount_opt(size)
+#define SAL__out_opt
+#define SAL__out_ecount_opt(size)
+#define SAL__out_bcount_opt(size)
+#define SAL__out_ecount_part_opt(size,length)
+#define SAL__out_bcount_part_opt(size,length)
+#define SAL__out_ecount_full_opt(size)
+#define SAL__out_bcount_full_opt(size)
+#define SAL__out_ecount_z_opt(size)
+#define SAL__out_bcount_z_opt(size)
+#define SAL__out_ecount_part_z_opt(size,length)
+#define SAL__out_bcount_part_z_opt(size,length)
+#define SAL__out_ecount_full_z_opt(size)
+#define SAL__out_bcount_full_z_opt(size)
+#define SAL__out_ecount_nz_opt(size)
+#define SAL__out_bcount_nz_opt(size)
+#define SAL__inout_opt
+#define SAL__inout_ecount_opt(size)
+#define SAL__inout_bcount_opt(size)
+#define SAL__inout_ecount_part_opt(size,length)
+#define SAL__inout_bcount_part_opt(size,length)
+#define SAL__inout_ecount_full_opt(size)
+#define SAL__inout_bcount_full_opt(size)
+#define SAL__inout_z_opt
+#define SAL__inout_ecount_z_opt(size)
+#define SAL__inout_bcount_z_opt(size)
+#define SAL__inout_nz_opt
+#define SAL__inout_ecount_nz_opt(size)
+#define SAL__inout_bcount_nz_opt(size)
+#define SAL__deref_ecount(size)
+#define SAL__deref_bcount(size)
+#define SAL__deref_out
+#define SAL__deref_out_ecount(size)
+#define SAL__deref_out_bcount(size)
+#define SAL__deref_out_ecount_part(size,length)
+#define SAL__deref_out_bcount_part(size,length)
+#define SAL__deref_out_ecount_full(size)
+#define SAL__deref_out_bcount_full(size)
+#define SAL__deref_out_z
+#define SAL__deref_out_ecount_z(size)
+#define SAL__deref_out_bcount_z(size)
+#define SAL__deref_out_nz
+#define SAL__deref_out_ecount_nz(size)
+#define SAL__deref_out_bcount_nz(size)
+#define SAL__deref_inout
+#define SAL__deref_inout_ecount(size)
+#define SAL__deref_inout_bcount(size)
+#define SAL__deref_inout_ecount_part(size,length)
+#define SAL__deref_inout_bcount_part(size,length)
+#define SAL__deref_inout_ecount_full(size)
+#define SAL__deref_inout_bcount_full(size)
+#define SAL__deref_inout_z
+#define SAL__deref_inout_ecount_z(size)
+#define SAL__deref_inout_bcount_z(size)
+#define SAL__deref_inout_nz
+#define SAL__deref_inout_ecount_nz(size)
+#define SAL__deref_inout_bcount_nz(size)
+#define SAL__deref_ecount_opt(size)
+#define SAL__deref_bcount_opt(size)
+#define SAL__deref_out_opt
+#define SAL__deref_out_ecount_opt(size)
+#define SAL__deref_out_bcount_opt(size)
+#define SAL__deref_out_ecount_part_opt(size,length)
+#define SAL__deref_out_bcount_part_opt(size,length)
+#define SAL__deref_out_ecount_full_opt(size)
+#define SAL__deref_out_bcount_full_opt(size)
+#define SAL__deref_out_z_opt
+#define SAL__deref_out_ecount_z_opt(size)
+#define SAL__deref_out_bcount_z_opt(size)
+#define SAL__deref_out_nz_opt
+#define SAL__deref_out_ecount_nz_opt(size)
+#define SAL__deref_out_bcount_nz_opt(size)
+#define SAL__deref_inout_opt
+#define SAL__deref_inout_ecount_opt(size)
+#define SAL__deref_inout_bcount_opt(size)
+#define SAL__deref_inout_ecount_part_opt(size,length)
+#define SAL__deref_inout_bcount_part_opt(size,length)
+#define SAL__deref_inout_ecount_full_opt(size)
+#define SAL__deref_inout_bcount_full_opt(size)
+#define SAL__deref_inout_z_opt
+#define SAL__deref_inout_ecount_z_opt(size)
+#define SAL__deref_inout_bcount_z_opt(size)
+#define SAL__deref_inout_nz_opt
+#define SAL__deref_inout_ecount_nz_opt(size)
+#define SAL__deref_inout_bcount_nz_opt(size)
+#define SAL__deref_opt_ecount(size)
+#define SAL__deref_opt_bcount(size)
+#define SAL__deref_opt_out
+#define SAL__deref_opt_out_z
+#define SAL__deref_opt_out_ecount(size)
+#define SAL__deref_opt_out_bcount(size)
+#define SAL__deref_opt_out_ecount_part(size,length)
+#define SAL__deref_opt_out_bcount_part(size,length)
+#define SAL__deref_opt_out_ecount_full(size)
+#define SAL__deref_opt_out_bcount_full(size)
+#define SAL__deref_opt_inout
+#define SAL__deref_opt_inout_ecount(size)
+#define SAL__deref_opt_inout_bcount(size)
+#define SAL__deref_opt_inout_ecount_part(size,length)
+#define SAL__deref_opt_inout_bcount_part(size,length)
+#define SAL__deref_opt_inout_ecount_full(size)
+#define SAL__deref_opt_inout_bcount_full(size)
+#define SAL__deref_opt_inout_z
+#define SAL__deref_opt_inout_ecount_z(size)
+#define SAL__deref_opt_inout_bcount_z(size)
+#define SAL__deref_opt_inout_nz
+#define SAL__deref_opt_inout_ecount_nz(size)
+#define SAL__deref_opt_inout_bcount_nz(size)
+#define SAL__deref_opt_ecount_opt(size)
+#define SAL__deref_opt_bcount_opt(size)
+#define SAL__deref_opt_out_opt
+#define SAL__deref_opt_out_ecount_opt(size)
+#define SAL__deref_opt_out_bcount_opt(size)
+#define SAL__deref_opt_out_ecount_part_opt(size,length)
+#define SAL__deref_opt_out_bcount_part_opt(size,length)
+#define SAL__deref_opt_out_ecount_full_opt(size)
+#define SAL__deref_opt_out_bcount_full_opt(size)
+#define SAL__deref_opt_out_z_opt
+#define SAL__deref_opt_out_ecount_z_opt(size)
+#define SAL__deref_opt_out_bcount_z_opt(size)
+#define SAL__deref_opt_out_nz_opt
+#define SAL__deref_opt_out_ecount_nz_opt(size)
+#define SAL__deref_opt_out_bcount_nz_opt(size)
+#define SAL__deref_opt_inout_opt
+#define SAL__deref_opt_inout_ecount_opt(size)
+#define SAL__deref_opt_inout_bcount_opt(size)
+#define SAL__deref_opt_inout_ecount_part_opt(size,length)
+#define SAL__deref_opt_inout_bcount_part_opt(size,length)
+#define SAL__deref_opt_inout_ecount_full_opt(size)
+#define SAL__deref_opt_inout_bcount_full_opt(size)
+#define SAL__deref_opt_inout_z_opt
+#define SAL__deref_opt_inout_ecount_z_opt(size)
+#define SAL__deref_opt_inout_bcount_z_opt(size)
+#define SAL__deref_opt_inout_nz_opt
+#define SAL__deref_opt_inout_ecount_nz_opt(size)
+#define SAL__deref_opt_inout_bcount_nz_opt(size)
+
+#define SAL__success(expr)
+#define SAL__nullterminated
+#define SAL__nullnullterminated
+#define SAL__reserved
+#define SAL__checkReturn
+#define SAL__typefix(ctype)
+#define SAL__override
+#define SAL__callback
+#define SAL__format_string
+#define SAL__blocksOn(resource)
+#define SAL__control_entrypoint(category)
+#define SAL__data_entrypoint(category)
+
+#define __encoded_pointer
+
+#define _Post_equals_last_error_
+
+#ifndef __fallthrough
+#define __fallthrough
+#endif
+
+#ifndef __analysis_assume
+#define __analysis_assume(expr)
+#endif
+
+#ifndef __CLR_OR_THIS_CALL
+#define __CLR_OR_THIS_CALL
+#endif
+
+#ifndef __CLRCALL_OR_CDECL
+#define __CLRCALL_OR_CDECL __cdecl
+#endif
+
+#ifndef __STDC_WANT_SECURE_LIB__
+#define __STDC_WANT_SECURE_LIB__ 0
+#endif
+
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#ifndef RC_INVOKED
+#ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 0
+#endif
+#ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 0
+#endif
+#ifndef _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES
+#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 0
+#endif
+#endif
+
+#ifndef DECLSPEC_ADDRSAFE
+#if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
+#define DECLSPEC_ADDRSAFE  __declspec(address_safe)
+#else
+#define DECLSPEC_ADDRSAFE
+#endif
+#endif /* DECLSPEC_ADDRSAFE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <driverspecs.h>
+
+#endif
diff --git a/mingw-w64-tools/widl/include/winbase.h b/mingw-w64-tools/widl/include/winbase.h
index 2928385..0a0bfde 100644
--- a/mingw-w64-tools/widl/include/winbase.h
+++ b/mingw-w64-tools/widl/include/winbase.h
@@ -40,6 +40,7 @@
 #endif
 
 #include <libloaderapi.h>
+#include <processthreadsapi.h>
 #include <synchapi.h>
 #include <threadpoolapiset.h>
 
@@ -240,6 +241,8 @@
     BOOL  bInheritHandle;
 } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
 
+#include <namespaceapi.h>
+
 #ifndef _FILETIME_
 #define _FILETIME_
 /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
@@ -2611,6 +2614,7 @@
 WINBASEAPI DWORD       WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
 #define                       SearchPath WINELIB_NAME_AW(SearchPath)
 WINADVAPI  BOOL        WINAPI SetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI BOOL        WINAPI SetCachedSigningLevel(PHANDLE,ULONG,ULONG,HANDLE);
 WINBASEAPI BOOL        WINAPI SetCommConfig(HANDLE,LPCOMMCONFIG,DWORD);
 WINBASEAPI BOOL        WINAPI SetCommBreak(HANDLE);
 WINBASEAPI BOOL        WINAPI SetCommMask(HANDLE,DWORD);
diff --git a/mingw-w64-tools/widl/include/windef.h b/mingw-w64-tools/widl/include/windef.h
index ac2ec61..f352706 100644
--- a/mingw-w64-tools/widl/include/windef.h
+++ b/mingw-w64-tools/widl/include/windef.h
@@ -72,7 +72,7 @@
 #  else
 #   define __stdcall __attribute__((ms_abi))
 #  endif
-# elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) && !defined(_WIN32)
+# elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) && !defined(__MINGW32__) && !defined(__CYGWIN__)
 #   define __stdcall __attribute__((pcs("aapcs-vfp")))
 # elif defined(__aarch64__) && defined (__GNUC__) && __has_attribute(ms_abi)
 #  define __stdcall __attribute__((ms_abi))
@@ -120,7 +120,7 @@
 # endif
 #endif
 
-#if defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) && !defined(_WIN32)
+#if defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) && !defined(__MINGW32__) && !defined(__CYGWIN__)
 # define WINAPIV __attribute__((pcs("aapcs")))
 #else
 # define WINAPIV __cdecl
diff --git a/mingw-w64-tools/widl/include/wine/wpp.h b/mingw-w64-tools/widl/include/wine/wpp.h
deleted file mode 100644
index 4994577..0000000
--- a/mingw-w64-tools/widl/include/wine/wpp.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Exported functions of the Wine preprocessor
- *
- * Copyright 2002 Alexandre Julliard
- *
- * 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; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#ifndef __WINE_WPP_H
-#define __WINE_WPP_H
-
-#include <stdio.h>
-#include <stdarg.h>
-
-extern void wpp_del_define( const char *name );
-extern void wpp_add_cmdline_define( const char *value );
-extern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug );
-extern void wpp_set_pedantic( int on );
-extern void wpp_add_include_path( const char *path );
-extern char *wpp_find_include( const char *name, const char *parent_name );
-/* Return value == 0 means successful execution */
-extern int wpp_parse( const char *input, FILE *output );
-
-#endif  /* __WINE_WPP_H */
diff --git a/mingw-w64-tools/widl/include/winerror.h b/mingw-w64-tools/widl/include/winerror.h
index f22b24f..f412989 100644
--- a/mingw-w64-tools/widl/include/winerror.h
+++ b/mingw-w64-tools/widl/include/winerror.h
@@ -19,6 +19,8 @@
 #ifndef __WINE_WINERROR_H
 #define __WINE_WINERROR_H
 
+#include <specstrings.h>
+
 #define FACILITY_NULL                         0
 #define FACILITY_RPC                          1
 #define FACILITY_DISPATCH                     2
@@ -3038,6 +3040,21 @@
 #define CO_E_DECODEFAILED                                  _HRESULT_TYPEDEF_(0x8004021A)
 #define CO_E_ACNOTINITIALIZED                              _HRESULT_TYPEDEF_(0x8004021B)
 
+#define CONTEXT_S_FIRST                                    _HRESULT_TYPEDEF_(0x0004e000)
+#define CONTEXT_S_LAST                                     _HRESULT_TYPEDEF_(0x0004e02f)
+#define CONTEXT_E_FIRST                                    _HRESULT_TYPEDEF_(0x8004e000)
+#define CONTEXT_E_ABORTED                                  _HRESULT_TYPEDEF_(0x8004e002)
+#define CONTEXT_E_ABORTING                                 _HRESULT_TYPEDEF_(0x8004e003)
+#define CONTEXT_E_NOCONTEXT                                _HRESULT_TYPEDEF_(0x8004e004)
+#define CONTEXT_E_WOULD_DEADLOCK                           _HRESULT_TYPEDEF_(0x8004e005)
+#define CONTEXT_E_SYNCH_TIMEOUT                            _HRESULT_TYPEDEF_(0x8004e006)
+#define CONTEXT_E_OLDREF                                   _HRESULT_TYPEDEF_(0x8004e007)
+#define CONTEXT_E_ROLENOTFOUND                             _HRESULT_TYPEDEF_(0x8004e00c)
+#define CONTEXT_E_TMNOTAVAILABLE                           _HRESULT_TYPEDEF_(0x8004e00f)
+#define CONTEXT_E_NOJIT                                    _HRESULT_TYPEDEF_(0x8004e026)
+#define CONTEXT_E_NOTRANSACTION                            _HRESULT_TYPEDEF_(0x8004e027)
+#define CONTEXT_E_LAST                                     _HRESULT_TYPEDEF_(0x8004e02f)
+
 /* Task Scheduler Service Error Codes */
 #define SCHED_S_TASK_READY                                 _HRESULT_TYPEDEF_(0x00041300)
 #define SCHED_S_TASK_RUNNING                               _HRESULT_TYPEDEF_(0x00041301)
diff --git a/mingw-w64-tools/widl/include/winnt.h b/mingw-w64-tools/widl/include/winnt.h
index b83f588..c80efee 100644
--- a/mingw-w64-tools/widl/include/winnt.h
+++ b/mingw-w64-tools/widl/include/winnt.h
@@ -24,6 +24,7 @@
 #include <basetsd.h>
 #include <guiddef.h>
 #include <winapifamily.h>
+#include <specstrings.h>
 
 #ifndef RC_INVOKED
 #include <ctype.h>
@@ -41,7 +42,7 @@
 extern "C" {
 #endif
 
-#ifdef _NTSYSTEM_
+#if defined(_NTSYSTEM_) || defined(WINE_UNIX_LIB)
 #define NTSYSAPI
 #else
 #define NTSYSAPI DECLSPEC_IMPORT
@@ -123,10 +124,14 @@
 #endif
 
 #ifndef NOP_FUNCTION
-# if defined(_MSC_VER) && (_MSC_VER >= 1210)
-#  define NOP_FUNCTION __noop
+# if defined(_MSC_VER)
+#  if (_MSC_VER >= 1210)
+#   define NOP_FUNCTION __noop
+#  else
+#   define NOP_FUNCTION (void)0
+#  endif
 # else
-#  define NOP_FUNCTION (void)0
+#  define NOP_FUNCTION(...)
 # endif
 #endif
 
@@ -173,12 +178,14 @@
 # define DECLSPEC_EXPORT
 #endif
 
-#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun)
-# define DECLSPEC_HIDDEN
-#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
-# define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
-#else
-# define DECLSPEC_HIDDEN
+#ifndef DECLSPEC_HIDDEN
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun)
+#  define DECLSPEC_HIDDEN
+# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+#  define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
+# else
+#  define DECLSPEC_HIDDEN
+# endif
 #endif
 
 #ifndef __has_attribute
@@ -769,6 +776,12 @@
     } DUMMYUNIONNAME;
 } MEM_EXTENDED_PARAMETER, *PMEM_EXTENDED_PARAMETER;
 
+typedef struct _WIN32_MEMORY_RANGE_ENTRY
+{
+    PVOID  VirtualAddress;
+    SIZE_T NumberOfBytes;
+} WIN32_MEMORY_RANGE_ENTRY, *PWIN32_MEMORY_RANGE_ENTRY;
+
 #define	PAGE_NOACCESS		0x01
 #define	PAGE_READONLY		0x02
 #define	PAGE_READWRITE		0x04
@@ -3735,6 +3748,8 @@
 } SID,*PISID;
 #endif /* !defined(SID_DEFINED) */
 
+#define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x01
+
 #define	SID_REVISION			(1)	/* Current revision */
 #define	SID_MAX_SUB_AUTHORITIES		(15)	/* current max subauths */
 #define	SID_RECOMMENDED_SUB_AUTHORITIES	(1)	/* recommended subauths */
@@ -6301,6 +6316,19 @@
 
 /* Interlocked functions */
 
+#define InterlockedAnd _InterlockedAnd
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedCompareExchange64 _InterlockedCompareExchange64
+#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedDecrement16 _InterlockedDecrement16
+#define InterlockedExchange _InterlockedExchange
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedExchangePointer _InterlockedExchangePointer
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedIncrement16 _InterlockedIncrement16
+#define InterlockedOr _InterlockedOr
+
 #ifdef _MSC_VER
 
 #pragma intrinsic(_InterlockedAnd)
@@ -6325,66 +6353,13 @@
 short     _InterlockedIncrement16(short volatile*);
 long      _InterlockedOr(long volatile *,long);
 
-static FORCEINLINE LONG WINAPI InterlockedAnd( LONG volatile *dest, LONG val )
-{
-    return _InterlockedAnd( (long volatile *)dest, val );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
-{
-    return _InterlockedCompareExchange( (long volatile *)dest, xchg, compare );
-}
-
-static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
-{
-    return _InterlockedCompareExchange64( (long long volatile *)dest, xchg, compare );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
-{
-    return _InterlockedExchange( (long volatile *)dest, val );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
-{
-    return _InterlockedExchangeAdd( (long volatile *)dest, incr );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
-{
-    return _InterlockedIncrement( (long volatile *)dest );
-}
-
-static FORCEINLINE short WINAPI InterlockedIncrement16( short volatile *dest )
-{
-    return _InterlockedIncrement16( dest );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
-{
-    return _InterlockedDecrement( (long volatile *)dest );
-}
-
-static FORCEINLINE short WINAPI InterlockedDecrement16( short volatile *dest )
-{
-    return _InterlockedDecrement16( dest );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedOr( LONG volatile *dest, LONG val )
-{
-    return _InterlockedOr( (long volatile *)dest, val );
-}
-
-#ifndef __i386__
+#if !defined(__i386__) || _MSC_VER >= 1600
 
 #pragma intrinsic(_InterlockedCompareExchangePointer)
 #pragma intrinsic(_InterlockedExchangePointer)
 
-#define InterlockedCompareExchangePointer    _InterlockedCompareExchangePointer
-#define InterlockedExchangePointer           _InterlockedExchangePointer
-
-void *InterlockedCompareExchangePointer(void *volatile*,void*,void*);
-void *InterlockedExchangePointer(void *volatile*,void*);
+void *_InterlockedCompareExchangePointer(void *volatile*,void*,void*);
+void *_InterlockedExchangePointer(void *volatile*,void*);
 
 #else
 
@@ -6524,6 +6499,9 @@
 #endif  /* __GNUC__ */
 
 #ifdef _WIN64
+
+#define InterlockedCompareExchange128 _InterlockedCompareExchange128
+
 #if defined(_MSC_VER) && !defined(__clang__)
 
 #pragma intrinsic(_InterlockedCompareExchange128)
diff --git a/mingw-w64-tools/widl/patches/0001-relocatable.patch b/mingw-w64-tools/widl/patches/0001-relocatable.patch
index a0406ea..aafc97f 100644
--- a/mingw-w64-tools/widl/patches/0001-relocatable.patch
+++ b/mingw-w64-tools/widl/patches/0001-relocatable.patch
@@ -10,15 +10,6 @@
  
  static const char usage[] =
  "Usage: widl [options...] infile.idl\n"
-@@ -596,7 +597,7 @@ static void init_argv0_dir( const char *argv0 )
- 
- int main(int argc,char *argv[])
- {
--  int i, optc;
-+  int optc;
-   int ret = 0;
-   int opti = 0;
-   char *output_name = NULL;
 @@ -772,19 +773,12 @@ int main(int argc,char *argv[])
  
    if (stdinc)
diff --git a/mingw-w64-tools/widl/src/client.c b/mingw-w64-tools/widl/src/client.c
index 6ecae41..1ce7d24 100644
--- a/mingw-w64-tools/widl/src/client.c
+++ b/mingw-w64-tools/widl/src/client.c
@@ -19,13 +19,9 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <ctype.h>
 
diff --git a/mingw-w64-tools/widl/src/header.c b/mingw-w64-tools/widl/src/header.c
index 1a69b29..2a745b8 100644
--- a/mingw-w64-tools/widl/src/header.c
+++ b/mingw-w64-tools/widl/src/header.c
@@ -23,9 +23,6 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <ctype.h>
 
@@ -192,11 +189,11 @@
 {
     if(is_global_namespace(namespace)) {
         if(use_abi_namespace)
-            write_line(header, -1, "}", namespace->name);
+            write_line(header, -1, "}");
         return;
     }
 
-    write_line(header, -1, "}", namespace->name);
+    write_line(header, -1, "}");
     write_namespace_end(header, namespace->parent);
 }
 
@@ -1929,12 +1926,9 @@
 
 static void write_import(FILE *header, const char *fname)
 {
-  char *hname, *p;
+  char *hname = replace_extension( get_basename(fname), ".idl", "" );
 
-  hname = dup_basename(fname, ".idl");
-  p = hname + strlen(hname) - 2;
-  if (p <= hname || strcmp( p, ".h" )) strcat(hname, ".h");
-
+  if (!strendswith( hname, ".h" )) hname = strmake( "%s.h", hname );
   fprintf(header, "#include <%s>\n", hname);
   free(hname);
 }
diff --git a/mingw-w64-tools/widl/src/parser.l b/mingw-w64-tools/widl/src/parser.l
index 4d3b9d6..fb6aa93 100644
--- a/mingw-w64-tools/widl/src/parser.l
+++ b/mingw-w64-tools/widl/src/parser.l
@@ -43,7 +43,6 @@
 %{
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -52,17 +51,12 @@
 #include <assert.h>
 #include <errno.h>
 #include <limits.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#else
 #define YY_NO_UNISTD_H
-#endif
 
 #include "widl.h"
 #include "utils.h"
 #include "parser.h"
-#include "wine/wpp.h"
+#include "wpp_private.h"
 
 #include "parser.tab.h"
 
@@ -564,10 +558,7 @@
     input_name = path;
     line_number = 1;
 
-    name = xstrdup( "widl.XXXXXX" );
-    if((fd = mkstemps( name, 0 )) == -1)
-        error("Could not generate a temp name from %s\n", name);
-
+    fd = make_temp_file( "widl-pp", NULL, &name );
     temp_name = name;
     if (!(f = fdopen(fd, "wt")))
         error("Could not open fd %s for writing\n", name);
@@ -605,10 +596,7 @@
     acf_name = NULL;
     line_number = 1;
 
-    name = xstrdup( "widl.XXXXXX" );
-    if((fd = mkstemps( name, 0 )) == -1)
-        error("Could not generate a temp name from %s\n", name);
-
+    fd = make_temp_file( "widl-acf", NULL, &name );
     temp_name = name;
     if (!(f = fdopen(fd, "wt")))
         error("Could not open fd %s for writing\n", name);
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c
index d7ba108..95d9ee7 100644
--- a/mingw-w64-tools/widl/src/parser.tab.c
+++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.7.5.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -16,7 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -46,10 +46,10 @@
    USER NAME SPACE" below.  */
 
 /* Identify Bison output, and Bison version.  */
-#define YYBISON 30705
+#define YYBISON 30706
 
 /* Bison version string.  */
-#define YYBISON_VERSION "3.7.5"
+#define YYBISON_VERSION "3.7.6"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -1200,7 +1200,7 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3579
+#define YYLAST   3552
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  234
@@ -1462,7 +1462,7 @@
 };
 #endif
 
-#define YYPACT_NINF (-643)
+#define YYPACT_NINF (-642)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -1476,96 +1476,96 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -643,   115,  1791,  -643,   -89,  -643,   -39,   -45,   222,  -643,
-    -643,  -643,   222,  -643,     5,   -32,   222,  -643,   288,  -643,
-    -643,  -643,  -643,   138,   249,  -643,  -643,  -643,  -643,  -643,
-     222,   138,   268,    54,  -643,   222,    97,   138,    39,  -643,
-    -643,   301,   369,    39,  -643,  -643,  3380,  -643,  -643,  -643,
-    -643,   118,  -643,  -643,  -643,  -643,  -643,    45,  2860,   125,
-     143,  -643,  -643,  -643,   372,   149,  -643,   148,  -643,   151,
-    -643,   155,  -643,   114,   165,   338,   193,   195,  -643,  -643,
-    -643,   207,   207,   207,   126,  3036,   199,  -643,   207,   200,
-     201,  -643,    75,  -643,   -45,   316,  -643,  -643,  -643,  -643,
-     425,  -643,  -643,   182,   206,  -643,  -643,  -643,   208,   227,
-    -643,  -643,    82,  -643,  3036,  -643,  -643,   188,   210,  -103,
-     -71,  -643,   209,  -643,   211,  -643,  -643,   213,  -643,  -643,
-    -643,   214,   215,  -643,  -643,  -643,  -643,  -643,   216,   220,
-    -643,   228,  -643,  -643,  -643,  -643,   233,  -643,  -643,  -643,
-     234,  -643,  -643,  -643,   235,   236,  -643,  -643,   240,  -643,
-    -643,  -643,  -643,  -643,   242,   243,   244,   245,   247,  -643,
-     248,  -643,  -643,   250,  -643,   251,  -643,  -643,   254,   255,
-    -643,  -643,   256,  -643,  -643,  -643,  -643,  -643,  -643,  -643,
-    -643,  -643,  -643,  -643,   258,  -643,  -643,  -643,   262,   269,
-    -643,  -643,  -643,  -643,  -643,  -643,   270,  -643,  -643,   272,
-    -643,  -643,  -643,   273,  -643,   274,  -643,  -643,   278,   279,
-     280,   283,  -643,  -643,  -643,   285,   286,  -643,  -643,   294,
-     303,   304,  -106,  -643,  -643,  -643,  1937,  1114,  3036,   311,
-     377,   222,   222,   381,   385,   212,   225,   312,   319,   323,
-    -643,   324,   126,   252,   271,  -643,   315,   343,  3098,  -643,
-    -643,  -643,  -643,  -643,   326,  -643,  -643,  -643,  -643,  -643,
-    -643,  -643,  -643,  -643,  -643,  -643,  -643,   126,   126,  -643,
-    -643,   325,  -107,  -643,  -643,  -643,   207,  -643,  -643,  -643,
-     328,  -643,  -643,  -643,   -51,  -643,  -643,   555,   331,   -34,
-     -48,  -643,  -643,   360,   361,   345,  -643,   348,  -643,  2931,
-     571,   314,   222,   725,  2931,   581,   314,   725,   579,   580,
-     725,  2931,   725,   583,   584,   725,   585,   725,   725,  2377,
-     725,   725,    59,   592,   -60,   593,   725,  3036,   725,  2931,
-     725,  3036,   -36,  3036,  3036,   314,   419,   595,  3036,  3380,
-     379,  -643,   378,   375,  -643,  -643,  -643,  -643,   387,  -643,
-     389,  -643,   390,  -643,   384,   391,   395,  -643,  -643,  -643,
-     193,   222,  2931,  -643,   393,  -643,  -643,   393,   -70,  -643,
-    -643,  -643,   396,   417,  -643,  -643,  -643,  -643,   372,   102,
-     412,  -643,   -95,  -643,   -10,   174,   406,  -643,   725,   137,
-    2377,  -643,  -643,    30,    75,  -643,   399,  -643,   394,  -643,
-     222,   409,   435,   408,  -643,   222,   636,   636,  -643,   -17,
-     311,    94,   411,   439,   413,  -643,  -643,   428,   430,  -643,
-    -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,   432,  -643,
-     725,   725,   725,   725,   725,   725,   923,  2615,  -110,  -643,
-     433,   444,   438,   466,  2615,   442,   443,  -643,  -102,   447,
-     448,   449,   451,   452,   454,   459,   461,   859,   462,  2931,
-     217,   463,   -91,  -643,  2615,  -643,  -643,  -643,   464,   469,
-     471,   472,   468,   474,   -49,   480,   473,  2291,   482,  -643,
-    -643,  -643,  -643,  -643,  -643,   484,   485,   486,   487,   496,
-    -643,   492,   493,   494,  -643,  3380,  -643,   667,  -643,  -643,
-    -643,  -643,  -643,  -643,  -643,    -3,   126,   108,   109,   193,
-     394,   537,  1466,  -643,  -643,  -643,  3098,  -643,  1330,   520,
-     -38,   501,  -643,  -643,  -643,  -643,   575,  -643,  2461,   498,
-     532,  -643,  -643,  -643,  -643,  -643,  -643,   -25,  -643,  -643,
-     553,   528,  -643,  -643,   132,   725,  -643,  -643,   535,  -643,
-      46,    49,  -643,  2931,  -643,  2931,   509,  -643,   514,  -643,
-     515,  -643,   581,  -643,  -643,  -643,  3117,    43,    43,    43,
-      43,    43,    43,  -643,  2376,   446,  3222,   207,   725,   725,
-     741,   725,   725,   725,   725,   725,   725,   725,   725,   725,
-     725,   725,   725,   725,   725,   725,   725,   725,   743,   725,
-     725,  -643,  -643,   742,  -643,   725,  -643,  -643,   738,  -643,
-    -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,
-     217,  -643,  2029,  -643,   217,  -643,  -643,  -643,    53,  -643,
-     725,  -643,  -643,  -643,  -643,  -643,   725,  -643,  -643,  -643,
-    2931,  -643,  -643,  -643,  -643,  -643,  -643,   744,  -643,  -643,
-    -643,  -643,   -27,   517,  -643,  -643,  2377,  -643,   547,   193,
-      24,  -643,   193,  -643,   149,  -643,   394,   524,   193,  -643,
-     570,  2931,  -643,  -643,  -643,   550,   530,  1668,   531,  -643,
-    -643,  -643,  2246,    30,  -643,   534,   533,   553,  3098,  -643,
-    -643,   222,   552,  -643,  -643,  -643,   217,   538,   126,   135,
-     222,  -643,  -643,  -643,   446,  -643,  -643,  2175,  -643,   446,
-    -643,   541,    77,   207,  -643,   383,   383,  -643,   441,   441,
-     281,   281,  2542,  2634,  2594,  2664,  1033,  1463,   281,   281,
-     187,   187,    43,    43,    43,  -643,  2509,  -643,  -643,   542,
-    -643,  -643,   170,  -643,   544,   217,   545,  -643,  2377,  -643,
-    -643,   559,  -643,  -643,   394,  -643,   193,  1259,   222,   560,
-     126,  -643,   222,   394,   551,   554,  -643,   149,  -643,   557,
-    -643,  -643,  -643,  -643,  -643,  2931,   556,  -643,  -643,  -643,
-    -643,  -643,   765,  -643,  -643,   -94,  -643,  -643,   588,  -643,
-     -93,  -643,  -643,   558,  -643,   564,   293,  -643,   565,   217,
-     566,  -643,   725,  2377,  -643,  -643,   725,  -643,  -643,  -643,
-     170,  -643,  -643,  -643,   567,  -643,   589,  -643,  -643,   -92,
-     193,  -643,  -643,  -643,   372,  -643,  -643,   394,  1537,  -643,
-     573,   576,   725,  -643,   217,  -643,  -643,  -643,  -643,   170,
-    -643,  -643,  -643,    43,   578,  2615,  -643,  -643,  3098,   572,
-    -643,  -643,   149,  -643,   193,  -643,  -643,  -643,  -643,    36,
-    -643,  -643,    55,  2377,  -643,   725,   598,  -643,  -643,   586,
-     597,   600,   194,  -643,  -643,   194,  -643,  -643,   587,   193,
-    -643,  -643,  -643
+    -642,   122,  1799,  -642,  -100,  -642,    48,   -34,   283,  -642,
+    -642,  -642,   283,  -642,  -117,   -92,   283,  -642,   297,  -642,
+    -642,  -642,  -642,    97,   223,  -642,  -642,  -642,  -642,  -642,
+     283,    97,   251,    34,  -642,   283,    46,    97,   618,  -642,
+    -642,   357,   373,   618,  -642,  -642,  3353,  -642,  -642,  -642,
+    -642,    50,  -642,  -642,  -642,  -642,  -642,    15,  2839,    81,
+      82,  -642,  -642,  -642,   374,    53,  -642,    96,  -642,   103,
+    -642,   136,  -642,    40,   162,   286,   169,   177,  -642,  -642,
+    -642,    24,    24,    24,   263,  2979,   185,  -642,    24,   189,
+     192,  -642,    77,  -642,   -34,   224,  -642,  -642,  -642,  -642,
+     401,  -642,  -642,   -62,   205,  -642,  -642,  -642,   203,   229,
+    -642,  -642,    85,  -642,  2979,  -642,  -642,    13,   212,   -89,
+    -111,  -642,   213,  -642,   214,  -642,  -642,   218,  -642,  -642,
+    -642,   219,   221,  -642,  -642,  -642,  -642,  -642,   227,   228,
+    -642,   230,  -642,  -642,  -642,  -642,   231,  -642,  -642,  -642,
+     232,  -642,  -642,  -642,   234,   235,  -642,  -642,   236,  -642,
+    -642,  -642,  -642,  -642,   237,   239,   240,   241,   242,  -642,
+     243,  -642,  -642,   244,  -642,   246,  -642,  -642,   248,   249,
+    -642,  -642,   252,  -642,  -642,  -642,  -642,  -642,  -642,  -642,
+    -642,  -642,  -642,  -642,   253,  -642,  -642,  -642,   254,   257,
+    -642,  -642,  -642,  -642,  -642,  -642,   258,  -642,  -642,   260,
+    -642,  -642,  -642,   261,  -642,   264,  -642,  -642,   265,   268,
+     269,   270,  -642,  -642,  -642,   272,   274,  -642,  -642,   275,
+     276,   277,   -97,  -642,  -642,  -642,  1945,  1159,  2979,   283,
+     217,   225,   382,   283,   397,   413,   280,   290,   282,   285,
+     293,  -642,   263,   301,   302,  -642,   300,   323,  3027,  -642,
+    -642,  -642,  -642,  -642,   307,  -642,  -642,  -642,  -642,  -642,
+    -642,  -642,  -642,  -642,  -642,  -642,  -642,   263,   263,  -642,
+    -642,   209,    -5,  -642,  -642,  -642,    24,  -642,  -642,  -642,
+     306,  -642,  -642,  -642,   -59,  -642,  -642,   455,   308,   -26,
+     -74,  -642,  -642,   331,   334,   311,  -642,   315,  -642,  2887,
+     541,   104,   283,  1010,  2887,   547,   104,  1010,   550,   551,
+    1010,  2887,  1010,   552,   553,  1010,   556,  1010,  1010,  2385,
+    1010,  1010,    32,   569,   -53,   571,  1010,  2979,  1010,  2887,
+    1010,  2979,   134,  2979,  2979,   104,   216,   572,  2979,  3353,
+     356,  -642,   354,   358,  -642,  -642,  -642,  -642,   360,  -642,
+     369,  -642,   370,  -642,   355,   371,   372,  -642,  -642,  -642,
+     169,   283,  -642,  2887,  -642,  -642,   376,  -642,   376,   -80,
+    -642,  -642,  -642,   379,   394,  -642,  -642,  -642,   374,   -21,
+     391,  -642,   -24,  -642,    -4,    80,   380,  -642,  1010,   703,
+    2385,  -642,  -642,    27,    77,  -642,   381,  -642,   418,  -642,
+     283,   383,   410,   352,  -642,   283,   610,   610,  -642,    73,
+     217,   131,   386,   414,   399,  -642,  -642,   400,   402,  -642,
+    -642,  -642,  -642,  -642,  -642,  -642,  -642,  -642,   392,  -642,
+    1010,  1010,  1010,  1010,  1010,  1010,   894,  2623,   -85,  -642,
+     403,   404,   405,   434,  2623,   408,   409,  -642,   -79,   411,
+     412,   416,   419,   420,   421,   422,   424,  2299,   426,  2887,
+     118,   427,   -78,  -642,  2623,  -642,  -642,  -642,   428,   429,
+     430,   433,   437,   435,   -77,   439,   445,  2384,   440,  -642,
+    -642,  -642,  -642,  -642,  -642,   442,   443,   444,   446,   441,
+    -642,   448,   450,   460,  -642,  3353,  -642,   660,  -642,  -642,
+    -642,  -642,  -642,  -642,  -642,   -61,   263,  1446,   166,   173,
+     169,   418,   516,  -642,  -642,  -642,  3027,  -642,  1375,   480,
+     -13,   468,  -642,  -642,  -642,  -642,   917,  -642,  1156,   465,
+     493,  -642,  -642,  -642,  -642,  -642,  -642,   -45,  -642,  -642,
+     514,   490,  -642,  -642,   182,  1010,  -642,  -642,   498,  -642,
+      60,    64,  -642,  2887,  -642,  2887,   473,  -642,   489,  -642,
+     491,  -642,   547,  -642,  -642,  -642,  3124,    65,    65,    65,
+      65,    65,    65,  -642,  2469,   271,  3195,    24,  1010,  1010,
+     705,  1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,
+    1010,  1010,  1010,  1010,  1010,  1010,  1010,  1010,   715,  1010,
+    1010,  -642,  -642,   714,  -642,  1010,  -642,  -642,   712,  -642,
+    -642,  -642,  -642,  -642,  -642,  -642,  -642,  -642,  -642,  -642,
+     118,  -642,  2037,  -642,   118,  -642,  -642,  -642,    86,  -642,
+    1010,  -642,  -642,  -642,  -642,  -642,  1010,  -642,  -642,  -642,
+    2887,  -642,  -642,  -642,  -642,  -642,  -642,   716,  -642,  -642,
+    -642,  -642,   -23,   492,  -642,  -642,  2385,  -642,   518,   169,
+    -642,   542,  2887,   169,    23,  -642,   169,  -642,    53,  -642,
+     418,   497,  -642,  -642,  -642,   521,   505,  1653,   504,  -642,
+    -642,  -642,  2254,    27,  -642,   509,   506,   514,  3027,  -642,
+    -642,   283,   525,  -642,  -642,  -642,   118,   510,   263,    -3,
+     283,  -642,  -642,  -642,   271,  -642,  -642,  2183,  -642,   271,
+    -642,   508,   124,    24,  -642,   211,   211,  -642,   605,   605,
+     378,   378,  2550,  2642,  2602,   158,  1494,  2649,   378,   378,
+     126,   126,    65,    65,    65,  -642,  2517,  -642,  -642,   511,
+    -642,  -642,   114,  -642,   512,   118,   513,  -642,  2385,  -642,
+    -642,   515,  -642,  -642,   418,  -642,   169,  1230,   283,   522,
+     263,  -642,  -642,   283,   418,   520,   527,  -642,    53,  -642,
+     536,  -642,  -642,  -642,  -642,  2887,   529,  -642,  -642,  -642,
+    -642,  -642,   737,  -642,  -642,   -19,  -642,  -642,   543,  -642,
+     -96,  -642,  -642,   524,  -642,   526,   337,  -642,   528,   118,
+     531,  -642,  1010,  2385,  -642,  -642,  1010,  -642,  -642,  -642,
+     114,  -642,  -642,  -642,   534,  -642,   548,  -642,  -642,    92,
+     169,  -642,  -642,  -642,   374,  -642,  -642,   418,  1582,  -642,
+     533,   544,  1010,  -642,   118,  -642,  -642,  -642,  -642,   114,
+    -642,  -642,  -642,    65,   537,  2623,  -642,  -642,  3027,   539,
+    -642,  -642,    53,  -642,   169,  -642,  -642,  -642,  -642,    33,
+    -642,  -642,    93,  2385,  -642,  1010,   564,  -642,  -642,   545,
+     554,   568,   204,  -642,  -642,   204,  -642,  -642,   549,   169,
+    -642,  -642,  -642
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1596,9 +1596,9 @@
      182,   183,   184,   185,   449,   186,     0,   188,   447,     0,
      190,   191,   192,     0,   194,     0,   196,   197,     0,     0,
        0,     0,   202,   448,   203,     0,     0,   207,   208,     0,
-       0,     0,     0,    91,   212,    51,    88,    88,     0,    88,
-     298,     0,     0,   298,   298,     0,   453,     0,     0,     0,
-     376,     0,     0,   455,   457,    52,   300,   462,     0,    18,
+       0,     0,     0,    91,   212,    51,    88,    88,     0,     0,
+      88,     0,   298,     0,   298,   298,     0,   453,     0,     0,
+       0,   376,     0,   455,   457,    52,   300,   462,     0,    18,
       22,    20,    12,    15,     0,    49,   378,    14,   399,   396,
      398,   397,   215,   216,   217,   218,   389,     0,     0,   302,
      403,   439,   402,   295,   453,   455,   395,   457,   391,    54,
@@ -1610,8 +1610,8 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,   103,
       90,    72,     0,     0,    45,    42,    43,    44,     0,    36,
        0,    40,     0,    38,     0,     0,     0,    34,    33,    41,
-      48,     0,     0,    89,   454,    74,   382,   456,   458,    75,
-     344,   344,     0,   356,    46,   294,   326,   330,     0,   331,
+      48,     0,   382,     0,    89,    46,   454,    74,   456,   458,
+      75,   344,   344,     0,   356,   294,   326,   330,     0,   331,
      333,   335,     0,    11,     0,     0,     0,   401,     0,     0,
       77,   405,   392,     0,     0,   477,     0,    70,     0,     7,
        0,     0,   225,   230,   226,     0,     0,     0,   459,    88,
@@ -1624,8 +1624,8 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,   446,
      441,   442,   443,   444,   445,     0,     0,     0,     0,   467,
      469,     0,     0,     0,    92,   103,     8,     0,    35,    39,
-      37,    31,    30,    29,    76,     0,     0,    88,    88,    48,
-       0,   374,    88,   328,   332,   334,     0,   329,    88,     0,
+      37,    31,    30,    29,    76,     0,     0,    88,    88,    88,
+      48,     0,   374,   328,   332,   334,     0,   329,    88,     0,
       88,     0,   390,   400,   404,   440,     0,    87,     0,     0,
       81,    78,    79,   488,   486,   489,   487,     0,   484,   479,
      472,     0,   228,   231,    88,     0,   359,   360,   364,    59,
@@ -1640,8 +1640,8 @@
      234,   159,   164,   176,   180,   181,     0,   189,   193,   195,
        0,   198,   199,   201,   200,   204,   205,     0,   209,   210,
      211,    93,     0,     0,    28,   367,    77,   432,   464,    48,
-       0,   345,    48,   342,   357,   358,     0,     0,    48,    47,
-       0,    89,   336,    13,   350,     0,     0,     0,     0,    86,
+      47,     0,    89,    48,     0,   345,    48,   342,   357,   358,
+       0,     0,   336,    13,   350,     0,     0,     0,     0,    86,
       85,   406,     0,     0,   480,   476,     0,   472,     0,   227,
      229,     0,     0,    60,    57,    58,     0,   457,     0,   455,
      296,   286,   285,   101,   412,   276,   389,    77,   416,   412,
@@ -1650,8 +1650,8 @@
      261,   260,   263,   264,   262,   272,     0,   278,   100,     0,
       95,    83,   424,   389,     0,   424,     0,   420,    77,   428,
      233,     0,   102,   468,     0,    10,    48,    88,     0,     0,
-       0,   338,     0,     0,     0,     0,   340,   370,   371,   375,
-      46,   383,   352,   351,   354,     0,     0,   293,   355,    82,
+       0,   383,   338,     0,     0,     0,     0,   340,   370,   371,
+     375,    46,   352,   351,   354,     0,     0,   293,   355,    82,
       80,   485,     0,   475,   473,     0,   361,   365,   434,   437,
        0,   284,   291,     0,   297,     0,   412,   389,     0,   424,
        0,   408,     0,    77,   415,   394,     0,   275,   122,   419,
@@ -1668,37 +1668,37 @@
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -643,  -643,  -643,  -643,  -643,  -643,  -643,   420,  -643,   -50,
-    -643,    32,  -254,     0,  -643,   400,  -643,  -643,  -643,  -643,
-    -643,  -643,  -643,    28,  -584,  -643,  -643,  -323,  -231,  -235,
-      -2,  -643,  -643,  -643,   246,  -291,  -643,  -281,  -222,   -83,
-    -643,  -643,  -643,  -643,  -643,   266,    16,   478,   181,   382,
-    -643,  -280,  -271,  -643,  -643,  -643,  -643,   -54,  -331,  -643,
-     145,  -643,    20,    -1,   -62,  -238,   124,   163,  -246,  -221,
-    -226,   308,  -641,    17,    29,    19,    33,    22,    34,    37,
-     456,  -643,    23,  -643,  -643,  -643,  -643,  -643,   129,    67,
-      14,  -643,  -643,    41,  -643,  -643,  -643,  -643,    42,  -643,
-    -643,  -643,  -643,    44,  -643,  -643,  -357,  -553,     1,   264,
-     -74,   -55,  -224,  -643,  -643,  -643,  -613,  -643,  -642,  -643,
-    -563,  -643,  -643,  -643,     3,  -643,   590,  -643,   507,     8,
-    -314,   -12,  -643,    11,  -643,   750,   153,  -643,  -643,   150,
-    -643,   453,  -643,   158
+    -642,  -642,  -642,  -642,  -642,  -642,  -642,   387,  -642,   -50,
+    -642,     1,  -310,    -1,  -642,   359,  -642,  -642,  -642,  -642,
+    -642,  -642,  -642,    30,  -586,  -642,  -642,  -278,  -232,  -236,
+      -2,  -642,  -642,  -642,   207,  -262,  -642,  -293,  -211,   -81,
+    -642,  -642,  -642,  -642,  -642,   247,    16,   447,   148,   353,
+    -642,  -288,  -295,  -642,  -642,  -642,  -642,   -95,  -319,  -642,
+     113,  -642,    12,    -6,   -63,  -250,   111,   202,  -251,  -247,
+    -241,   278,  -641,    21,    36,    28,    38,    29,    39,    41,
+     423,  -642,    20,  -642,  -642,  -642,  -642,  -642,    90,    42,
+      17,  -642,  -642,    43,  -642,  -642,  -642,  -642,    45,  -642,
+    -642,  -642,  -642,    47,  -642,  -642,  -351,  -547,     7,   226,
+     -68,   -55,  -215,  -642,  -642,  -642,  -604,  -642,  -635,  -642,
+    -536,  -642,  -642,  -642,   -38,  -642,   555,  -642,   474,    11,
+    -385,   -18,  -642,    14,  -642,   718,   112,  -642,  -642,   120,
+    -642,   425,  -642,   130
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
        0,     1,    47,   299,    48,   662,   354,     2,   393,   236,
-     664,   522,   266,   355,    50,   560,    51,    52,    53,    54,
-     356,   245,    55,   357,   539,   540,   541,   542,   633,    57,
-     373,   232,   458,   478,   452,   422,   485,   233,   427,   634,
+     664,   517,   266,   355,    50,   560,    51,    52,    53,    54,
+     356,   246,    55,   357,   539,   540,   541,   542,   633,    57,
+     374,   232,   458,   478,   452,   422,   485,   233,   427,   634,
      869,   878,   411,   412,   413,   414,   284,   472,   473,   447,
      448,   449,   455,   419,   564,   569,   421,   887,   888,   786,
       60,   803,   104,    61,   635,    62,   107,    63,    64,    65,
       66,   391,   392,   358,   359,   360,   361,   362,   363,   364,
-     517,   671,   365,    75,   530,   687,    76,   521,   557,   558,
-     366,   415,   702,   367,   768,   889,   779,   677,   368,   383,
-     774,   775,   251,   369,    81,    82,    83,   395,   470,   585,
+     518,   675,   365,    75,   530,   687,    76,   522,   557,   558,
+     366,   415,   702,   367,   768,   889,   780,   681,   368,   384,
+     775,   776,   241,   369,    81,    82,    83,   395,   470,   585,
      268,    85,   281,   282,   720,   810,   721,   722,   636,   756,
      637,   638,   668,   843,   799,   800,   283,   495,   234,   285,
       87,    88,    89,   287,   501,    93,   696,   697,    94,    95,
@@ -1710,503 +1710,491 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      58,   278,    49,    84,   372,   237,   468,    98,   270,   271,
-      86,    99,   388,    90,   288,   102,    77,   105,    59,    67,
-     387,    69,   280,   450,    71,    74,   269,   269,   269,   109,
-      56,    68,   390,   269,   113,    70,    72,   389,   532,    73,
-     105,   105,   461,    78,    79,   464,    80,   466,   754,   459,
-     471,   401,   703,   396,   397,   703,   482,   795,   543,   252,
-     590,   118,   120,   257,   798,   410,   253,   751,   504,   254,
-    -476,   757,   250,   286,   246,   247,  -300,   248,   752,   875,
-     249,   408,   769,   279,    11,   303,   475,   685,   764,   566,
-     570,   489,   772,   204,   453,   610,   876,   208,   264,   349,
-     544,   805,   305,   618,   290,    30,   811,   238,   307,  -300,
-     526,   526,   844,   701,   640,     3,   514,   527,   841,   399,
-     859,   350,   611,   498,   400,   -66,  -300,   535,   223,    96,
-     619,    97,   587,   808,   291,   845,    91,    23,   529,   773,
-     429,   641,   304,   430,   431,   432,   433,   434,   435,   292,
-      26,    27,    28,    29,   404,   110,   640,   293,   308,  -300,
-      31,   115,   388,   806,   490,   491,   492,   493,   494,   278,
-     272,   533,  -301,    96,   824,    97,   405,    96,    46,    97,
-     693,    92,  -223,   648,   563,   565,   565,   551,    46,   819,
-     280,   476,   822,   848,   278,   278,   409,   101,   545,   686,
-     820,   116,   798,   765,   590,    37,   121,   694,   665,    46,
-      39,   273,   402,   562,   272,   280,   280,   872,   272,    13,
-      96,   436,    97,    13,   661,    96,   371,    97,   666,   854,
-     239,   269,   477,   546,    58,    58,   100,    84,    84,   105,
-     375,   376,   105,   105,    86,    86,   851,    90,    90,   106,
-     428,   279,    59,    59,   849,   273,    13,   856,   108,   273,
-     526,   272,   587,   118,   120,   673,   877,   879,   608,   609,
-     274,   111,   723,   437,   388,   700,   279,   279,   704,   399,
-     388,   705,   670,   670,   758,   112,   870,   680,   387,   880,
-      20,   103,   667,    97,   675,   565,   588,   589,   590,   674,
-     390,   275,   273,   399,   117,   389,    97,   438,   813,   515,
-     423,   279,   278,   258,   274,   423,    25,   524,   274,   410,
-      46,   439,   460,   425,   567,   483,   426,   469,   114,   488,
-     747,   496,   497,   280,    46,    46,   503,   272,   669,   672,
-     486,   276,    13,   262,   749,   275,   235,   440,   552,   275,
-     441,   442,   536,   -61,   718,   444,   445,   277,    46,   762,
-     258,   274,  -224,  -292,   537,    34,   761,  -292,   446,   790,
-     279,   255,   119,   516,    97,   256,   259,    97,   273,   260,
-     374,    40,    97,   261,   377,   631,    97,   523,   378,   276,
-      97,   586,   275,   263,   279,   532,   399,     4,   469,    97,
-     590,   632,   605,   606,   607,   277,    16,   759,   531,   279,
-     -62,  -300,   608,   609,   556,   771,   -64,  -300,   776,   568,
-      46,   265,   886,   267,   781,   499,   500,   -63,   289,   -65,
-     388,   297,   631,   278,   298,   300,   301,   274,   302,   306,
-     309,   379,   310,   399,   311,   312,   313,   314,   632,   532,
-     778,   315,   388,   -67,   280,   777,   588,   589,   590,   316,
-     387,   593,   594,   532,   317,   318,   319,   320,   275,   279,
-     630,   321,   390,   322,   323,   324,   325,   389,   326,   327,
-     -68,   328,   329,   718,   802,   330,   331,   332,   718,   333,
-     272,   814,   532,   334,   603,   604,   605,   606,   607,   -69,
-     335,   336,   719,   337,   338,   339,   608,   609,   716,   340,
-     341,   342,   827,   724,   343,   279,   344,   345,   388,   399,
-     681,   586,   679,    84,   717,   346,    58,   834,    49,    84,
-      86,   273,   269,    90,   347,   348,    86,    46,    59,    90,
-     386,   380,    77,   826,    59,    67,   831,    69,   381,   755,
-      71,    74,   382,   384,  -328,   394,    56,    68,   398,   403,
-     406,    70,    72,   407,   706,    73,   708,   416,   417,    78,
-      79,   867,    80,   709,   707,   718,   860,   418,   429,   420,
-     424,   430,   431,   432,   433,   434,   435,   451,   456,   457,
-     274,   388,   462,   463,   465,   881,   603,   604,   605,   606,
-     607,   479,   481,   680,   502,   505,   507,   506,   608,   609,
-     874,   863,   388,   511,   767,   508,   862,   509,   510,   512,
-     387,   275,  -300,   513,   520,   278,   519,   525,   550,   279,
-     469,   719,   390,   279,   809,   892,   719,   389,   534,   553,
-     554,   555,   559,   571,   572,   573,   280,   565,   804,   815,
-     565,   423,   601,   602,   603,   604,   605,   606,   607,   436,
-     574,   716,   575,   576,   469,   612,   608,   609,   269,   613,
-     614,   615,   399,   646,   616,   617,   663,   717,   650,   620,
-     621,   622,   252,   623,   624,   785,   625,   278,    84,   253,
-     469,   626,   254,   627,   629,   639,   642,   246,   676,   454,
-     556,   643,   454,   644,   645,   279,   647,   279,   280,   279,
-     467,   437,   649,   474,   652,   469,   653,   654,   655,   656,
-     474,   657,   487,   719,   658,   659,   660,   684,   429,   688,
-     691,   430,   431,   432,   433,   434,   435,   692,   695,   698,
-     701,   710,   711,   712,   727,   438,   745,   750,   748,   766,
-     763,   279,   770,   780,   279,   239,   469,   782,   783,   439,
-      92,   788,   837,   793,   797,    58,   801,   556,    84,   279,
-     840,   832,   833,   812,   818,    86,   821,   823,    90,   835,
-     454,   538,   836,    59,   839,   440,   252,   846,   441,   442,
-     443,   825,   830,   444,   445,   842,   847,   850,   852,   857,
-     858,   865,   689,   873,   866,   882,   446,   885,   279,   436,
-     871,   469,   838,   528,   883,   891,   484,   561,   713,   279,
-     699,   760,   577,   578,   579,   580,   581,   582,   584,   884,
-     796,   890,   787,   861,   682,   829,   681,   518,   679,    84,
-     714,   480,   385,   279,   296,   792,    86,   868,   279,    90,
-     794,   791,     0,     0,    59,     0,     0,   549,     0,     0,
-       0,   437,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   469,     0,     0,   588,   589,   590,   591,   592,   593,
-     594,   595,   596,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   438,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   439,
-       0,     0,     0,     0,     0,     0,     0,     0,   580,     0,
-       0,     0,     0,     0,     0,     0,   429,     0,   583,   430,
-     431,   432,   433,   434,   435,   440,     0,     0,   441,   442,
-     443,     0,     0,   444,   445,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   446,     0,     0,     0,
-       9,     0,    10,     0,     0,     0,     0,     0,    11,     0,
-     725,   726,    13,   728,   729,   730,   731,   732,   733,   734,
-     735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
-       0,   746,     0,     0,    17,     0,     0,   454,     0,     0,
-     240,    19,     0,     0,     0,     0,    20,   436,     0,     0,
-       0,    21,     0,     0,    22,     0,     0,     0,     0,     0,
-       0,    23,   474,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    25,     0,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,   588,   589,
-     590,   591,   592,   593,   594,     0,     0,     0,     0,   437,
-       0,     0,     0,     0,     0,   597,     0,   598,   599,   600,
-     601,   602,   603,   604,   605,   606,   607,     0,     0,     0,
-       0,    34,     0,     0,   608,   609,     0,     0,    36,    37,
-      38,   628,     0,   438,    39,     0,     0,    40,     0,     0,
-       0,   243,     0,     0,     0,     0,     0,   439,     0,     0,
-     244,     0,    43,     0,     0,     0,     0,     4,     5,     6,
-      44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   440,     0,     0,   441,   442,   443,     0,
-       0,   444,   445,     0,     0,     8,     0,     0,     0,     0,
-       0,     9,     0,    10,   446,     0,     0,     0,     0,    11,
-      12,     0,     0,    13,     0,     0,     0,     0,     0,     0,
-      14,     0,   352,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    16,     0,     0,    17,     0,     0,     0,     0,
-       0,    18,    19,     0,   853,     0,     0,    20,   855,     0,
+      58,    49,    98,   278,   373,   237,    99,   388,   387,    84,
+     102,   389,   105,    86,   270,   271,    90,   390,    59,    77,
+     288,   280,    74,    67,   109,   459,   269,   269,   269,   113,
+      69,    71,    56,   269,   461,   105,   105,   464,    68,   466,
+      70,    72,   471,    73,   532,    78,   754,    79,   482,    80,
+     401,   468,   450,   118,   120,   543,   504,   795,   257,   475,
+     514,   587,   396,   397,   410,   252,   703,   286,   307,   253,
+     703,   798,   254,    13,   247,   251,   875,   238,   279,   248,
+     769,  -476,   590,    96,   752,    97,   249,   250,   303,   408,
+    -300,   773,   764,   876,   751,   264,   305,   544,   757,  -300,
+     204,   566,   570,   535,   208,   453,   290,    20,   349,   844,
+     805,    30,   685,   425,   100,   811,   426,    96,   308,    97,
+     610,    96,     3,    97,   272,    91,   618,   640,   640,    13,
+     350,   808,   845,    25,   498,   223,   291,   101,   774,   -66,
+    -300,   239,   110,   590,   529,   304,   404,   611,   115,  -300,
+     665,   292,    46,   619,   641,   648,  -223,   388,   272,   293,
+     693,   551,   272,    13,   476,   273,   -62,  -300,   405,   806,
+     666,   278,   824,   588,   589,   590,   591,   592,   593,   594,
+     533,   526,    34,   563,   565,   565,   526,   694,   527,   280,
+     258,   587,    92,   841,   524,   545,   278,   278,    40,   273,
+     240,   723,   848,   273,   409,   477,   820,   765,   106,   798,
+     677,   686,   661,    46,   280,   280,   819,   872,   402,   822,
+     371,   399,   499,   500,   274,  -292,   400,   854,   590,  -292,
+     546,   269,   108,   372,    58,    58,   105,   377,   105,   105,
+     116,   -64,  -300,    84,    84,   121,   279,    86,    86,   428,
+      90,    90,    59,    59,   111,   275,   118,   120,   274,  -301,
+     849,   489,   274,   877,   258,   112,    96,   700,    97,   262,
+     388,   279,   279,   851,   678,   388,   387,   114,   235,   389,
+     679,   671,   674,   674,   856,   390,    96,   880,    97,   275,
+     608,   609,   704,   275,   565,   276,   705,   701,   526,    46,
+     103,   667,    97,   562,   859,   879,   279,   272,   515,   -61,
+     255,   277,   399,   870,   278,   272,   423,   758,   410,   483,
+     749,   423,   747,   488,   259,   496,   497,   469,   460,   631,
+     503,   260,   280,   631,   490,   491,   492,   493,   494,   297,
+     399,   605,   606,   607,   399,   632,   486,   552,   273,   632,
+     399,   608,   609,   718,    16,   813,   273,    46,   761,   771,
+     117,   567,    97,   772,   261,   279,   777,   599,   600,   601,
+     602,   603,   604,   605,   606,   607,   119,   256,    97,    97,
+     516,   272,   523,   608,   609,   376,    13,    97,   762,   279,
+     263,   586,    46,   588,   589,   590,   673,   265,   469,    46,
+     378,   532,    97,   676,   279,   267,   759,   274,    46,   556,
+     298,   531,  -224,   -63,   790,   274,   379,   289,    97,   568,
+     -65,     4,   273,    97,   603,   604,   605,   606,   607,   388,
+      46,   301,   886,   778,   300,   278,   608,   609,   275,   779,
+     302,   306,   398,    46,   309,   310,   275,   388,   387,   311,
+     312,   389,   313,   280,   375,   532,   827,   390,   314,   315,
+     406,   316,   317,   318,   279,   319,   320,   321,   322,   532,
+     323,   324,   325,   326,   327,   328,   630,   329,   276,   330,
+     331,   274,   718,   332,   333,   334,   716,   718,   335,   336,
+     814,   337,   338,   802,   277,   339,   340,   399,   532,   341,
+     342,   343,   717,   344,   719,   345,   346,   347,   348,   380,
+     279,   381,   275,   388,   382,   672,   670,   826,   -67,   724,
+     860,   586,   383,   834,    84,   386,    58,    49,    86,   -68,
+     -69,    90,   269,    59,  -328,    84,   394,   403,   416,    86,
+     407,   417,    90,   418,    59,    77,   420,   867,    74,    67,
+     424,   755,   716,   451,   874,   831,    69,    71,    56,   456,
+     457,   462,   463,   399,    68,   465,    70,    72,   717,    73,
+     706,    78,   708,    79,   718,    80,   709,   707,   479,   892,
+     481,   502,   505,   506,   511,   555,   388,   881,   508,   507,
+     862,   603,   604,   605,   606,   607,   863,   509,   510,   512,
+     513,   521,   671,   608,   609,  -300,   525,   388,   387,   520,
+     550,   389,   534,   553,   767,   554,   559,   390,   571,   572,
+     588,   589,   590,   576,   279,   593,   594,   278,   279,   613,
+     469,   573,   574,   719,   575,   612,   809,   614,   719,   615,
+     616,   617,   646,   620,   621,   280,   565,   804,   622,   565,
+     650,   623,   624,   625,   626,   815,   627,   423,   629,   639,
+     642,   643,   644,    11,   469,   645,   657,   647,   269,   663,
+     454,   649,   652,   454,   653,   654,   655,   680,   656,   252,
+     658,   467,   659,   253,   474,   785,   254,   684,   247,   278,
+     469,   474,   660,   487,    84,   556,   688,   691,   692,   695,
+     279,   698,   279,   701,   279,   710,   429,   280,   727,   430,
+     431,   432,   433,   434,   435,   469,    23,   711,   745,   712,
+     748,   750,   763,   770,   766,   719,   781,   240,   782,    26,
+      27,    28,    29,   783,   788,    92,   793,   797,   801,    31,
+     812,   837,   840,   818,   821,   823,   279,   825,   835,   279,
+     842,   454,   538,   846,   830,   836,   469,   839,   847,   858,
+     850,   865,   556,   852,   279,    58,   857,   832,   833,   871,
+     873,   882,   866,   883,    84,   885,   561,   891,    86,   713,
+     528,    90,   838,    59,    37,   484,   884,   436,   760,    39,
+     890,   796,   252,   577,   578,   579,   580,   581,   582,   584,
+     787,   699,   714,   279,   682,   519,   868,   385,   480,   794,
+     829,   469,   296,     0,   279,   792,   601,   602,   603,   604,
+     605,   606,   607,   791,     0,     0,     0,     0,   861,   549,
+     608,   609,     0,     0,     0,     0,   672,   670,   279,   437,
+       0,     0,     0,   279,     0,    84,     0,     0,     0,    86,
+       0,     0,    90,     0,    59,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   469,     0,   438,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   439,     0,   580,
+       0,     0,     0,     0,     0,     0,     0,   429,     0,   583,
+     430,   431,   432,   433,   434,   435,     0,     0,     0,     0,
+       0,     0,     0,   440,     0,     0,   441,   442,   536,     0,
+     429,   444,   445,   430,   431,   432,   433,   434,   435,     0,
+     537,     9,     0,    10,   446,     0,     0,     0,     0,    11,
+       0,   725,   726,    13,   728,   729,   730,   731,   732,   733,
+     734,   735,   736,   737,   738,   739,   740,   741,   742,   743,
+     744,     0,   746,     0,     0,    17,     0,     0,   454,     0,
+       0,   242,    19,     0,     0,     0,     0,    20,   436,     0,
        0,     0,    21,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,    23,     0,     0,     0,     0,     0,     0,    24,
-     353,     0,     0,    25,   454,    26,    27,    28,    29,    30,
-       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-       0,     0,    32,   600,   601,   602,   603,   604,   605,   606,
-     607,     0,     0,     0,     0,     0,     0,     0,   608,   609,
-      33,     0,     4,     5,     6,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,     0,     0,     0,    35,    36,
-      37,    38,     0,     0,     0,    39,     0,     0,    40,     0,
-       8,     0,    41,     0,     0,     0,     9,     0,    10,     0,
-       0,    42,     0,    43,    11,    12,     0,     0,    13,     0,
-       0,    44,    45,     0,     0,    14,     0,   352,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
+       0,     0,    23,   474,     0,     0,     0,     0,     0,     0,
+       0,   436,     0,    25,     0,    26,    27,    28,    29,     0,
+       0,     0,     0,   429,     0,    31,   430,   431,   432,   433,
+     434,   435,     0,     0,     0,     0,     0,     0,     0,     0,
+     437,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,   437,     0,     0,     0,     0,     0,    36,
+      37,    38,     0,     0,   438,    39,     0,     0,    40,     0,
+       0,     0,   244,     0,     0,     0,     0,     0,   439,     0,
+       0,   245,     0,    43,     0,     0,     0,   438,     0,     0,
+       0,    44,    45,     0,   436,     0,     0,     0,     0,     0,
+       0,   439,     0,     0,   440,     0,     0,   441,   442,   443,
+       0,     0,   444,   445,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   446,     0,   440,     0,     0,
+     441,   442,   443,     0,     0,   444,   445,     0,     0,     0,
+       0,     0,     0,     0,   689,     0,   437,     0,   446,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     4,     5,     6,   853,     0,     0,     0,   855,
+       0,   588,   589,   590,   591,   592,   593,   594,   595,   596,
+     438,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       8,     0,     0,     0,   439,   454,     9,     0,    10,     0,
+       0,     0,     0,     0,    11,    12,     0,     0,    13,     0,
+       0,     0,     0,     0,     0,    14,     0,   352,     0,     0,
+     440,     0,     0,   441,   442,   443,     0,    16,   444,   445,
       17,     0,     0,     4,     5,     6,    18,    19,     0,     0,
-      46,     0,    20,     0,   370,     0,     0,    21,     0,     0,
+       0,   446,    20,     0,     0,     0,     0,    21,     0,     0,
       22,     0,     0,     0,     0,     0,     0,    23,     0,     0,
        0,     8,     0,     0,    24,   353,     0,     9,    25,    10,
       26,    27,    28,    29,    30,    11,    12,     0,     0,    13,
-      31,     0,     0,     0,     0,     0,    14,    32,    15,     0,
+      31,     0,     0,     0,     0,     0,    14,    32,   352,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    16,     0,
        0,    17,     0,     0,     0,    33,     0,    18,    19,     0,
        0,     0,     0,    20,     0,     0,     0,    34,    21,     0,
        0,    22,     0,    35,    36,    37,    38,     0,    23,     0,
-      39,     0,     0,    40,     0,    24,     0,    41,     0,    25,
+      39,     0,     0,    40,     0,    24,   353,    41,     0,    25,
        0,    26,    27,    28,    29,    30,    42,     0,    43,     0,
        0,    31,     0,     0,     0,     0,    44,    45,    32,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     4,
-       5,     6,     0,     0,     0,     0,    33,     0,   588,   589,
-     590,   591,   592,   593,   594,    46,     0,     0,    34,   828,
+       0,     0,   597,     0,   598,   599,   600,   601,   602,   603,
+     604,   605,   606,   607,     0,     0,    33,     0,     4,     5,
+       6,   608,   609,   690,     0,    46,     0,     0,    34,   370,
        0,     0,     0,     0,    35,    36,    37,    38,     0,     0,
-       0,    39,     0,     9,    40,    10,     0,     0,    41,     0,
-       0,    11,     0,     0,     0,    13,     0,    42,     0,    43,
-       0,     0,    14,     0,     0,     0,     0,    44,    45,     0,
-       0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
-       4,     5,     6,    18,    19,     0,     0,     0,     0,    20,
-       0,     0,     0,     0,    21,     0,    46,    22,     0,     0,
-     683,     0,     0,     0,    23,     0,     0,     0,     0,     0,
-       0,    24,     0,     0,     9,    25,    10,    26,    27,    28,
-      29,     0,    11,     0,     0,     0,    13,    31,     0,     0,
-       0,     0,     0,    14,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
-       0,     0,    33,     0,    18,    19,     0,     0,     0,     0,
-      20,     0,     0,     0,    34,    21,     0,     0,    22,     0,
-       0,    36,    37,    38,     0,    23,     0,    39,     0,     0,
-      40,     0,    24,     0,    41,     0,    25,     0,    26,    27,
-      28,    29,     0,    42,     0,    43,     0,     0,    31,     0,
+       0,    39,     0,     0,    40,     0,     8,     0,    41,     0,
+       0,     0,     9,     0,    10,     0,     0,    42,     0,    43,
+      11,    12,     0,     0,    13,     0,     0,    44,    45,     0,
+       0,    14,     0,    15,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    16,     0,     0,    17,     0,     0,     4,
+       5,     6,    18,    19,     0,     0,    46,     0,    20,     0,
+     828,     0,     0,    21,     0,     0,    22,     0,     0,     0,
+       0,     0,     0,    23,     0,     0,     0,     0,     0,     0,
+      24,     0,     0,     9,    25,    10,    26,    27,    28,    29,
+      30,    11,     0,     0,     0,    13,    31,     0,     0,     0,
+       0,     0,    14,    32,     0,     0,     0,     0,     0,   588,
+     589,   590,   591,   592,   593,   594,     0,    17,     0,     0,
+       0,    33,     0,    18,    19,     0,     0,     0,     0,    20,
+       0,     0,     0,    34,    21,     0,     0,    22,     0,    35,
+      36,    37,    38,     0,    23,     0,    39,     0,     0,    40,
+       0,    24,     0,    41,     0,    25,     0,    26,    27,    28,
+      29,     0,    42,     0,    43,     0,     0,    31,     0,     0,
+       0,     0,    44,    45,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     4,     5,     6,     0,     0,
+       0,     0,    33,     0,     0,     0,     0,     0,     0,     0,
+       0,    46,     0,     0,    34,   683,     0,     0,     0,     0,
+       0,    36,    37,    38,     0,     0,     0,    39,     0,     9,
+      40,    10,     0,     0,    41,     0,     0,    11,     0,     0,
+       0,    13,     0,    42,     0,    43,     0,     0,    14,     0,
        0,     0,     0,    44,    45,     0,     0,     0,     0,     0,
-       0,     4,     0,     6,   601,   602,   603,   604,   605,   606,
-     607,     0,     0,    33,     0,     0,     0,     0,   608,   609,
-       0,     0,    46,     0,     0,    34,   678,     0,     0,     0,
-       0,     0,    36,    37,    38,     9,     0,    10,    39,     0,
-       0,    40,     0,    11,     0,    41,     0,    13,     0,     0,
-       0,     0,     0,     0,    42,     0,    43,     0,     0,     0,
-       0,     0,     0,     0,    44,    45,     0,     0,     0,    17,
-       0,     0,     0,     0,     0,   240,    19,     0,     0,     0,
-       0,    20,     0,     0,     0,     0,    21,     0,     0,    22,
-       0,     0,     0,    46,     0,     0,    23,   864,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    25,     0,    26,
-      27,    28,    29,     0,     0,     0,     0,     0,     0,    31,
-       0,    -3,     0,     0,     4,     5,     6,     0,     0,     0,
-       0,     0,     0,     0,     0,     7,     0,     0,     0,     0,
+       0,     0,     0,    17,     0,     0,     4,     0,     6,    18,
+      19,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+      21,     0,    46,    22,     0,     0,   669,     0,     0,     0,
+      23,     0,     0,     0,     0,     0,     0,    24,     0,     0,
+       9,    25,    10,    26,    27,    28,    29,     0,    11,     0,
+       0,     0,    13,    31,   600,   601,   602,   603,   604,   605,
+     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
+     609,     0,     0,     0,    17,     0,     0,     0,    33,     0,
+     242,    19,     0,     0,     0,     0,    20,     0,     0,     0,
+      34,    21,     0,     0,    22,     0,     0,    36,    37,    38,
+       0,    23,     0,    39,     0,     0,    40,     0,     0,     0,
+      41,     0,    25,     0,    26,    27,    28,    29,     0,    42,
+       0,    43,     0,     0,    31,     0,     0,     0,     0,    44,
+      45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    -3,
+       0,     0,     4,     5,     6,     0,     0,     0,    46,     0,
+       0,    34,   864,     7,     0,     0,     0,     0,    36,    37,
+      38,     0,     0,     0,    39,     0,     0,    40,     0,     0,
+       8,   244,     0,     0,     0,     0,     9,     0,    10,     0,
+     245,     0,    43,     0,    11,    12,     0,     0,    13,     0,
+      44,    45,     0,     0,     0,    14,     0,    15,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
+      17,     0,     0,     0,     0,     0,    18,    19,     0,    46,
+       0,     0,    20,   784,     0,     0,     0,    21,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,    23,     0,     0,
+       0,     0,     0,     0,    24,     0,     0,     0,    25,     0,
+      26,    27,    28,    29,    30,     0,     0,     0,     0,     0,
+      31,     0,     0,     0,     0,     0,     0,    32,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     8,     0,     0,     0,    34,     0,     9,     0,
-      10,     0,     0,    36,    37,    38,    11,    12,     0,    39,
-      13,     0,    40,     0,     0,     0,   243,    14,     0,    15,
-       0,     0,     0,     0,     0,   244,     0,    43,     0,    16,
-       0,     0,    17,     0,     0,    44,    45,     0,    18,    19,
-       0,     0,     0,     0,    20,     0,     0,     0,     0,    21,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,    23,
-       0,     0,     0,     0,    46,     0,    24,     0,   784,     0,
-      25,     0,    26,    27,    28,    29,    30,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
+       0,     0,     0,     0,     0,    33,     0,     0,     4,     5,
+       6,     0,     0,     0,     0,     0,     0,    34,   351,     0,
+       0,     0,     0,    35,    36,    37,    38,     0,     0,     0,
+      39,     0,     0,    40,     0,     0,     8,    41,     0,     0,
+       0,     0,     9,     0,    10,     0,    42,     0,    43,     0,
+      11,    12,     0,     0,    13,     0,    44,    45,     0,     0,
+       0,    14,     0,   352,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    16,     0,     0,    17,     0,     0,     0,
+       0,     0,    18,    19,     0,    46,     0,     0,    20,     0,
+       0,     0,     0,    21,     0,     0,    22,     0,     0,     0,
+       4,     0,     6,    23,     0,     0,     0,     0,     0,     0,
+      24,   353,     0,     0,    25,     0,    26,    27,    28,    29,
+      30,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,    32,     9,     0,    10,     0,     0,     0,
+       0,   272,    11,     0,     0,     0,    13,     0,     0,     0,
+       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    34,     0,     0,     0,     0,    17,    35,
+      36,    37,    38,     0,   242,    19,    39,     0,     0,    40,
+      20,     0,   273,    41,     0,    21,     0,     0,    22,     0,
+       0,     0,    42,     0,    43,    23,     0,     0,     0,     0,
+       0,     0,    44,    45,     0,     0,    25,     0,    26,    27,
+      28,    29,     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,    33,     0,     0,
-       4,     5,     6,     0,     0,     0,     0,     0,     0,    34,
-     351,     0,     0,     0,     0,    35,    36,    37,    38,     0,
-       0,     0,    39,     0,     0,    40,     0,     0,     8,    41,
-       0,     0,     0,     0,     9,     0,    10,     0,    42,     0,
-      43,     0,    11,    12,     0,     0,    13,     0,    44,    45,
-       0,     0,     0,    14,     0,   352,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    16,     0,     0,    17,     0,
-       0,     0,     0,     0,    18,    19,     0,    46,     0,     0,
+       0,    46,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   274,     0,     0,     0,     0,     4,     0,     6,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    36,    37,    38,     0,     0,     0,    39,     0,
+       0,    40,   275,     0,     0,   244,     0,     0,     0,     0,
+       9,     0,    10,     0,   245,     0,    43,   272,    11,     0,
+       0,     0,    13,     0,    44,    45,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   753,     0,    17,     0,     0,     4,     0,     6,
+     242,    19,     0,    46,     0,     0,    20,     0,   273,     0,
+       0,    21,     0,     0,    22,     0,     0,     0,   789,     0,
+       0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     9,    25,    10,    26,    27,    28,    29,     0,    11,
+       0,     0,     0,    13,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   588,   589,   590,   591,   592,   593,
+     594,   595,   596,     0,     0,    17,     0,   274,     0,     0,
+       0,   242,    19,     0,     0,     0,     0,    20,     0,     0,
+       0,    34,    21,     0,     0,    22,     0,     0,    36,    37,
+      38,     0,    23,     0,    39,     0,     0,    40,   275,     0,
+       0,   244,     0,    25,     0,    26,    27,    28,    29,     0,
+     245,     0,    43,     0,     0,    31,     0,     0,     0,     0,
+      44,    45,     0,     0,     0,     0,     0,     0,     4,     0,
+       6,     0,     0,     0,     0,     0,     0,     0,   807,   588,
+     589,   590,   591,   592,   593,   594,   595,   596,     0,    46,
+       0,     0,    34,     0,     0,     0,     0,     0,     0,    36,
+      37,    38,     9,     0,    10,    39,     0,     0,    40,     0,
+      11,     0,   244,     0,    13,     0,     0,     0,     0,     0,
+       0,   245,     0,    43,     0,     0,     0,     0,     0,     0,
+       0,    44,    45,     0,     0,     0,    17,     0,     0,     0,
+       0,     0,   242,    19,     0,     0,     0,     0,    20,     0,
+       0,     0,     0,    21,     0,     0,    22,     0,     0,     0,
+      46,     0,     0,    23,   588,   589,   590,   591,   592,   593,
+     594,   595,   596,     0,    25,     0,    26,    27,    28,    29,
+       0,     0,     0,     0,     0,   597,    31,   598,   599,   600,
+     601,   602,   603,   604,   605,   606,   607,     0,     0,     0,
+       0,     0,     0,     0,   608,   609,     0,     0,     0,     0,
+       0,   628,   588,   589,   590,   591,   592,   593,   594,   595,
+     596,     0,     0,    34,     0,     0,     0,     0,     0,     0,
+      36,    37,    38,     0,     0,     0,    39,     0,     0,    40,
+       0,     0,     0,   244,     0,   588,   589,   590,   591,   592,
+     593,   594,   245,   596,    43,     0,     0,     0,     0,     0,
+       0,     0,    44,    45,     0,     0,     0,     0,     0,     0,
+     597,     0,   598,   599,   600,   601,   602,   603,   604,   605,
+     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
+     609,    46,     0,     0,     0,     0,   651,   588,   589,   590,
+     591,   592,   593,   594,   595,   596,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   588,   589,
+     590,   591,   592,   593,   594,   595,   596,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   588,   589,   590,
+     591,   592,   593,   594,   588,   589,   590,   591,   592,   593,
+     594,     0,     0,     0,     0,   597,     0,   598,   599,   600,
+     601,   602,   603,   604,   605,   606,   607,     0,     0,     0,
+       0,     0,     0,     0,   608,   609,     0,     0,     0,     0,
+       0,   715,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   597,     0,   598,   599,   600,   601,   602,
+     603,   604,   605,   606,   607,     0,     0,     0,     0,     0,
+       0,     0,   608,   609,   817,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   598,   599,
+     600,   601,   602,   603,   604,   605,   606,   607,     0,     0,
+       0,     0,     0,     0,     0,   608,   609,     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,   597,   816,
+     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
+       0,     0,     0,     0,     0,     0,     0,   608,   609,   597,
+       0,   598,   599,   600,   601,   602,   603,   604,   605,   606,
+     607,     0,     4,     0,     6,     0,     0,     0,   608,   609,
+     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
+     601,   602,   603,   604,   605,   606,   607,   608,   609,     0,
+       8,     0,     0,     0,   608,   609,     9,     0,    10,     0,
+       0,     0,     0,     0,    11,    12,     0,     0,    13,     0,
+       4,     0,     6,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  -349,     0,     0,
+      17,     0,     0,     0,     0,     0,   242,    19,     0,     0,
+       0,     0,    20,     0,     9,     0,    10,    21,     0,     0,
+      22,     0,    11,     0,     0,     0,    13,    23,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    25,     0,
+      26,    27,    28,    29,    30,     0,     0,   243,    17,     0,
+      31,     0,     0,     0,   242,    19,     0,     0,     0,     0,
       20,     0,     0,     0,     0,    21,     0,     0,    22,     0,
        0,     0,     4,     0,     6,    23,     0,     0,     0,     0,
-       0,     0,    24,   353,     0,     0,    25,     0,    26,    27,
-      28,    29,    30,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,    32,     9,     0,    10,     0,
-       0,     0,     0,   272,    11,     0,     0,     0,    13,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    25,    34,    26,    27,
+      28,    29,     0,    35,    36,    37,    38,     0,    31,     0,
+      39,     0,     0,    40,     0,     0,     9,   244,    10,     0,
+       0,     0,     0,     0,    11,     0,   245,     0,    43,     0,
+       4,     0,    97,     0,     0,     0,    44,    45,     0,     0,
        0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
-      17,    35,    36,    37,    38,     0,   240,    19,    39,     0,
-       0,    40,    20,     0,   273,    41,     0,    21,     0,     0,
-      22,     0,     0,     0,    42,     0,    43,    23,     0,     0,
-       0,     0,     0,     0,    44,    45,     0,     0,    25,     0,
-      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    46,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   274,     0,     0,     0,     0,     4,     0,
-       6,     0,     0,     0,     0,     0,     0,    34,     0,     0,
-       0,     0,     0,     0,    36,    37,    38,     0,     0,     0,
-      39,     0,     0,    40,   275,     0,     0,   243,     0,     0,
-       0,     0,     9,     0,    10,     0,   244,     0,    43,   272,
-      11,     0,     0,     0,    13,     0,    44,    45,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   753,     0,    17,     0,     0,     4,
-       0,     6,   240,    19,     0,    46,     0,     0,    20,     0,
-     273,     0,     0,    21,     0,     0,    22,     0,     0,     0,
-     789,     0,     0,    23,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     9,    25,    10,    26,    27,    28,    29,
-       0,    11,     0,     0,     0,    13,    31,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   588,   589,   590,   591,
-     592,   593,   594,   595,   596,     0,     0,    17,     0,   274,
-       0,     0,     0,   240,    19,     0,     0,     0,     0,    20,
-       0,     0,     0,    34,    21,     0,     0,    22,     0,     0,
-      36,    37,    38,     0,    23,     0,    39,     0,     0,    40,
-     275,     0,     0,   243,     0,    25,     0,    26,    27,    28,
-      29,     0,   244,     0,    43,     0,     0,    31,     0,     0,
-       0,     0,    44,    45,     0,     0,     0,     0,     0,     0,
-       4,     0,     6,     0,     0,     0,     0,     0,     0,     0,
-     807,   588,   589,   590,   591,   592,   593,   594,   595,   596,
-       0,    46,     0,     0,    34,     0,     0,     0,     0,     0,
-       0,    36,    37,    38,     9,     0,    10,    39,     0,     0,
-      40,     0,    11,     0,   243,     0,    13,     0,     0,     0,
-       0,     0,     0,   244,     0,    43,     0,     0,     0,     0,
-       0,     0,     0,    44,    45,     0,     0,     0,    17,     0,
-       0,     0,     0,     0,   240,    19,     0,     0,     0,     0,
-      20,     0,     0,     0,     0,    21,     0,     0,    22,     0,
-       0,     0,    46,     0,     0,    23,   588,   589,   590,   591,
-     592,   593,   594,   595,   596,     0,    25,     0,    26,    27,
-      28,    29,     0,     0,     0,     0,     0,   597,    31,   598,
-     599,   600,   601,   602,   603,   604,   605,   606,   607,     0,
-       0,     0,     0,     0,     0,     0,   608,   609,     0,     0,
-       0,     0,     0,   651,   588,   589,   590,   591,   592,   593,
-     594,   595,   596,     0,     0,    34,     0,     0,     0,     0,
-       0,     0,    36,    37,    38,     0,     0,     0,    39,     0,
-       0,    40,     0,     0,     0,   243,     0,   588,   589,   590,
-     591,   592,   593,   594,   244,   596,    43,     0,     0,     0,
+      17,     0,    36,    37,    38,     0,   242,    19,    39,     0,
+       0,    40,     0,     0,     9,   244,    10,    21,     0,     0,
+      22,     0,    11,     0,   245,     0,    43,    23,     0,     0,
        0,     0,     0,     0,    44,    45,     0,     0,     0,     0,
-       0,     0,   597,     0,   598,   599,   600,   601,   602,   603,
-     604,   605,   606,   607,     0,     0,     0,     0,     0,     0,
-       0,   608,   609,    46,     0,     0,     0,     0,   715,   588,
-     589,   590,   591,   592,   593,   594,   595,   596,     0,     0,
+      26,    27,    28,    29,     0,     0,     0,     0,    17,     0,
+      31,     0,     0,     0,     0,    19,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    21,     0,     0,    22,     0,
+       0,     0,     0,     0,     0,    23,     0,     0,     0,   583,
+       0,     0,     0,     0,     0,     0,     0,     0,    26,    27,
+      28,    29,     0,     0,    36,    37,    38,     0,    31,     0,
+      39,     0,     0,     0,     0,     0,     0,   244,     0,     0,
+       0,     9,     0,    10,     0,     0,   245,     0,    43,    11,
+       0,     0,     0,    13,     0,     0,    44,    45,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     588,   589,   590,   591,   592,   593,   594,   595,   596,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   588,
-     589,   590,   591,   592,   593,   594,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   597,     0,   598,
-     599,   600,   601,   602,   603,   604,   605,   606,   607,   588,
-     589,   590,   591,   592,   593,   594,   608,   609,   690,     0,
+       0,     0,     0,    37,    38,    17,     0,     0,    39,     0,
+     583,   242,    19,     0,     0,     0,     0,    20,     0,     0,
+       0,     0,    21,     0,     0,    22,    43,     0,     0,     0,
+       0,     0,    23,     0,     0,    45,     0,     0,     0,     0,
+       0,     0,     9,    25,    10,    26,    27,    28,    29,     0,
+      11,     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,     0,     0,   597,     0,   598,   599,   600,
-     601,   602,   603,   604,   605,   606,   607,     0,     0,     0,
-       0,     0,     0,     0,   608,   609,   817,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
-       0,     0,     0,     0,     0,     0,     0,   608,   609,     0,
+       0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
+       0,     0,   242,    19,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,    21,     0,     0,    22,     0,     0,    36,
+      37,    38,     0,    23,     0,    39,     0,     0,    40,     0,
+       0,     0,   244,     0,     0,     0,    26,    27,    28,    29,
+       0,   245,     0,    43,     0,     0,    31,     0,     0,     0,
+       0,    44,    45,     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,
-     597,   816,   598,   599,   600,   601,   602,   603,   604,   605,
-     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
-     609,   597,     0,   598,   599,   600,   601,   602,   603,   604,
-     605,   606,   607,     0,     0,     0,     0,     0,     0,     0,
-     608,   609,   598,   599,   600,   601,   602,   603,   604,   605,
-     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
-     609,     0,     0,     4,     0,     6,     0,     0,     0,     0,
-       0,     0,     0,   599,   600,   601,   602,   603,   604,   605,
-     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
-     609,     8,     0,     0,     0,     0,     0,     9,     0,    10,
-       0,     0,     0,     0,     0,    11,    12,     0,     0,    13,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -349,     0,
-       0,    17,     0,     0,     4,     0,     6,   240,    19,     0,
-       0,     0,     0,    20,     0,     0,     0,     0,    21,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,    23,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     9,    25,
-      10,    26,    27,    28,    29,    30,    11,     0,   241,     0,
-      13,    31,     0,     0,     0,     0,   242,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    17,     0,     0,     0,     0,     0,   240,    19,
-       0,     0,     0,     0,    20,     0,     0,     0,    34,    21,
-       0,     0,    22,     0,    35,    36,    37,    38,     0,    23,
-       0,    39,     0,     0,    40,     0,     0,     0,   243,     4,
-      25,     6,    26,    27,    28,    29,     0,   244,     0,    43,
-       0,     0,    31,     0,     0,     0,     0,    44,    45,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     9,     0,    10,     0,     0,     0,     0,
-       0,    11,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,     0,     0,     0,     0,     0,    36,    37,    38,     0,
-       0,     4,    39,    97,     0,    40,     0,    17,     0,   243,
-       0,     0,     0,   240,    19,     0,     0,     0,   244,     0,
-      43,     0,   583,     0,    21,     0,     0,    22,    44,    45,
-       0,     0,     0,     0,    23,     9,     0,    10,     0,     0,
-       0,     0,     0,    11,     0,     0,     0,    26,    27,    28,
-      29,     0,     0,     0,     9,     0,    10,    31,     0,     0,
-       0,     0,    11,     0,     0,     0,    13,     0,     0,    17,
-       0,     0,     0,     0,     0,     0,    19,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    21,     0,    17,    22,
-       0,     0,     0,     0,   240,    19,    23,     0,     0,     0,
-      20,    36,    37,    38,     0,    21,     0,    39,    22,    26,
-      27,    28,    29,     0,   243,    23,     0,     0,     0,    31,
-       0,     0,     0,   244,     0,    43,    25,   583,    26,    27,
-      28,    29,     0,    44,    45,     0,     0,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     9,
-       0,    10,     0,     0,    37,    38,     0,    11,     0,    39,
-       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
-       0,     0,    36,    37,    38,     0,     0,    43,    39,     0,
-       0,    40,     0,    17,     0,   243,    45,     0,     0,   240,
-      19,     0,     0,     0,   244,     0,    43,     0,     0,     0,
-      21,     0,     0,    22,    44,    45,     0,     0,     0,     0,
-      23,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    26,    27,    28,    29,     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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,    37,    38,
-       0,     0,     0,    39,     0,     0,     0,     0,     0,     0,
-     243,     0,     0,     0,     0,   122,   123,     0,     0,   244,
-     124,    43,   125,   126,   127,   128,   129,     0,   130,    44,
-      45,   131,     0,   132,     0,     0,     0,   133,   134,     0,
-     135,   136,   137,   138,   139,   140,     0,   141,     0,   142,
-     143,   144,     0,   145,   146,   147,   148,   149,     0,   150,
-       0,     0,   151,   152,   153,   154,   155,     0,     0,   156,
-     157,   158,   159,     0,     0,     0,   160,   161,     0,   162,
-     163,     0,   164,   165,   166,   167,   168,   169,     0,   170,
-     171,   172,   173,   174,   175,     0,     0,   176,     0,     0,
-     177,     0,     0,     0,     0,     0,   178,   179,     0,   180,
-     181,     0,   182,   183,   184,     0,     0,     0,     0,   185,
-     186,   187,     0,   188,   189,   190,     0,   191,   192,   193,
-     194,   195,   196,   197,     0,   198,     0,   199,     0,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,     0,   209,
-     210,     0,   211,   212,     0,     0,     0,     0,     0,   213,
-       0,     0,   214,     0,   215,     0,   216,   217,     0,     0,
-     218,   219,   220,   221,     0,     0,   222,     0,   223,     0,
-     224,   225,   226,   227,   228,   229,   230,     0,     0,   231
+      36,    37,    38,     0,     0,     0,    39,     0,     0,     0,
+       0,     0,     0,   244,     0,     0,     0,     0,   122,   123,
+       0,     0,   245,   124,    43,   125,   126,   127,   128,   129,
+       0,   130,    44,    45,   131,     0,   132,     0,     0,     0,
+     133,   134,     0,   135,   136,   137,   138,   139,   140,     0,
+     141,     0,   142,   143,   144,     0,   145,   146,   147,   148,
+     149,     0,   150,     0,     0,   151,   152,   153,   154,   155,
+       0,     0,   156,   157,   158,   159,     0,     0,     0,   160,
+     161,     0,   162,   163,     0,   164,   165,   166,   167,   168,
+     169,     0,   170,   171,   172,   173,   174,   175,     0,     0,
+     176,     0,     0,   177,     0,     0,     0,     0,     0,   178,
+     179,     0,   180,   181,     0,   182,   183,   184,     0,     0,
+       0,     0,   185,   186,   187,     0,   188,   189,   190,     0,
+     191,   192,   193,   194,   195,   196,   197,     0,   198,     0,
+     199,     0,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,     0,   209,   210,     0,   211,   212,     0,     0,     0,
+       0,     0,   213,     0,     0,   214,     0,   215,     0,   216,
+     217,     0,     0,   218,   219,   220,   221,     0,     0,   222,
+       0,   223,     0,   224,   225,   226,   227,   228,   229,   230,
+       0,     0,   231
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,    84,     2,     2,   239,    55,   329,     8,    82,    83,
-       2,    12,   258,     2,    88,    16,     2,    18,     2,     2,
-     258,     2,    84,   314,     2,     2,    81,    82,    83,    30,
-       2,     2,   258,    88,    35,     2,     2,   258,   395,     2,
-      41,    42,   322,     2,     2,   325,     2,   327,   632,   320,
-     330,   282,     6,   277,   278,     6,   336,   698,    28,    58,
-      17,    41,    42,    64,   706,   300,    58,   630,   349,    58,
-     115,   634,    58,    85,    58,    58,   179,    58,   631,    43,
-      58,   115,   666,    84,    45,     3,    27,   125,   115,   420,
-     421,   127,    68,   153,   316,   205,    60,   157,    75,   205,
-      70,   714,   114,   205,    29,   115,   719,    62,   179,   179,
-     205,   205,   205,   205,   205,     0,   370,   212,   212,   226,
-     212,   227,   232,   345,   231,   228,   229,   398,   188,     3,
-     232,     5,   446,   717,    59,   228,   225,    98,   148,   115,
-       3,   232,    60,     6,     7,     8,     9,    10,    11,    74,
-     111,   112,   113,   114,   205,    31,   205,    82,   229,   229,
-     121,    37,   408,   716,   200,   201,   202,   203,   204,   252,
-      44,   395,   211,     3,   758,     5,   227,     3,   226,     5,
-     205,   226,   230,   232,   419,   420,   421,   408,   226,   752,
-     252,   132,   755,   806,   277,   278,   230,   229,   168,   530,
-     753,    38,   844,   230,    17,   166,    43,   232,   211,   226,
-     171,    85,   286,   230,    44,   277,   278,   858,    44,    49,
-       3,    84,     5,    49,   505,     3,   238,     5,   231,   813,
-     185,   286,   173,   203,   236,   237,   231,   236,   237,   240,
-     241,   242,   243,   244,   236,   237,   809,   236,   237,   111,
-     312,   252,   236,   237,   807,    85,    49,   820,     9,    85,
-     205,    44,   576,   243,   244,   519,   230,   212,   225,   226,
-     144,     3,   586,   136,   520,   555,   277,   278,   232,   226,
-     526,   232,   517,   518,   231,   231,   849,   522,   526,   873,
-      83,     3,   516,     5,   520,   530,    15,    16,    17,   520,
-     526,   175,    85,   226,     3,   526,     5,   170,   231,   371,
-     309,   312,   395,   211,   144,   314,   109,   215,   144,   554,
-     226,   184,   321,     9,   230,   337,    12,   329,   231,   341,
-     610,   343,   344,   395,   226,   226,   348,    44,   230,   230,
-     339,   215,    49,   229,   615,   175,   228,   210,   410,   175,
-     213,   214,   215,   228,   585,   218,   219,   231,   226,   650,
-     211,   144,   230,   228,   227,   158,   646,   232,   231,   692,
-     371,   228,     3,   372,     5,     3,   228,     5,    85,   228,
-       3,   174,     5,   228,     3,   215,     5,   388,     3,   215,
-       5,   446,   175,   228,   395,   752,   226,     3,   400,     5,
-      17,   231,   215,   216,   217,   231,    68,   638,   394,   410,
-     228,   229,   225,   226,   415,   669,   228,   229,   672,   421,
-     226,   228,   228,   228,   678,     6,     7,   228,   228,   228,
-     676,   115,   215,   516,     9,   229,   228,   144,   211,   229,
-     231,   229,   231,   226,   231,   231,   231,   231,   231,   806,
-     676,   231,   698,   228,   516,   676,    15,    16,    17,   231,
-     698,    20,    21,   820,   231,   231,   231,   231,   175,   470,
-     469,   231,   698,   231,   231,   231,   231,   698,   231,   231,
-     228,   231,   231,   714,   708,   231,   231,   231,   719,   231,
-      44,   722,   849,   231,   213,   214,   215,   216,   217,   228,
-     231,   231,   585,   231,   231,   231,   225,   226,   215,   231,
-     231,   231,   766,   587,   231,   516,   231,   231,   764,   226,
-     522,   576,   522,   522,   231,   231,   528,   773,   528,   528,
-     522,    85,   587,   522,   231,   231,   528,   226,   522,   528,
-     225,   229,   528,   764,   528,   528,   770,   528,   229,   632,
-     528,   528,   229,   229,   211,   229,   528,   528,   233,   231,
-       5,   528,   528,   232,   563,   528,   565,   207,   207,   528,
-     528,   842,   528,   565,   563,   806,   830,   232,     3,   231,
-       9,     6,     7,     8,     9,    10,    11,     6,     9,     9,
-     144,   837,     9,     9,     9,   875,   213,   214,   215,   216,
-     217,     9,     9,   838,     9,   226,   231,   229,   225,   226,
-     864,   837,   858,   229,   664,   228,   837,   228,   228,   228,
-     858,   175,   229,   228,   207,   708,   230,   215,   229,   630,
-     632,   714,   858,   634,   717,   889,   719,   858,   232,   230,
-     205,   233,     6,   232,   205,   232,   708,   882,   710,   723,
-     885,   650,   211,   212,   213,   214,   215,   216,   217,    84,
-     232,   215,   232,   231,   666,   232,   225,   226,   723,   225,
-     232,   205,   226,   205,   232,   232,     9,   231,   205,   232,
-     232,   232,   681,   232,   232,   687,   232,   770,   687,   681,
-     692,   232,   681,   232,   232,   232,   232,   681,   161,   317,
-     701,   232,   320,   232,   232,   706,   232,   708,   770,   710,
-     328,   136,   232,   331,   232,   717,   232,   232,   232,   232,
-     338,   225,   340,   806,   232,   232,   232,   207,     3,   228,
-     232,     6,     7,     8,     9,    10,    11,   205,   185,   211,
-     205,   232,   228,   228,     3,   170,     3,     9,     6,   232,
-       6,   752,   205,   229,   755,   185,   758,   207,   228,   184,
-     226,   230,   205,   230,   212,   767,   228,   768,   767,   770,
-       5,   772,   773,   232,   232,   767,   232,   232,   767,   228,
-     398,   399,   228,   767,   228,   210,   785,   229,   213,   214,
-     215,   232,   232,   218,   219,   207,   232,   232,   232,   232,
-     211,   228,   227,   231,   228,   207,   231,   207,   809,    84,
-     232,   813,   780,   393,   228,   228,   338,   417,   572,   820,
-     554,   640,   440,   441,   442,   443,   444,   445,   446,   232,
-     701,   885,   687,   834,   526,   768,   838,   381,   838,   838,
-     576,   334,   252,   844,    94,   695,   838,   844,   849,   838,
-     697,   693,    -1,    -1,   838,    -1,    -1,   404,    -1,    -1,
-      -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   873,    -1,    -1,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   170,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   536,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,     5,     6,
-       7,     8,     9,    10,    11,   210,    -1,    -1,   213,   214,
-     215,    -1,    -1,   218,   219,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   231,    -1,    -1,    -1,
-      37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,
-     588,   589,    49,   591,   592,   593,   594,   595,   596,   597,
-     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
-      -1,   609,    -1,    -1,    71,    -1,    -1,   615,    -1,    -1,
-      77,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,
-      -1,    98,   640,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,   136,
-      -1,    -1,    -1,    -1,    -1,   206,    -1,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
-      -1,   158,    -1,    -1,   225,   226,    -1,    -1,   165,   166,
-     167,   232,    -1,   170,   171,    -1,    -1,   174,    -1,    -1,
-      -1,   178,    -1,    -1,    -1,    -1,    -1,   184,    -1,    -1,
-     187,    -1,   189,    -1,    -1,    -1,    -1,     3,     4,     5,
-     197,   198,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       2,     2,     8,    84,   240,    55,    12,   258,   258,     2,
+      16,   258,    18,     2,    82,    83,     2,   258,     2,     2,
+      88,    84,     2,     2,    30,   320,    81,    82,    83,    35,
+       2,     2,     2,    88,   322,    41,    42,   325,     2,   327,
+       2,     2,   330,     2,   395,     2,   632,     2,   336,     2,
+     282,   329,   314,    41,    42,    28,   349,   698,    64,    27,
+     370,   446,   277,   278,   300,    58,     6,    85,   179,    58,
+       6,   706,    58,    49,    58,    58,    43,    62,    84,    58,
+     666,   115,    17,     3,   631,     5,    58,    58,     3,   115,
+     179,    68,   115,    60,   630,    75,   114,    70,   634,   179,
+     153,   420,   421,   398,   157,   316,    29,    83,   205,   205,
+     714,   115,   125,     9,   231,   719,    12,     3,   229,     5,
+     205,     3,     0,     5,    44,   225,   205,   205,   205,    49,
+     227,   717,   228,   109,   345,   188,    59,   229,   115,   228,
+     229,   126,    31,    17,   148,    60,   205,   232,    37,   229,
+     211,    74,   226,   232,   232,   232,   230,   408,    44,    82,
+     205,   408,    44,    49,   132,    85,   228,   229,   227,   716,
+     231,   252,   758,    15,    16,    17,    18,    19,    20,    21,
+     395,   205,   158,   419,   420,   421,   205,   232,   212,   252,
+     211,   576,   226,   212,   215,   168,   277,   278,   174,    85,
+     185,   586,   806,    85,   230,   173,   753,   230,   111,   844,
+     520,   530,   505,   226,   277,   278,   752,   858,   286,   755,
+     238,   226,     6,     7,   144,   228,   231,   813,    17,   232,
+     203,   286,     9,   239,   236,   237,   242,   243,   244,   245,
+      38,   228,   229,   236,   237,    43,   252,   236,   237,   312,
+     236,   237,   236,   237,     3,   175,   244,   245,   144,   211,
+     807,   127,   144,   230,   211,   231,     3,   555,     5,   229,
+     521,   277,   278,   809,   521,   526,   526,   231,   228,   526,
+     521,   517,   518,   519,   820,   526,     3,   873,     5,   175,
+     225,   226,   232,   175,   530,   215,   232,   205,   205,   226,
+       3,   516,     5,   230,   212,   212,   312,    44,   371,   228,
+     228,   231,   226,   849,   395,    44,   309,   231,   554,   337,
+     615,   314,   610,   341,   228,   343,   344,   329,   321,   215,
+     348,   228,   395,   215,   200,   201,   202,   203,   204,   115,
+     226,   215,   216,   217,   226,   231,   339,   410,    85,   231,
+     226,   225,   226,   585,    68,   231,    85,   226,   646,   669,
+       3,   230,     5,   673,   228,   371,   676,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,     3,     3,     5,     5,
+     373,    44,   388,   225,   226,     3,    49,     5,   650,   395,
+     228,   446,   226,    15,    16,    17,   230,   228,   400,   226,
+       3,   752,     5,   230,   410,   228,   638,   144,   226,   415,
+       9,   394,   230,   228,   692,   144,     3,   228,     5,   421,
+     228,     3,    85,     5,   213,   214,   215,   216,   217,   680,
+     226,   228,   228,   680,   229,   516,   225,   226,   175,   680,
+     211,   229,   233,   226,   231,   231,   175,   698,   698,   231,
+     231,   698,   231,   516,   229,   806,   766,   698,   231,   231,
+       5,   231,   231,   231,   470,   231,   231,   231,   231,   820,
+     231,   231,   231,   231,   231,   231,   469,   231,   215,   231,
+     231,   144,   714,   231,   231,   231,   215,   719,   231,   231,
+     722,   231,   231,   708,   231,   231,   231,   226,   849,   231,
+     231,   231,   231,   231,   585,   231,   231,   231,   231,   229,
+     516,   229,   175,   764,   229,   517,   517,   764,   228,   587,
+     830,   576,   229,   774,   517,   225,   528,   528,   517,   228,
+     228,   517,   587,   517,   211,   528,   229,   231,   207,   528,
+     232,   207,   528,   232,   528,   528,   231,   842,   528,   528,
+       9,   632,   215,     6,   864,   770,   528,   528,   528,     9,
+       9,     9,     9,   226,   528,     9,   528,   528,   231,   528,
+     563,   528,   565,   528,   806,   528,   565,   563,     9,   889,
+       9,     9,   226,   229,   229,   233,   837,   875,   228,   231,
+     837,   213,   214,   215,   216,   217,   837,   228,   228,   228,
+     228,   207,   838,   225,   226,   229,   215,   858,   858,   230,
+     229,   858,   232,   230,   664,   205,     6,   858,   232,   205,
+      15,    16,    17,   231,   630,    20,    21,   708,   634,   225,
+     632,   232,   232,   714,   232,   232,   717,   232,   719,   205,
+     232,   232,   205,   232,   232,   708,   882,   710,   232,   885,
+     205,   232,   232,   232,   232,   723,   232,   650,   232,   232,
+     232,   232,   232,    45,   666,   232,   225,   232,   723,     9,
+     317,   232,   232,   320,   232,   232,   232,   161,   232,   672,
+     232,   328,   232,   672,   331,   687,   672,   207,   672,   770,
+     692,   338,   232,   340,   687,   701,   228,   232,   205,   185,
+     706,   211,   708,   205,   710,   232,     3,   770,     3,     6,
+       7,     8,     9,    10,    11,   717,    98,   228,     3,   228,
+       6,     9,     6,   205,   232,   806,   229,   185,   207,   111,
+     112,   113,   114,   228,   230,   226,   230,   212,   228,   121,
+     232,   205,     5,   232,   232,   232,   752,   232,   228,   755,
+     207,   398,   399,   229,   232,   228,   758,   228,   232,   211,
+     232,   228,   768,   232,   770,   767,   232,   773,   774,   232,
+     231,   207,   228,   228,   767,   207,   417,   228,   767,   572,
+     393,   767,   781,   767,   166,   338,   232,    84,   640,   171,
+     885,   701,   785,   440,   441,   442,   443,   444,   445,   446,
+     687,   554,   576,   809,   526,   382,   844,   252,   334,   697,
+     768,   813,    94,    -1,   820,   695,   211,   212,   213,   214,
+     215,   216,   217,   693,    -1,    -1,    -1,    -1,   834,   404,
+     225,   226,    -1,    -1,    -1,    -1,   838,   838,   844,   136,
+      -1,    -1,    -1,   849,    -1,   838,    -1,    -1,    -1,   838,
+      -1,    -1,   838,    -1,   838,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   873,    -1,   170,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,    -1,   536,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,     5,
+       6,     7,     8,     9,    10,    11,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   210,    -1,    -1,   213,   214,   215,    -1,
-      -1,   218,   219,    -1,    -1,    31,    -1,    -1,    -1,    -1,
-      -1,    37,    -1,    39,   231,    -1,    -1,    -1,    -1,    45,
-      46,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-      56,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
-      -1,    77,    78,    -1,   812,    -1,    -1,    83,   816,    -1,
+       3,   218,   219,     6,     7,     8,     9,    10,    11,    -1,
+     227,    37,    -1,    39,   231,    -1,    -1,    -1,    -1,    45,
+      -1,   588,   589,    49,   591,   592,   593,   594,   595,   596,
+     597,   598,   599,   600,   601,   602,   603,   604,   605,   606,
+     607,    -1,   609,    -1,    -1,    71,    -1,    -1,   615,    -1,
+      -1,    77,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,
       -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    -1,
-      -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,   105,
-     106,    -1,    -1,   109,   842,   111,   112,   113,   114,   115,
-      -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,
-      -1,    -1,   128,   210,   211,   212,   213,   214,   215,   216,
-     217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,   226,
-     146,    -1,     3,     4,     5,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,   164,   165,
-     166,   167,    -1,    -1,    -1,   171,    -1,    -1,   174,    -1,
-      31,    -1,   178,    -1,    -1,    -1,    37,    -1,    39,    -1,
-      -1,   187,    -1,   189,    45,    46,    -1,    -1,    49,    -1,
-      -1,   197,   198,    -1,    -1,    56,    -1,    58,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      -1,    -1,    98,   640,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    84,    -1,   109,    -1,   111,   112,   113,   114,    -1,
+      -1,    -1,    -1,     3,    -1,   121,     6,     7,     8,     9,
+      10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   158,   136,    -1,    -1,    -1,    -1,    -1,   165,
+     166,   167,    -1,    -1,   170,   171,    -1,    -1,   174,    -1,
+      -1,    -1,   178,    -1,    -1,    -1,    -1,    -1,   184,    -1,
+      -1,   187,    -1,   189,    -1,    -1,    -1,   170,    -1,    -1,
+      -1,   197,   198,    -1,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,   184,    -1,    -1,   210,    -1,    -1,   213,   214,   215,
+      -1,    -1,   218,   219,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   231,    -1,   210,    -1,    -1,
+     213,   214,   215,    -1,    -1,   218,   219,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   227,    -1,   136,    -1,   231,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,   812,    -1,    -1,    -1,   816,
+      -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+     170,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      31,    -1,    -1,    -1,   184,   842,    37,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    -1,    -1,    49,    -1,
+      -1,    -1,    -1,    -1,    -1,    56,    -1,    58,    -1,    -1,
+     210,    -1,    -1,   213,   214,   215,    -1,    68,   218,   219,
       71,    -1,    -1,     3,     4,     5,    77,    78,    -1,    -1,
-     226,    -1,    83,    -1,   230,    -1,    -1,    88,    -1,    -1,
+      -1,   231,    83,    -1,    -1,    -1,    -1,    88,    -1,    -1,
       91,    -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,    -1,
       -1,    31,    -1,    -1,   105,   106,    -1,    37,   109,    39,
      111,   112,   113,   114,   115,    45,    46,    -1,    -1,    49,
@@ -2215,221 +2203,229 @@
       -1,    71,    -1,    -1,    -1,   146,    -1,    77,    78,    -1,
       -1,    -1,    -1,    83,    -1,    -1,    -1,   158,    88,    -1,
       -1,    91,    -1,   164,   165,   166,   167,    -1,    98,    -1,
-     171,    -1,    -1,   174,    -1,   105,    -1,   178,    -1,   109,
+     171,    -1,    -1,   174,    -1,   105,   106,   178,    -1,   109,
       -1,   111,   112,   113,   114,   115,   187,    -1,   189,    -1,
       -1,   121,    -1,    -1,    -1,    -1,   197,   198,   128,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,    -1,    -1,    -1,    -1,   146,    -1,    15,    16,
-      17,    18,    19,    20,    21,   226,    -1,    -1,   158,   230,
+      -1,    -1,   206,    -1,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,    -1,    -1,   146,    -1,     3,     4,
+       5,   225,   226,   227,    -1,   226,    -1,    -1,   158,   230,
       -1,    -1,    -1,    -1,   164,   165,   166,   167,    -1,    -1,
-      -1,   171,    -1,    37,   174,    39,    -1,    -1,   178,    -1,
-      -1,    45,    -1,    -1,    -1,    49,    -1,   187,    -1,   189,
-      -1,    -1,    56,    -1,    -1,    -1,    -1,   197,   198,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
-       3,     4,     5,    77,    78,    -1,    -1,    -1,    -1,    83,
-      -1,    -1,    -1,    -1,    88,    -1,   226,    91,    -1,    -1,
-     230,    -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,
-      -1,   105,    -1,    -1,    37,   109,    39,   111,   112,   113,
-     114,    -1,    45,    -1,    -1,    -1,    49,   121,    -1,    -1,
-      -1,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,
-      -1,    -1,   146,    -1,    77,    78,    -1,    -1,    -1,    -1,
-      83,    -1,    -1,    -1,   158,    88,    -1,    -1,    91,    -1,
-      -1,   165,   166,   167,    -1,    98,    -1,   171,    -1,    -1,
-     174,    -1,   105,    -1,   178,    -1,   109,    -1,   111,   112,
-     113,   114,    -1,   187,    -1,   189,    -1,    -1,   121,    -1,
-      -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,    -1,     5,   211,   212,   213,   214,   215,   216,
-     217,    -1,    -1,   146,    -1,    -1,    -1,    -1,   225,   226,
-      -1,    -1,   226,    -1,    -1,   158,   230,    -1,    -1,    -1,
-      -1,    -1,   165,   166,   167,    37,    -1,    39,   171,    -1,
-      -1,   174,    -1,    45,    -1,   178,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    71,
-      -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,
-      -1,    83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,
-      -1,    -1,    -1,   226,    -1,    -1,    98,   230,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-     112,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,   121,
-      -1,     0,    -1,    -1,     3,     4,     5,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    31,    -1,    -1,    -1,   158,    -1,    37,    -1,
-      39,    -1,    -1,   165,   166,   167,    45,    46,    -1,   171,
-      49,    -1,   174,    -1,    -1,    -1,   178,    56,    -1,    58,
-      -1,    -1,    -1,    -1,    -1,   187,    -1,   189,    -1,    68,
-      -1,    -1,    71,    -1,    -1,   197,   198,    -1,    77,    78,
-      -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    88,
-      -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    98,
-      -1,    -1,    -1,    -1,   226,    -1,   105,    -1,   230,    -1,
-     109,    -1,   111,   112,   113,   114,   115,    -1,    -1,    -1,
-      -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,   128,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
-       3,     4,     5,    -1,    -1,    -1,    -1,    -1,    -1,   158,
-      13,    -1,    -1,    -1,    -1,   164,   165,   166,   167,    -1,
-      -1,    -1,   171,    -1,    -1,   174,    -1,    -1,    31,   178,
-      -1,    -1,    -1,    -1,    37,    -1,    39,    -1,   187,    -1,
-     189,    -1,    45,    46,    -1,    -1,    49,    -1,   197,   198,
-      -1,    -1,    -1,    56,    -1,    58,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
-      -1,    -1,    -1,    -1,    77,    78,    -1,   226,    -1,    -1,
-      83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
-      -1,    -1,     3,    -1,     5,    98,    -1,    -1,    -1,    -1,
-      -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
-     113,   114,   115,    -1,    -1,    -1,    -1,    -1,   121,    -1,
-      -1,    -1,    -1,    -1,    -1,   128,    37,    -1,    39,    -1,
-      -1,    -1,    -1,    44,    45,    -1,    -1,    -1,    49,    -1,
-      -1,    -1,    -1,   146,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
-      71,   164,   165,   166,   167,    -1,    77,    78,   171,    -1,
-      -1,   174,    83,    -1,    85,   178,    -1,    88,    -1,    -1,
-      91,    -1,    -1,    -1,   187,    -1,   189,    98,    -1,    -1,
-      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,   109,    -1,
-     111,   112,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
-     121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   226,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   144,    -1,    -1,    -1,    -1,     3,    -1,
-       5,    -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,
-      -1,    -1,    -1,    -1,   165,   166,   167,    -1,    -1,    -1,
-     171,    -1,    -1,   174,   175,    -1,    -1,   178,    -1,    -1,
-      -1,    -1,    37,    -1,    39,    -1,   187,    -1,   189,    44,
-      45,    -1,    -1,    -1,    49,    -1,   197,   198,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   215,    -1,    71,    -1,    -1,     3,
-      -1,     5,    77,    78,    -1,   226,    -1,    -1,    83,    -1,
-      85,    -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,
-      24,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,   109,    39,   111,   112,   113,   114,
-      -1,    45,    -1,    -1,    -1,    49,   121,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    -1,    -1,    71,    -1,   144,
-      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    83,
-      -1,    -1,    -1,   158,    88,    -1,    -1,    91,    -1,    -1,
+      -1,   171,    -1,    -1,   174,    -1,    31,    -1,   178,    -1,
+      -1,    -1,    37,    -1,    39,    -1,    -1,   187,    -1,   189,
+      45,    46,    -1,    -1,    49,    -1,    -1,   197,   198,    -1,
+      -1,    56,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,     3,
+       4,     5,    77,    78,    -1,    -1,   226,    -1,    83,    -1,
+     230,    -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,
+      -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
+     105,    -1,    -1,    37,   109,    39,   111,   112,   113,   114,
+     115,    45,    -1,    -1,    -1,    49,   121,    -1,    -1,    -1,
+      -1,    -1,    56,   128,    -1,    -1,    -1,    -1,    -1,    15,
+      16,    17,    18,    19,    20,    21,    -1,    71,    -1,    -1,
+      -1,   146,    -1,    77,    78,    -1,    -1,    -1,    -1,    83,
+      -1,    -1,    -1,   158,    88,    -1,    -1,    91,    -1,   164,
      165,   166,   167,    -1,    98,    -1,   171,    -1,    -1,   174,
-     175,    -1,    -1,   178,    -1,   109,    -1,   111,   112,   113,
+      -1,   105,    -1,   178,    -1,   109,    -1,   111,   112,   113,
      114,    -1,   187,    -1,   189,    -1,    -1,   121,    -1,    -1,
       -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,    -1,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     215,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      -1,   226,    -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,
-      -1,   165,   166,   167,    37,    -1,    39,   171,    -1,    -1,
-     174,    -1,    45,    -1,   178,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    71,    -1,
-      -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,
-      83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
-      -1,    -1,   226,    -1,    -1,    98,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    -1,   109,    -1,   111,   112,
-     113,   114,    -1,    -1,    -1,    -1,    -1,   206,   121,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   225,   226,    -1,    -1,
-      -1,    -1,    -1,   232,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    -1,    -1,   158,    -1,    -1,    -1,    -1,
-      -1,    -1,   165,   166,   167,    -1,    -1,    -1,   171,    -1,
-      -1,   174,    -1,    -1,    -1,   178,    -1,    15,    16,    17,
-      18,    19,    20,    21,   187,    23,   189,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,
-      -1,    -1,   206,    -1,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   225,   226,   226,    -1,    -1,    -1,    -1,   232,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,
-      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,    15,
-      16,    17,    18,    19,    20,    21,   225,   226,   227,    -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,   206,    -1,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   225,   226,   227,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,   226,    -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,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,    -1,
+      -1,    -1,   146,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   226,    -1,    -1,   158,   230,    -1,    -1,    -1,    -1,
+      -1,   165,   166,   167,    -1,    -1,    -1,   171,    -1,    37,
+     174,    39,    -1,    -1,   178,    -1,    -1,    45,    -1,    -1,
+      -1,    49,    -1,   187,    -1,   189,    -1,    -1,    56,    -1,
+      -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    71,    -1,    -1,     3,    -1,     5,    77,
+      78,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,
+      88,    -1,   226,    91,    -1,    -1,   230,    -1,    -1,    -1,
+      98,    -1,    -1,    -1,    -1,    -1,    -1,   105,    -1,    -1,
+      37,   109,    39,   111,   112,   113,   114,    -1,    45,    -1,
+      -1,    -1,    49,   121,   210,   211,   212,   213,   214,   215,
      216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
-     226,   206,    -1,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     225,   226,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
-     226,    -1,    -1,     3,    -1,     5,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
-     226,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    -1,    49,
+     226,    -1,    -1,    -1,    71,    -1,    -1,    -1,   146,    -1,
+      77,    78,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,
+     158,    88,    -1,    -1,    91,    -1,    -1,   165,   166,   167,
+      -1,    98,    -1,   171,    -1,    -1,   174,    -1,    -1,    -1,
+     178,    -1,   109,    -1,   111,   112,   113,   114,    -1,   187,
+      -1,   189,    -1,    -1,   121,    -1,    -1,    -1,    -1,   197,
+     198,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
+      -1,    -1,     3,     4,     5,    -1,    -1,    -1,   226,    -1,
+      -1,   158,   230,    14,    -1,    -1,    -1,    -1,   165,   166,
+     167,    -1,    -1,    -1,   171,    -1,    -1,   174,    -1,    -1,
+      31,   178,    -1,    -1,    -1,    -1,    37,    -1,    39,    -1,
+     187,    -1,   189,    -1,    45,    46,    -1,    -1,    49,    -1,
+     197,   198,    -1,    -1,    -1,    56,    -1,    58,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   226,
+      -1,    -1,    83,   230,    -1,    -1,    -1,    88,    -1,    -1,
+      91,    -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,    -1,
+      -1,    -1,    -1,    -1,   105,    -1,    -1,    -1,   109,    -1,
+     111,   112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,
+     121,    -1,    -1,    -1,    -1,    -1,    -1,   128,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-      -1,    71,    -1,    -1,     3,    -1,     5,    77,    78,    -1,
-      -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    88,    -1,
-      -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,   109,
-      39,   111,   112,   113,   114,   115,    45,    -1,   118,    -1,
-      49,   121,    -1,    -1,    -1,    -1,   126,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,     3,     4,
+       5,    -1,    -1,    -1,    -1,    -1,    -1,   158,    13,    -1,
+      -1,    -1,    -1,   164,   165,   166,   167,    -1,    -1,    -1,
+     171,    -1,    -1,   174,    -1,    -1,    31,   178,    -1,    -1,
+      -1,    -1,    37,    -1,    39,    -1,   187,    -1,   189,    -1,
+      45,    46,    -1,    -1,    49,    -1,   197,   198,    -1,    -1,
+      -1,    56,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    -1,   226,    -1,    -1,    83,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,
+       3,    -1,     5,    98,    -1,    -1,    -1,    -1,    -1,    -1,
+     105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
+     115,    -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,
+      -1,    -1,    -1,   128,    37,    -1,    39,    -1,    -1,    -1,
+      -1,    44,    45,    -1,    -1,    -1,    49,    -1,    -1,    -1,
+      -1,   146,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,    71,   164,
+     165,   166,   167,    -1,    77,    78,   171,    -1,    -1,   174,
+      83,    -1,    85,   178,    -1,    88,    -1,    -1,    91,    -1,
+      -1,    -1,   187,    -1,   189,    98,    -1,    -1,    -1,    -1,
+      -1,    -1,   197,   198,    -1,    -1,   109,    -1,   111,   112,
+     113,   114,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    77,    78,
-      -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,   158,    88,
-      -1,    -1,    91,    -1,   164,   165,   166,   167,    -1,    98,
-      -1,   171,    -1,    -1,   174,    -1,    -1,    -1,   178,     3,
-     109,     5,   111,   112,   113,   114,    -1,   187,    -1,   189,
-      -1,    -1,   121,    -1,    -1,    -1,    -1,   197,   198,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,
-      -1,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,    -1,
-      -1,     3,   171,     5,    -1,   174,    -1,    71,    -1,   178,
-      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   187,    -1,
-     189,    -1,     5,    -1,    88,    -1,    -1,    91,   197,   198,
-      -1,    -1,    -1,    -1,    98,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    45,    -1,    -1,    -1,   111,   112,   113,
-     114,    -1,    -1,    -1,    37,    -1,    39,   121,    -1,    -1,
-      -1,    -1,    45,    -1,    -1,    -1,    49,    -1,    -1,    71,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    71,    91,
-      -1,    -1,    -1,    -1,    77,    78,    98,    -1,    -1,    -1,
-      83,   165,   166,   167,    -1,    88,    -1,   171,    91,   111,
-     112,   113,   114,    -1,   178,    98,    -1,    -1,    -1,   121,
-      -1,    -1,    -1,   187,    -1,   189,   109,     5,   111,   112,
-     113,   114,    -1,   197,   198,    -1,    -1,    -1,   121,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
-      -1,    39,    -1,    -1,   166,   167,    -1,    45,    -1,   171,
+      -1,   226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   144,    -1,    -1,    -1,    -1,     3,    -1,     5,    -1,
       -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
-      -1,    -1,   165,   166,   167,    -1,    -1,   189,   171,    -1,
-      -1,   174,    -1,    71,    -1,   178,   198,    -1,    -1,    77,
-      78,    -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,
-      88,    -1,    -1,    91,   197,   198,    -1,    -1,    -1,    -1,
-      98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
-      -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   165,   166,   167,    -1,    -1,    -1,   171,    -1,
+      -1,   174,   175,    -1,    -1,   178,    -1,    -1,    -1,    -1,
+      37,    -1,    39,    -1,   187,    -1,   189,    44,    45,    -1,
+      -1,    -1,    49,    -1,   197,   198,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   215,    -1,    71,    -1,    -1,     3,    -1,     5,
+      77,    78,    -1,   226,    -1,    -1,    83,    -1,    85,    -1,
+      -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    24,    -1,
+      -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    37,   109,    39,   111,   112,   113,   114,    -1,    45,
+      -1,    -1,    -1,    49,   121,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    -1,    -1,    71,    -1,   144,    -1,    -1,
+      -1,    77,    78,    -1,    -1,    -1,    -1,    83,    -1,    -1,
+      -1,   158,    88,    -1,    -1,    91,    -1,    -1,   165,   166,
+     167,    -1,    98,    -1,   171,    -1,    -1,   174,   175,    -1,
+      -1,   178,    -1,   109,    -1,   111,   112,   113,   114,    -1,
+     187,    -1,   189,    -1,    -1,   121,    -1,    -1,    -1,    -1,
+     197,   198,    -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,
+       5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   215,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    -1,   226,
+      -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,   165,
+     166,   167,    37,    -1,    39,   171,    -1,    -1,   174,    -1,
+      45,    -1,   178,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+      -1,   187,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   197,   198,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    83,    -1,
+      -1,    -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,
+     226,    -1,    -1,    98,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    -1,   109,    -1,   111,   112,   113,   114,
+      -1,    -1,    -1,    -1,    -1,   206,   121,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   225,   226,    -1,    -1,    -1,    -1,
+      -1,   232,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,
+     165,   166,   167,    -1,    -1,    -1,   171,    -1,    -1,   174,
+      -1,    -1,    -1,   178,    -1,    15,    16,    17,    18,    19,
+      20,    21,   187,    23,   189,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,    -1,
+     206,    -1,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
+     226,   226,    -1,    -1,    -1,    -1,   232,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,
+      18,    19,    20,    21,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,   206,    -1,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   225,   226,    -1,    -1,    -1,    -1,
+      -1,   232,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   206,    -1,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   225,   226,   227,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   225,   226,    -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,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,   226,   206,
+      -1,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,    -1,     3,    -1,     5,    -1,    -1,    -1,   225,   226,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     211,   212,   213,   214,   215,   216,   217,   225,   226,    -1,
+      31,    -1,    -1,    -1,   225,   226,    37,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    -1,    -1,    49,    -1,
+       3,    -1,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,
+      -1,    -1,    83,    -1,    37,    -1,    39,    88,    -1,    -1,
+      91,    -1,    45,    -1,    -1,    -1,    49,    98,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,   112,   113,   114,   115,    -1,    -1,   118,    71,    -1,
+     121,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,
+      83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
+      -1,    -1,     3,    -1,     5,    98,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,   158,   111,   112,
+     113,   114,    -1,   164,   165,   166,   167,    -1,   121,    -1,
+     171,    -1,    -1,   174,    -1,    -1,    37,   178,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    -1,   187,    -1,   189,    -1,
+       3,    -1,     5,    -1,    -1,    -1,   197,   198,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+      71,    -1,   165,   166,   167,    -1,    77,    78,   171,    -1,
+      -1,   174,    -1,    -1,    37,   178,    39,    88,    -1,    -1,
+      91,    -1,    45,    -1,   187,    -1,   189,    98,    -1,    -1,
+      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,
+     111,   112,   113,   114,    -1,    -1,    -1,    -1,    71,    -1,
+     121,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
+      -1,    -1,    -1,    -1,    -1,    98,    -1,    -1,    -1,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,
+     113,   114,    -1,    -1,   165,   166,   167,    -1,   121,    -1,
+     171,    -1,    -1,    -1,    -1,    -1,    -1,   178,    -1,    -1,
+      -1,    37,    -1,    39,    -1,    -1,   187,    -1,   189,    45,
+      -1,    -1,    -1,    49,    -1,    -1,   197,   198,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   166,   167,    71,    -1,    -1,   171,    -1,
+       5,    77,    78,    -1,    -1,    -1,    -1,    83,    -1,    -1,
+      -1,    -1,    88,    -1,    -1,    91,   189,    -1,    -1,    -1,
+      -1,    -1,    98,    -1,    -1,   198,    -1,    -1,    -1,    -1,
+      -1,    -1,    37,   109,    39,   111,   112,   113,   114,    -1,
+      45,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   158,    88,    -1,    -1,    91,    -1,    -1,   165,
+     166,   167,    -1,    98,    -1,   171,    -1,    -1,   174,    -1,
+      -1,    -1,   178,    -1,    -1,    -1,   111,   112,   113,   114,
+      -1,   187,    -1,   189,    -1,    -1,   121,    -1,    -1,    -1,
+      -1,   197,   198,    -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,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,
-      -1,    -1,    -1,   171,    -1,    -1,    -1,    -1,    -1,    -1,
-     178,    -1,    -1,    -1,    -1,    25,    26,    -1,    -1,   187,
-      30,   189,    32,    33,    34,    35,    36,    -1,    38,   197,
-     198,    41,    -1,    43,    -1,    -1,    -1,    47,    48,    -1,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    59,
-      60,    61,    -1,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,    79,
-      80,    81,    82,    -1,    -1,    -1,    86,    87,    -1,    89,
-      90,    -1,    92,    93,    94,    95,    96,    97,    -1,    99,
-     100,   101,   102,   103,   104,    -1,    -1,   107,    -1,    -1,
-     110,    -1,    -1,    -1,    -1,    -1,   116,   117,    -1,   119,
-     120,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,   129,
-     130,   131,    -1,   133,   134,   135,    -1,   137,   138,   139,
-     140,   141,   142,   143,    -1,   145,    -1,   147,    -1,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,    -1,   159,
-     160,    -1,   162,   163,    -1,    -1,    -1,    -1,    -1,   169,
-      -1,    -1,   172,    -1,   174,    -1,   176,   177,    -1,    -1,
-     180,   181,   182,   183,    -1,    -1,   186,    -1,   188,    -1,
-     190,   191,   192,   193,   194,   195,   196,    -1,    -1,   199
+     165,   166,   167,    -1,    -1,    -1,   171,    -1,    -1,    -1,
+      -1,    -1,    -1,   178,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,   187,    30,   189,    32,    33,    34,    35,    36,
+      -1,    38,   197,   198,    41,    -1,    43,    -1,    -1,    -1,
+      47,    48,    -1,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    59,    60,    61,    -1,    63,    64,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    -1,    -1,    -1,    86,
+      87,    -1,    89,    90,    -1,    92,    93,    94,    95,    96,
+      97,    -1,    99,   100,   101,   102,   103,   104,    -1,    -1,
+     107,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,   116,
+     117,    -1,   119,   120,    -1,   122,   123,   124,    -1,    -1,
+      -1,    -1,   129,   130,   131,    -1,   133,   134,   135,    -1,
+     137,   138,   139,   140,   141,   142,   143,    -1,   145,    -1,
+     147,    -1,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,    -1,   159,   160,    -1,   162,   163,    -1,    -1,    -1,
+      -1,    -1,   169,    -1,    -1,   172,    -1,   174,    -1,   176,
+     177,    -1,    -1,   180,   181,   182,   183,    -1,    -1,   186,
+      -1,   188,    -1,   190,   191,   192,   193,   194,   195,   196,
+      -1,    -1,   199
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2459,9 +2455,9 @@
      149,   150,   151,   152,   153,   154,   155,   156,   157,   159,
      160,   162,   163,   169,   172,   174,   176,   177,   180,   181,
      182,   183,   186,   188,   190,   191,   192,   193,   194,   195,
-     196,   199,   265,   271,   362,   228,   243,   243,    62,   185,
-      77,   118,   126,   178,   187,   255,   280,   307,   309,   311,
-     324,   336,   342,   363,   367,   228,     3,   297,   211,   228,
+     196,   199,   265,   271,   362,   228,   243,   243,    62,   126,
+     185,   336,    77,   118,   178,   187,   255,   280,   307,   309,
+     311,   324,   342,   363,   367,   228,     3,   297,   211,   228,
      228,   228,   229,   228,   316,   228,   246,   228,   344,   345,
      344,   344,    44,    85,   144,   175,   215,   231,   273,   297,
      298,   346,   347,   360,   280,   363,   365,   367,   344,   228,
@@ -2473,8 +2469,8 @@
      231,   231,   231,   231,   231,   231,   231,   231,   231,   205,
      227,    13,    58,   106,   240,   247,   254,   257,   307,   308,
      309,   310,   311,   312,   313,   316,   324,   327,   332,   337,
-     230,   365,   263,   264,     3,   297,   297,     3,     3,   229,
-     229,   229,   229,   333,   229,   360,   225,   299,   302,   303,
+     230,   365,   297,   263,   264,   229,     3,   297,     3,     3,
+     229,   229,   229,   229,   333,   360,   225,   299,   302,   303,
      304,   305,   306,   242,   229,   341,   346,   346,   233,   226,
      231,   262,   344,   231,   205,   227,     5,   232,   115,   230,
      263,   276,   277,   278,   279,   325,   207,   207,   232,   287,
@@ -2487,8 +2483,8 @@
      362,     9,   285,   365,   281,   270,   342,   283,   365,   127,
      200,   201,   202,   203,   204,   361,   365,   365,   272,     6,
        7,   368,     9,   365,   271,   226,   229,   231,   228,   228,
-     228,   229,   228,   228,   246,   298,   342,   314,   314,   230,
-     207,   321,   245,   297,   215,   215,   205,   212,   241,   148,
+     228,   229,   228,   228,   246,   298,   342,   245,   314,   314,
+     230,   207,   321,   297,   215,   215,   205,   212,   241,   148,
      318,   324,   340,   346,   232,   286,   215,   227,   283,   258,
      259,   260,   261,    28,    70,   168,   203,   376,   377,   375,
      229,   303,   298,   230,   205,   233,   297,   322,   323,     6,
@@ -2503,8 +2499,8 @@
      205,   232,   232,   232,   232,   232,   205,   232,   232,   232,
      205,   232,   232,   232,   232,   232,   232,   225,   232,   232,
      232,   271,   239,     9,   244,   211,   231,   346,   356,   230,
-     263,   315,   230,   246,   303,   304,   161,   331,   230,   247,
-     263,   264,   305,   230,   207,   125,   292,   319,   228,   227,
+     247,   263,   264,   230,   263,   315,   230,   246,   303,   304,
+     161,   331,   305,   230,   207,   125,   292,   319,   228,   227,
      227,   232,   205,   205,   232,   185,   370,   371,   211,   279,
      285,   205,   326,     6,   232,   232,   342,   367,   342,   363,
      232,   228,   228,   268,   343,   232,   215,   231,   262,   273,
@@ -2513,8 +2509,8 @@
      283,   283,   283,   283,   283,     3,   283,   285,     6,   286,
        9,   354,   341,   215,   258,   273,   353,   354,   231,   262,
      282,   285,   269,     6,   115,   230,   232,   243,   328,   258,
-     205,   246,    68,   115,   334,   335,   246,   303,   304,   330,
-     229,   246,   207,   228,   230,   264,   293,   294,   230,    24,
+     205,   246,   246,    68,   115,   334,   335,   246,   303,   304,
+     330,   229,   207,   228,   230,   264,   293,   294,   230,    24,
      261,   377,   373,   230,   370,   306,   322,   212,   352,   358,
      359,   228,   346,   295,   298,   350,   341,   215,   258,   273,
      349,   350,   232,   231,   262,   344,   207,   227,   232,   354,
@@ -3385,13 +3381,13 @@
 						  write_dlldata((yyvsp[-1].stmt_list));
 						  write_local_stubs((yyvsp[-1].stmt_list));
 						}
-#line 3389 "tools/widl/parser.tab.c"
+#line 3385 "tools/widl/parser.tab.c"
     break;
 
   case 5: /* decl_statements: %empty  */
 #line 366 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3395 "tools/widl/parser.tab.c"
+#line 3391 "tools/widl/parser.tab.c"
     break;
 
   case 6: /* decl_statements: decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';'  */
@@ -3399,73 +3395,73 @@
                                                 { parameterized_type_stmts = append_statement(parameterized_type_stmts, make_statement_parameterized_type((yyvsp[-4].type), (yyvsp[-2].typeref_list)));
 						  (yyval.stmt_list) = append_statement((yyvsp[-6].stmt_list), make_statement_reference(type_parameterized_type_specialize_declare((yyvsp[-4].type), (yyvsp[-2].typeref_list))));
 						}
-#line 3403 "tools/widl/parser.tab.c"
+#line 3399 "tools/widl/parser.tab.c"
     break;
 
   case 7: /* decl_block: tDECLARE '{' decl_statements '}'  */
 #line 373 "tools/widl/parser.y"
                                              { (yyval.stmt_list) = (yyvsp[-1].stmt_list); }
-#line 3409 "tools/widl/parser.tab.c"
+#line 3405 "tools/widl/parser.tab.c"
     break;
 
   case 8: /* imp_decl_statements: %empty  */
 #line 375 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3415 "tools/widl/parser.tab.c"
+#line 3411 "tools/widl/parser.tab.c"
     break;
 
   case 9: /* imp_decl_statements: imp_decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';'  */
 #line 377 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-6].stmt_list), make_statement_reference(type_parameterized_type_specialize_declare((yyvsp[-4].type), (yyvsp[-2].typeref_list)))); }
-#line 3421 "tools/widl/parser.tab.c"
+#line 3417 "tools/widl/parser.tab.c"
     break;
 
   case 10: /* imp_decl_block: tDECLARE '{' imp_decl_statements '}'  */
 #line 380 "tools/widl/parser.y"
                                                      { (yyval.stmt_list) = (yyvsp[-1].stmt_list); }
-#line 3427 "tools/widl/parser.tab.c"
+#line 3423 "tools/widl/parser.tab.c"
     break;
 
   case 11: /* gbl_statements: %empty  */
 #line 382 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3433 "tools/widl/parser.tab.c"
+#line 3429 "tools/widl/parser.tab.c"
     break;
 
   case 12: /* $@1: %empty  */
 #line 383 "tools/widl/parser.y"
                                           { push_namespace((yyvsp[-1].str)); }
-#line 3439 "tools/widl/parser.tab.c"
+#line 3435 "tools/widl/parser.tab.c"
     break;
 
   case 13: /* gbl_statements: gbl_statements namespacedef '{' $@1 gbl_statements '}'  */
 #line 384 "tools/widl/parser.y"
                                                 { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3445 "tools/widl/parser.tab.c"
+#line 3441 "tools/widl/parser.tab.c"
     break;
 
   case 14: /* gbl_statements: gbl_statements interface ';'  */
 #line 385 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3451 "tools/widl/parser.tab.c"
+#line 3447 "tools/widl/parser.tab.c"
     break;
 
   case 15: /* gbl_statements: gbl_statements dispinterface ';'  */
 #line 386 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3457 "tools/widl/parser.tab.c"
+#line 3453 "tools/widl/parser.tab.c"
     break;
 
   case 16: /* gbl_statements: gbl_statements interfacedef  */
 #line 387 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3463 "tools/widl/parser.tab.c"
+#line 3459 "tools/widl/parser.tab.c"
     break;
 
   case 17: /* gbl_statements: gbl_statements delegatedef  */
 #line 388 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3469 "tools/widl/parser.tab.c"
+#line 3465 "tools/widl/parser.tab.c"
     break;
 
   case 18: /* gbl_statements: gbl_statements coclass ';'  */
@@ -3473,7 +3469,7 @@
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
 						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
 						}
-#line 3477 "tools/widl/parser.tab.c"
+#line 3473 "tools/widl/parser.tab.c"
     break;
 
   case 19: /* gbl_statements: gbl_statements coclassdef  */
@@ -3481,105 +3477,105 @@
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
 						}
-#line 3485 "tools/widl/parser.tab.c"
+#line 3481 "tools/widl/parser.tab.c"
     break;
 
   case 20: /* gbl_statements: gbl_statements apicontract ';'  */
 #line 395 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3491 "tools/widl/parser.tab.c"
+#line 3487 "tools/widl/parser.tab.c"
     break;
 
   case 21: /* gbl_statements: gbl_statements apicontract_def  */
 #line 396 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3498 "tools/widl/parser.tab.c"
+#line 3494 "tools/widl/parser.tab.c"
     break;
 
   case 22: /* gbl_statements: gbl_statements runtimeclass ';'  */
 #line 398 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3504 "tools/widl/parser.tab.c"
+#line 3500 "tools/widl/parser.tab.c"
     break;
 
   case 23: /* gbl_statements: gbl_statements runtimeclass_def  */
 #line 399 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3511 "tools/widl/parser.tab.c"
+#line 3507 "tools/widl/parser.tab.c"
     break;
 
   case 24: /* gbl_statements: gbl_statements moduledef  */
 #line 401 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3517 "tools/widl/parser.tab.c"
+#line 3513 "tools/widl/parser.tab.c"
     break;
 
   case 25: /* gbl_statements: gbl_statements librarydef  */
 #line 402 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3523 "tools/widl/parser.tab.c"
+#line 3519 "tools/widl/parser.tab.c"
     break;
 
   case 26: /* gbl_statements: gbl_statements statement  */
 #line 403 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3529 "tools/widl/parser.tab.c"
+#line 3525 "tools/widl/parser.tab.c"
     break;
 
   case 27: /* gbl_statements: gbl_statements decl_block  */
 #line 404 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
-#line 3535 "tools/widl/parser.tab.c"
+#line 3531 "tools/widl/parser.tab.c"
     break;
 
   case 28: /* imp_statements: %empty  */
 #line 407 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3541 "tools/widl/parser.tab.c"
+#line 3537 "tools/widl/parser.tab.c"
     break;
 
   case 29: /* imp_statements: imp_statements interface ';'  */
 #line 408 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3547 "tools/widl/parser.tab.c"
+#line 3543 "tools/widl/parser.tab.c"
     break;
 
   case 30: /* imp_statements: imp_statements dispinterface ';'  */
 #line 409 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3553 "tools/widl/parser.tab.c"
+#line 3549 "tools/widl/parser.tab.c"
     break;
 
   case 31: /* $@2: %empty  */
 #line 410 "tools/widl/parser.y"
                                           { push_namespace((yyvsp[-1].str)); }
-#line 3559 "tools/widl/parser.tab.c"
+#line 3555 "tools/widl/parser.tab.c"
     break;
 
   case 32: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
 #line 411 "tools/widl/parser.y"
                                                 { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3565 "tools/widl/parser.tab.c"
+#line 3561 "tools/widl/parser.tab.c"
     break;
 
   case 33: /* imp_statements: imp_statements interfacedef  */
 #line 412 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3571 "tools/widl/parser.tab.c"
+#line 3567 "tools/widl/parser.tab.c"
     break;
 
   case 34: /* imp_statements: imp_statements delegatedef  */
 #line 413 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3577 "tools/widl/parser.tab.c"
+#line 3573 "tools/widl/parser.tab.c"
     break;
 
   case 35: /* imp_statements: imp_statements coclass ';'  */
 #line 414 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3583 "tools/widl/parser.tab.c"
+#line 3579 "tools/widl/parser.tab.c"
     break;
 
   case 36: /* imp_statements: imp_statements coclassdef  */
@@ -3587,117 +3583,117 @@
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
 						}
-#line 3591 "tools/widl/parser.tab.c"
+#line 3587 "tools/widl/parser.tab.c"
     break;
 
   case 37: /* imp_statements: imp_statements apicontract ';'  */
 #line 418 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3597 "tools/widl/parser.tab.c"
+#line 3593 "tools/widl/parser.tab.c"
     break;
 
   case 38: /* imp_statements: imp_statements apicontract_def  */
 #line 419 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3604 "tools/widl/parser.tab.c"
+#line 3600 "tools/widl/parser.tab.c"
     break;
 
   case 39: /* imp_statements: imp_statements runtimeclass ';'  */
 #line 421 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3610 "tools/widl/parser.tab.c"
+#line 3606 "tools/widl/parser.tab.c"
     break;
 
   case 40: /* imp_statements: imp_statements runtimeclass_def  */
 #line 422 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3617 "tools/widl/parser.tab.c"
+#line 3613 "tools/widl/parser.tab.c"
     break;
 
   case 41: /* imp_statements: imp_statements moduledef  */
 #line 424 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3623 "tools/widl/parser.tab.c"
+#line 3619 "tools/widl/parser.tab.c"
     break;
 
   case 42: /* imp_statements: imp_statements statement  */
 #line 425 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3629 "tools/widl/parser.tab.c"
+#line 3625 "tools/widl/parser.tab.c"
     break;
 
   case 43: /* imp_statements: imp_statements importlib  */
 #line 426 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
-#line 3635 "tools/widl/parser.tab.c"
+#line 3631 "tools/widl/parser.tab.c"
     break;
 
   case 44: /* imp_statements: imp_statements librarydef  */
 #line 427 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3641 "tools/widl/parser.tab.c"
+#line 3637 "tools/widl/parser.tab.c"
     break;
 
   case 45: /* imp_statements: imp_statements imp_decl_block  */
 #line 428 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
-#line 3647 "tools/widl/parser.tab.c"
+#line 3643 "tools/widl/parser.tab.c"
     break;
 
   case 46: /* int_statements: %empty  */
 #line 431 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3653 "tools/widl/parser.tab.c"
+#line 3649 "tools/widl/parser.tab.c"
     break;
 
   case 47: /* int_statements: int_statements statement  */
 #line 432 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3659 "tools/widl/parser.tab.c"
+#line 3655 "tools/widl/parser.tab.c"
     break;
 
   case 50: /* statement: cppquote  */
 #line 440 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
-#line 3665 "tools/widl/parser.tab.c"
+#line 3661 "tools/widl/parser.tab.c"
     break;
 
   case 51: /* statement: typedecl ';'  */
 #line 441 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
-#line 3671 "tools/widl/parser.tab.c"
+#line 3667 "tools/widl/parser.tab.c"
     break;
 
   case 52: /* statement: declaration ';'  */
 #line 442 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
-#line 3677 "tools/widl/parser.tab.c"
+#line 3673 "tools/widl/parser.tab.c"
     break;
 
   case 53: /* statement: import  */
 #line 443 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
-#line 3683 "tools/widl/parser.tab.c"
+#line 3679 "tools/widl/parser.tab.c"
     break;
 
   case 54: /* statement: typedef ';'  */
 #line 444 "tools/widl/parser.y"
                                                 { (yyval.statement) = (yyvsp[-1].statement); }
-#line 3689 "tools/widl/parser.tab.c"
+#line 3685 "tools/widl/parser.tab.c"
     break;
 
   case 55: /* statement: aPRAGMA  */
 #line 445 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
-#line 3695 "tools/widl/parser.tab.c"
+#line 3691 "tools/widl/parser.tab.c"
     break;
 
   case 56: /* statement: pragma_warning  */
 #line 446 "tools/widl/parser.y"
                          { (yyval.statement) = NULL; }
-#line 3701 "tools/widl/parser.tab.c"
+#line 3697 "tools/widl/parser.tab.c"
     break;
 
   case 57: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
@@ -3709,7 +3705,7 @@
                       if(!result)
                           error_loc("expected \"disable\", \"enable\" or \"default\"\n");
                   }
-#line 3713 "tools/widl/parser.tab.c"
+#line 3709 "tools/widl/parser.tab.c"
     break;
 
   case 58: /* pragma_warning: tPRAGMA_WARNING '(' tDEFAULT ':' warnings ')'  */
@@ -3718,61 +3714,61 @@
                       (yyval.statement) = NULL;
                       do_warning("default", (yyvsp[-1].warning_list));
                   }
-#line 3722 "tools/widl/parser.tab.c"
+#line 3718 "tools/widl/parser.tab.c"
     break;
 
   case 59: /* warnings: aNUM  */
 #line 465 "tools/widl/parser.y"
                { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
-#line 3728 "tools/widl/parser.tab.c"
+#line 3724 "tools/widl/parser.tab.c"
     break;
 
   case 60: /* warnings: warnings aNUM  */
 #line 466 "tools/widl/parser.y"
                         { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
-#line 3734 "tools/widl/parser.tab.c"
+#line 3730 "tools/widl/parser.tab.c"
     break;
 
   case 62: /* typedecl: tENUM aIDENTIFIER  */
 #line 471 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3740 "tools/widl/parser.tab.c"
+#line 3736 "tools/widl/parser.tab.c"
     break;
 
   case 64: /* typedecl: tSTRUCT aIDENTIFIER  */
 #line 473 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3746 "tools/widl/parser.tab.c"
+#line 3742 "tools/widl/parser.tab.c"
     break;
 
   case 66: /* typedecl: tUNION aIDENTIFIER  */
 #line 475 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 3752 "tools/widl/parser.tab.c"
+#line 3748 "tools/widl/parser.tab.c"
     break;
 
   case 67: /* typedecl: attributes enumdef  */
 #line 476 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
-#line 3758 "tools/widl/parser.tab.c"
+#line 3754 "tools/widl/parser.tab.c"
     break;
 
   case 68: /* typedecl: attributes structdef  */
 #line 477 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
-#line 3764 "tools/widl/parser.tab.c"
+#line 3760 "tools/widl/parser.tab.c"
     break;
 
   case 69: /* typedecl: attributes uniondef  */
 #line 478 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
-#line 3770 "tools/widl/parser.tab.c"
+#line 3766 "tools/widl/parser.tab.c"
     break;
 
   case 70: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
 #line 481 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-1].str); }
-#line 3776 "tools/widl/parser.tab.c"
+#line 3772 "tools/widl/parser.tab.c"
     break;
 
   case 71: /* import_start: tIMPORT aSTRING ';'  */
@@ -3783,7 +3779,7 @@
 						  (yyval.import)->import_performed = do_import((yyvsp[-1].str));
 						  if (!(yyval.import)->import_performed) yychar = aEOF;
 						}
-#line 3787 "tools/widl/parser.tab.c"
+#line 3783 "tools/widl/parser.tab.c"
     break;
 
   case 72: /* import: import_start imp_statements aEOF  */
@@ -3792,19 +3788,19 @@
 						  if ((yyvsp[-2].import)->import_performed) pop_import();
 						  free((yyvsp[-2].import));
 						}
-#line 3796 "tools/widl/parser.tab.c"
+#line 3792 "tools/widl/parser.tab.c"
     break;
 
   case 73: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
 #line 498 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
-#line 3802 "tools/widl/parser.tab.c"
+#line 3798 "tools/widl/parser.tab.c"
     break;
 
   case 74: /* libraryhdr: tLIBRARY typename  */
 #line 501 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 3808 "tools/widl/parser.tab.c"
+#line 3804 "tools/widl/parser.tab.c"
     break;
 
   case 75: /* library_start: attributes libraryhdr '{'  */
@@ -3812,37 +3808,37 @@
                                                 { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list)));
 						  if (!parse_only && do_typelib) current_typelib = (yyval.typelib);
 						}
-#line 3816 "tools/widl/parser.tab.c"
+#line 3812 "tools/widl/parser.tab.c"
     break;
 
   case 76: /* librarydef: library_start imp_statements '}' semicolon_opt  */
 #line 508 "tools/widl/parser.y"
                                                 { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
-#line 3822 "tools/widl/parser.tab.c"
+#line 3818 "tools/widl/parser.tab.c"
     break;
 
   case 77: /* m_args: %empty  */
 #line 511 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 3828 "tools/widl/parser.tab.c"
+#line 3824 "tools/widl/parser.tab.c"
     break;
 
   case 79: /* arg_list: arg  */
 #line 515 "tools/widl/parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
-#line 3834 "tools/widl/parser.tab.c"
+#line 3830 "tools/widl/parser.tab.c"
     break;
 
   case 80: /* arg_list: arg_list ',' arg  */
 #line 516 "tools/widl/parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
-#line 3840 "tools/widl/parser.tab.c"
+#line 3836 "tools/widl/parser.tab.c"
     break;
 
   case 82: /* args: arg_list ',' ELLIPSIS  */
 #line 520 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
-#line 3846 "tools/widl/parser.tab.c"
+#line 3842 "tools/widl/parser.tab.c"
     break;
 
   case 83: /* arg: attributes decl_spec m_any_declarator  */
@@ -3852,7 +3848,7 @@
 						  (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3856 "tools/widl/parser.tab.c"
+#line 3852 "tools/widl/parser.tab.c"
     break;
 
   case 84: /* arg: decl_spec m_any_declarator  */
@@ -3862,7 +3858,7 @@
 						  (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3866 "tools/widl/parser.tab.c"
+#line 3862 "tools/widl/parser.tab.c"
     break;
 
   case 85: /* array: '[' expr ']'  */
@@ -3871,91 +3867,91 @@
 						  if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0)
 						      error_loc("array dimension is not a positive integer constant\n");
 						}
-#line 3875 "tools/widl/parser.tab.c"
+#line 3871 "tools/widl/parser.tab.c"
     break;
 
   case 86: /* array: '[' '*' ']'  */
 #line 540 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3881 "tools/widl/parser.tab.c"
+#line 3877 "tools/widl/parser.tab.c"
     break;
 
   case 87: /* array: '[' ']'  */
 #line 541 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3887 "tools/widl/parser.tab.c"
+#line 3883 "tools/widl/parser.tab.c"
     break;
 
   case 88: /* m_attributes: %empty  */
 #line 544 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 3893 "tools/widl/parser.tab.c"
+#line 3889 "tools/widl/parser.tab.c"
     break;
 
   case 90: /* attributes: '[' attrib_list ']'  */
 #line 549 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 3899 "tools/widl/parser.tab.c"
+#line 3895 "tools/widl/parser.tab.c"
     break;
 
   case 91: /* attrib_list: attribute  */
 #line 552 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
-#line 3905 "tools/widl/parser.tab.c"
+#line 3901 "tools/widl/parser.tab.c"
     break;
 
   case 92: /* attrib_list: attrib_list ',' attribute  */
 #line 553 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
-#line 3911 "tools/widl/parser.tab.c"
+#line 3907 "tools/widl/parser.tab.c"
     break;
 
   case 93: /* attrib_list: attrib_list ']' '[' attribute  */
 #line 554 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
-#line 3917 "tools/widl/parser.tab.c"
+#line 3913 "tools/widl/parser.tab.c"
     break;
 
   case 94: /* str_list: aSTRING  */
 #line 557 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
-#line 3923 "tools/widl/parser.tab.c"
+#line 3919 "tools/widl/parser.tab.c"
     break;
 
   case 95: /* str_list: str_list ',' aSTRING  */
 #line 558 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
-#line 3929 "tools/widl/parser.tab.c"
+#line 3925 "tools/widl/parser.tab.c"
     break;
 
   case 96: /* marshaling_behavior: tAGILE  */
 #line 562 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_AGILE; }
-#line 3935 "tools/widl/parser.tab.c"
+#line 3931 "tools/widl/parser.tab.c"
     break;
 
   case 97: /* marshaling_behavior: tNONE  */
 #line 563 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_NONE; }
-#line 3941 "tools/widl/parser.tab.c"
+#line 3937 "tools/widl/parser.tab.c"
     break;
 
   case 98: /* marshaling_behavior: tSTANDARD  */
 #line 564 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_STANDARD; }
-#line 3947 "tools/widl/parser.tab.c"
+#line 3943 "tools/widl/parser.tab.c"
     break;
 
   case 99: /* contract_ver: aNUM  */
 #line 568 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION(0, (yyvsp[0].num)); }
-#line 3953 "tools/widl/parser.tab.c"
+#line 3949 "tools/widl/parser.tab.c"
     break;
 
   case 100: /* contract_ver: aNUM '.' aNUM  */
 #line 569 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), (yyvsp[-2].num)); }
-#line 3959 "tools/widl/parser.tab.c"
+#line 3955 "tools/widl/parser.tab.c"
     break;
 
   case 101: /* contract_req: decl_spec ',' contract_ver  */
@@ -3965,7 +3961,7 @@
 						  (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num));
 						  (yyval.expr) = make_exprt(EXPR_GTREQL, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyval.expr));
 						}
-#line 3969 "tools/widl/parser.tab.c"
+#line 3965 "tools/widl/parser.tab.c"
     break;
 
   case 102: /* static_attr: decl_spec ',' contract_req  */
@@ -3974,223 +3970,223 @@
 						      error_loc("type %s is not an interface\n", (yyvsp[-2].declspec)->type->name);
 						  (yyval.expr) = make_exprt(EXPR_MEMBER, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyvsp[0].expr));
 						}
-#line 3978 "tools/widl/parser.tab.c"
+#line 3974 "tools/widl/parser.tab.c"
     break;
 
   case 103: /* attribute: %empty  */
 #line 583 "tools/widl/parser.y"
                                                 { (yyval.attr) = NULL; }
-#line 3984 "tools/widl/parser.tab.c"
+#line 3980 "tools/widl/parser.tab.c"
     break;
 
   case 104: /* attribute: tACTIVATABLE '(' contract_req ')'  */
 #line 584 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ACTIVATABLE, (yyvsp[-1].expr)); }
-#line 3990 "tools/widl/parser.tab.c"
+#line 3986 "tools/widl/parser.tab.c"
     break;
 
   case 105: /* attribute: tAGGREGATABLE  */
 #line 585 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
-#line 3996 "tools/widl/parser.tab.c"
+#line 3992 "tools/widl/parser.tab.c"
     break;
 
   case 106: /* attribute: tANNOTATION '(' aSTRING ')'  */
 #line 586 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
-#line 4002 "tools/widl/parser.tab.c"
+#line 3998 "tools/widl/parser.tab.c"
     break;
 
   case 107: /* attribute: tAPPOBJECT  */
 #line 587 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
-#line 4008 "tools/widl/parser.tab.c"
+#line 4004 "tools/widl/parser.tab.c"
     break;
 
   case 108: /* attribute: tASYNC  */
 #line 588 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ASYNC); }
-#line 4014 "tools/widl/parser.tab.c"
+#line 4010 "tools/widl/parser.tab.c"
     break;
 
   case 109: /* attribute: tAUTOHANDLE  */
 #line 589 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
-#line 4020 "tools/widl/parser.tab.c"
+#line 4016 "tools/widl/parser.tab.c"
     break;
 
   case 110: /* attribute: tBINDABLE  */
 #line 590 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_BINDABLE); }
-#line 4026 "tools/widl/parser.tab.c"
+#line 4022 "tools/widl/parser.tab.c"
     break;
 
   case 111: /* attribute: tBROADCAST  */
 #line 591 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_BROADCAST); }
-#line 4032 "tools/widl/parser.tab.c"
+#line 4028 "tools/widl/parser.tab.c"
     break;
 
   case 112: /* attribute: tCALLAS '(' ident ')'  */
 #line 592 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
-#line 4038 "tools/widl/parser.tab.c"
+#line 4034 "tools/widl/parser.tab.c"
     break;
 
   case 113: /* attribute: tCASE '(' expr_list_int_const ')'  */
 #line 593 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
-#line 4044 "tools/widl/parser.tab.c"
+#line 4040 "tools/widl/parser.tab.c"
     break;
 
   case 114: /* attribute: tCODE  */
 #line 594 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_CODE); }
-#line 4050 "tools/widl/parser.tab.c"
+#line 4046 "tools/widl/parser.tab.c"
     break;
 
   case 115: /* attribute: tCOMMSTATUS  */
 #line 595 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
-#line 4056 "tools/widl/parser.tab.c"
+#line 4052 "tools/widl/parser.tab.c"
     break;
 
   case 116: /* attribute: tCONTEXTHANDLE  */
 #line 596 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-#line 4062 "tools/widl/parser.tab.c"
+#line 4058 "tools/widl/parser.tab.c"
     break;
 
   case 117: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
 #line 597 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-#line 4068 "tools/widl/parser.tab.c"
+#line 4064 "tools/widl/parser.tab.c"
     break;
 
   case 118: /* attribute: tCONTEXTHANDLESERIALIZE  */
 #line 598 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-#line 4074 "tools/widl/parser.tab.c"
+#line 4070 "tools/widl/parser.tab.c"
     break;
 
   case 119: /* attribute: tCONTRACT '(' contract_req ')'  */
 #line 599 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_CONTRACT, (yyvsp[-1].expr)); }
-#line 4080 "tools/widl/parser.tab.c"
+#line 4076 "tools/widl/parser.tab.c"
     break;
 
   case 120: /* attribute: tCONTRACTVERSION '(' contract_ver ')'  */
 #line 600 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTRACTVERSION, (yyvsp[-1].num)); }
-#line 4086 "tools/widl/parser.tab.c"
+#line 4082 "tools/widl/parser.tab.c"
     break;
 
   case 121: /* attribute: tCONTROL  */
 #line 601 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_CONTROL); }
-#line 4092 "tools/widl/parser.tab.c"
+#line 4088 "tools/widl/parser.tab.c"
     break;
 
   case 122: /* attribute: tCUSTOM '(' uuid_string ',' expr_const ')'  */
 #line 602 "tools/widl/parser.y"
                                                      { (yyval.attr) = make_custom_attr((yyvsp[-3].uuid), (yyvsp[-1].expr)); }
-#line 4098 "tools/widl/parser.tab.c"
+#line 4094 "tools/widl/parser.tab.c"
     break;
 
   case 123: /* attribute: tDECODE  */
 #line 603 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 4104 "tools/widl/parser.tab.c"
+#line 4100 "tools/widl/parser.tab.c"
     break;
 
   case 124: /* attribute: tDEFAULT  */
 #line 604 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULT); }
-#line 4110 "tools/widl/parser.tab.c"
+#line 4106 "tools/widl/parser.tab.c"
     break;
 
   case 125: /* attribute: tDEFAULTBIND  */
 #line 605 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
-#line 4116 "tools/widl/parser.tab.c"
+#line 4112 "tools/widl/parser.tab.c"
     break;
 
   case 126: /* attribute: tDEFAULTCOLLELEM  */
 #line 606 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
-#line 4122 "tools/widl/parser.tab.c"
+#line 4118 "tools/widl/parser.tab.c"
     break;
 
   case 127: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
 #line 607 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
-#line 4128 "tools/widl/parser.tab.c"
+#line 4124 "tools/widl/parser.tab.c"
     break;
 
   case 128: /* attribute: tDEFAULTVTABLE  */
 #line 608 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
-#line 4134 "tools/widl/parser.tab.c"
+#line 4130 "tools/widl/parser.tab.c"
     break;
 
   case 129: /* attribute: tDISABLECONSISTENCYCHECK  */
 #line 609 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
-#line 4140 "tools/widl/parser.tab.c"
+#line 4136 "tools/widl/parser.tab.c"
     break;
 
   case 130: /* attribute: tDISPLAYBIND  */
 #line 610 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
-#line 4146 "tools/widl/parser.tab.c"
+#line 4142 "tools/widl/parser.tab.c"
     break;
 
   case 131: /* attribute: tDLLNAME '(' aSTRING ')'  */
 #line 611 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
-#line 4152 "tools/widl/parser.tab.c"
+#line 4148 "tools/widl/parser.tab.c"
     break;
 
   case 132: /* attribute: tDUAL  */
 #line 612 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DUAL); }
-#line 4158 "tools/widl/parser.tab.c"
+#line 4154 "tools/widl/parser.tab.c"
     break;
 
   case 133: /* attribute: tENABLEALLOCATE  */
 #line 613 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
-#line 4164 "tools/widl/parser.tab.c"
+#line 4160 "tools/widl/parser.tab.c"
     break;
 
   case 134: /* attribute: tENCODE  */
 #line 614 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 4170 "tools/widl/parser.tab.c"
+#line 4166 "tools/widl/parser.tab.c"
     break;
 
   case 135: /* attribute: tENDPOINT '(' str_list ')'  */
 #line 615 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
-#line 4176 "tools/widl/parser.tab.c"
+#line 4172 "tools/widl/parser.tab.c"
     break;
 
   case 136: /* attribute: tENTRY '(' expr_const ')'  */
 #line 616 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
-#line 4182 "tools/widl/parser.tab.c"
+#line 4178 "tools/widl/parser.tab.c"
     break;
 
   case 137: /* attribute: tEVENTADD  */
 #line 617 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EVENTADD); }
-#line 4188 "tools/widl/parser.tab.c"
+#line 4184 "tools/widl/parser.tab.c"
     break;
 
   case 138: /* attribute: tEVENTREMOVE  */
 #line 618 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EVENTREMOVE); }
-#line 4194 "tools/widl/parser.tab.c"
+#line 4190 "tools/widl/parser.tab.c"
     break;
 
   case 139: /* attribute: tEXCLUSIVETO '(' decl_spec ')'  */
@@ -4198,289 +4194,289 @@
                                                 { if ((yyvsp[-1].declspec)->type->type_type != TYPE_RUNTIMECLASS)
 						      error_loc("type %s is not a runtimeclass\n", (yyvsp[-1].declspec)->type->name);
 						  (yyval.attr) = make_attrp(ATTR_EXCLUSIVETO, (yyvsp[-1].declspec)->type); }
-#line 4202 "tools/widl/parser.tab.c"
+#line 4198 "tools/widl/parser.tab.c"
     break;
 
   case 140: /* attribute: tEXPLICITHANDLE  */
 #line 622 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 4208 "tools/widl/parser.tab.c"
+#line 4204 "tools/widl/parser.tab.c"
     break;
 
   case 141: /* attribute: tFAULTSTATUS  */
 #line 623 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
-#line 4214 "tools/widl/parser.tab.c"
+#line 4210 "tools/widl/parser.tab.c"
     break;
 
   case 142: /* attribute: tFLAGS  */
 #line 624 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_FLAGS); }
-#line 4220 "tools/widl/parser.tab.c"
+#line 4216 "tools/widl/parser.tab.c"
     break;
 
   case 143: /* attribute: tFORCEALLOCATE  */
 #line 625 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
-#line 4226 "tools/widl/parser.tab.c"
+#line 4222 "tools/widl/parser.tab.c"
     break;
 
   case 144: /* attribute: tHANDLE  */
 #line 626 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_HANDLE); }
-#line 4232 "tools/widl/parser.tab.c"
+#line 4228 "tools/widl/parser.tab.c"
     break;
 
   case 145: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
 #line 627 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
-#line 4238 "tools/widl/parser.tab.c"
+#line 4234 "tools/widl/parser.tab.c"
     break;
 
   case 146: /* attribute: tHELPFILE '(' aSTRING ')'  */
 #line 628 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
-#line 4244 "tools/widl/parser.tab.c"
+#line 4240 "tools/widl/parser.tab.c"
     break;
 
   case 147: /* attribute: tHELPSTRING '(' aSTRING ')'  */
 #line 629 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
-#line 4250 "tools/widl/parser.tab.c"
+#line 4246 "tools/widl/parser.tab.c"
     break;
 
   case 148: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
 #line 630 "tools/widl/parser.y"
                                                         { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
-#line 4256 "tools/widl/parser.tab.c"
+#line 4252 "tools/widl/parser.tab.c"
     break;
 
   case 149: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
 #line 631 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
-#line 4262 "tools/widl/parser.tab.c"
+#line 4258 "tools/widl/parser.tab.c"
     break;
 
   case 150: /* attribute: tHIDDEN  */
 #line 632 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_HIDDEN); }
-#line 4268 "tools/widl/parser.tab.c"
+#line 4264 "tools/widl/parser.tab.c"
     break;
 
   case 151: /* attribute: tID '(' expr_int_const ')'  */
 #line 633 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
-#line 4274 "tools/widl/parser.tab.c"
+#line 4270 "tools/widl/parser.tab.c"
     break;
 
   case 152: /* attribute: tIDEMPOTENT  */
 #line 634 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
-#line 4280 "tools/widl/parser.tab.c"
+#line 4276 "tools/widl/parser.tab.c"
     break;
 
   case 153: /* attribute: tIGNORE  */
 #line 635 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IGNORE); }
-#line 4286 "tools/widl/parser.tab.c"
+#line 4282 "tools/widl/parser.tab.c"
     break;
 
   case 154: /* attribute: tIIDIS '(' expr ')'  */
 #line 636 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
-#line 4292 "tools/widl/parser.tab.c"
+#line 4288 "tools/widl/parser.tab.c"
     break;
 
   case 155: /* attribute: tIMMEDIATEBIND  */
 #line 637 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
-#line 4298 "tools/widl/parser.tab.c"
+#line 4294 "tools/widl/parser.tab.c"
     break;
 
   case 156: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
 #line 638 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
-#line 4304 "tools/widl/parser.tab.c"
+#line 4300 "tools/widl/parser.tab.c"
     break;
 
   case 157: /* attribute: tIN  */
 #line 639 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IN); }
-#line 4310 "tools/widl/parser.tab.c"
+#line 4306 "tools/widl/parser.tab.c"
     break;
 
   case 158: /* attribute: tINPUTSYNC  */
 #line 640 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
-#line 4316 "tools/widl/parser.tab.c"
+#line 4312 "tools/widl/parser.tab.c"
     break;
 
   case 159: /* attribute: tLENGTHIS '(' m_exprs ')'  */
 #line 641 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
-#line 4322 "tools/widl/parser.tab.c"
+#line 4318 "tools/widl/parser.tab.c"
     break;
 
   case 160: /* attribute: tLCID '(' expr_int_const ')'  */
 #line 642 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
-#line 4328 "tools/widl/parser.tab.c"
+#line 4324 "tools/widl/parser.tab.c"
     break;
 
   case 161: /* attribute: tLCID  */
 #line 643 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
-#line 4334 "tools/widl/parser.tab.c"
+#line 4330 "tools/widl/parser.tab.c"
     break;
 
   case 162: /* attribute: tLICENSED  */
 #line 644 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_LICENSED); }
-#line 4340 "tools/widl/parser.tab.c"
+#line 4336 "tools/widl/parser.tab.c"
     break;
 
   case 163: /* attribute: tLOCAL  */
 #line 645 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_LOCAL); }
-#line 4346 "tools/widl/parser.tab.c"
+#line 4342 "tools/widl/parser.tab.c"
     break;
 
   case 164: /* attribute: tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'  */
 #line 647 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_MARSHALING_BEHAVIOR, (yyvsp[-1].num)); }
-#line 4352 "tools/widl/parser.tab.c"
+#line 4348 "tools/widl/parser.tab.c"
     break;
 
   case 165: /* attribute: tMAYBE  */
 #line 648 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_MAYBE); }
-#line 4358 "tools/widl/parser.tab.c"
+#line 4354 "tools/widl/parser.tab.c"
     break;
 
   case 166: /* attribute: tMESSAGE  */
 #line 649 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_MESSAGE); }
-#line 4364 "tools/widl/parser.tab.c"
+#line 4360 "tools/widl/parser.tab.c"
     break;
 
   case 167: /* attribute: tNOCODE  */
 #line 650 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NOCODE); }
-#line 4370 "tools/widl/parser.tab.c"
+#line 4366 "tools/widl/parser.tab.c"
     break;
 
   case 168: /* attribute: tNONBROWSABLE  */
 #line 651 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
-#line 4376 "tools/widl/parser.tab.c"
+#line 4372 "tools/widl/parser.tab.c"
     break;
 
   case 169: /* attribute: tNONCREATABLE  */
 #line 652 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
-#line 4382 "tools/widl/parser.tab.c"
+#line 4378 "tools/widl/parser.tab.c"
     break;
 
   case 170: /* attribute: tNONEXTENSIBLE  */
 #line 653 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
-#line 4388 "tools/widl/parser.tab.c"
+#line 4384 "tools/widl/parser.tab.c"
     break;
 
   case 171: /* attribute: tNOTIFY  */
 #line 654 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NOTIFY); }
-#line 4394 "tools/widl/parser.tab.c"
+#line 4390 "tools/widl/parser.tab.c"
     break;
 
   case 172: /* attribute: tNOTIFYFLAG  */
 #line 655 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
-#line 4400 "tools/widl/parser.tab.c"
+#line 4396 "tools/widl/parser.tab.c"
     break;
 
   case 173: /* attribute: tOBJECT  */
 #line 656 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OBJECT); }
-#line 4406 "tools/widl/parser.tab.c"
+#line 4402 "tools/widl/parser.tab.c"
     break;
 
   case 174: /* attribute: tODL  */
 #line 657 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ODL); }
-#line 4412 "tools/widl/parser.tab.c"
+#line 4408 "tools/widl/parser.tab.c"
     break;
 
   case 175: /* attribute: tOLEAUTOMATION  */
 #line 658 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
-#line 4418 "tools/widl/parser.tab.c"
+#line 4414 "tools/widl/parser.tab.c"
     break;
 
   case 176: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
 #line 659 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
-#line 4424 "tools/widl/parser.tab.c"
+#line 4420 "tools/widl/parser.tab.c"
     break;
 
   case 177: /* attribute: tOPTIONAL  */
 #line 660 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
-#line 4430 "tools/widl/parser.tab.c"
+#line 4426 "tools/widl/parser.tab.c"
     break;
 
   case 178: /* attribute: tOUT  */
 #line 661 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OUT); }
-#line 4436 "tools/widl/parser.tab.c"
+#line 4432 "tools/widl/parser.tab.c"
     break;
 
   case 179: /* attribute: tPARTIALIGNORE  */
 #line 662 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
-#line 4442 "tools/widl/parser.tab.c"
+#line 4438 "tools/widl/parser.tab.c"
     break;
 
   case 180: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
 #line 663 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
-#line 4448 "tools/widl/parser.tab.c"
+#line 4444 "tools/widl/parser.tab.c"
     break;
 
   case 181: /* attribute: tPROGID '(' aSTRING ')'  */
 #line 664 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
-#line 4454 "tools/widl/parser.tab.c"
+#line 4450 "tools/widl/parser.tab.c"
     break;
 
   case 182: /* attribute: tPROPGET  */
 #line 665 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROPGET); }
-#line 4460 "tools/widl/parser.tab.c"
+#line 4456 "tools/widl/parser.tab.c"
     break;
 
   case 183: /* attribute: tPROPPUT  */
 #line 666 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROPPUT); }
-#line 4466 "tools/widl/parser.tab.c"
+#line 4462 "tools/widl/parser.tab.c"
     break;
 
   case 184: /* attribute: tPROPPUTREF  */
 #line 667 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
-#line 4472 "tools/widl/parser.tab.c"
+#line 4468 "tools/widl/parser.tab.c"
     break;
 
   case 185: /* attribute: tPROXY  */
 #line 668 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROXY); }
-#line 4478 "tools/widl/parser.tab.c"
+#line 4474 "tools/widl/parser.tab.c"
     break;
 
   case 186: /* attribute: tPUBLIC  */
 #line 669 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PUBLIC); }
-#line 4484 "tools/widl/parser.tab.c"
+#line 4480 "tools/widl/parser.tab.c"
     break;
 
   case 187: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
@@ -4488,157 +4484,157 @@
                                                 { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
 						  list = append_expr( list, (yyvsp[-1].expr) );
 						  (yyval.attr) = make_attrp(ATTR_RANGE, list); }
-#line 4492 "tools/widl/parser.tab.c"
+#line 4488 "tools/widl/parser.tab.c"
     break;
 
   case 188: /* attribute: tREADONLY  */
 #line 674 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_READONLY); }
-#line 4498 "tools/widl/parser.tab.c"
+#line 4494 "tools/widl/parser.tab.c"
     break;
 
   case 189: /* attribute: tREPRESENTAS '(' type ')'  */
 #line 675 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
-#line 4504 "tools/widl/parser.tab.c"
+#line 4500 "tools/widl/parser.tab.c"
     break;
 
   case 190: /* attribute: tREQUESTEDIT  */
 #line 676 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
-#line 4510 "tools/widl/parser.tab.c"
+#line 4506 "tools/widl/parser.tab.c"
     break;
 
   case 191: /* attribute: tRESTRICTED  */
 #line 677 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
-#line 4516 "tools/widl/parser.tab.c"
+#line 4512 "tools/widl/parser.tab.c"
     break;
 
   case 192: /* attribute: tRETVAL  */
 #line 678 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_RETVAL); }
-#line 4522 "tools/widl/parser.tab.c"
+#line 4518 "tools/widl/parser.tab.c"
     break;
 
   case 193: /* attribute: tSIZEIS '(' m_exprs ')'  */
 #line 679 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
-#line 4528 "tools/widl/parser.tab.c"
+#line 4524 "tools/widl/parser.tab.c"
     break;
 
   case 194: /* attribute: tSOURCE  */
 #line 680 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_SOURCE); }
-#line 4534 "tools/widl/parser.tab.c"
+#line 4530 "tools/widl/parser.tab.c"
     break;
 
   case 195: /* attribute: tSTATIC '(' static_attr ')'  */
 #line 681 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_STATIC, (yyvsp[-1].expr)); }
-#line 4540 "tools/widl/parser.tab.c"
+#line 4536 "tools/widl/parser.tab.c"
     break;
 
   case 196: /* attribute: tSTRICTCONTEXTHANDLE  */
 #line 682 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
-#line 4546 "tools/widl/parser.tab.c"
+#line 4542 "tools/widl/parser.tab.c"
     break;
 
   case 197: /* attribute: tSTRING  */
 #line 683 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_STRING); }
-#line 4552 "tools/widl/parser.tab.c"
+#line 4548 "tools/widl/parser.tab.c"
     break;
 
   case 198: /* attribute: tSWITCHIS '(' expr ')'  */
 #line 684 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
-#line 4558 "tools/widl/parser.tab.c"
+#line 4554 "tools/widl/parser.tab.c"
     break;
 
   case 199: /* attribute: tSWITCHTYPE '(' type ')'  */
 #line 685 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
-#line 4564 "tools/widl/parser.tab.c"
+#line 4560 "tools/widl/parser.tab.c"
     break;
 
   case 200: /* attribute: tTRANSMITAS '(' type ')'  */
 #line 686 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
-#line 4570 "tools/widl/parser.tab.c"
+#line 4566 "tools/widl/parser.tab.c"
     break;
 
   case 201: /* attribute: tTHREADING '(' threading_type ')'  */
 #line 687 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
-#line 4576 "tools/widl/parser.tab.c"
+#line 4572 "tools/widl/parser.tab.c"
     break;
 
   case 202: /* attribute: tUIDEFAULT  */
 #line 688 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
-#line 4582 "tools/widl/parser.tab.c"
+#line 4578 "tools/widl/parser.tab.c"
     break;
 
   case 203: /* attribute: tUSESGETLASTERROR  */
 #line 689 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
-#line 4588 "tools/widl/parser.tab.c"
+#line 4584 "tools/widl/parser.tab.c"
     break;
 
   case 204: /* attribute: tUSERMARSHAL '(' type ')'  */
 #line 690 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
-#line 4594 "tools/widl/parser.tab.c"
+#line 4590 "tools/widl/parser.tab.c"
     break;
 
   case 205: /* attribute: tUUID '(' uuid_string ')'  */
 #line 691 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
-#line 4600 "tools/widl/parser.tab.c"
+#line 4596 "tools/widl/parser.tab.c"
     break;
 
   case 206: /* attribute: tASYNCUUID '(' uuid_string ')'  */
 #line 692 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
-#line 4606 "tools/widl/parser.tab.c"
+#line 4602 "tools/widl/parser.tab.c"
     break;
 
   case 207: /* attribute: tV1ENUM  */
 #line 693 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_V1ENUM); }
-#line 4612 "tools/widl/parser.tab.c"
+#line 4608 "tools/widl/parser.tab.c"
     break;
 
   case 208: /* attribute: tVARARG  */
 #line 694 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_VARARG); }
-#line 4618 "tools/widl/parser.tab.c"
+#line 4614 "tools/widl/parser.tab.c"
     break;
 
   case 209: /* attribute: tVERSION '(' version ')'  */
 #line 695 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
-#line 4624 "tools/widl/parser.tab.c"
+#line 4620 "tools/widl/parser.tab.c"
     break;
 
   case 210: /* attribute: tVIPROGID '(' aSTRING ')'  */
 #line 696 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
-#line 4630 "tools/widl/parser.tab.c"
+#line 4626 "tools/widl/parser.tab.c"
     break;
 
   case 211: /* attribute: tWIREMARSHAL '(' type ')'  */
 #line 697 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
-#line 4636 "tools/widl/parser.tab.c"
+#line 4632 "tools/widl/parser.tab.c"
     break;
 
   case 212: /* attribute: pointer_type  */
 #line 698 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
-#line 4642 "tools/widl/parser.tab.c"
+#line 4638 "tools/widl/parser.tab.c"
     break;
 
   case 214: /* uuid_string: aSTRING  */
@@ -4646,43 +4642,43 @@
                                                 { if (!is_valid_uuid((yyvsp[0].str)))
 						    error_loc("invalid UUID: %s\n", (yyvsp[0].str));
 						  (yyval.uuid) = parse_uuid((yyvsp[0].str)); }
-#line 4650 "tools/widl/parser.tab.c"
+#line 4646 "tools/widl/parser.tab.c"
     break;
 
   case 215: /* callconv: tCDECL  */
 #line 708 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__cdecl"); }
-#line 4656 "tools/widl/parser.tab.c"
+#line 4652 "tools/widl/parser.tab.c"
     break;
 
   case 216: /* callconv: tFASTCALL  */
 #line 709 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__fastcall"); }
-#line 4662 "tools/widl/parser.tab.c"
+#line 4658 "tools/widl/parser.tab.c"
     break;
 
   case 217: /* callconv: tPASCAL  */
 #line 710 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__pascal"); }
-#line 4668 "tools/widl/parser.tab.c"
+#line 4664 "tools/widl/parser.tab.c"
     break;
 
   case 218: /* callconv: tSTDCALL  */
 #line 711 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__stdcall"); }
-#line 4674 "tools/widl/parser.tab.c"
+#line 4670 "tools/widl/parser.tab.c"
     break;
 
   case 219: /* cases: %empty  */
 #line 714 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4680 "tools/widl/parser.tab.c"
+#line 4676 "tools/widl/parser.tab.c"
     break;
 
   case 220: /* cases: cases case  */
 #line 715 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4686 "tools/widl/parser.tab.c"
+#line 4682 "tools/widl/parser.tab.c"
     break;
 
   case 221: /* case: tCASE expr_int_const ':' union_field  */
@@ -4691,7 +4687,7 @@
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4695 "tools/widl/parser.tab.c"
+#line 4691 "tools/widl/parser.tab.c"
     break;
 
   case 222: /* case: tDEFAULT ':' union_field  */
@@ -4700,19 +4696,19 @@
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4704 "tools/widl/parser.tab.c"
+#line 4700 "tools/widl/parser.tab.c"
     break;
 
   case 223: /* enums: %empty  */
 #line 728 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4710 "tools/widl/parser.tab.c"
+#line 4706 "tools/widl/parser.tab.c"
     break;
 
   case 224: /* enums: enum_list ','  */
 #line 729 "tools/widl/parser.y"
                                                 { (yyval.var_list) = (yyvsp[-1].var_list); }
-#line 4716 "tools/widl/parser.tab.c"
+#line 4712 "tools/widl/parser.tab.c"
     break;
 
   case 226: /* enum_list: enum  */
@@ -4721,7 +4717,7 @@
 						    (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
 						}
-#line 4725 "tools/widl/parser.tab.c"
+#line 4721 "tools/widl/parser.tab.c"
     break;
 
   case 227: /* enum_list: enum_list ',' enum  */
@@ -4736,7 +4732,7 @@
                                                   }
                                                   (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
 						}
-#line 4740 "tools/widl/parser.tab.c"
+#line 4736 "tools/widl/parser.tab.c"
     break;
 
   case 228: /* enum_member: m_attributes ident  */
@@ -4744,7 +4740,7 @@
                                                 { (yyval.var) = (yyvsp[0].var);
 						  (yyval.var)->attrs = check_enum_member_attrs((yyvsp[-1].attr_list));
 						}
-#line 4748 "tools/widl/parser.tab.c"
+#line 4744 "tools/widl/parser.tab.c"
     break;
 
   case 229: /* enum: enum_member '=' expr_int_const  */
@@ -4753,7 +4749,7 @@
 						  (yyval.var)->eval = (yyvsp[0].expr);
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4757 "tools/widl/parser.tab.c"
+#line 4753 "tools/widl/parser.tab.c"
     break;
 
   case 230: /* enum: enum_member  */
@@ -4761,289 +4757,289 @@
                                                 { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4765 "tools/widl/parser.tab.c"
+#line 4761 "tools/widl/parser.tab.c"
     break;
 
   case 231: /* enumdef: tENUM m_typename '{' enums '}'  */
 #line 763 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 4771 "tools/widl/parser.tab.c"
+#line 4767 "tools/widl/parser.tab.c"
     break;
 
   case 232: /* m_exprs: m_expr  */
 #line 766 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4777 "tools/widl/parser.tab.c"
+#line 4773 "tools/widl/parser.tab.c"
     break;
 
   case 233: /* m_exprs: m_exprs ',' m_expr  */
 #line 767 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4783 "tools/widl/parser.tab.c"
+#line 4779 "tools/widl/parser.tab.c"
     break;
 
   case 234: /* m_expr: %empty  */
 #line 770 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 4789 "tools/widl/parser.tab.c"
+#line 4785 "tools/widl/parser.tab.c"
     break;
 
   case 236: /* expr: aNUM  */
 #line 774 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
-#line 4795 "tools/widl/parser.tab.c"
+#line 4791 "tools/widl/parser.tab.c"
     break;
 
   case 237: /* expr: aHEXNUM  */
 #line 775 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
-#line 4801 "tools/widl/parser.tab.c"
+#line 4797 "tools/widl/parser.tab.c"
     break;
 
   case 238: /* expr: aDOUBLE  */
 #line 776 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
-#line 4807 "tools/widl/parser.tab.c"
+#line 4803 "tools/widl/parser.tab.c"
     break;
 
   case 239: /* expr: tFALSE  */
 #line 777 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
-#line 4813 "tools/widl/parser.tab.c"
+#line 4809 "tools/widl/parser.tab.c"
     break;
 
   case 240: /* expr: tNULL  */
 #line 778 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
-#line 4819 "tools/widl/parser.tab.c"
+#line 4815 "tools/widl/parser.tab.c"
     break;
 
   case 241: /* expr: tTRUE  */
 #line 779 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
-#line 4825 "tools/widl/parser.tab.c"
+#line 4821 "tools/widl/parser.tab.c"
     break;
 
   case 242: /* expr: aSTRING  */
 #line 780 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
-#line 4831 "tools/widl/parser.tab.c"
+#line 4827 "tools/widl/parser.tab.c"
     break;
 
   case 243: /* expr: aWSTRING  */
 #line 781 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
-#line 4837 "tools/widl/parser.tab.c"
+#line 4833 "tools/widl/parser.tab.c"
     break;
 
   case 244: /* expr: aSQSTRING  */
 #line 782 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
-#line 4843 "tools/widl/parser.tab.c"
+#line 4839 "tools/widl/parser.tab.c"
     break;
 
   case 245: /* expr: aIDENTIFIER  */
 #line 783 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
-#line 4849 "tools/widl/parser.tab.c"
+#line 4845 "tools/widl/parser.tab.c"
     break;
 
   case 246: /* expr: expr '?' expr ':' expr  */
 #line 784 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4855 "tools/widl/parser.tab.c"
+#line 4851 "tools/widl/parser.tab.c"
     break;
 
   case 247: /* expr: expr LOGICALOR expr  */
 #line 785 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4861 "tools/widl/parser.tab.c"
+#line 4857 "tools/widl/parser.tab.c"
     break;
 
   case 248: /* expr: expr LOGICALAND expr  */
 #line 786 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4867 "tools/widl/parser.tab.c"
+#line 4863 "tools/widl/parser.tab.c"
     break;
 
   case 249: /* expr: expr '|' expr  */
 #line 787 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4873 "tools/widl/parser.tab.c"
+#line 4869 "tools/widl/parser.tab.c"
     break;
 
   case 250: /* expr: expr '^' expr  */
 #line 788 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4879 "tools/widl/parser.tab.c"
+#line 4875 "tools/widl/parser.tab.c"
     break;
 
   case 251: /* expr: expr '&' expr  */
 #line 789 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4885 "tools/widl/parser.tab.c"
+#line 4881 "tools/widl/parser.tab.c"
     break;
 
   case 252: /* expr: expr EQUALITY expr  */
 #line 790 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4891 "tools/widl/parser.tab.c"
+#line 4887 "tools/widl/parser.tab.c"
     break;
 
   case 253: /* expr: expr INEQUALITY expr  */
 #line 791 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4897 "tools/widl/parser.tab.c"
+#line 4893 "tools/widl/parser.tab.c"
     break;
 
   case 254: /* expr: expr '>' expr  */
 #line 792 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4903 "tools/widl/parser.tab.c"
+#line 4899 "tools/widl/parser.tab.c"
     break;
 
   case 255: /* expr: expr '<' expr  */
 #line 793 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4909 "tools/widl/parser.tab.c"
+#line 4905 "tools/widl/parser.tab.c"
     break;
 
   case 256: /* expr: expr GREATEREQUAL expr  */
 #line 794 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4915 "tools/widl/parser.tab.c"
+#line 4911 "tools/widl/parser.tab.c"
     break;
 
   case 257: /* expr: expr LESSEQUAL expr  */
 #line 795 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4921 "tools/widl/parser.tab.c"
+#line 4917 "tools/widl/parser.tab.c"
     break;
 
   case 258: /* expr: expr SHL expr  */
 #line 796 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4927 "tools/widl/parser.tab.c"
+#line 4923 "tools/widl/parser.tab.c"
     break;
 
   case 259: /* expr: expr SHR expr  */
 #line 797 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4933 "tools/widl/parser.tab.c"
+#line 4929 "tools/widl/parser.tab.c"
     break;
 
   case 260: /* expr: expr '+' expr  */
 #line 798 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4939 "tools/widl/parser.tab.c"
+#line 4935 "tools/widl/parser.tab.c"
     break;
 
   case 261: /* expr: expr '-' expr  */
 #line 799 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4945 "tools/widl/parser.tab.c"
+#line 4941 "tools/widl/parser.tab.c"
     break;
 
   case 262: /* expr: expr '%' expr  */
 #line 800 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4951 "tools/widl/parser.tab.c"
+#line 4947 "tools/widl/parser.tab.c"
     break;
 
   case 263: /* expr: expr '*' expr  */
 #line 801 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4957 "tools/widl/parser.tab.c"
+#line 4953 "tools/widl/parser.tab.c"
     break;
 
   case 264: /* expr: expr '/' expr  */
 #line 802 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4963 "tools/widl/parser.tab.c"
+#line 4959 "tools/widl/parser.tab.c"
     break;
 
   case 265: /* expr: '!' expr  */
 #line 803 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
-#line 4969 "tools/widl/parser.tab.c"
+#line 4965 "tools/widl/parser.tab.c"
     break;
 
   case 266: /* expr: '~' expr  */
 #line 804 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
-#line 4975 "tools/widl/parser.tab.c"
+#line 4971 "tools/widl/parser.tab.c"
     break;
 
   case 267: /* expr: '+' expr  */
 #line 805 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
-#line 4981 "tools/widl/parser.tab.c"
+#line 4977 "tools/widl/parser.tab.c"
     break;
 
   case 268: /* expr: '-' expr  */
 #line 806 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
-#line 4987 "tools/widl/parser.tab.c"
+#line 4983 "tools/widl/parser.tab.c"
     break;
 
   case 269: /* expr: '&' expr  */
 #line 807 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
-#line 4993 "tools/widl/parser.tab.c"
+#line 4989 "tools/widl/parser.tab.c"
     break;
 
   case 270: /* expr: '*' expr  */
 #line 808 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
-#line 4999 "tools/widl/parser.tab.c"
+#line 4995 "tools/widl/parser.tab.c"
     break;
 
   case 271: /* expr: expr MEMBERPTR aIDENTIFIER  */
 #line 809 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 5005 "tools/widl/parser.tab.c"
+#line 5001 "tools/widl/parser.tab.c"
     break;
 
   case 272: /* expr: expr '.' aIDENTIFIER  */
 #line 810 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 5011 "tools/widl/parser.tab.c"
+#line 5007 "tools/widl/parser.tab.c"
     break;
 
   case 273: /* expr: '(' unqualified_decl_spec m_abstract_declarator ')' expr  */
 #line 812 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
-#line 5017 "tools/widl/parser.tab.c"
+#line 5013 "tools/widl/parser.tab.c"
     break;
 
   case 274: /* expr: tSIZEOF '(' unqualified_decl_spec m_abstract_declarator ')'  */
 #line 814 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
-#line 5023 "tools/widl/parser.tab.c"
+#line 5019 "tools/widl/parser.tab.c"
     break;
 
   case 275: /* expr: expr '[' expr ']'  */
 #line 815 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 5029 "tools/widl/parser.tab.c"
+#line 5025 "tools/widl/parser.tab.c"
     break;
 
   case 276: /* expr: '(' expr ')'  */
 #line 816 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[-1].expr); }
-#line 5035 "tools/widl/parser.tab.c"
+#line 5031 "tools/widl/parser.tab.c"
     break;
 
   case 277: /* expr_list_int_const: expr_int_const  */
 #line 819 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 5041 "tools/widl/parser.tab.c"
+#line 5037 "tools/widl/parser.tab.c"
     break;
 
   case 278: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
 #line 820 "tools/widl/parser.y"
                                                         { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 5047 "tools/widl/parser.tab.c"
+#line 5043 "tools/widl/parser.tab.c"
     break;
 
   case 279: /* expr_int_const: expr  */
@@ -5052,7 +5048,7 @@
 						  if (!(yyval.expr)->is_const)
 						      error_loc("expression is not an integer constant\n");
 						}
-#line 5056 "tools/widl/parser.tab.c"
+#line 5052 "tools/widl/parser.tab.c"
     break;
 
   case 280: /* expr_const: expr  */
@@ -5061,19 +5057,19 @@
 						  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
 						      error_loc("expression is not constant\n");
 						}
-#line 5065 "tools/widl/parser.tab.c"
+#line 5061 "tools/widl/parser.tab.c"
     break;
 
   case 281: /* fields: %empty  */
 #line 835 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5071 "tools/widl/parser.tab.c"
+#line 5067 "tools/widl/parser.tab.c"
     break;
 
   case 282: /* fields: fields field  */
 #line 836 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
-#line 5077 "tools/widl/parser.tab.c"
+#line 5073 "tools/widl/parser.tab.c"
     break;
 
   case 283: /* field: m_attributes decl_spec struct_declarator_list ';'  */
@@ -5082,7 +5078,7 @@
 						  check_field_attrs(first, (yyvsp[-3].attr_list));
 						  (yyval.var_list) = set_var_types((yyvsp[-3].attr_list), (yyvsp[-2].declspec), (yyvsp[-1].declarator_list));
 						}
-#line 5086 "tools/widl/parser.tab.c"
+#line 5082 "tools/widl/parser.tab.c"
     break;
 
   case 284: /* field: m_attributes uniondef ';'  */
@@ -5091,43 +5087,43 @@
 						  v->declspec.type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list);
 						  (yyval.var_list) = append_var(NULL, v);
 						}
-#line 5095 "tools/widl/parser.tab.c"
+#line 5091 "tools/widl/parser.tab.c"
     break;
 
   case 285: /* ne_union_field: s_field ';'  */
 #line 851 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 5101 "tools/widl/parser.tab.c"
+#line 5097 "tools/widl/parser.tab.c"
     break;
 
   case 286: /* ne_union_field: attributes ';'  */
 #line 852 "tools/widl/parser.y"
                                                 { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
-#line 5107 "tools/widl/parser.tab.c"
+#line 5103 "tools/widl/parser.tab.c"
     break;
 
   case 287: /* ne_union_fields: %empty  */
 #line 855 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5113 "tools/widl/parser.tab.c"
+#line 5109 "tools/widl/parser.tab.c"
     break;
 
   case 288: /* ne_union_fields: ne_union_fields ne_union_field  */
 #line 856 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 5119 "tools/widl/parser.tab.c"
+#line 5115 "tools/widl/parser.tab.c"
     break;
 
   case 289: /* union_field: s_field ';'  */
 #line 860 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 5125 "tools/widl/parser.tab.c"
+#line 5121 "tools/widl/parser.tab.c"
     break;
 
   case 290: /* union_field: ';'  */
 #line 861 "tools/widl/parser.y"
                                                 { (yyval.var) = NULL; }
-#line 5131 "tools/widl/parser.tab.c"
+#line 5127 "tools/widl/parser.tab.c"
     break;
 
   case 291: /* s_field: m_attributes decl_spec declarator  */
@@ -5136,7 +5132,7 @@
 						                (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5140 "tools/widl/parser.tab.c"
+#line 5136 "tools/widl/parser.tab.c"
     break;
 
   case 292: /* s_field: m_attributes structdef  */
@@ -5145,7 +5141,7 @@
 						  v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
 						  (yyval.var) = v;
 						}
-#line 5149 "tools/widl/parser.tab.c"
+#line 5145 "tools/widl/parser.tab.c"
     break;
 
   case 293: /* funcdef: declaration  */
@@ -5155,7 +5151,7 @@
 						    error_loc("only methods may be declared inside the methods section of a dispinterface\n");
 						  check_function_attrs((yyval.var)->name, (yyval.var)->attrs);
 						}
-#line 5159 "tools/widl/parser.tab.c"
+#line 5155 "tools/widl/parser.tab.c"
     break;
 
   case 294: /* declaration: attributes decl_spec init_declarator  */
@@ -5163,7 +5159,7 @@
                                                 { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5167 "tools/widl/parser.tab.c"
+#line 5163 "tools/widl/parser.tab.c"
     break;
 
   case 295: /* declaration: decl_spec init_declarator  */
@@ -5171,385 +5167,385 @@
                                                 { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5175 "tools/widl/parser.tab.c"
+#line 5171 "tools/widl/parser.tab.c"
     break;
 
   case 296: /* m_ident: %empty  */
 #line 891 "tools/widl/parser.y"
                                                 { (yyval.var) = NULL; }
-#line 5181 "tools/widl/parser.tab.c"
+#line 5177 "tools/widl/parser.tab.c"
     break;
 
   case 298: /* m_typename: %empty  */
 #line 895 "tools/widl/parser.y"
                                                 { (yyval.str) = NULL; }
-#line 5187 "tools/widl/parser.tab.c"
+#line 5183 "tools/widl/parser.tab.c"
     break;
 
   case 302: /* ident: typename  */
 #line 903 "tools/widl/parser.y"
                                                 { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 5193 "tools/widl/parser.tab.c"
+#line 5189 "tools/widl/parser.tab.c"
     break;
 
   case 303: /* base_type: tBYTE  */
 #line 906 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5199 "tools/widl/parser.tab.c"
+#line 5195 "tools/widl/parser.tab.c"
     break;
 
   case 304: /* base_type: tWCHAR  */
 #line 907 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5205 "tools/widl/parser.tab.c"
+#line 5201 "tools/widl/parser.tab.c"
     break;
 
   case 306: /* base_type: tSIGNED int_std  */
 #line 909 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
-#line 5211 "tools/widl/parser.tab.c"
+#line 5207 "tools/widl/parser.tab.c"
     break;
 
   case 307: /* base_type: tUNSIGNED int_std  */
 #line 910 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
-#line 5217 "tools/widl/parser.tab.c"
+#line 5213 "tools/widl/parser.tab.c"
     break;
 
   case 308: /* base_type: tUNSIGNED  */
 #line 911 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
-#line 5223 "tools/widl/parser.tab.c"
+#line 5219 "tools/widl/parser.tab.c"
     break;
 
   case 309: /* base_type: tFLOAT  */
 #line 912 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5229 "tools/widl/parser.tab.c"
+#line 5225 "tools/widl/parser.tab.c"
     break;
 
   case 310: /* base_type: tDOUBLE  */
 #line 913 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5235 "tools/widl/parser.tab.c"
+#line 5231 "tools/widl/parser.tab.c"
     break;
 
   case 311: /* base_type: tBOOLEAN  */
 #line 914 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5241 "tools/widl/parser.tab.c"
+#line 5237 "tools/widl/parser.tab.c"
     break;
 
   case 312: /* base_type: tERRORSTATUST  */
 #line 915 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5247 "tools/widl/parser.tab.c"
+#line 5243 "tools/widl/parser.tab.c"
     break;
 
   case 313: /* base_type: tHANDLET  */
 #line 916 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5253 "tools/widl/parser.tab.c"
+#line 5249 "tools/widl/parser.tab.c"
     break;
 
   case 316: /* int_std: tINT  */
 #line 923 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
-#line 5259 "tools/widl/parser.tab.c"
+#line 5255 "tools/widl/parser.tab.c"
     break;
 
   case 317: /* int_std: tSHORT m_int  */
 #line 924 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
-#line 5265 "tools/widl/parser.tab.c"
+#line 5261 "tools/widl/parser.tab.c"
     break;
 
   case 318: /* int_std: tSMALL  */
 #line 925 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
-#line 5271 "tools/widl/parser.tab.c"
+#line 5267 "tools/widl/parser.tab.c"
     break;
 
   case 319: /* int_std: tLONG m_int  */
 #line 926 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
-#line 5277 "tools/widl/parser.tab.c"
+#line 5273 "tools/widl/parser.tab.c"
     break;
 
   case 320: /* int_std: tHYPER m_int  */
 #line 927 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
-#line 5283 "tools/widl/parser.tab.c"
+#line 5279 "tools/widl/parser.tab.c"
     break;
 
   case 321: /* int_std: tINT64  */
 #line 928 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
-#line 5289 "tools/widl/parser.tab.c"
+#line 5285 "tools/widl/parser.tab.c"
     break;
 
   case 322: /* int_std: tCHAR  */
 #line 929 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
-#line 5295 "tools/widl/parser.tab.c"
+#line 5291 "tools/widl/parser.tab.c"
     break;
 
   case 323: /* int_std: tINT32  */
 #line 930 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
-#line 5301 "tools/widl/parser.tab.c"
+#line 5297 "tools/widl/parser.tab.c"
     break;
 
   case 324: /* int_std: tINT3264  */
 #line 931 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
-#line 5307 "tools/widl/parser.tab.c"
+#line 5303 "tools/widl/parser.tab.c"
     break;
 
   case 325: /* namespace_pfx: aIDENTIFIER '.'  */
 #line 935 "tools/widl/parser.y"
                                                 { (yyval.namespace) = find_namespace_or_error(&global_namespace, (yyvsp[-1].str)); }
-#line 5313 "tools/widl/parser.tab.c"
+#line 5309 "tools/widl/parser.tab.c"
     break;
 
   case 326: /* namespace_pfx: namespace_pfx aIDENTIFIER '.'  */
 #line 936 "tools/widl/parser.y"
                                                 { (yyval.namespace) = find_namespace_or_error((yyvsp[-2].namespace), (yyvsp[-1].str)); }
-#line 5319 "tools/widl/parser.tab.c"
+#line 5315 "tools/widl/parser.tab.c"
     break;
 
   case 327: /* qualified_type: typename  */
 #line 940 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
-#line 5325 "tools/widl/parser.tab.c"
+#line 5321 "tools/widl/parser.tab.c"
     break;
 
   case 328: /* qualified_type: namespace_pfx typename  */
 #line 941 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
-#line 5331 "tools/widl/parser.tab.c"
+#line 5327 "tools/widl/parser.tab.c"
     break;
 
   case 329: /* parameterized_type: qualified_type '<' parameterized_type_args '>'  */
 #line 945 "tools/widl/parser.y"
                                                 { (yyval.type) = find_parameterized_type((yyvsp[-3].type), (yyvsp[-1].typeref_list)); }
-#line 5337 "tools/widl/parser.tab.c"
+#line 5333 "tools/widl/parser.tab.c"
     break;
 
   case 330: /* parameterized_type_arg: base_type  */
 #line 949 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5343 "tools/widl/parser.tab.c"
+#line 5339 "tools/widl/parser.tab.c"
     break;
 
   case 331: /* parameterized_type_arg: qualified_type  */
 #line 950 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5349 "tools/widl/parser.tab.c"
+#line 5345 "tools/widl/parser.tab.c"
     break;
 
   case 332: /* parameterized_type_arg: qualified_type '*'  */
 #line 951 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
-#line 5355 "tools/widl/parser.tab.c"
+#line 5351 "tools/widl/parser.tab.c"
     break;
 
   case 333: /* parameterized_type_arg: parameterized_type  */
 #line 952 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5361 "tools/widl/parser.tab.c"
+#line 5357 "tools/widl/parser.tab.c"
     break;
 
   case 334: /* parameterized_type_arg: parameterized_type '*'  */
 #line 953 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
-#line 5367 "tools/widl/parser.tab.c"
+#line 5363 "tools/widl/parser.tab.c"
     break;
 
   case 335: /* parameterized_type_args: parameterized_type_arg  */
 #line 957 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5373 "tools/widl/parser.tab.c"
+#line 5369 "tools/widl/parser.tab.c"
     break;
 
   case 336: /* parameterized_type_args: parameterized_type_args ',' parameterized_type_arg  */
 #line 959 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5379 "tools/widl/parser.tab.c"
+#line 5375 "tools/widl/parser.tab.c"
     break;
 
   case 337: /* coclass: tCOCLASS typename  */
 #line 962 "tools/widl/parser.y"
                                                 { (yyval.type) = type_coclass_declare((yyvsp[0].str)); }
-#line 5385 "tools/widl/parser.tab.c"
+#line 5381 "tools/widl/parser.tab.c"
     break;
 
   case 338: /* coclassdef: attributes coclass '{' class_interfaces '}' semicolon_opt  */
 #line 966 "tools/widl/parser.y"
                                                 { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
-#line 5391 "tools/widl/parser.tab.c"
+#line 5387 "tools/widl/parser.tab.c"
     break;
 
   case 339: /* runtimeclass: tRUNTIMECLASS typename  */
 #line 969 "tools/widl/parser.y"
                                                 { (yyval.type) = type_runtimeclass_declare((yyvsp[0].str), current_namespace); }
-#line 5397 "tools/widl/parser.tab.c"
+#line 5393 "tools/widl/parser.tab.c"
     break;
 
   case 340: /* runtimeclass_def: attributes runtimeclass '{' class_interfaces '}' semicolon_opt  */
 #line 973 "tools/widl/parser.y"
                                                 { (yyval.type) = type_runtimeclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
-#line 5403 "tools/widl/parser.tab.c"
+#line 5399 "tools/widl/parser.tab.c"
     break;
 
   case 341: /* apicontract: tAPICONTRACT typename  */
 #line 976 "tools/widl/parser.y"
                                                 { (yyval.type) = type_apicontract_declare((yyvsp[0].str), current_namespace); }
-#line 5409 "tools/widl/parser.tab.c"
+#line 5405 "tools/widl/parser.tab.c"
     break;
 
   case 342: /* apicontract_def: attributes apicontract '{' '}' semicolon_opt  */
 #line 980 "tools/widl/parser.y"
                                                 { (yyval.type) = type_apicontract_define((yyvsp[-3].type), (yyvsp[-4].attr_list)); }
-#line 5415 "tools/widl/parser.tab.c"
+#line 5411 "tools/widl/parser.tab.c"
     break;
 
   case 343: /* namespacedef: tNAMESPACE aIDENTIFIER  */
 #line 983 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 5421 "tools/widl/parser.tab.c"
+#line 5417 "tools/widl/parser.tab.c"
     break;
 
   case 344: /* class_interfaces: %empty  */
 #line 986 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = NULL; }
-#line 5427 "tools/widl/parser.tab.c"
+#line 5423 "tools/widl/parser.tab.c"
     break;
 
   case 345: /* class_interfaces: class_interfaces class_interface  */
 #line 987 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref( (yyvsp[-1].typeref_list), (yyvsp[0].typeref) ); }
-#line 5433 "tools/widl/parser.tab.c"
+#line 5429 "tools/widl/parser.tab.c"
     break;
 
   case 346: /* class_interface: m_attributes interfaceref ';'  */
 #line 991 "tools/widl/parser.y"
                                                 { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
-#line 5439 "tools/widl/parser.tab.c"
+#line 5435 "tools/widl/parser.tab.c"
     break;
 
   case 347: /* class_interface: m_attributes dispinterfaceref ';'  */
 #line 992 "tools/widl/parser.y"
                                                 { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
-#line 5445 "tools/widl/parser.tab.c"
+#line 5441 "tools/widl/parser.tab.c"
     break;
 
   case 348: /* dispinterface: tDISPINTERFACE typename  */
 #line 995 "tools/widl/parser.y"
                                                 { (yyval.type) = type_dispinterface_declare((yyvsp[0].str)); }
-#line 5451 "tools/widl/parser.tab.c"
+#line 5447 "tools/widl/parser.tab.c"
     break;
 
   case 349: /* dispattributes: attributes  */
 #line 998 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr((yyvsp[0].attr_list), make_attr(ATTR_DISPINTERFACE)); }
-#line 5457 "tools/widl/parser.tab.c"
+#line 5453 "tools/widl/parser.tab.c"
     break;
 
   case 350: /* dispint_props: tPROPERTIES ':'  */
 #line 1001 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5463 "tools/widl/parser.tab.c"
+#line 5459 "tools/widl/parser.tab.c"
     break;
 
   case 351: /* dispint_props: dispint_props s_field ';'  */
 #line 1002 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5469 "tools/widl/parser.tab.c"
+#line 5465 "tools/widl/parser.tab.c"
     break;
 
   case 352: /* dispint_meths: tMETHODS ':'  */
 #line 1005 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5475 "tools/widl/parser.tab.c"
+#line 5471 "tools/widl/parser.tab.c"
     break;
 
   case 353: /* dispint_meths: dispint_meths funcdef ';'  */
 #line 1006 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5481 "tools/widl/parser.tab.c"
+#line 5477 "tools/widl/parser.tab.c"
     break;
 
   case 354: /* dispinterfacedef: dispattributes dispinterface '{' dispint_props dispint_meths '}'  */
 #line 1011 "tools/widl/parser.y"
                                                 { (yyval.type) = type_dispinterface_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].var_list), (yyvsp[-1].var_list)); }
-#line 5487 "tools/widl/parser.tab.c"
+#line 5483 "tools/widl/parser.tab.c"
     break;
 
   case 355: /* dispinterfacedef: dispattributes dispinterface '{' interface ';' '}'  */
 #line 1013 "tools/widl/parser.y"
                                                 { (yyval.type) = type_dispinterface_define_from_iface((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].type)); }
-#line 5493 "tools/widl/parser.tab.c"
+#line 5489 "tools/widl/parser.tab.c"
     break;
 
   case 356: /* inherit: %empty  */
 #line 1016 "tools/widl/parser.y"
                                                 { (yyval.type) = NULL; }
-#line 5499 "tools/widl/parser.tab.c"
+#line 5495 "tools/widl/parser.tab.c"
     break;
 
   case 357: /* inherit: ':' qualified_type  */
 #line 1017 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5505 "tools/widl/parser.tab.c"
+#line 5501 "tools/widl/parser.tab.c"
     break;
 
   case 358: /* inherit: ':' parameterized_type  */
 #line 1018 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5511 "tools/widl/parser.tab.c"
+#line 5507 "tools/widl/parser.tab.c"
     break;
 
   case 359: /* type_parameter: typename  */
 #line 1021 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_PARAMETER, (yyvsp[0].str), parameters_namespace, 0); }
-#line 5517 "tools/widl/parser.tab.c"
+#line 5513 "tools/widl/parser.tab.c"
     break;
 
   case 360: /* type_parameters: type_parameter  */
 #line 1025 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5523 "tools/widl/parser.tab.c"
+#line 5519 "tools/widl/parser.tab.c"
     break;
 
   case 361: /* type_parameters: type_parameters ',' type_parameter  */
 #line 1026 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5529 "tools/widl/parser.tab.c"
+#line 5525 "tools/widl/parser.tab.c"
     break;
 
   case 362: /* interface: tINTERFACE typename  */
 #line 1030 "tools/widl/parser.y"
                                                 { (yyval.type) = type_interface_declare((yyvsp[0].str), current_namespace); }
-#line 5535 "tools/widl/parser.tab.c"
+#line 5531 "tools/widl/parser.tab.c"
     break;
 
   case 363: /* $@3: %empty  */
 #line 1031 "tools/widl/parser.y"
                                   { push_parameters_namespace((yyvsp[-1].str)); }
-#line 5541 "tools/widl/parser.tab.c"
+#line 5537 "tools/widl/parser.tab.c"
     break;
 
   case 364: /* $@4: %empty  */
 #line 1031 "tools/widl/parser.y"
                                                                                      { pop_parameters_namespace((yyvsp[-3].str)); }
-#line 5547 "tools/widl/parser.tab.c"
+#line 5543 "tools/widl/parser.tab.c"
     break;
 
   case 365: /* interface: tINTERFACE typename '<' $@3 type_parameters $@4 '>'  */
 #line 1032 "tools/widl/parser.y"
                                                 { (yyval.type) = type_parameterized_interface_declare((yyvsp[-5].str), current_namespace, (yyvsp[-2].typeref_list)); }
-#line 5553 "tools/widl/parser.tab.c"
+#line 5549 "tools/widl/parser.tab.c"
     break;
 
   case 366: /* delegatedef: m_attributes tDELEGATE type ident '(' m_args ')' semicolon_opt  */
@@ -5557,19 +5553,19 @@
                                                 { (yyval.type) = type_delegate_declare((yyvsp[-4].var)->name, current_namespace);
 						  (yyval.type) = type_delegate_define((yyval.type), (yyvsp[-7].attr_list), append_statement(NULL, make_statement_delegate((yyvsp[-5].type), (yyvsp[-2].var_list))));
 						}
-#line 5561 "tools/widl/parser.tab.c"
+#line 5557 "tools/widl/parser.tab.c"
     break;
 
   case 367: /* $@5: %empty  */
 #line 1040 "tools/widl/parser.y"
               { push_parameters_namespace((yyvsp[-1].var)->name); }
-#line 5567 "tools/widl/parser.tab.c"
+#line 5563 "tools/widl/parser.tab.c"
     break;
 
   case 368: /* $@6: %empty  */
 #line 1041 "tools/widl/parser.y"
                          { pop_parameters_namespace((yyvsp[-7].var)->name); }
-#line 5573 "tools/widl/parser.tab.c"
+#line 5569 "tools/widl/parser.tab.c"
     break;
 
   case 369: /* delegatedef: m_attributes tDELEGATE type ident '<' $@5 type_parameters '>' '(' m_args ')' $@6 semicolon_opt  */
@@ -5577,49 +5573,49 @@
                                                 { (yyval.type) = type_parameterized_delegate_declare((yyvsp[-9].var)->name, current_namespace, (yyvsp[-6].typeref_list));
 						  (yyval.type) = type_parameterized_delegate_define((yyval.type), (yyvsp[-12].attr_list), append_statement(NULL, make_statement_delegate((yyvsp[-10].type), (yyvsp[-3].var_list))));
 						}
-#line 5581 "tools/widl/parser.tab.c"
+#line 5577 "tools/widl/parser.tab.c"
     break;
 
   case 370: /* required_types: qualified_type  */
 #line 1048 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5587 "tools/widl/parser.tab.c"
+#line 5583 "tools/widl/parser.tab.c"
     break;
 
   case 371: /* required_types: parameterized_type  */
 #line 1049 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5593 "tools/widl/parser.tab.c"
+#line 5589 "tools/widl/parser.tab.c"
     break;
 
   case 372: /* required_types: required_types ',' qualified_type  */
 #line 1050 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5599 "tools/widl/parser.tab.c"
+#line 5595 "tools/widl/parser.tab.c"
     break;
 
   case 373: /* required_types: required_types ',' parameterized_type  */
 #line 1051 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5605 "tools/widl/parser.tab.c"
+#line 5601 "tools/widl/parser.tab.c"
     break;
 
   case 374: /* requires: %empty  */
 #line 1053 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = NULL; }
-#line 5611 "tools/widl/parser.tab.c"
+#line 5607 "tools/widl/parser.tab.c"
     break;
 
   case 375: /* requires: tREQUIRES required_types  */
 #line 1054 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = (yyvsp[0].typeref_list); }
-#line 5617 "tools/widl/parser.tab.c"
+#line 5613 "tools/widl/parser.tab.c"
     break;
 
   case 376: /* $@7: %empty  */
 #line 1057 "tools/widl/parser.y"
                                                 { if ((yyvsp[0].type)->type_type == TYPE_PARAMETERIZED_TYPE) push_parameters_namespace((yyvsp[0].type)->name); }
-#line 5623 "tools/widl/parser.tab.c"
+#line 5619 "tools/widl/parser.tab.c"
     break;
 
   case 377: /* interfacedef: attributes interface $@7 inherit requires '{' int_statements '}' semicolon_opt  */
@@ -5635,217 +5631,217 @@
 						      check_async_uuid((yyval.type));
 						  }
 						}
-#line 5639 "tools/widl/parser.tab.c"
+#line 5635 "tools/widl/parser.tab.c"
     break;
 
   case 378: /* interfacedef: dispinterfacedef semicolon_opt  */
 #line 1070 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 5645 "tools/widl/parser.tab.c"
+#line 5641 "tools/widl/parser.tab.c"
     break;
 
   case 379: /* interfaceref: tINTERFACE typename  */
 #line 1074 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5651 "tools/widl/parser.tab.c"
+#line 5647 "tools/widl/parser.tab.c"
     break;
 
   case 380: /* interfaceref: tINTERFACE namespace_pfx typename  */
 #line 1075 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), (yyvsp[-1].namespace), 0); }
-#line 5657 "tools/widl/parser.tab.c"
+#line 5653 "tools/widl/parser.tab.c"
     break;
 
   case 381: /* dispinterfaceref: tDISPINTERFACE typename  */
 #line 1079 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5663 "tools/widl/parser.tab.c"
+#line 5659 "tools/widl/parser.tab.c"
     break;
 
   case 382: /* module: tMODULE typename  */
 #line 1082 "tools/widl/parser.y"
                                                 { (yyval.type) = type_module_declare((yyvsp[0].str)); }
-#line 5669 "tools/widl/parser.tab.c"
+#line 5665 "tools/widl/parser.tab.c"
     break;
 
-  case 383: /* moduledef: attributes module '{' int_statements '}' semicolon_opt  */
+  case 383: /* moduledef: m_attributes module '{' int_statements '}' semicolon_opt  */
 #line 1086 "tools/widl/parser.y"
                                                 { (yyval.type) = type_module_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].stmt_list)); }
-#line 5675 "tools/widl/parser.tab.c"
+#line 5671 "tools/widl/parser.tab.c"
     break;
 
   case 384: /* storage_cls_spec: tEXTERN  */
 #line 1090 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_EXTERN; }
-#line 5681 "tools/widl/parser.tab.c"
+#line 5677 "tools/widl/parser.tab.c"
     break;
 
   case 385: /* storage_cls_spec: tSTATIC  */
 #line 1091 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_STATIC; }
-#line 5687 "tools/widl/parser.tab.c"
+#line 5683 "tools/widl/parser.tab.c"
     break;
 
   case 386: /* storage_cls_spec: tREGISTER  */
 #line 1092 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_REGISTER; }
-#line 5693 "tools/widl/parser.tab.c"
+#line 5689 "tools/widl/parser.tab.c"
     break;
 
   case 387: /* function_specifier: tINLINE  */
 #line 1096 "tools/widl/parser.y"
                                                 { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
-#line 5699 "tools/widl/parser.tab.c"
+#line 5695 "tools/widl/parser.tab.c"
     break;
 
   case 388: /* type_qualifier: tCONST  */
 #line 1100 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
-#line 5705 "tools/widl/parser.tab.c"
+#line 5701 "tools/widl/parser.tab.c"
     break;
 
   case 389: /* m_type_qual_list: %empty  */
 #line 1103 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = 0; }
-#line 5711 "tools/widl/parser.tab.c"
+#line 5707 "tools/widl/parser.tab.c"
     break;
 
   case 390: /* m_type_qual_list: m_type_qual_list type_qualifier  */
 #line 1104 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
-#line 5717 "tools/widl/parser.tab.c"
+#line 5713 "tools/widl/parser.tab.c"
     break;
 
   case 391: /* decl_spec: type m_decl_spec_no_type  */
 #line 1107 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5723 "tools/widl/parser.tab.c"
+#line 5719 "tools/widl/parser.tab.c"
     break;
 
   case 392: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
 #line 1109 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5729 "tools/widl/parser.tab.c"
+#line 5725 "tools/widl/parser.tab.c"
     break;
 
   case 393: /* unqualified_decl_spec: unqualified_type m_decl_spec_no_type  */
 #line 1113 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5735 "tools/widl/parser.tab.c"
+#line 5731 "tools/widl/parser.tab.c"
     break;
 
   case 394: /* unqualified_decl_spec: decl_spec_no_type unqualified_type m_decl_spec_no_type  */
 #line 1115 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5741 "tools/widl/parser.tab.c"
+#line 5737 "tools/widl/parser.tab.c"
     break;
 
   case 395: /* m_decl_spec_no_type: %empty  */
 #line 1118 "tools/widl/parser.y"
                                                 { (yyval.declspec) = NULL; }
-#line 5747 "tools/widl/parser.tab.c"
+#line 5743 "tools/widl/parser.tab.c"
     break;
 
   case 397: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
 #line 1123 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
-#line 5753 "tools/widl/parser.tab.c"
+#line 5749 "tools/widl/parser.tab.c"
     break;
 
   case 398: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
 #line 1124 "tools/widl/parser.y"
                                                   { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
-#line 5759 "tools/widl/parser.tab.c"
+#line 5755 "tools/widl/parser.tab.c"
     break;
 
   case 399: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
 #line 1125 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
-#line 5765 "tools/widl/parser.tab.c"
+#line 5761 "tools/widl/parser.tab.c"
     break;
 
   case 400: /* declarator: '*' m_type_qual_list declarator  */
 #line 1130 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5771 "tools/widl/parser.tab.c"
+#line 5767 "tools/widl/parser.tab.c"
     break;
 
   case 401: /* declarator: callconv declarator  */
 #line 1131 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5777 "tools/widl/parser.tab.c"
+#line 5773 "tools/widl/parser.tab.c"
     break;
 
   case 403: /* direct_declarator: ident  */
 #line 1136 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5783 "tools/widl/parser.tab.c"
+#line 5779 "tools/widl/parser.tab.c"
     break;
 
   case 404: /* direct_declarator: '(' declarator ')'  */
 #line 1137 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5789 "tools/widl/parser.tab.c"
+#line 5785 "tools/widl/parser.tab.c"
     break;
 
   case 405: /* direct_declarator: direct_declarator array  */
 #line 1138 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5795 "tools/widl/parser.tab.c"
+#line 5791 "tools/widl/parser.tab.c"
     break;
 
   case 406: /* direct_declarator: direct_declarator '(' m_args ')'  */
 #line 1139 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
-#line 5801 "tools/widl/parser.tab.c"
+#line 5797 "tools/widl/parser.tab.c"
     break;
 
   case 407: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
 #line 1145 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5807 "tools/widl/parser.tab.c"
+#line 5803 "tools/widl/parser.tab.c"
     break;
 
   case 408: /* abstract_declarator: callconv m_abstract_declarator  */
 #line 1146 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5813 "tools/widl/parser.tab.c"
+#line 5809 "tools/widl/parser.tab.c"
     break;
 
   case 410: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
 #line 1153 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5819 "tools/widl/parser.tab.c"
+#line 5815 "tools/widl/parser.tab.c"
     break;
 
   case 411: /* abstract_declarator_no_direct: callconv m_any_declarator  */
 #line 1154 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5825 "tools/widl/parser.tab.c"
+#line 5821 "tools/widl/parser.tab.c"
     break;
 
   case 412: /* m_abstract_declarator: %empty  */
 #line 1158 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); }
-#line 5831 "tools/widl/parser.tab.c"
+#line 5827 "tools/widl/parser.tab.c"
     break;
 
   case 414: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
 #line 1164 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5837 "tools/widl/parser.tab.c"
+#line 5833 "tools/widl/parser.tab.c"
     break;
 
   case 415: /* abstract_direct_declarator: abstract_direct_declarator array  */
 #line 1165 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5843 "tools/widl/parser.tab.c"
+#line 5839 "tools/widl/parser.tab.c"
     break;
 
   case 416: /* abstract_direct_declarator: array  */
 #line 1166 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5849 "tools/widl/parser.tab.c"
+#line 5845 "tools/widl/parser.tab.c"
     break;
 
   case 417: /* abstract_direct_declarator: '(' m_args ')'  */
@@ -5853,7 +5849,7 @@
                                                 { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5857 "tools/widl/parser.tab.c"
+#line 5853 "tools/widl/parser.tab.c"
     break;
 
   case 418: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
@@ -5861,61 +5857,61 @@
                                                 { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5865 "tools/widl/parser.tab.c"
+#line 5861 "tools/widl/parser.tab.c"
     break;
 
   case 419: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
 #line 1180 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5871 "tools/widl/parser.tab.c"
+#line 5867 "tools/widl/parser.tab.c"
     break;
 
   case 420: /* any_declarator: callconv m_any_declarator  */
 #line 1181 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5877 "tools/widl/parser.tab.c"
+#line 5873 "tools/widl/parser.tab.c"
     break;
 
   case 422: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
 #line 1188 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5883 "tools/widl/parser.tab.c"
+#line 5879 "tools/widl/parser.tab.c"
     break;
 
   case 423: /* any_declarator_no_direct: callconv m_any_declarator  */
 #line 1189 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5889 "tools/widl/parser.tab.c"
+#line 5885 "tools/widl/parser.tab.c"
     break;
 
   case 424: /* m_any_declarator: %empty  */
 #line 1193 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); }
-#line 5895 "tools/widl/parser.tab.c"
+#line 5891 "tools/widl/parser.tab.c"
     break;
 
   case 426: /* any_direct_declarator: ident  */
 #line 1201 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5901 "tools/widl/parser.tab.c"
+#line 5897 "tools/widl/parser.tab.c"
     break;
 
   case 427: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
 #line 1202 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5907 "tools/widl/parser.tab.c"
+#line 5903 "tools/widl/parser.tab.c"
     break;
 
   case 428: /* any_direct_declarator: any_direct_declarator array  */
 #line 1203 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5913 "tools/widl/parser.tab.c"
+#line 5909 "tools/widl/parser.tab.c"
     break;
 
   case 429: /* any_direct_declarator: array  */
 #line 1204 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5919 "tools/widl/parser.tab.c"
+#line 5915 "tools/widl/parser.tab.c"
     break;
 
   case 430: /* any_direct_declarator: '(' m_args ')'  */
@@ -5923,7 +5919,7 @@
                                                 { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5927 "tools/widl/parser.tab.c"
+#line 5923 "tools/widl/parser.tab.c"
     break;
 
   case 431: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
@@ -5931,31 +5927,31 @@
                                                 { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5935 "tools/widl/parser.tab.c"
+#line 5931 "tools/widl/parser.tab.c"
     break;
 
   case 432: /* declarator_list: declarator  */
 #line 1216 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5941 "tools/widl/parser.tab.c"
+#line 5937 "tools/widl/parser.tab.c"
     break;
 
   case 433: /* declarator_list: declarator_list ',' declarator  */
 #line 1217 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5947 "tools/widl/parser.tab.c"
+#line 5943 "tools/widl/parser.tab.c"
     break;
 
   case 434: /* m_bitfield: %empty  */
 #line 1220 "tools/widl/parser.y"
                                                 { (yyval.expr) = NULL; }
-#line 5953 "tools/widl/parser.tab.c"
+#line 5949 "tools/widl/parser.tab.c"
     break;
 
   case 435: /* m_bitfield: ':' expr_const  */
 #line 1221 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr); }
-#line 5959 "tools/widl/parser.tab.c"
+#line 5955 "tools/widl/parser.tab.c"
     break;
 
   case 436: /* struct_declarator: any_declarator m_bitfield  */
@@ -5964,163 +5960,163 @@
 						  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
 						    error_loc("unnamed fields are not allowed\n");
 						}
-#line 5968 "tools/widl/parser.tab.c"
+#line 5964 "tools/widl/parser.tab.c"
     break;
 
   case 437: /* struct_declarator_list: struct_declarator  */
 #line 1231 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5974 "tools/widl/parser.tab.c"
+#line 5970 "tools/widl/parser.tab.c"
     break;
 
   case 438: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
 #line 1233 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5980 "tools/widl/parser.tab.c"
+#line 5976 "tools/widl/parser.tab.c"
     break;
 
   case 439: /* init_declarator: declarator  */
 #line 1237 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); }
-#line 5986 "tools/widl/parser.tab.c"
+#line 5982 "tools/widl/parser.tab.c"
     break;
 
   case 440: /* init_declarator: declarator '=' expr_const  */
 #line 1238 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
-#line 5992 "tools/widl/parser.tab.c"
+#line 5988 "tools/widl/parser.tab.c"
     break;
 
   case 441: /* threading_type: tAPARTMENT  */
 #line 1242 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_APARTMENT; }
-#line 5998 "tools/widl/parser.tab.c"
+#line 5994 "tools/widl/parser.tab.c"
     break;
 
   case 442: /* threading_type: tNEUTRAL  */
 #line 1243 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_NEUTRAL; }
-#line 6004 "tools/widl/parser.tab.c"
+#line 6000 "tools/widl/parser.tab.c"
     break;
 
   case 443: /* threading_type: tSINGLE  */
 #line 1244 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_SINGLE; }
-#line 6010 "tools/widl/parser.tab.c"
+#line 6006 "tools/widl/parser.tab.c"
     break;
 
   case 444: /* threading_type: tFREE  */
 #line 1245 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_FREE; }
-#line 6016 "tools/widl/parser.tab.c"
+#line 6012 "tools/widl/parser.tab.c"
     break;
 
   case 445: /* threading_type: tBOTH  */
 #line 1246 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_BOTH; }
-#line 6022 "tools/widl/parser.tab.c"
+#line 6018 "tools/widl/parser.tab.c"
     break;
 
   case 446: /* threading_type: tMTA  */
 #line 1247 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_FREE; }
-#line 6028 "tools/widl/parser.tab.c"
+#line 6024 "tools/widl/parser.tab.c"
     break;
 
   case 447: /* pointer_type: tREF  */
 #line 1251 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_RP; }
-#line 6034 "tools/widl/parser.tab.c"
+#line 6030 "tools/widl/parser.tab.c"
     break;
 
   case 448: /* pointer_type: tUNIQUE  */
 #line 1252 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_UP; }
-#line 6040 "tools/widl/parser.tab.c"
+#line 6036 "tools/widl/parser.tab.c"
     break;
 
   case 449: /* pointer_type: tPTR  */
 #line 1253 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_FP; }
-#line 6046 "tools/widl/parser.tab.c"
+#line 6042 "tools/widl/parser.tab.c"
     break;
 
   case 450: /* structdef: tSTRUCT m_typename '{' fields '}'  */
 #line 1256 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 6052 "tools/widl/parser.tab.c"
+#line 6048 "tools/widl/parser.tab.c"
     break;
 
   case 451: /* unqualified_type: tVOID  */
 #line 1260 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_void(); }
-#line 6058 "tools/widl/parser.tab.c"
+#line 6054 "tools/widl/parser.tab.c"
     break;
 
   case 452: /* unqualified_type: base_type  */
 #line 1261 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6064 "tools/widl/parser.tab.c"
+#line 6060 "tools/widl/parser.tab.c"
     break;
 
   case 453: /* unqualified_type: enumdef  */
 #line 1262 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6070 "tools/widl/parser.tab.c"
+#line 6066 "tools/widl/parser.tab.c"
     break;
 
   case 454: /* unqualified_type: tENUM aIDENTIFIER  */
 #line 1263 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 6076 "tools/widl/parser.tab.c"
+#line 6072 "tools/widl/parser.tab.c"
     break;
 
   case 455: /* unqualified_type: structdef  */
 #line 1264 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6082 "tools/widl/parser.tab.c"
+#line 6078 "tools/widl/parser.tab.c"
     break;
 
   case 456: /* unqualified_type: tSTRUCT aIDENTIFIER  */
 #line 1265 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 6088 "tools/widl/parser.tab.c"
+#line 6084 "tools/widl/parser.tab.c"
     break;
 
   case 457: /* unqualified_type: uniondef  */
 #line 1266 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6094 "tools/widl/parser.tab.c"
+#line 6090 "tools/widl/parser.tab.c"
     break;
 
   case 458: /* unqualified_type: tUNION aIDENTIFIER  */
 #line 1267 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 6100 "tools/widl/parser.tab.c"
+#line 6096 "tools/widl/parser.tab.c"
     break;
 
   case 459: /* unqualified_type: tSAFEARRAY '(' type ')'  */
 #line 1268 "tools/widl/parser.y"
                                                 { (yyval.type) = make_safearray((yyvsp[-1].type)); }
-#line 6106 "tools/widl/parser.tab.c"
+#line 6102 "tools/widl/parser.tab.c"
     break;
 
   case 460: /* unqualified_type: aKNOWNTYPE  */
 #line 1269 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
-#line 6112 "tools/widl/parser.tab.c"
+#line 6108 "tools/widl/parser.tab.c"
     break;
 
   case 462: /* type: namespace_pfx typename  */
 #line 1274 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
-#line 6118 "tools/widl/parser.tab.c"
+#line 6114 "tools/widl/parser.tab.c"
     break;
 
   case 463: /* type: parameterized_type  */
 #line 1275 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6124 "tools/widl/parser.tab.c"
+#line 6120 "tools/widl/parser.tab.c"
     break;
 
   case 464: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
@@ -6129,37 +6125,37 @@
 						  reg_typedefs((yyvsp[-1].declspec), (yyvsp[0].declarator_list), check_typedef_attrs((yyvsp[-4].attr_list)));
 						  (yyval.statement) = make_statement_typedef((yyvsp[0].declarator_list), !(yyvsp[-1].declspec)->type->defined);
 						}
-#line 6133 "tools/widl/parser.tab.c"
+#line 6129 "tools/widl/parser.tab.c"
     break;
 
   case 465: /* uniondef: tUNION m_typename '{' ne_union_fields '}'  */
 #line 1286 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
-#line 6139 "tools/widl/parser.tab.c"
+#line 6135 "tools/widl/parser.tab.c"
     break;
 
   case 466: /* uniondef: tUNION m_typename tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
 #line 1289 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
-#line 6145 "tools/widl/parser.tab.c"
+#line 6141 "tools/widl/parser.tab.c"
     break;
 
   case 467: /* version: aNUM  */
 #line 1293 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
-#line 6151 "tools/widl/parser.tab.c"
+#line 6147 "tools/widl/parser.tab.c"
     break;
 
   case 468: /* version: aNUM '.' aNUM  */
 #line 1294 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
-#line 6157 "tools/widl/parser.tab.c"
+#line 6153 "tools/widl/parser.tab.c"
     break;
 
   case 469: /* version: aHEXNUM  */
 #line 1295 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[0].num); }
-#line 6163 "tools/widl/parser.tab.c"
+#line 6159 "tools/widl/parser.tab.c"
     break;
 
   case 474: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
@@ -6167,7 +6163,7 @@
                                                 { type_t *type = find_type_or_error(current_namespace, (yyvsp[-1].str));
                                                   type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                 }
-#line 6171 "tools/widl/parser.tab.c"
+#line 6167 "tools/widl/parser.tab.c"
     break;
 
   case 475: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
@@ -6177,95 +6173,95 @@
                                                        error_loc("%s is not an interface\n", iface->name);
                                                    iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list));
                                                 }
-#line 6181 "tools/widl/parser.tab.c"
+#line 6177 "tools/widl/parser.tab.c"
     break;
 
   case 476: /* acf_attributes: %empty  */
 #line 1325 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 6187 "tools/widl/parser.tab.c"
+#line 6183 "tools/widl/parser.tab.c"
     break;
 
   case 477: /* acf_attributes: '[' acf_attribute_list ']'  */
 #line 1326 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 6193 "tools/widl/parser.tab.c"
+#line 6189 "tools/widl/parser.tab.c"
     break;
 
   case 478: /* acf_attribute_list: acf_attribute  */
 #line 1330 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
-#line 6199 "tools/widl/parser.tab.c"
+#line 6195 "tools/widl/parser.tab.c"
     break;
 
   case 479: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
 #line 1331 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
-#line 6205 "tools/widl/parser.tab.c"
+#line 6201 "tools/widl/parser.tab.c"
     break;
 
   case 480: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
 #line 1336 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_ALLOCATE, (yyvsp[-1].num)); }
-#line 6211 "tools/widl/parser.tab.c"
+#line 6207 "tools/widl/parser.tab.c"
     break;
 
   case 481: /* acf_attribute: tENCODE  */
 #line 1337 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 6217 "tools/widl/parser.tab.c"
+#line 6213 "tools/widl/parser.tab.c"
     break;
 
   case 482: /* acf_attribute: tDECODE  */
 #line 1338 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 6223 "tools/widl/parser.tab.c"
+#line 6219 "tools/widl/parser.tab.c"
     break;
 
   case 483: /* acf_attribute: tEXPLICITHANDLE  */
 #line 1339 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 6229 "tools/widl/parser.tab.c"
+#line 6225 "tools/widl/parser.tab.c"
     break;
 
   case 484: /* allocate_option_list: allocate_option  */
 #line 1343 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[0].num); }
-#line 6235 "tools/widl/parser.tab.c"
+#line 6231 "tools/widl/parser.tab.c"
     break;
 
   case 485: /* allocate_option_list: allocate_option_list ',' allocate_option  */
 #line 1345 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); }
-#line 6241 "tools/widl/parser.tab.c"
+#line 6237 "tools/widl/parser.tab.c"
     break;
 
   case 486: /* allocate_option: tDONTFREE  */
 #line 1349 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_DONT_FREE; }
-#line 6247 "tools/widl/parser.tab.c"
+#line 6243 "tools/widl/parser.tab.c"
     break;
 
   case 487: /* allocate_option: tFREE  */
 #line 1350 "tools/widl/parser.y"
                                                 { (yyval.num) = 0; }
-#line 6253 "tools/widl/parser.tab.c"
+#line 6249 "tools/widl/parser.tab.c"
     break;
 
   case 488: /* allocate_option: tALLNODES  */
 #line 1351 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_ALLOCATE_ALL_NODES; }
-#line 6259 "tools/widl/parser.tab.c"
+#line 6255 "tools/widl/parser.tab.c"
     break;
 
   case 489: /* allocate_option: tSINGLENODE  */
 #line 1352 "tools/widl/parser.y"
                                                 { (yyval.num) = 0; }
-#line 6265 "tools/widl/parser.tab.c"
+#line 6261 "tools/widl/parser.tab.c"
     break;
 
 
-#line 6269 "tools/widl/parser.tab.c"
+#line 6265 "tools/widl/parser.tab.c"
 
       default: break;
     }
@@ -7401,7 +7397,7 @@
 
   if (! file_id)
   {
-    char *dst = dup_basename(input_idl_name, ".idl");
+    char *dst = replace_extension( get_basename(input_idl_name), ".idl", "" );
     file_id = dst;
 
     for (; *dst; ++dst)
@@ -7486,7 +7482,7 @@
     /* ATTR_HELPSTRING */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstring" },
     /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstringcontext" },
     /* ATTR_HELPSTRINGDLL */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpstringdll" },
-    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, "hidden" },
+    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, "hidden" },
     /* ATTR_ID */                  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, "id" },
     /* ATTR_IDEMPOTENT */          { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
     /* ATTR_IGNORE */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ignore" },
@@ -7545,7 +7541,7 @@
     /* ATTR_UUID */                { 1, 0, 0,  1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, "uuid" },
     /* ATTR_V1ENUM */              { 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
     /* ATTR_VARARG */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
-    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, 1, "version" },
+    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 1, 1, 0, 1, "version" },
     /* ATTR_VIPROGID */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "vi_progid" },
     /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
diff --git a/mingw-w64-tools/widl/src/parser.tab.h b/mingw-w64-tools/widl/src/parser.tab.h
index edca8f6..e2e7cc7 100644
--- a/mingw-w64-tools/widl/src/parser.tab.h
+++ b/mingw-w64-tools/widl/src/parser.tab.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.7.5.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -16,7 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
diff --git a/mingw-w64-tools/widl/src/parser.y b/mingw-w64-tools/widl/src/parser.y
index eb8035c..fa86392 100644
--- a/mingw-w64-tools/widl/src/parser.y
+++ b/mingw-w64-tools/widl/src/parser.y
@@ -1082,7 +1082,7 @@
 module:   tMODULE typename			{ $$ = type_module_declare($2); }
 	;
 
-moduledef: attributes module '{' int_statements '}' semicolon_opt
+moduledef: m_attributes module '{' int_statements '}' semicolon_opt
 						{ $$ = type_module_define($2, $1, $4); }
 	;
 
@@ -2262,7 +2262,7 @@
 
   if (! file_id)
   {
-    char *dst = dup_basename(input_idl_name, ".idl");
+    char *dst = replace_extension( get_basename(input_idl_name), ".idl", "" );
     file_id = dst;
 
     for (; *dst; ++dst)
@@ -2347,7 +2347,7 @@
     /* ATTR_HELPSTRING */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstring" },
     /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstringcontext" },
     /* ATTR_HELPSTRINGDLL */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpstringdll" },
-    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, "hidden" },
+    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, "hidden" },
     /* ATTR_ID */                  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, "id" },
     /* ATTR_IDEMPOTENT */          { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
     /* ATTR_IGNORE */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ignore" },
@@ -2406,7 +2406,7 @@
     /* ATTR_UUID */                { 1, 0, 0,  1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, "uuid" },
     /* ATTR_V1ENUM */              { 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
     /* ATTR_VARARG */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
-    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, 1, "version" },
+    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 1, 1, 0, 1, "version" },
     /* ATTR_VIPROGID */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "vi_progid" },
     /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
diff --git a/mingw-w64-tools/widl/src/parser.yy.c b/mingw-w64-tools/widl/src/parser.yy.c
index f2dd061..d5602fb 100644
--- a/mingw-w64-tools/widl/src/parser.yy.c
+++ b/mingw-w64-tools/widl/src/parser.yy.c
@@ -962,7 +962,6 @@
 #line 44 "tools/widl/parser.l"
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -971,17 +970,12 @@
 #include <assert.h>
 #include <errno.h>
 #include <limits.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#else
 #define YY_NO_UNISTD_H
-#endif
 
 #include "widl.h"
 #include "utils.h"
 #include "parser.h"
-#include "wine/wpp.h"
+#include "wpp_private.h"
 
 #include "parser.tab.h"
 
@@ -1041,13 +1035,13 @@
   return uuid;
 }
 
-#line 1044 "tools/widl/parser.yy.c"
+#line 1038 "tools/widl/parser.yy.c"
 /*
  **************************************************************************
  * The flexer starts here
  **************************************************************************
  */
-#line 1050 "tools/widl/parser.yy.c"
+#line 1044 "tools/widl/parser.yy.c"
 
 #define INITIAL 0
 #define QUOTE 1
@@ -1279,9 +1273,9 @@
 		}
 
 	{
-#line 132 "tools/widl/parser.l"
+#line 126 "tools/widl/parser.l"
 
-#line 1284 "tools/widl/parser.yy.c"
+#line 1278 "tools/widl/parser.yy.c"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1337,17 +1331,17 @@
 
 case 1:
 YY_RULE_SETUP
-#line 133 "tools/widl/parser.l"
+#line 127 "tools/widl/parser.l"
 yy_push_state(PP_PRAGMA);
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 134 "tools/widl/parser.l"
+#line 128 "tools/widl/parser.l"
 yy_push_state(PP_LINE);
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 135 "tools/widl/parser.l"
+#line 129 "tools/widl/parser.l"
 {
                             int lineno;
                             char *cptr, *fname;
@@ -1369,12 +1363,12 @@
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 153 "tools/widl/parser.l"
+#line 147 "tools/widl/parser.l"
 yyless(9); yy_pop_state(); return tCPPQUOTE;
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 154 "tools/widl/parser.l"
+#line 148 "tools/widl/parser.l"
 {
                             if(import_stack_ptr) {
                                 if(!winrt_mode)
@@ -1394,22 +1388,22 @@
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 170 "tools/widl/parser.l"
+#line 164 "tools/widl/parser.l"
 parser_lval.str = xstrdup(yytext); yy_pop_state(); return aPRAGMA;
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 171 "tools/widl/parser.l"
+#line 165 "tools/widl/parser.l"
 return tPRAGMA_WARNING;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 172 "tools/widl/parser.l"
+#line 166 "tools/widl/parser.l"
 yy_push_state(QUOTE); cbufidx = 0;
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 173 "tools/widl/parser.l"
+#line 167 "tools/widl/parser.l"
 {
 				yy_pop_state();
 				parser_lval.str = get_buffered_cstring();
@@ -1418,12 +1412,12 @@
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 178 "tools/widl/parser.l"
+#line 172 "tools/widl/parser.l"
 yy_push_state(WSTRQUOTE); cbufidx = 0;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 179 "tools/widl/parser.l"
+#line 173 "tools/widl/parser.l"
 {
 				yy_pop_state();
 				parser_lval.str = get_buffered_cstring();
@@ -1432,12 +1426,12 @@
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 184 "tools/widl/parser.l"
+#line 178 "tools/widl/parser.l"
 yy_push_state(SQUOTE); cbufidx = 0;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 185 "tools/widl/parser.l"
+#line 179 "tools/widl/parser.l"
 {
 				yy_pop_state();
 				parser_lval.str = get_buffered_cstring();
@@ -1445,45 +1439,45 @@
 			}
 	YY_BREAK
 case 14:
-#line 191 "tools/widl/parser.l"
+#line 185 "tools/widl/parser.l"
 case 15:
 YY_RULE_SETUP
-#line 191 "tools/widl/parser.l"
+#line 185 "tools/widl/parser.l"
 addcchar(yytext[1]);
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 192 "tools/widl/parser.l"
+#line 186 "tools/widl/parser.l"
 addcchar(yytext[1]);
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 193 "tools/widl/parser.l"
+#line 187 "tools/widl/parser.l"
 addcchar('\\'); addcchar(yytext[1]);
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 194 "tools/widl/parser.l"
+#line 188 "tools/widl/parser.l"
 addcchar(yytext[0]);
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 195 "tools/widl/parser.l"
+#line 189 "tools/widl/parser.l"
 yy_push_state(ATTR); return '[';
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 196 "tools/widl/parser.l"
+#line 190 "tools/widl/parser.l"
 yy_pop_state(); return ']';
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 197 "tools/widl/parser.l"
+#line 191 "tools/widl/parser.l"
 return attr_token(yytext);
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 198 "tools/widl/parser.l"
+#line 192 "tools/widl/parser.l"
 {
 				parser_lval.uuid = parse_uuid(yytext);
 				return aUUID;
@@ -1491,7 +1485,7 @@
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 202 "tools/widl/parser.l"
+#line 196 "tools/widl/parser.l"
 {
 				parser_lval.num = xstrtoul(yytext, NULL, 0);
 				return aHEXNUM;
@@ -1499,7 +1493,7 @@
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 206 "tools/widl/parser.l"
+#line 200 "tools/widl/parser.l"
 {
 				parser_lval.num = xstrtoul(yytext, NULL, 0);
 				return aNUM;
@@ -1507,7 +1501,7 @@
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 210 "tools/widl/parser.l"
+#line 204 "tools/widl/parser.l"
 {
 				parser_lval.dbl = strtod(yytext, NULL);
 				return aDOUBLE;
@@ -1518,78 +1512,78 @@
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 214 "tools/widl/parser.l"
+#line 208 "tools/widl/parser.l"
 return tSAFEARRAY;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 215 "tools/widl/parser.l"
+#line 209 "tools/widl/parser.l"
 return kw_token(yytext);
 	YY_BREAK
 case 28:
 /* rule 28 can match eol */
 YY_RULE_SETUP
-#line 216 "tools/widl/parser.l"
+#line 210 "tools/widl/parser.l"
 line_number++;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 217 "tools/widl/parser.l"
+#line 211 "tools/widl/parser.l"
 
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 218 "tools/widl/parser.l"
+#line 212 "tools/widl/parser.l"
 return SHL;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 219 "tools/widl/parser.l"
+#line 213 "tools/widl/parser.l"
 return SHR;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 220 "tools/widl/parser.l"
+#line 214 "tools/widl/parser.l"
 return MEMBERPTR;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 221 "tools/widl/parser.l"
+#line 215 "tools/widl/parser.l"
 return EQUALITY;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 222 "tools/widl/parser.l"
+#line 216 "tools/widl/parser.l"
 return INEQUALITY;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 223 "tools/widl/parser.l"
+#line 217 "tools/widl/parser.l"
 return GREATEREQUAL;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 224 "tools/widl/parser.l"
+#line 218 "tools/widl/parser.l"
 return LESSEQUAL;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 225 "tools/widl/parser.l"
+#line 219 "tools/widl/parser.l"
 return LOGICALOR;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 226 "tools/widl/parser.l"
+#line 220 "tools/widl/parser.l"
 return LOGICALAND;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 227 "tools/widl/parser.l"
+#line 221 "tools/widl/parser.l"
 return ELLIPSIS;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 228 "tools/widl/parser.l"
+#line 222 "tools/widl/parser.l"
 return yytext[0];
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
@@ -1599,7 +1593,7 @@
 case YY_STATE_EOF(PP_LINE):
 case YY_STATE_EOF(PP_PRAGMA):
 case YY_STATE_EOF(SQUOTE):
-#line 229 "tools/widl/parser.l"
+#line 223 "tools/widl/parser.l"
 {
                             if (import_stack_ptr)
                                 return aEOF;
@@ -1613,10 +1607,10 @@
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 239 "tools/widl/parser.l"
+#line 233 "tools/widl/parser.l"
 ECHO;
 	YY_BREAK
-#line 1619 "tools/widl/parser.yy.c"
+#line 1613 "tools/widl/parser.yy.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2627,7 +2621,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 239 "tools/widl/parser.l"
+#line 233 "tools/widl/parser.l"
 
 
 #ifndef parser_wrap
@@ -2956,10 +2950,7 @@
     input_name = path;
     line_number = 1;
 
-    name = xstrdup( "widl.XXXXXX" );
-    if((fd = mkstemps( name, 0 )) == -1)
-        error("Could not generate a temp name from %s\n", name);
-
+    fd = make_temp_file( "widl-pp", NULL, &name );
     temp_name = name;
     if (!(f = fdopen(fd, "wt")))
         error("Could not open fd %s for writing\n", name);
@@ -2997,10 +2988,7 @@
     acf_name = NULL;
     line_number = 1;
 
-    name = xstrdup( "widl.XXXXXX" );
-    if((fd = mkstemps( name, 0 )) == -1)
-        error("Could not generate a temp name from %s\n", name);
-
+    fd = make_temp_file( "widl-acf", NULL, &name );
     temp_name = name;
     if (!(f = fdopen(fd, "wt")))
         error("Could not open fd %s for writing\n", name);
diff --git a/mingw-w64-tools/widl/src/wpp/ppl.l b/mingw-w64-tools/widl/src/ppl.l
similarity index 87%
rename from mingw-w64-tools/widl/src/wpp/ppl.l
rename to mingw-w64-tools/widl/src/ppl.l
index c1b8307..f27a2b4 100644
--- a/mingw-w64-tools/widl/src/wpp/ppl.l
+++ b/mingw-w64-tools/widl/src/ppl.l
@@ -17,16 +17,6 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  *
- * History:
- * 24-Apr-2000 BS	- Started from scratch to restructure everything
- *			  and reintegrate the source into the wine-tree.
- * 04-Jan-2000 BS	- Added comments about the lexicographical
- *			  grammar to give some insight in the complexity.
- * 28-Dec-1999 BS	- Eliminated backing-up of the flexer by running
- *			  `flex -b' on the source. This results in some
- *			  weirdo extra rules, but a much faster scanner.
- * 23-Dec-1999 BS	- Started this file
- *
  *-------------------------------------------------------------------------
  * The preprocessor's lexographical grammar (approximately):
  *
@@ -123,7 +113,6 @@
 
 %top{
 #include "config.h"
-#include "wine/port.h"
 }
 
 /*
@@ -163,6 +152,7 @@
 
 %{
 #include <stdio.h>
+#include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
@@ -178,11 +168,10 @@
 # define ULLONG_MAX ((__int64)0xffffffff << 32 | 0xffffffff)
 #endif
 
-#ifndef HAVE_UNISTD_H
 #define YY_NO_UNISTD_H
-#endif
 
-#include "wine/wpp.h"
+#include "../tools.h"
+#include "utils.h"
 #include "wpp_private.h"
 #include "ppy.tab.h"
 
@@ -302,58 +291,13 @@
     0      /* seen_junk */
 };
 
-struct list pp_includelogiclist = LIST_INIT( pp_includelogiclist );
+static struct list pp_includelogiclist = LIST_INIT( pp_includelogiclist );
 
 #define YY_INPUT(buf,result,max_size)					     \
 	{								     \
 		result = fread(buf, 1, max_size, pp_status.file);	     \
 	}
 
-#define BUFFERINITIALCAPACITY 256
-
-void pp_writestring(const char *format, ...)
-{
-	va_list valist;
-	int len;
-	static char *buffer;
-	static int buffercapacity;
-	char *new_buffer;
-
-	if(buffercapacity == 0)
-	{
-		buffer = pp_xmalloc(BUFFERINITIALCAPACITY);
-		buffercapacity = BUFFERINITIALCAPACITY;
-	}
-
-	va_start(valist, format);
-	len = vsnprintf(buffer, buffercapacity,
-			format, valist);
-	va_end(valist);
-        /* If the string is longer than buffersize, vsnprintf returns
-         * the string length with glibc >= 2.1, -1 with glibc < 2.1 */
-	while(len > buffercapacity || len < 0)
-	{
-		do
-		{
-			buffercapacity *= 2;
-		} while(len > buffercapacity);
-
-		new_buffer = pp_xrealloc(buffer, buffercapacity);
-		if(new_buffer == NULL)
-		{
-			va_end(valist);
-			return;
-		}
-		buffer = new_buffer;
-		va_start(valist, format);
-		len = vsnprintf(buffer, buffercapacity,
-				format, valist);
-		va_end(valist);
-	}
-
-        fwrite(buffer, 1, len, ppy_out);
-}
-
 %}
 
 /*
@@ -456,7 +400,7 @@
 	 * Handle #ifdef, #ifndef and #undef
 	 * to get only an untranslated/unexpanded identifier
 	 */
-<pp_ifd>{cident}	ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+<pp_ifd>{cident}	ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 <pp_ifd>{ws}+		;
 <pp_ifd>\n		newline(1); yy_pop_state(); return tNL;
 <pp_ifd>\\\r?\n		newline(0);
@@ -475,7 +419,7 @@
 	 * This is necessary to get the identifier prior to any
 	 * substitutions.
 	 */
-<pp_defined>{cident}		yy_pop_state(); ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+<pp_defined>{cident}		yy_pop_state(); ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 <pp_defined>{ws}+		;
 <pp_defined>(\()|(\))		return *ppy_text;
 <pp_defined>\\\r?\n		newline(0);
@@ -487,17 +431,17 @@
 	 * will act appropriately.
 	 * Comments are stripped from the literal text.
 	 */
-<pp_eol>[^/\\\n]+		if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
-<pp_eol>\/[^/\\\n*]*		if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
-<pp_eol>(\\\r?)|(\/[^/*])	if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
+<pp_eol>[^/\\\n]+		if(yy_top_state() != pp_ignore) { ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL; }
+<pp_eol>\/[^/\\\n*]*		if(yy_top_state() != pp_ignore) { ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL; }
+<pp_eol>(\\\r?)|(\/[^/*])	if(yy_top_state() != pp_ignore) { ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL; }
 <pp_eol>\n			newline(1); yy_pop_state(); if(yy_current_state() != pp_ignore) { return tNL; }
 <pp_eol>\\\r?\n			newline(0);
 
 	/*
 	 * Handle left side of #define
 	 */
-<pp_def>{cident}\(		ppy_lval.cptr = pp_xstrdup(ppy_text); ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro);  return tMACRO;
-<pp_def>{cident}		ppy_lval.cptr = pp_xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE;
+<pp_def>{cident}\(		ppy_lval.cptr = xstrdup(ppy_text); ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro);  return tMACRO;
+<pp_def>{cident}		ppy_lval.cptr = xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE;
 <pp_def>{ws}+			;
 <pp_def>\\\r?\n			newline(0);
 <pp_def>(\\\r?)|(\n)|(.)	perror("Identifier expected");
@@ -505,9 +449,9 @@
 	/*
 	 * Scan the substitution of a define
 	 */
-<pp_define>[^'"/\\\n]+		ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
-<pp_define>(\\\r?)|(\/[^/*])	ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
-<pp_define>\\\r?\n{ws}+		newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
+<pp_define>[^'"/\\\n]+		ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
+<pp_define>(\\\r?)|(\/[^/*])	ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
+<pp_define>\\\r?\n{ws}+		newline(0); ppy_lval.cptr = xstrdup(" "); return tLITERAL;
 <pp_define>\\\r?\n		newline(0);
 <pp_define>\n			newline(1); yy_pop_state(); return tNL;
 <pp_define>\'			new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
@@ -518,7 +462,7 @@
 	 */
 <pp_macro>\){ws}*		yy_pp_state(pp_mbody); return tMACROEND;
 <pp_macro>{ws}+			;
-<pp_macro>{cident}		ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+<pp_macro>{cident}		ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 <pp_macro>,			return ',';
 <pp_macro>"..."			return tELLIPSIS;
 <pp_macro>(\\\r?)|(\n)|(.)|(\.\.?)	ppy_error("Argument identifier expected");
@@ -527,13 +471,13 @@
 	/*
 	 * Scan the substitution of a macro
 	 */
-<pp_mbody>[^a-zA-Z0-9'"#/\\\n]+	ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
-<pp_mbody>{cident}		ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+<pp_mbody>[^a-zA-Z0-9'"#/\\\n]+	ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
+<pp_mbody>{cident}		ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 <pp_mbody>\#\#			return tCONCAT;
 <pp_mbody>\#			return tSTRINGIZE;
-<pp_mbody>[0-9][a-zA-Z0-9]*[^a-zA-Z0-9'"#/\\\n]*	ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
-<pp_mbody>(\\\r?)|(\/[^/*'"#\\\n]*)	ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
-<pp_mbody>\\\r?\n{ws}+		newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
+<pp_mbody>[0-9][a-zA-Z0-9]*[^a-zA-Z0-9'"#/\\\n]*	ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
+<pp_mbody>(\\\r?)|(\/[^/*'"#\\\n]*)	ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
+<pp_mbody>\\\r?\n{ws}+		newline(0); ppy_lval.cptr = xstrdup(" "); return tLITERAL;
 <pp_mbody>\\\r?\n		newline(0);
 <pp_mbody>\n			newline(1); yy_pop_state(); return tNL;
 <pp_mbody>\'			new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
@@ -700,7 +644,7 @@
 
 			else if(yy_current_state() == pp_if)
 			{
-				ppy_lval.cptr = pp_xstrdup(ppy_text);
+				ppy_lval.cptr = xstrdup(ppy_text);
 				return tIDENT;
 			}
 			else {
@@ -726,7 +670,7 @@
 				push_macro(ppp);
 				break;
 			default:
-				pp_internal_error(__FILE__, __LINE__, "Invalid define type %d\n", ppp->type);
+				assert(0);
 			}
 		}
 		else put_buffer(ppy_text, ppy_leng);
@@ -749,8 +693,8 @@
 <pp_macexp>(\n)|(.)|(\\\r?(\n|.))	put_buffer(ppy_text, ppy_leng);
 
 <RCINCL>[A-Za-z0-9_\.\\/]+ {
-		ppy_lval.cptr=pp_xstrdup(ppy_text);
-        	yy_pop_state();
+		ppy_lval.cptr = xstrdup(ppy_text);
+		yy_pop_state();
 		return tRCINCLUDEPATH;
 	}
 
@@ -957,28 +901,19 @@
 static void expand_special(pp_entry_t *ppp)
 {
 	static char *buf = NULL;
-	char *new_buf;
 
 	assert(ppp->type == def_special);
 
 	if(!strcmp(ppp->ident, "__LINE__"))
 	{
-		new_buf = pp_xrealloc(buf, 32);
-		if(!new_buf)
-			return;
-		buf = new_buf;
+		buf = xrealloc(buf, 32);
 		sprintf(buf, "%d", pp_status.line_number);
 	}
 	else if(!strcmp(ppp->ident, "__FILE__"))
 	{
-		new_buf = pp_xrealloc(buf, strlen(pp_status.input) + 3);
-		if(!new_buf)
-			return;
-		buf = new_buf;
+		buf = xrealloc(buf, strlen(pp_status.input) + 3);
 		sprintf(buf, "\"%s\"", pp_status.input);
 	}
-	else
-		pp_internal_error(__FILE__, __LINE__, "Special macro '%s' not found...\n", ppp->ident);
 
 	if(pp_flex_debug)
 		fprintf(stderr, "expand_special(%d): %s:%d: '%s' -> '%s'\n",
@@ -1019,21 +954,12 @@
 
 static void add_text(const char *str, int len)
 {
-	int new_alloc;
-	char *new_text;
-
 	if(len == 0)
 		return;
 	if(curdef_idx >= curdef_alloc || curdef_alloc - curdef_idx < len)
 	{
-		new_alloc = curdef_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1));
-		new_text = pp_xrealloc(curdef_text, new_alloc * sizeof(curdef_text[0]));
-		if(!new_text)
-			return;
-		curdef_text = new_text;
-		curdef_alloc = new_alloc;
-		if(curdef_alloc > 65536)
-			ppy_warning("Reallocating macro-expansion buffer larger than 64kB");
+		curdef_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1);
+		curdef_text = xrealloc(curdef_text, curdef_alloc * sizeof(curdef_text[0]));
 	}
 	memcpy(&curdef_text[curdef_idx], str, len);
 	curdef_idx += len;
@@ -1129,9 +1055,6 @@
 		if(pp_flex_debug)
 			fprintf(stderr, "add_expand_text: exp_subst(%d): '%s'\n", mtp->subst.argidx, exp);
 		break;
-
-	default:
-		pp_internal_error(__FILE__, __LINE__, "Invalid expansion type (%d) in macro expansion\n", mtp->type);
 	}
 	return mtp;
 }
@@ -1225,21 +1148,12 @@
 
 static void add_string(const char *str, int len)
 {
-	int new_alloc;
-	char *new_buffer;
-
 	if(len == 0)
 		return;
 	if(strbuf_idx >= strbuf_alloc || strbuf_alloc - strbuf_idx < len)
 	{
-		new_alloc = strbuf_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1));
-		new_buffer = pp_xrealloc(strbuffer, new_alloc * sizeof(strbuffer[0]));
-		if(!new_buffer)
-			return;
-		strbuffer = new_buffer;
-		strbuf_alloc = new_alloc;
-		if(strbuf_alloc > 65536)
-			ppy_warning("Reallocating string buffer larger than 64kB");
+		strbuf_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1);
+		strbuffer = xrealloc(strbuffer, strbuf_alloc * sizeof(strbuffer[0]));
 	}
 	memcpy(&strbuffer[strbuf_idx], str, len);
 	strbuf_idx += len;
@@ -1247,7 +1161,7 @@
 
 static char *get_string(void)
 {
-	char *str = pp_xmalloc(strbuf_idx + 1);
+	char *str = xmalloc(strbuf_idx + 1);
 
 	memcpy(str, strbuffer, strbuf_idx);
 	str[strbuf_idx] = '\0';
@@ -1275,7 +1189,7 @@
 	if(ppy_debug)
 		printf("push_buffer(%d): %p %p %p %d\n", bufferstackidx, ppp, filename, incname, pop);
 	if(bufferstackidx >= MAXBUFFERSTACK)
-		pp_internal_error(__FILE__, __LINE__, "Buffer stack overflow");
+		error("Buffer stack overflow\n");
 
 	memset(&bufferstack[bufferstackidx], 0, sizeof(bufferstack[0]));
 	bufferstack[bufferstackidx].bufferstate	= YY_CURRENT_BUFFER;
@@ -1300,16 +1214,11 @@
 		pp_status.input  = filename;
 		ncontinuations = 0;
 	}
-	else if(!pop)
-		pp_internal_error(__FILE__, __LINE__, "Pushing buffer without knowing where to go to");
 	bufferstackidx++;
 }
 
 static bufferstackentry_t *pop_buffer(void)
 {
-	if(bufferstackidx < 0)
-		pp_internal_error(__FILE__, __LINE__, "Bufferstack underflow?");
-
 	if(bufferstackidx == 0)
 		return NULL;
 
@@ -1324,7 +1233,7 @@
 		if(!bufferstack[bufferstackidx].should_pop)
 		{
 			fclose(pp_status.file);
-			pp_writestring("# %d \"%s\" 2\n", bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].filename);
+			fprintf(ppy_out, "# %d \"%s\" 2\n", bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].filename);
 
 			/* We have EOF, check the include logic */
 			if(pp_incl_state.state == 2 && !pp_incl_state.seen_junk && pp_incl_state.ppp)
@@ -1332,7 +1241,7 @@
 				pp_entry_t *ppp = pplookup(pp_incl_state.ppp);
 				if(ppp)
 				{
-					iep = pp_xmalloc(sizeof(includelogicentry_t));
+					iep = xmalloc(sizeof(includelogicentry_t));
 					iep->ppp = ppp;
 					ppp->iep = iep;
 					iep->filename = bufferstack[bufferstackidx].include_filename;
@@ -1374,10 +1283,8 @@
 
 	if(bufferstack[bufferstackidx].should_pop)
 	{
-		if(yy_current_state() == pp_macexp)
-			macro_add_expansion();
-		else
-			pp_internal_error(__FILE__, __LINE__, "Pop buffer and state without macro expansion state");
+		assert( yy_current_state() == pp_macexp );
+		macro_add_expansion();
 		yy_pop_state();
 	}
 
@@ -1398,7 +1305,7 @@
 		return;
 	}
 
-	macexpstack[macexpstackidx] = pp_xmalloc(sizeof(macexpstack[0][0]));
+	macexpstack[macexpstackidx] = xmalloc(sizeof(macexpstack[0][0]));
         memset( macexpstack[macexpstackidx], 0, sizeof(macexpstack[0][0]));
 	macexpstack[macexpstackidx]->ppp = ppp;
 	macexpstackidx++;
@@ -1411,8 +1318,7 @@
 
 static macexpstackentry_t *pop_macro(void)
 {
-	if(macexpstackidx <= 0)
-		pp_internal_error(__FILE__, __LINE__, "Macro expansion stack underflow\n");
+	assert(macexpstackidx > 0);
 	return macexpstack[--macexpstackidx];
 }
 
@@ -1436,13 +1342,8 @@
 
 	if(mep->curargalloc - mep->curargsize <= len+1)	/* +1 for '\0' */
 	{
-		char *new_curarg;
-		int new_alloc =	mep->curargalloc + ((ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1);
-		new_curarg = pp_xrealloc(mep->curarg, new_alloc * sizeof(mep->curarg[0]));
-		if(!new_curarg)
-			return;
-		mep->curarg = new_curarg;
-		mep->curargalloc = new_alloc;
+		mep->curargalloc += (ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1;
+		mep->curarg = xrealloc(mep->curarg, mep->curargalloc * sizeof(mep->curarg[0]));
 	}
 	memcpy(mep->curarg + mep->curargsize, text, len);
 	mep->curargsize += len;
@@ -1457,11 +1358,11 @@
 
 	assert(mep->ppp->expanding == 0);
 
-	mep->args = pp_xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0]));
-	mep->ppargs = pp_xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0]));
-	mep->nnls = pp_xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0]));
+	mep->args = xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0]));
+	mep->ppargs = xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0]));
+	mep->nnls = xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0]));
 
-	mep->args[mep->nargs] = pp_xstrdup(mep->curarg ? mep->curarg : "");
+	mep->args[mep->nargs] = xstrdup(mep->curarg ? mep->curarg : "");
 	cptr = mep->args[mep->nargs]-1;
 	while((cptr = strchr(cptr+1, '\n')))
 	{
@@ -1496,7 +1397,7 @@
 
 	assert(mep->ppp->expanding == 0);
 
-	mep->ppargs[mep->nargs-1] = pp_xstrdup(mep->curarg ? mep->curarg : "");
+	mep->ppargs[mep->nargs-1] = xstrdup(mep->curarg ? mep->curarg : "");
 	free(mep->curarg);
 	mep->curargalloc = mep->curargsize = 0;
 	mep->curarg = NULL;
@@ -1584,7 +1485,7 @@
 	pp_status.file = fp;
 	ppy__switch_to_buffer(ppy__create_buffer(NULL, YY_BUF_SIZE));
 
-	pp_writestring("# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3");
+	fprintf(ppy_out, "# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3");
 }
 
 /*
diff --git a/mingw-w64-tools/widl/src/wpp/ppl.yy.c b/mingw-w64-tools/widl/src/ppl.yy.c
similarity index 92%
rename from mingw-w64-tools/widl/src/wpp/ppl.yy.c
rename to mingw-w64-tools/widl/src/ppl.yy.c
index 6fed3bc..1e60090 100644
--- a/mingw-w64-tools/widl/src/wpp/ppl.yy.c
+++ b/mingw-w64-tools/widl/src/ppl.yy.c
@@ -1,8 +1,7 @@
-#line 1 "libs/wpp/ppl.yy.c"
+#line 1 "tools/wrc/ppl.yy.c"
 #include "config.h"
-#include "wine/port.h"
 
-#line 5 "libs/wpp/ppl.yy.c"
+#line 4 "tools/wrc/ppl.yy.c"
 
 #define  YY_INT_ALIGNED short int
 
@@ -1277,7 +1276,7 @@
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "libs/wpp/ppl.l"
+#line 1 "tools/wrc/ppl.l"
 /* -*-C-*-
  * Wrc preprocessor lexical analysis
  *
@@ -1297,16 +1296,6 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  *
- * History:
- * 24-Apr-2000 BS	- Started from scratch to restructure everything
- *			  and reintegrate the source into the wine-tree.
- * 04-Jan-2000 BS	- Added comments about the lexicographical
- *			  grammar to give some insight in the complexity.
- * 28-Dec-1999 BS	- Eliminated backing-up of the flexer by running
- *			  `flex -b' on the source. This results in some
- *			  weirdo extra rules, but a much faster scanner.
- * 23-Dec-1999 BS	- Started this file
- *
  *-------------------------------------------------------------------------
  * The preprocessor's lexographical grammar (approximately):
  *
@@ -1427,8 +1416,9 @@
 
 
 
-#line 165 "libs/wpp/ppl.l"
+#line 154 "tools/wrc/ppl.l"
 #include <stdio.h>
+#include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
@@ -1444,11 +1434,10 @@
 # define ULLONG_MAX ((__int64)0xffffffff << 32 | 0xffffffff)
 #endif
 
-#ifndef HAVE_UNISTD_H
 #define YY_NO_UNISTD_H
-#endif
 
-#include "wine/wpp.h"
+#include "../tools.h"
+#include "utils.h"
 #include "wpp_private.h"
 #include "ppy.tab.h"
 
@@ -1568,65 +1557,20 @@
     0      /* seen_junk */
 };
 
-struct list pp_includelogiclist = LIST_INIT( pp_includelogiclist );
+static struct list pp_includelogiclist = LIST_INIT( pp_includelogiclist );
 
 #define YY_INPUT(buf,result,max_size)					     \
 	{								     \
 		result = fread(buf, 1, max_size, pp_status.file);	     \
 	}
 
-#define BUFFERINITIALCAPACITY 256
-
-void pp_writestring(const char *format, ...)
-{
-	va_list valist;
-	int len;
-	static char *buffer;
-	static int buffercapacity;
-	char *new_buffer;
-
-	if(buffercapacity == 0)
-	{
-		buffer = pp_xmalloc(BUFFERINITIALCAPACITY);
-		buffercapacity = BUFFERINITIALCAPACITY;
-	}
-
-	va_start(valist, format);
-	len = vsnprintf(buffer, buffercapacity,
-			format, valist);
-	va_end(valist);
-        /* If the string is longer than buffersize, vsnprintf returns
-         * the string length with glibc >= 2.1, -1 with glibc < 2.1 */
-	while(len > buffercapacity || len < 0)
-	{
-		do
-		{
-			buffercapacity *= 2;
-		} while(len > buffercapacity);
-
-		new_buffer = pp_xrealloc(buffer, buffercapacity);
-		if(new_buffer == NULL)
-		{
-			va_end(valist);
-			return;
-		}
-		buffer = new_buffer;
-		va_start(valist, format);
-		len = vsnprintf(buffer, buffercapacity,
-				format, valist);
-		va_end(valist);
-	}
-
-        fwrite(buffer, 1, len, ppy_out);
-}
-
-#line 1623 "libs/wpp/ppl.yy.c"
+#line 1567 "tools/wrc/ppl.yy.c"
 /*
  **************************************************************************
  * The scanner starts here
  **************************************************************************
  */
-#line 1629 "libs/wpp/ppl.yy.c"
+#line 1573 "tools/wrc/ppl.yy.c"
 
 #define INITIAL 0
 #define pp_pp 1
@@ -1876,9 +1820,9 @@
 		}
 
 	{
-#line 365 "libs/wpp/ppl.l"
+#line 309 "tools/wrc/ppl.l"
 
-#line 367 "libs/wpp/ppl.l"
+#line 311 "tools/wrc/ppl.l"
 	/*
 	 * Catch line-continuations.
 	 * Note: Gcc keeps the line-continuations in, for example, strings
@@ -1891,7 +1835,7 @@
 	/*
 	 * Detect the leading # of a preprocessor directive.
 	 */
-#line 1894 "libs/wpp/ppl.yy.c"
+#line 1838 "tools/wrc/ppl.yy.c"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1947,7 +1891,7 @@
 
 case 1:
 YY_RULE_SETUP
-#line 379 "libs/wpp/ppl.l"
+#line 323 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk++; yy_push_state(pp_pp);
 	YY_BREAK
 /*
@@ -1955,104 +1899,104 @@
 	 */
 case 2:
 YY_RULE_SETUP
-#line 384 "libs/wpp/ppl.l"
+#line 328 "tools/wrc/ppl.l"
 if(yy_top_state() != pp_ignore) {yy_pp_state(pp_inc); return tINCLUDE;} else {yy_pp_state(pp_eol);}
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 385 "libs/wpp/ppl.l"
+#line 329 "tools/wrc/ppl.l"
 yy_pp_state(yy_current_state() != pp_ignore ? pp_def : pp_eol);
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 386 "libs/wpp/ppl.l"
+#line 330 "tools/wrc/ppl.l"
 yy_pp_state(pp_eol);	if(yy_top_state() != pp_ignore) return tERROR;
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 387 "libs/wpp/ppl.l"
+#line 331 "tools/wrc/ppl.l"
 yy_pp_state(pp_eol);	if(yy_top_state() != pp_ignore) return tWARNING;
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 388 "libs/wpp/ppl.l"
+#line 332 "tools/wrc/ppl.l"
 yy_pp_state(pp_eol);	if(yy_top_state() != pp_ignore) return tPRAGMA;
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 389 "libs/wpp/ppl.l"
+#line 333 "tools/wrc/ppl.l"
 yy_pp_state(pp_eol);	if(yy_top_state() != pp_ignore) return tPPIDENT;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 390 "libs/wpp/ppl.l"
+#line 334 "tools/wrc/ppl.l"
 if(yy_top_state() != pp_ignore) {yy_pp_state(pp_ifd); return tUNDEF;} else {yy_pp_state(pp_eol);}
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 391 "libs/wpp/ppl.l"
+#line 335 "tools/wrc/ppl.l"
 yy_pp_state(pp_ifd);	return tIFDEF;
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 392 "libs/wpp/ppl.l"
+#line 336 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk--; yy_pp_state(pp_ifd);	return tIFNDEF;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 393 "libs/wpp/ppl.l"
+#line 337 "tools/wrc/ppl.l"
 if(yy_top_state() != pp_ignore) {yy_pp_state(pp_if);} else {yy_pp_state(pp_ifignored);} return tIF;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 394 "libs/wpp/ppl.l"
+#line 338 "tools/wrc/ppl.l"
 yy_pp_state(pp_if);	return tELIF;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 395 "libs/wpp/ppl.l"
+#line 339 "tools/wrc/ppl.l"
 yy_pp_state(pp_endif);  return tELSE;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 396 "libs/wpp/ppl.l"
+#line 340 "tools/wrc/ppl.l"
 yy_pp_state(pp_endif);  return tENDIF;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 397 "libs/wpp/ppl.l"
+#line 341 "tools/wrc/ppl.l"
 if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tLINE;} else {yy_pp_state(pp_eol);}
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 398 "libs/wpp/ppl.l"
+#line 342 "tools/wrc/ppl.l"
 if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tGCCLINE;} else {yy_pp_state(pp_eol);}
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 399 "libs/wpp/ppl.l"
+#line 343 "tools/wrc/ppl.l"
 ppy_error("Invalid preprocessor token '%s'", ppy_text);
 	YY_BREAK
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
-#line 400 "libs/wpp/ppl.l"
+#line 344 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;	/* This could be the null-token */
 	YY_BREAK
 case 19:
 /* rule 19 can match eol */
 YY_RULE_SETUP
-#line 401 "libs/wpp/ppl.l"
+#line 345 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 402 "libs/wpp/ppl.l"
+#line 346 "tools/wrc/ppl.l"
 ppy_error("Preprocessor junk '%s'", ppy_text);
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 403 "libs/wpp/ppl.l"
+#line 347 "tools/wrc/ppl.l"
 return *ppy_text;
 	YY_BREAK
 /*
@@ -2060,39 +2004,39 @@
 	 */
 case 22:
 YY_RULE_SETUP
-#line 408 "libs/wpp/ppl.l"
+#line 352 "tools/wrc/ppl.l"
 return make_number(10, &ppy_lval, ppy_text, ppy_leng);
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 409 "libs/wpp/ppl.l"
+#line 353 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_iqs);
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 410 "libs/wpp/ppl.l"
+#line 354 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 411 "libs/wpp/ppl.l"
+#line 355 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 26:
 /* rule 26 can match eol */
 YY_RULE_SETUP
-#line 412 "libs/wpp/ppl.l"
+#line 356 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 case 27:
 /* rule 27 can match eol */
 YY_RULE_SETUP
-#line 413 "libs/wpp/ppl.l"
+#line 357 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 414 "libs/wpp/ppl.l"
+#line 358 "tools/wrc/ppl.l"
 ppy_error(yy_current_state() == pp_inc ? "Trailing junk in #include" : "Trailing junk in #line");
 	YY_BREAK
 /*
@@ -2100,24 +2044,24 @@
 	 */
 case 29:
 YY_RULE_SETUP
-#line 419 "libs/wpp/ppl.l"
+#line 363 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 30:
 /* rule 30 can match eol */
 YY_RULE_SETUP
-#line 420 "libs/wpp/ppl.l"
+#line 364 "tools/wrc/ppl.l"
 newline(1);
 	YY_BREAK
 case 31:
 /* rule 31 can match eol */
 YY_RULE_SETUP
-#line 421 "libs/wpp/ppl.l"
+#line 365 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 422 "libs/wpp/ppl.l"
+#line 366 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 /*
@@ -2128,120 +2072,120 @@
 	 */
 case 33:
 YY_RULE_SETUP
-#line 431 "libs/wpp/ppl.l"
+#line 375 "tools/wrc/ppl.l"
 return make_number(8, &ppy_lval, ppy_text, ppy_leng);
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 432 "libs/wpp/ppl.l"
+#line 376 "tools/wrc/ppl.l"
 ppy_error("Invalid octal digit");
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 433 "libs/wpp/ppl.l"
+#line 377 "tools/wrc/ppl.l"
 return make_number(10, &ppy_lval, ppy_text, ppy_leng);
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 434 "libs/wpp/ppl.l"
+#line 378 "tools/wrc/ppl.l"
 return make_number(16, &ppy_lval, ppy_text, ppy_leng);
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 435 "libs/wpp/ppl.l"
+#line 379 "tools/wrc/ppl.l"
 ppy_error("Invalid hex number");
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 436 "libs/wpp/ppl.l"
+#line 380 "tools/wrc/ppl.l"
 yy_push_state(pp_defined); return tDEFINED;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 437 "libs/wpp/ppl.l"
+#line 381 "tools/wrc/ppl.l"
 return tLSHIFT;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 438 "libs/wpp/ppl.l"
+#line 382 "tools/wrc/ppl.l"
 return tRSHIFT;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 439 "libs/wpp/ppl.l"
+#line 383 "tools/wrc/ppl.l"
 return tLOGAND;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 440 "libs/wpp/ppl.l"
+#line 384 "tools/wrc/ppl.l"
 return tLOGOR;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 441 "libs/wpp/ppl.l"
+#line 385 "tools/wrc/ppl.l"
 return tEQ;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 442 "libs/wpp/ppl.l"
+#line 386 "tools/wrc/ppl.l"
 return tNE;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 443 "libs/wpp/ppl.l"
+#line 387 "tools/wrc/ppl.l"
 return tLTE;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 444 "libs/wpp/ppl.l"
+#line 388 "tools/wrc/ppl.l"
 return tGTE;
 	YY_BREAK
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
-#line 445 "libs/wpp/ppl.l"
+#line 389 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
-#line 446 "libs/wpp/ppl.l"
+#line 390 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 447 "libs/wpp/ppl.l"
+#line 391 "tools/wrc/ppl.l"
 ppy_error("Junk in conditional expression");
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 448 "libs/wpp/ppl.l"
+#line 392 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 449 "libs/wpp/ppl.l"
+#line 393 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 450 "libs/wpp/ppl.l"
+#line 394 "tools/wrc/ppl.l"
 ppy_error("String constants not allowed in conditionals");
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 451 "libs/wpp/ppl.l"
+#line 395 "tools/wrc/ppl.l"
 return *ppy_text;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 453 "libs/wpp/ppl.l"
+#line 397 "tools/wrc/ppl.l"
 ppy_lval.sint = 0; return tSINT;
 	YY_BREAK
 case 55:
 /* rule 55 can match eol */
 YY_RULE_SETUP
-#line 454 "libs/wpp/ppl.l"
+#line 398 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 /*
@@ -2250,29 +2194,29 @@
 	 */
 case 56:
 YY_RULE_SETUP
-#line 460 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+#line 404 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 461 "libs/wpp/ppl.l"
+#line 405 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 58:
 /* rule 58 can match eol */
 YY_RULE_SETUP
-#line 462 "libs/wpp/ppl.l"
+#line 406 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
-#line 463 "libs/wpp/ppl.l"
+#line 407 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 464 "libs/wpp/ppl.l"
+#line 408 "tools/wrc/ppl.l"
 ppy_error("Identifier expected");
 	YY_BREAK
 /*
@@ -2280,24 +2224,24 @@
 	 */
 case 61:
 YY_RULE_SETUP
-#line 469 "libs/wpp/ppl.l"
+#line 413 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 62:
 /* rule 62 can match eol */
 YY_RULE_SETUP
-#line 470 "libs/wpp/ppl.l"
+#line 414 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 case 63:
 /* rule 63 can match eol */
 YY_RULE_SETUP
-#line 471 "libs/wpp/ppl.l"
+#line 415 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 472 "libs/wpp/ppl.l"
+#line 416 "tools/wrc/ppl.l"
 ppy_error("Garbage after #else or #endif.");
 	YY_BREAK
 /*
@@ -2307,29 +2251,29 @@
 	 */
 case 65:
 YY_RULE_SETUP
-#line 479 "libs/wpp/ppl.l"
-yy_pop_state(); ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+#line 423 "tools/wrc/ppl.l"
+yy_pop_state(); ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 480 "libs/wpp/ppl.l"
+#line 424 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 481 "libs/wpp/ppl.l"
+#line 425 "tools/wrc/ppl.l"
 return *ppy_text;
 	YY_BREAK
 case 68:
 /* rule 68 can match eol */
 YY_RULE_SETUP
-#line 482 "libs/wpp/ppl.l"
+#line 426 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 69:
 /* rule 69 can match eol */
 YY_RULE_SETUP
-#line 483 "libs/wpp/ppl.l"
+#line 427 "tools/wrc/ppl.l"
 ppy_error("Identifier expected");
 	YY_BREAK
 /*
@@ -2340,30 +2284,30 @@
 	 */
 case 70:
 YY_RULE_SETUP
-#line 491 "libs/wpp/ppl.l"
-if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
+#line 435 "tools/wrc/ppl.l"
+if(yy_top_state() != pp_ignore) { ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 492 "libs/wpp/ppl.l"
-if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
+#line 436 "tools/wrc/ppl.l"
+if(yy_top_state() != pp_ignore) { ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL; }
 	YY_BREAK
 case 72:
 /* rule 72 can match eol */
 YY_RULE_SETUP
-#line 493 "libs/wpp/ppl.l"
-if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }
+#line 437 "tools/wrc/ppl.l"
+if(yy_top_state() != pp_ignore) { ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL; }
 	YY_BREAK
 case 73:
 /* rule 73 can match eol */
 YY_RULE_SETUP
-#line 494 "libs/wpp/ppl.l"
+#line 438 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); if(yy_current_state() != pp_ignore) { return tNL; }
 	YY_BREAK
 case 74:
 /* rule 74 can match eol */
 YY_RULE_SETUP
-#line 495 "libs/wpp/ppl.l"
+#line 439 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 /*
@@ -2371,29 +2315,29 @@
 	 */
 case 75:
 YY_RULE_SETUP
-#line 500 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro);  return tMACRO;
+#line 444 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro);  return tMACRO;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 501 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE;
+#line 445 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 502 "libs/wpp/ppl.l"
+#line 446 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 78:
 /* rule 78 can match eol */
 YY_RULE_SETUP
-#line 503 "libs/wpp/ppl.l"
+#line 447 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 79:
 /* rule 79 can match eol */
 YY_RULE_SETUP
-#line 504 "libs/wpp/ppl.l"
+#line 448 "tools/wrc/ppl.l"
 perror("Identifier expected");
 	YY_BREAK
 /*
@@ -2401,41 +2345,41 @@
 	 */
 case 80:
 YY_RULE_SETUP
-#line 509 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
+#line 453 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
 	YY_BREAK
 case 81:
 /* rule 81 can match eol */
 YY_RULE_SETUP
-#line 510 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
+#line 454 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
 	YY_BREAK
 case 82:
 /* rule 82 can match eol */
 YY_RULE_SETUP
-#line 511 "libs/wpp/ppl.l"
-newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
+#line 455 "tools/wrc/ppl.l"
+newline(0); ppy_lval.cptr = xstrdup(" "); return tLITERAL;
 	YY_BREAK
 case 83:
 /* rule 83 can match eol */
 YY_RULE_SETUP
-#line 512 "libs/wpp/ppl.l"
+#line 456 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 84:
 /* rule 84 can match eol */
 YY_RULE_SETUP
-#line 513 "libs/wpp/ppl.l"
+#line 457 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 514 "libs/wpp/ppl.l"
+#line 458 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 515 "libs/wpp/ppl.l"
+#line 459 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
 	YY_BREAK
 /*
@@ -2443,39 +2387,39 @@
 	 */
 case 87:
 YY_RULE_SETUP
-#line 520 "libs/wpp/ppl.l"
+#line 464 "tools/wrc/ppl.l"
 yy_pp_state(pp_mbody); return tMACROEND;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 521 "libs/wpp/ppl.l"
+#line 465 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 522 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+#line 466 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 523 "libs/wpp/ppl.l"
+#line 467 "tools/wrc/ppl.l"
 return ',';
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 524 "libs/wpp/ppl.l"
+#line 468 "tools/wrc/ppl.l"
 return tELLIPSIS;
 	YY_BREAK
 case 92:
 /* rule 92 can match eol */
 YY_RULE_SETUP
-#line 525 "libs/wpp/ppl.l"
+#line 469 "tools/wrc/ppl.l"
 ppy_error("Argument identifier expected");
 	YY_BREAK
 case 93:
 /* rule 93 can match eol */
 YY_RULE_SETUP
-#line 526 "libs/wpp/ppl.l"
+#line 470 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 /*
@@ -2483,60 +2427,60 @@
 	 */
 case 94:
 YY_RULE_SETUP
-#line 531 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
+#line 475 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 532 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
+#line 476 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tIDENT;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 533 "libs/wpp/ppl.l"
+#line 477 "tools/wrc/ppl.l"
 return tCONCAT;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 534 "libs/wpp/ppl.l"
+#line 478 "tools/wrc/ppl.l"
 return tSTRINGIZE;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 535 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
+#line 479 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 536 "libs/wpp/ppl.l"
-ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
+#line 480 "tools/wrc/ppl.l"
+ppy_lval.cptr = xstrdup(ppy_text); return tLITERAL;
 	YY_BREAK
 case 100:
 /* rule 100 can match eol */
 YY_RULE_SETUP
-#line 537 "libs/wpp/ppl.l"
-newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
+#line 481 "tools/wrc/ppl.l"
+newline(0); ppy_lval.cptr = xstrdup(" "); return tLITERAL;
 	YY_BREAK
 case 101:
 /* rule 101 can match eol */
 YY_RULE_SETUP
-#line 538 "libs/wpp/ppl.l"
+#line 482 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 102:
 /* rule 102 can match eol */
 YY_RULE_SETUP
-#line 539 "libs/wpp/ppl.l"
+#line 483 "tools/wrc/ppl.l"
 newline(1); yy_pop_state(); return tNL;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 540 "libs/wpp/ppl.l"
+#line 484 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 541 "libs/wpp/ppl.l"
+#line 485 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
 	YY_BREAK
 /*
@@ -2553,13 +2497,13 @@
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 552 "libs/wpp/ppl.l"
+#line 496 "tools/wrc/ppl.l"
 yy_pp_state(pp_macscan);
 	YY_BREAK
 case 106:
 /* rule 106 can match eol */
 YY_RULE_SETUP
-#line 553 "libs/wpp/ppl.l"
+#line 497 "tools/wrc/ppl.l"
 {
 		if(yy_top_state() != pp_macscan)
 			newline(0);
@@ -2568,12 +2512,12 @@
 case 107:
 /* rule 107 can match eol */
 YY_RULE_SETUP
-#line 557 "libs/wpp/ppl.l"
+#line 501 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 558 "libs/wpp/ppl.l"
+#line 502 "tools/wrc/ppl.l"
 {
 		macexpstackentry_t *mac = pop_macro();
 		yy_pop_state();
@@ -2588,7 +2532,7 @@
 	 */
 case 109:
 YY_RULE_SETUP
-#line 570 "libs/wpp/ppl.l"
+#line 514 "tools/wrc/ppl.l"
 {
 		if(++MACROPARENTHESES() > 1)
 			add_text_to_macro(ppy_text, ppy_leng);
@@ -2596,7 +2540,7 @@
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 574 "libs/wpp/ppl.l"
+#line 518 "tools/wrc/ppl.l"
 {
 		if(--MACROPARENTHESES() == 0)
 		{
@@ -2609,7 +2553,7 @@
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 583 "libs/wpp/ppl.l"
+#line 527 "tools/wrc/ppl.l"
 {
 		if(MACROPARENTHESES() > 1)
 			add_text_to_macro(ppy_text, ppy_leng);
@@ -2619,34 +2563,34 @@
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 589 "libs/wpp/ppl.l"
+#line 533 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 590 "libs/wpp/ppl.l"
+#line 534 "tools/wrc/ppl.l"
 new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 591 "libs/wpp/ppl.l"
+#line 535 "tools/wrc/ppl.l"
 yy_push_state(pp_comment); add_text_to_macro(" ", 1);
 	YY_BREAK
 case 115:
 /* rule 115 can match eol */
 YY_RULE_SETUP
-#line 592 "libs/wpp/ppl.l"
+#line 536 "tools/wrc/ppl.l"
 pp_status.line_number++; pp_status.char_number = 1; add_text_to_macro(ppy_text, ppy_leng);
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 593 "libs/wpp/ppl.l"
+#line 537 "tools/wrc/ppl.l"
 add_text_to_macro(ppy_text, ppy_leng);
 	YY_BREAK
 case 117:
 /* rule 117 can match eol */
 YY_RULE_SETUP
-#line 594 "libs/wpp/ppl.l"
+#line 538 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 /*
@@ -2654,23 +2598,23 @@
 	 */
 case 118:
 YY_RULE_SETUP
-#line 599 "libs/wpp/ppl.l"
+#line 543 "tools/wrc/ppl.l"
 yy_push_state(pp_comment);
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 600 "libs/wpp/ppl.l"
+#line 544 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 120:
 /* rule 120 can match eol */
 YY_RULE_SETUP
-#line 601 "libs/wpp/ppl.l"
+#line 545 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 602 "libs/wpp/ppl.l"
+#line 546 "tools/wrc/ppl.l"
 yy_pop_state();
 	YY_BREAK
 /*
@@ -2678,7 +2622,7 @@
 	 */
 case 122:
 YY_RULE_SETUP
-#line 607 "libs/wpp/ppl.l"
+#line 551 "tools/wrc/ppl.l"
 {
 		if(ppy_text[ppy_leng-1] == '\\')
 			ppy_warning("C++ style comment ends with an escaped newline (escape ignored)");
@@ -2689,22 +2633,22 @@
 	 */
 case 123:
 YY_RULE_SETUP
-#line 615 "libs/wpp/ppl.l"
+#line 559 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 616 "libs/wpp/ppl.l"
+#line 560 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 617 "libs/wpp/ppl.l"
+#line 561 "tools/wrc/ppl.l"
 add_string(ppy_text, ppy_leng);
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 618 "libs/wpp/ppl.l"
+#line 562 "tools/wrc/ppl.l"
 {
 		add_string(ppy_text, ppy_leng);
 		yy_pop_state();
@@ -2728,12 +2672,12 @@
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 638 "libs/wpp/ppl.l"
+#line 582 "tools/wrc/ppl.l"
 add_string(ppy_text, ppy_leng);
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 639 "libs/wpp/ppl.l"
+#line 583 "tools/wrc/ppl.l"
 {
 		add_string(ppy_text, ppy_leng);
 		yy_pop_state();
@@ -2751,12 +2695,12 @@
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 653 "libs/wpp/ppl.l"
+#line 597 "tools/wrc/ppl.l"
 add_string(ppy_text, ppy_leng);
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 654 "libs/wpp/ppl.l"
+#line 598 "tools/wrc/ppl.l"
 {
 		add_string(ppy_text, ppy_leng);
 		yy_pop_state();
@@ -2767,7 +2711,7 @@
 case 131:
 /* rule 131 can match eol */
 YY_RULE_SETUP
-#line 660 "libs/wpp/ppl.l"
+#line 604 "tools/wrc/ppl.l"
 {
 		/*
 		 * This is tricky; we need to remove the line-continuation
@@ -2795,13 +2739,13 @@
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 684 "libs/wpp/ppl.l"
+#line 628 "tools/wrc/ppl.l"
 add_string(ppy_text, ppy_leng);
 	YY_BREAK
 case 133:
 /* rule 133 can match eol */
 YY_RULE_SETUP
-#line 685 "libs/wpp/ppl.l"
+#line 629 "tools/wrc/ppl.l"
 {
 		newline(1);
 		add_string(ppy_text, ppy_leng);
@@ -2813,7 +2757,7 @@
 	 */
 case 134:
 YY_RULE_SETUP
-#line 694 "libs/wpp/ppl.l"
+#line 638 "tools/wrc/ppl.l"
 {
 		pp_entry_t *ppp;
 		pp_incl_state.seen_junk++;
@@ -2824,7 +2768,7 @@
 
 			else if(yy_current_state() == pp_if)
 			{
-				ppy_lval.cptr = pp_xstrdup(ppy_text);
+				ppy_lval.cptr = xstrdup(ppy_text);
 				return tIDENT;
 			}
 			else {
@@ -2850,7 +2794,7 @@
 				push_macro(ppp);
 				break;
 			default:
-				pp_internal_error(__FILE__, __LINE__, "Invalid define type %d\n", ppp->type);
+				assert(0);
 			}
 		}
 		else put_buffer(ppy_text, ppy_leng);
@@ -2862,29 +2806,29 @@
 	 */
 case 135:
 YY_RULE_SETUP
-#line 740 "libs/wpp/ppl.l"
+#line 684 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 741 "libs/wpp/ppl.l"
+#line 685 "tools/wrc/ppl.l"
 put_buffer(ppy_text, ppy_leng);
 	YY_BREAK
 case 137:
 /* rule 137 can match eol */
 YY_RULE_SETUP
-#line 742 "libs/wpp/ppl.l"
+#line 686 "tools/wrc/ppl.l"
 newline(1);
 	YY_BREAK
 case 138:
 /* rule 138 can match eol */
 YY_RULE_SETUP
-#line 743 "libs/wpp/ppl.l"
+#line 687 "tools/wrc/ppl.l"
 newline(0);
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 744 "libs/wpp/ppl.l"
+#line 688 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);
 	YY_BREAK
 /*
@@ -2894,26 +2838,26 @@
 case 140:
 /* rule 140 can match eol */
 YY_RULE_SETUP
-#line 750 "libs/wpp/ppl.l"
+#line 694 "tools/wrc/ppl.l"
 put_buffer(ppy_text, ppy_leng);
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 752 "libs/wpp/ppl.l"
+#line 696 "tools/wrc/ppl.l"
 {
-		ppy_lval.cptr=pp_xstrdup(ppy_text);
-        	yy_pop_state();
+		ppy_lval.cptr = xstrdup(ppy_text);
+		yy_pop_state();
 		return tRCINCLUDEPATH;
 	}
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 758 "libs/wpp/ppl.l"
+#line 702 "tools/wrc/ppl.l"
 ;
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 760 "libs/wpp/ppl.l"
+#line 704 "tools/wrc/ppl.l"
 {
 		new_string(); add_string(ppy_text,ppy_leng);yy_push_state(pp_dqs);
 	}
@@ -2924,7 +2868,7 @@
 	 */
 case 144:
 YY_RULE_SETUP
-#line 768 "libs/wpp/ppl.l"
+#line 712 "tools/wrc/ppl.l"
 pp_incl_state.seen_junk++; ppy_warning("Unmatched text '%c' (0x%02x); please report\n", isprint(*ppy_text & 0xff) ? *ppy_text : ' ', *ppy_text);
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
@@ -2950,7 +2894,7 @@
 case YY_STATE_EOF(pp_defined):
 case YY_STATE_EOF(pp_ignore):
 case YY_STATE_EOF(RCINCL):
-#line 770 "libs/wpp/ppl.l"
+#line 714 "tools/wrc/ppl.l"
 {
 		YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
 		bufferstackentry_t *bep = pop_buffer();
@@ -2978,10 +2922,10 @@
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 795 "libs/wpp/ppl.l"
+#line 739 "tools/wrc/ppl.l"
 ECHO;
 	YY_BREAK
-#line 2984 "libs/wpp/ppl.yy.c"
+#line 2928 "tools/wrc/ppl.yy.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -3997,7 +3941,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 795 "libs/wpp/ppl.l"
+#line 739 "tools/wrc/ppl.l"
 
 /*
  **************************************************************************
@@ -4164,28 +4108,19 @@
 static void expand_special(pp_entry_t *ppp)
 {
 	static char *buf = NULL;
-	char *new_buf;
 
 	assert(ppp->type == def_special);
 
 	if(!strcmp(ppp->ident, "__LINE__"))
 	{
-		new_buf = pp_xrealloc(buf, 32);
-		if(!new_buf)
-			return;
-		buf = new_buf;
+		buf = xrealloc(buf, 32);
 		sprintf(buf, "%d", pp_status.line_number);
 	}
 	else if(!strcmp(ppp->ident, "__FILE__"))
 	{
-		new_buf = pp_xrealloc(buf, strlen(pp_status.input) + 3);
-		if(!new_buf)
-			return;
-		buf = new_buf;
+		buf = xrealloc(buf, strlen(pp_status.input) + 3);
 		sprintf(buf, "\"%s\"", pp_status.input);
 	}
-	else
-		pp_internal_error(__FILE__, __LINE__, "Special macro '%s' not found...\n", ppp->ident);
 
 	if(pp_flex_debug)
 		fprintf(stderr, "expand_special(%d): %s:%d: '%s' -> '%s'\n",
@@ -4226,21 +4161,12 @@
 
 static void add_text(const char *str, int len)
 {
-	int new_alloc;
-	char *new_text;
-
 	if(len == 0)
 		return;
 	if(curdef_idx >= curdef_alloc || curdef_alloc - curdef_idx < len)
 	{
-		new_alloc = curdef_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1));
-		new_text = pp_xrealloc(curdef_text, new_alloc * sizeof(curdef_text[0]));
-		if(!new_text)
-			return;
-		curdef_text = new_text;
-		curdef_alloc = new_alloc;
-		if(curdef_alloc > 65536)
-			ppy_warning("Reallocating macro-expansion buffer larger than 64kB");
+		curdef_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1);
+		curdef_text = xrealloc(curdef_text, curdef_alloc * sizeof(curdef_text[0]));
 	}
 	memcpy(&curdef_text[curdef_idx], str, len);
 	curdef_idx += len;
@@ -4336,9 +4262,6 @@
 		if(pp_flex_debug)
 			fprintf(stderr, "add_expand_text: exp_subst(%d): '%s'\n", mtp->subst.argidx, exp);
 		break;
-
-	default:
-		pp_internal_error(__FILE__, __LINE__, "Invalid expansion type (%d) in macro expansion\n", mtp->type);
 	}
 	return mtp;
 }
@@ -4432,21 +4355,12 @@
 
 static void add_string(const char *str, int len)
 {
-	int new_alloc;
-	char *new_buffer;
-
 	if(len == 0)
 		return;
 	if(strbuf_idx >= strbuf_alloc || strbuf_alloc - strbuf_idx < len)
 	{
-		new_alloc = strbuf_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1));
-		new_buffer = pp_xrealloc(strbuffer, new_alloc * sizeof(strbuffer[0]));
-		if(!new_buffer)
-			return;
-		strbuffer = new_buffer;
-		strbuf_alloc = new_alloc;
-		if(strbuf_alloc > 65536)
-			ppy_warning("Reallocating string buffer larger than 64kB");
+		strbuf_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1);
+		strbuffer = xrealloc(strbuffer, strbuf_alloc * sizeof(strbuffer[0]));
 	}
 	memcpy(&strbuffer[strbuf_idx], str, len);
 	strbuf_idx += len;
@@ -4454,7 +4368,7 @@
 
 static char *get_string(void)
 {
-	char *str = pp_xmalloc(strbuf_idx + 1);
+	char *str = xmalloc(strbuf_idx + 1);
 
 	memcpy(str, strbuffer, strbuf_idx);
 	str[strbuf_idx] = '\0';
@@ -4482,7 +4396,7 @@
 	if(ppy_debug)
 		printf("push_buffer(%d): %p %p %p %d\n", bufferstackidx, ppp, filename, incname, pop);
 	if(bufferstackidx >= MAXBUFFERSTACK)
-		pp_internal_error(__FILE__, __LINE__, "Buffer stack overflow");
+		error("Buffer stack overflow\n");
 
 	memset(&bufferstack[bufferstackidx], 0, sizeof(bufferstack[0]));
 	bufferstack[bufferstackidx].bufferstate	= YY_CURRENT_BUFFER;
@@ -4507,16 +4421,11 @@
 		pp_status.input  = filename;
 		ncontinuations = 0;
 	}
-	else if(!pop)
-		pp_internal_error(__FILE__, __LINE__, "Pushing buffer without knowing where to go to");
 	bufferstackidx++;
 }
 
 static bufferstackentry_t *pop_buffer(void)
 {
-	if(bufferstackidx < 0)
-		pp_internal_error(__FILE__, __LINE__, "Bufferstack underflow?");
-
 	if(bufferstackidx == 0)
 		return NULL;
 
@@ -4531,7 +4440,7 @@
 		if(!bufferstack[bufferstackidx].should_pop)
 		{
 			fclose(pp_status.file);
-			pp_writestring("# %d \"%s\" 2\n", bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].filename);
+			fprintf(ppy_out, "# %d \"%s\" 2\n", bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].filename);
 
 			/* We have EOF, check the include logic */
 			if(pp_incl_state.state == 2 && !pp_incl_state.seen_junk && pp_incl_state.ppp)
@@ -4539,7 +4448,7 @@
 				pp_entry_t *ppp = pplookup(pp_incl_state.ppp);
 				if(ppp)
 				{
-					iep = pp_xmalloc(sizeof(includelogicentry_t));
+					iep = xmalloc(sizeof(includelogicentry_t));
 					iep->ppp = ppp;
 					ppp->iep = iep;
 					iep->filename = bufferstack[bufferstackidx].include_filename;
@@ -4581,10 +4490,8 @@
 
 	if(bufferstack[bufferstackidx].should_pop)
 	{
-		if(yy_current_state() == pp_macexp)
-			macro_add_expansion();
-		else
-			pp_internal_error(__FILE__, __LINE__, "Pop buffer and state without macro expansion state");
+		assert( yy_current_state() == pp_macexp );
+		macro_add_expansion();
 		yy_pop_state();
 	}
 
@@ -4605,7 +4512,7 @@
 		return;
 	}
 
-	macexpstack[macexpstackidx] = pp_xmalloc(sizeof(macexpstack[0][0]));
+	macexpstack[macexpstackidx] = xmalloc(sizeof(macexpstack[0][0]));
         memset( macexpstack[macexpstackidx], 0, sizeof(macexpstack[0][0]));
 	macexpstack[macexpstackidx]->ppp = ppp;
 	macexpstackidx++;
@@ -4618,8 +4525,7 @@
 
 static macexpstackentry_t *pop_macro(void)
 {
-	if(macexpstackidx <= 0)
-		pp_internal_error(__FILE__, __LINE__, "Macro expansion stack underflow\n");
+	assert(macexpstackidx > 0);
 	return macexpstack[--macexpstackidx];
 }
 
@@ -4643,13 +4549,8 @@
 
 	if(mep->curargalloc - mep->curargsize <= len+1)	/* +1 for '\0' */
 	{
-		char *new_curarg;
-		int new_alloc =	mep->curargalloc + ((ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1);
-		new_curarg = pp_xrealloc(mep->curarg, new_alloc * sizeof(mep->curarg[0]));
-		if(!new_curarg)
-			return;
-		mep->curarg = new_curarg;
-		mep->curargalloc = new_alloc;
+		mep->curargalloc += (ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1;
+		mep->curarg = xrealloc(mep->curarg, mep->curargalloc * sizeof(mep->curarg[0]));
 	}
 	memcpy(mep->curarg + mep->curargsize, text, len);
 	mep->curargsize += len;
@@ -4664,11 +4565,11 @@
 
 	assert(mep->ppp->expanding == 0);
 
-	mep->args = pp_xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0]));
-	mep->ppargs = pp_xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0]));
-	mep->nnls = pp_xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0]));
+	mep->args = xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0]));
+	mep->ppargs = xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0]));
+	mep->nnls = xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0]));
 
-	mep->args[mep->nargs] = pp_xstrdup(mep->curarg ? mep->curarg : "");
+	mep->args[mep->nargs] = xstrdup(mep->curarg ? mep->curarg : "");
 	cptr = mep->args[mep->nargs]-1;
 	while((cptr = strchr(cptr+1, '\n')))
 	{
@@ -4703,7 +4604,7 @@
 
 	assert(mep->ppp->expanding == 0);
 
-	mep->ppargs[mep->nargs-1] = pp_xstrdup(mep->curarg ? mep->curarg : "");
+	mep->ppargs[mep->nargs-1] = xstrdup(mep->curarg ? mep->curarg : "");
 	free(mep->curarg);
 	mep->curargalloc = mep->curargsize = 0;
 	mep->curarg = NULL;
@@ -4791,7 +4692,7 @@
 	pp_status.file = fp;
 	ppy__switch_to_buffer(ppy__create_buffer(NULL, YY_BUF_SIZE));
 
-	pp_writestring("# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3");
+	fprintf(ppy_out, "# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3");
 }
 
 /*
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.tab.c b/mingw-w64-tools/widl/src/ppy.tab.c
similarity index 82%
rename from mingw-w64-tools/widl/src/wpp/ppy.tab.c
rename to mingw-w64-tools/widl/src/ppy.tab.c
index 6da909e..1e650e3 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.tab.c
+++ b/mingw-w64-tools/widl/src/ppy.tab.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.7.5.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -16,7 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -46,10 +46,10 @@
    USER NAME SPACE" below.  */
 
 /* Identify Bison output, and Bison version.  */
-#define YYBISON 30705
+#define YYBISON 30706
 
 /* Bison version string.  */
-#define YYBISON_VERSION "3.7.5"
+#define YYBISON_VERSION "3.7.6"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -74,10 +74,9 @@
 #define yychar          ppy_char
 
 /* First part of user prologue.  */
-#line 30 "libs/wpp/ppy.y"
+#line 22 "tools/wrc/ppy.y"
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -86,6 +85,8 @@
 #include <ctype.h>
 #include <string.h>
 
+#include "../tools.h"
+#include "utils.h"
 #include "wpp_private.h"
 
 
@@ -141,7 +142,7 @@
 	case SIZE_INT:		BIN_OP_INT(r, v1, v2, OP); break;	\
 	case SIZE_LONG:		BIN_OP_LONG(r, v1, v2, OP); break;	\
 	case SIZE_LONGLONG:	BIN_OP_LONGLONG(r, v1, v2, OP); break;	\
-	default: pp_internal_error(__FILE__, __LINE__, "Invalid type indicator (0x%04x)", v1.type);	\
+	default: assert(0);                                             \
 	}
 
 
@@ -169,7 +170,7 @@
 static int	nmacro_args;
 
 
-#line 173 "libs/wpp/ppy.tab.c"
+#line 174 "tools/wrc/ppy.tab.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -261,7 +262,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 125 "libs/wpp/ppy.y"
+#line 118 "tools/wrc/ppy.y"
 
 	int		sint;
 	unsigned int	uint;
@@ -275,7 +276,7 @@
 	char		*marg;
 	mtext_t		*mtext;
 
-#line 279 "libs/wpp/ppy.tab.c"
+#line 280 "tools/wrc/ppy.tab.c"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -689,16 +690,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   303
+#define YYLAST   304
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  62
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  13
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  84
+#define YYNRULES  85
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  153
+#define YYNSTATES  154
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   300
@@ -752,15 +753,15 @@
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   180,   180,   181,   185,   186,   187,   188,   189,   209,
-     233,   259,   276,   277,   278,   281,   282,   283,   285,   287,
-     289,   291,   292,   293,   294,   295,   296,   303,   309,   310,
-     313,   314,   315,   316,   317,   318,   321,   324,   325,   328,
-     329,   332,   333,   337,   338,   344,   345,   348,   349,   350,
-     351,   352,   359,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399
+       0,   173,   173,   174,   178,   179,   180,   181,   182,   202,
+     224,   248,   265,   266,   267,   270,   271,   272,   274,   276,
+     278,   280,   281,   282,   283,   284,   285,   288,   294,   295,
+     298,   299,   300,   301,   302,   303,   306,   309,   310,   313,
+     314,   315,   318,   319,   323,   324,   330,   331,   334,   335,
+     336,   337,   338,   345,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,   382,   383,   384,   385
 };
 #endif
 
@@ -826,22 +827,22 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     -27,   142,   -27,   -26,    -3,   -12,    -2,    30,    -3,    41,
-      91,    21,     2,   -19,   -19,   -19,   -19,    32,   -27,   -19,
+     -27,   124,   -27,   -26,    -3,   -12,    -2,    30,    -3,    41,
+      73,    21,     2,   -19,   -19,   -19,   -19,    32,   -27,   -19,
      -27,   -27,   -27,   -23,   -27,   -27,   -27,   -27,   -27,   -27,
-     -27,    -3,    -3,    -3,    -3,    -3,    38,    66,   109,   -27,
-      85,   -27,   113,   133,   115,   -27,   124,   -27,   -27,   -27,
-     179,    -9,   278,   280,   281,   282,   129,   283,   -27,   271,
-     -10,   -10,   -27,   -27,    57,   -27,    -3,    -3,    -3,    -3,
+     -27,    -3,    -3,    -3,    -3,    -3,    38,    94,   115,   -27,
+      66,   -27,   123,   137,    74,   -27,    97,   -27,   -27,   -27,
+     142,    -9,   185,   283,   284,   285,   149,   286,   -27,   111,
+     -10,   -10,   -27,   -27,   114,   -27,    -3,    -3,    -3,    -3,
       -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,
-      -3,    -3,    -3,    -3,   -27,   -27,   -27,   -27,   -27,   285,
+      -3,    -3,    -3,    -3,   -27,   -27,   -27,   -27,   -27,   287,
        3,   -27,   -27,   -27,   -27,   -27,   -27,   -27,   -27,   -27,
-     277,   -27,   239,   -27,   238,   -27,   132,   167,   182,   196,
-     209,   221,   231,   231,   111,   111,   111,   111,    61,    61,
-     -10,   -10,   -27,   -27,   -27,   -27,     4,    19,   266,   -27,
-      -3,   -27,     6,   -27,   276,   -27,   -27,   -27,   -27,   290,
-      19,   -27,   -27,   -27,   151,   -27,     7,   -27,   -27,   -27,
-     -27,   291,   -27
+     -27,   129,   -27,   240,   -27,   239,   -27,   138,   173,   188,
+     202,   215,   227,   237,   237,    44,    44,    44,    44,    91,
+      91,   -10,   -10,   -27,   -27,   -27,   -27,     4,    19,   150,
+     -27,    -3,   -27,     6,   -27,   277,   -27,   -27,   -27,   -27,
+     291,    19,   -27,   -27,   -27,   157,   -27,     7,   -27,   -27,
+     -27,   -27,   292,   -27
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -851,20 +852,20 @@
 {
        2,     0,     1,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    28,    28,    28,    28,     0,    36,    28,
-       3,    27,    26,     0,    61,    54,    53,    56,    55,    58,
-      57,     0,     0,     0,     0,     0,     0,     0,     0,    10,
+       3,    27,    26,     0,    62,    55,    54,    57,    56,    59,
+      58,     0,     0,     0,     0,     0,     0,     0,     0,    10,
        0,    11,     0,     0,     0,    21,     0,    30,    31,    32,
-       0,    29,     0,     0,     0,     0,    37,     0,    59,     0,
-      79,    80,    81,    82,     0,     6,     0,     0,     0,     0,
+       0,    29,     0,     0,     0,     0,    37,     0,    60,     0,
+      80,    81,    82,    83,     0,     6,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     7,     8,     9,     4,     5,     0,
-       0,    22,    33,    34,    35,    23,    24,    25,    12,    42,
-       0,    38,    39,    13,     0,    83,     0,    62,    63,    74,
-      72,    73,    64,    65,    66,    68,    67,    69,    77,    78,
-      70,    71,    75,    76,    15,    16,     0,    43,     0,    60,
-       0,    17,     0,    50,     0,    52,    47,    48,    49,     0,
-      44,    45,    40,    41,    84,    18,     0,    51,    14,    46,
-      19,     0,    20
+       0,    22,    33,    34,    35,    23,    24,    25,    12,    41,
+      43,     0,    38,    39,    13,     0,    84,     0,    63,    64,
+      75,    73,    74,    65,    66,    67,    69,    68,    70,    78,
+      79,    71,    72,    76,    77,    15,    16,     0,    44,     0,
+      61,     0,    17,     0,    51,     0,    53,    48,    49,    50,
+       0,    45,    46,    40,    42,    85,    18,     0,    52,    14,
+      47,    19,     0,    20
 };
 
   /* YYPGOTO[NTERM-NUM].  */
@@ -877,8 +878,8 @@
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_uint8 yydefgoto[] =
 {
-       0,     1,    20,    50,    51,    56,   100,   101,   102,   139,
-     140,   141,    36
+       0,     1,    20,    50,    51,    56,   101,   102,   103,   140,
+     141,   142,    36
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -887,36 +888,36 @@
 static const yytype_uint8 yytable[] =
 {
       40,    58,    21,    52,    53,    54,    47,    23,    57,    48,
-      49,    22,    37,    45,   125,   131,    92,   145,   150,    93,
+      49,    22,    37,    45,   126,   132,    92,   146,   151,    93,
       94,    24,    38,    60,    61,    62,    63,    64,    25,    26,
-      27,    28,    29,    30,    46,   126,   132,    59,   146,   151,
-     133,    39,   134,   135,   136,    82,    83,   137,   138,    65,
-      31,    32,    41,    44,    33,    34,    55,    35,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,    66,    84,    67,    68,
+      27,    28,    29,    30,    46,   127,   133,    59,   147,   152,
+     134,    39,   135,   136,   137,    82,    83,   138,   139,    65,
+      31,    32,    41,    44,    33,    34,    55,    35,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,    66,    86,    67,    68,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    66,    86,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    80,    81,    82,    83,   105,    42,
-      85,    43,   144,    66,    87,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,     2,    89,    88,     3,     4,     5,     6,     7,
-       8,     9,    90,    99,    10,    11,    12,    13,    14,    15,
-      16,    17,    78,    79,    80,    81,    82,    83,    18,    19,
-      66,   130,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    66,
-      91,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    70,
+      79,    80,    81,    82,    83,    78,    79,    80,    81,    82,
+      83,    42,    89,    43,    66,    84,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,   142,    95,
-     143,    96,    97,    98,   103,   104,   124,   127,   128,   129,
-     147,   148,   152,   149
+      81,    82,    83,   145,     2,    90,    85,     3,     4,     5,
+       6,     7,     8,     9,    87,   105,    10,    11,    12,    13,
+      14,    15,    16,    17,    80,    81,    82,    83,    88,   128,
+      18,    19,    66,    91,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    99,   143,   100,   144,   106,    66,   131,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    66,    95,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    96,    97,    98,   104,   125,   129,
+     130,   148,   149,   153,   150
 };
 
 static const yytype_uint8 yycheck[] =
@@ -930,28 +931,28 @@
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    38,    11,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    51,    52,    53,    54,    55,
+      56,    28,    28,    30,    38,    11,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,   131,     0,    28,    11,     3,     4,     5,
+       6,     7,     8,     9,    11,    24,    12,    13,    14,    15,
+      16,    17,    18,    19,    53,    54,    55,    56,    11,    20,
+      26,    27,    38,    11,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    22,    22,    24,    24,    61,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    38,    11,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    53,    54,    55,    56,    61,    28,
-      11,    30,   130,    38,    11,    40,    41,    42,    43,    44,
+      53,    54,    55,    56,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,     0,    28,    11,     3,     4,     5,     6,     7,
-       8,     9,    28,    24,    12,    13,    14,    15,    16,    17,
-      18,    19,    51,    52,    53,    54,    55,    56,    26,    27,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    38,
-      11,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    22,    11,
-      24,    11,    11,    11,    11,    24,    11,    20,    59,    61,
-      24,    11,    11,   140
+      55,    56,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    11,    11,    11,    11,    11,    59,
+      61,    24,    11,    11,   141
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -967,13 +968,13 @@
       74,    74,    74,    74,    74,    11,    38,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    11,    11,    11,    11,    11,    28,
-      28,    11,    25,    28,    29,    11,    11,    11,    11,    24,
-      68,    69,    70,    11,    24,    61,    74,    74,    74,    74,
+      28,    11,    25,    28,    29,    11,    11,    11,    11,    22,
+      24,    68,    69,    70,    11,    24,    61,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    11,    11,    32,    20,    59,    61,
-      39,    11,    32,    21,    23,    24,    25,    28,    29,    71,
-      72,    73,    22,    24,    74,    11,    32,    24,    11,    73,
-      11,    32,    11
+      74,    74,    74,    74,    74,    11,    11,    32,    20,    59,
+      61,    39,    11,    32,    21,    23,    24,    25,    28,    29,
+      71,    72,    73,    22,    24,    74,    11,    32,    24,    11,
+      73,    11,    32,    11
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -983,11 +984,11 @@
       64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
       64,    64,    64,    64,    64,    64,    64,    64,    65,    65,
       66,    66,    66,    66,    66,    66,    67,    68,    68,    69,
-      69,    70,    70,    71,    71,    72,    72,    73,    73,    73,
-      73,    73,    73,    74,    74,    74,    74,    74,    74,    74,
+      69,    69,    70,    70,    71,    71,    72,    72,    73,    73,
+      73,    73,    73,    73,    74,    74,    74,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74
+      74,    74,    74,    74,    74,    74
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -997,11 +998,11 @@
        2,     2,     3,     3,     6,     4,     4,     5,     6,     7,
        8,     2,     3,     3,     3,     3,     2,     2,     0,     1,
        1,     1,     1,     2,     2,     2,     0,     0,     1,     1,
-       3,     3,     1,     0,     1,     1,     2,     1,     1,     1,
-       1,     2,     1,     1,     1,     1,     1,     1,     1,     2,
-       4,     1,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     2,
-       2,     2,     2,     3,     5
+       3,     1,     3,     1,     0,     1,     1,     2,     1,     1,
+       1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       2,     4,     1,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     2,     2,     3,     5
 };
 
 
@@ -1469,31 +1470,31 @@
   switch (yyn)
     {
   case 4: /* preprocessor: tINCLUDE tDQSTRING tNL  */
-#line 185 "libs/wpp/ppy.y"
+#line 178 "tools/wrc/ppy.y"
                                         { pp_do_include((yyvsp[-1].cptr), 1); }
-#line 1475 "libs/wpp/ppy.tab.c"
+#line 1476 "tools/wrc/ppy.tab.c"
     break;
 
   case 5: /* preprocessor: tINCLUDE tIQSTRING tNL  */
-#line 186 "libs/wpp/ppy.y"
+#line 179 "tools/wrc/ppy.y"
                                         { pp_do_include((yyvsp[-1].cptr), 0); }
-#line 1481 "libs/wpp/ppy.tab.c"
+#line 1482 "tools/wrc/ppy.tab.c"
     break;
 
   case 6: /* preprocessor: tIF pp_expr tNL  */
-#line 187 "libs/wpp/ppy.y"
+#line 180 "tools/wrc/ppy.y"
                                 { pp_next_if_state(boolean(&(yyvsp[-1].cval))); }
-#line 1487 "libs/wpp/ppy.tab.c"
+#line 1488 "tools/wrc/ppy.tab.c"
     break;
 
   case 7: /* preprocessor: tIFDEF tIDENT tNL  */
-#line 188 "libs/wpp/ppy.y"
+#line 181 "tools/wrc/ppy.y"
                                 { pp_next_if_state(pplookup((yyvsp[-1].cptr)) != NULL); free((yyvsp[-1].cptr)); }
-#line 1493 "libs/wpp/ppy.tab.c"
+#line 1494 "tools/wrc/ppy.tab.c"
     break;
 
   case 8: /* preprocessor: tIFNDEF tIDENT tNL  */
-#line 189 "libs/wpp/ppy.y"
+#line 182 "tools/wrc/ppy.y"
                                 {
 		int t = pplookup((yyvsp[-1].cptr)) == NULL;
 		if(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk)
@@ -1514,11 +1515,11 @@
 			fprintf(stderr, "tIFNDEF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
                                 pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
 		}
-#line 1518 "libs/wpp/ppy.tab.c"
+#line 1519 "tools/wrc/ppy.tab.c"
     break;
 
   case 9: /* preprocessor: tELIF pp_expr tNL  */
-#line 209 "libs/wpp/ppy.y"
+#line 202 "tools/wrc/ppy.y"
                                 {
 		pp_if_state_t s = pp_pop_if();
 		switch(s)
@@ -1539,15 +1540,13 @@
 			break;
 		case if_error:
 			break;
-		default:
-			pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #elif directive", s);
 		}
 		}
-#line 1547 "libs/wpp/ppy.tab.c"
+#line 1546 "tools/wrc/ppy.tab.c"
     break;
 
   case 10: /* preprocessor: tELSE tNL  */
-#line 233 "libs/wpp/ppy.y"
+#line 224 "tools/wrc/ppy.y"
                                 {
 		pp_if_state_t s = pp_pop_if();
 		switch(s)
@@ -1570,15 +1569,13 @@
 			break;
 		case if_error:
 			break;
-		default:
-			pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s);
 		}
 		}
-#line 1578 "libs/wpp/ppy.tab.c"
+#line 1575 "tools/wrc/ppy.tab.c"
     break;
 
   case 11: /* preprocessor: tENDIF tNL  */
-#line 259 "libs/wpp/ppy.y"
+#line 248 "tools/wrc/ppy.y"
                                 {
 		if(pp_pop_if() != if_error)
 		{
@@ -1596,252 +1593,254 @@
 					pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
 		}
 		}
-#line 1600 "libs/wpp/ppy.tab.c"
+#line 1597 "tools/wrc/ppy.tab.c"
     break;
 
   case 12: /* preprocessor: tUNDEF tIDENT tNL  */
-#line 276 "libs/wpp/ppy.y"
+#line 265 "tools/wrc/ppy.y"
                                 { pp_del_define((yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1606 "libs/wpp/ppy.tab.c"
+#line 1603 "tools/wrc/ppy.tab.c"
     break;
 
   case 13: /* preprocessor: tDEFINE opt_text tNL  */
-#line 277 "libs/wpp/ppy.y"
+#line 266 "tools/wrc/ppy.y"
                                 { pp_add_define((yyvsp[-2].cptr), (yyvsp[-1].cptr)); free((yyvsp[-2].cptr)); free((yyvsp[-1].cptr)); }
-#line 1612 "libs/wpp/ppy.tab.c"
+#line 1609 "tools/wrc/ppy.tab.c"
     break;
 
   case 14: /* preprocessor: tMACRO res_arg allmargs tMACROEND opt_mtexts tNL  */
-#line 278 "libs/wpp/ppy.y"
+#line 267 "tools/wrc/ppy.y"
                                                                 {
 		pp_add_macro((yyvsp[-5].cptr), macro_args, nmacro_args, (yyvsp[-1].mtext));
 		}
-#line 1620 "libs/wpp/ppy.tab.c"
+#line 1617 "tools/wrc/ppy.tab.c"
     break;
 
   case 15: /* preprocessor: tLINE tSINT tDQSTRING tNL  */
-#line 281 "libs/wpp/ppy.y"
-                                        { if((yyvsp[-1].cptr)) pp_writestring("# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1626 "libs/wpp/ppy.tab.c"
+#line 270 "tools/wrc/ppy.y"
+                                        { if((yyvsp[-1].cptr)) fprintf(ppy_out, "# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1623 "tools/wrc/ppy.tab.c"
     break;
 
   case 16: /* preprocessor: tGCCLINE tSINT tDQSTRING tNL  */
-#line 282 "libs/wpp/ppy.y"
-                                        { if((yyvsp[-1].cptr)) pp_writestring("# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1632 "libs/wpp/ppy.tab.c"
+#line 271 "tools/wrc/ppy.y"
+                                        { if((yyvsp[-1].cptr)) fprintf(ppy_out, "# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1629 "tools/wrc/ppy.tab.c"
     break;
 
   case 17: /* preprocessor: tGCCLINE tSINT tDQSTRING tSINT tNL  */
-#line 284 "libs/wpp/ppy.y"
-                { if((yyvsp[-2].cptr)) pp_writestring("# %d %s %d\n", (yyvsp[-3].sint), (yyvsp[-2].cptr), (yyvsp[-1].sint)); free((yyvsp[-2].cptr)); }
-#line 1638 "libs/wpp/ppy.tab.c"
+#line 273 "tools/wrc/ppy.y"
+                { if((yyvsp[-2].cptr)) fprintf(ppy_out, "# %d %s %d\n", (yyvsp[-3].sint), (yyvsp[-2].cptr), (yyvsp[-1].sint)); free((yyvsp[-2].cptr)); }
+#line 1635 "tools/wrc/ppy.tab.c"
     break;
 
   case 18: /* preprocessor: tGCCLINE tSINT tDQSTRING tSINT tSINT tNL  */
-#line 286 "libs/wpp/ppy.y"
-                { if((yyvsp[-3].cptr)) pp_writestring("# %d %s %d %d\n", (yyvsp[-4].sint) ,(yyvsp[-3].cptr), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-3].cptr)); }
-#line 1644 "libs/wpp/ppy.tab.c"
+#line 275 "tools/wrc/ppy.y"
+                { if((yyvsp[-3].cptr)) fprintf(ppy_out, "# %d %s %d %d\n", (yyvsp[-4].sint) ,(yyvsp[-3].cptr), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-3].cptr)); }
+#line 1641 "tools/wrc/ppy.tab.c"
     break;
 
   case 19: /* preprocessor: tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tNL  */
-#line 288 "libs/wpp/ppy.y"
-                { if((yyvsp[-4].cptr)) pp_writestring("# %d %s %d %d %d\n", (yyvsp[-5].sint) ,(yyvsp[-4].cptr) ,(yyvsp[-3].sint) ,(yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-4].cptr)); }
-#line 1650 "libs/wpp/ppy.tab.c"
+#line 277 "tools/wrc/ppy.y"
+                { if((yyvsp[-4].cptr)) fprintf(ppy_out, "# %d %s %d %d %d\n", (yyvsp[-5].sint) ,(yyvsp[-4].cptr) ,(yyvsp[-3].sint) ,(yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-4].cptr)); }
+#line 1647 "tools/wrc/ppy.tab.c"
     break;
 
   case 20: /* preprocessor: tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL  */
-#line 290 "libs/wpp/ppy.y"
-                { if((yyvsp[-5].cptr)) pp_writestring("# %d %s %d %d %d %d\n", (yyvsp[-6].sint) ,(yyvsp[-5].cptr) ,(yyvsp[-4].sint) ,(yyvsp[-3].sint), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-5].cptr)); }
-#line 1656 "libs/wpp/ppy.tab.c"
+#line 279 "tools/wrc/ppy.y"
+                { if((yyvsp[-5].cptr)) fprintf(ppy_out, "# %d %s %d %d %d %d\n", (yyvsp[-6].sint) ,(yyvsp[-5].cptr) ,(yyvsp[-4].sint) ,(yyvsp[-3].sint), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-5].cptr)); }
+#line 1653 "tools/wrc/ppy.tab.c"
     break;
 
   case 22: /* preprocessor: tERROR opt_text tNL  */
-#line 292 "libs/wpp/ppy.y"
+#line 281 "tools/wrc/ppy.y"
                                 { ppy_error("#error directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1662 "libs/wpp/ppy.tab.c"
+#line 1659 "tools/wrc/ppy.tab.c"
     break;
 
   case 23: /* preprocessor: tWARNING opt_text tNL  */
-#line 293 "libs/wpp/ppy.y"
+#line 282 "tools/wrc/ppy.y"
                                 { ppy_warning("#warning directive: '%s'", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1668 "libs/wpp/ppy.tab.c"
+#line 1665 "tools/wrc/ppy.tab.c"
     break;
 
   case 24: /* preprocessor: tPRAGMA opt_text tNL  */
-#line 294 "libs/wpp/ppy.y"
-                                { pp_writestring("#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); free((yyvsp[-1].cptr)); }
-#line 1674 "libs/wpp/ppy.tab.c"
+#line 283 "tools/wrc/ppy.y"
+                                { fprintf(ppy_out, "#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); free((yyvsp[-1].cptr)); }
+#line 1671 "tools/wrc/ppy.tab.c"
     break;
 
   case 25: /* preprocessor: tPPIDENT opt_text tNL  */
-#line 295 "libs/wpp/ppy.y"
-                                { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
-#line 1680 "libs/wpp/ppy.tab.c"
+#line 284 "tools/wrc/ppy.y"
+                                { if(pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
+#line 1677 "tools/wrc/ppy.tab.c"
     break;
 
   case 26: /* preprocessor: tRCINCLUDE tRCINCLUDEPATH  */
-#line 296 "libs/wpp/ppy.y"
+#line 285 "tools/wrc/ppy.y"
                                     {
-                int nl=strlen((yyvsp[0].cptr)) +3;
-                char *fn=pp_xmalloc(nl);
-                sprintf(fn,"\"%s\"",(yyvsp[0].cptr));
-                pp_do_include(fn,1);
-                free((yyvsp[0].cptr));
+                pp_do_include(strmake( "\"%s\"", (yyvsp[0].cptr) ),1);
 	}
-#line 1692 "libs/wpp/ppy.tab.c"
+#line 1685 "tools/wrc/ppy.tab.c"
     break;
 
   case 27: /* preprocessor: tRCINCLUDE tDQSTRING  */
-#line 303 "libs/wpp/ppy.y"
+#line 288 "tools/wrc/ppy.y"
                                {
 		pp_do_include((yyvsp[0].cptr),1);
 	}
-#line 1700 "libs/wpp/ppy.tab.c"
+#line 1693 "tools/wrc/ppy.tab.c"
     break;
 
   case 28: /* opt_text: %empty  */
-#line 309 "libs/wpp/ppy.y"
+#line 294 "tools/wrc/ppy.y"
                         { (yyval.cptr) = NULL; }
-#line 1706 "libs/wpp/ppy.tab.c"
+#line 1699 "tools/wrc/ppy.tab.c"
     break;
 
   case 29: /* opt_text: text  */
-#line 310 "libs/wpp/ppy.y"
+#line 295 "tools/wrc/ppy.y"
                         { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1712 "libs/wpp/ppy.tab.c"
+#line 1705 "tools/wrc/ppy.tab.c"
     break;
 
   case 30: /* text: tLITERAL  */
-#line 313 "libs/wpp/ppy.y"
+#line 298 "tools/wrc/ppy.y"
                                 { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1718 "libs/wpp/ppy.tab.c"
+#line 1711 "tools/wrc/ppy.tab.c"
     break;
 
   case 31: /* text: tDQSTRING  */
-#line 314 "libs/wpp/ppy.y"
+#line 299 "tools/wrc/ppy.y"
                                 { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1724 "libs/wpp/ppy.tab.c"
+#line 1717 "tools/wrc/ppy.tab.c"
     break;
 
   case 32: /* text: tSQSTRING  */
-#line 315 "libs/wpp/ppy.y"
+#line 300 "tools/wrc/ppy.y"
                                 { (yyval.cptr) = (yyvsp[0].cptr); }
-#line 1730 "libs/wpp/ppy.tab.c"
+#line 1723 "tools/wrc/ppy.tab.c"
     break;
 
   case 33: /* text: text tLITERAL  */
-#line 316 "libs/wpp/ppy.y"
+#line 301 "tools/wrc/ppy.y"
                                 { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
-#line 1736 "libs/wpp/ppy.tab.c"
+#line 1729 "tools/wrc/ppy.tab.c"
     break;
 
   case 34: /* text: text tDQSTRING  */
-#line 317 "libs/wpp/ppy.y"
+#line 302 "tools/wrc/ppy.y"
                                 { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
-#line 1742 "libs/wpp/ppy.tab.c"
+#line 1735 "tools/wrc/ppy.tab.c"
     break;
 
   case 35: /* text: text tSQSTRING  */
-#line 318 "libs/wpp/ppy.y"
+#line 303 "tools/wrc/ppy.y"
                                 { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); }
-#line 1748 "libs/wpp/ppy.tab.c"
+#line 1741 "tools/wrc/ppy.tab.c"
     break;
 
   case 36: /* res_arg: %empty  */
-#line 321 "libs/wpp/ppy.y"
+#line 306 "tools/wrc/ppy.y"
                         { macro_args = NULL; nmacro_args = 0; }
-#line 1754 "libs/wpp/ppy.tab.c"
+#line 1747 "tools/wrc/ppy.tab.c"
     break;
 
   case 37: /* allmargs: %empty  */
-#line 324 "libs/wpp/ppy.y"
+#line 309 "tools/wrc/ppy.y"
                                 { (yyval.sint) = 0; macro_args = NULL; nmacro_args = 0; }
-#line 1760 "libs/wpp/ppy.tab.c"
+#line 1753 "tools/wrc/ppy.tab.c"
     break;
 
   case 38: /* allmargs: emargs  */
-#line 325 "libs/wpp/ppy.y"
+#line 310 "tools/wrc/ppy.y"
                                 { (yyval.sint) = nmacro_args; }
-#line 1766 "libs/wpp/ppy.tab.c"
+#line 1759 "tools/wrc/ppy.tab.c"
     break;
 
   case 39: /* emargs: margs  */
-#line 328 "libs/wpp/ppy.y"
+#line 313 "tools/wrc/ppy.y"
                                 { (yyval.marg) = (yyvsp[0].marg); }
-#line 1772 "libs/wpp/ppy.tab.c"
+#line 1765 "tools/wrc/ppy.tab.c"
     break;
 
   case 40: /* emargs: margs ',' tELLIPSIS  */
-#line 329 "libs/wpp/ppy.y"
+#line 314 "tools/wrc/ppy.y"
                                 { nmacro_args *= -1; }
-#line 1778 "libs/wpp/ppy.tab.c"
+#line 1771 "tools/wrc/ppy.tab.c"
     break;
 
-  case 41: /* margs: margs ',' tIDENT  */
-#line 332 "libs/wpp/ppy.y"
+  case 41: /* emargs: tELLIPSIS  */
+#line 315 "tools/wrc/ppy.y"
+                        { macro_args = NULL; nmacro_args = 0; }
+#line 1777 "tools/wrc/ppy.tab.c"
+    break;
+
+  case 42: /* margs: margs ',' tIDENT  */
+#line 318 "tools/wrc/ppy.y"
                                 { (yyval.marg) = add_new_marg((yyvsp[0].cptr)); }
-#line 1784 "libs/wpp/ppy.tab.c"
+#line 1783 "tools/wrc/ppy.tab.c"
     break;
 
-  case 42: /* margs: tIDENT  */
-#line 333 "libs/wpp/ppy.y"
+  case 43: /* margs: tIDENT  */
+#line 319 "tools/wrc/ppy.y"
                                 { (yyval.marg) = add_new_marg((yyvsp[0].cptr)); }
-#line 1790 "libs/wpp/ppy.tab.c"
+#line 1789 "tools/wrc/ppy.tab.c"
     break;
 
-  case 43: /* opt_mtexts: %empty  */
-#line 337 "libs/wpp/ppy.y"
+  case 44: /* opt_mtexts: %empty  */
+#line 323 "tools/wrc/ppy.y"
                         { (yyval.mtext) = NULL; }
-#line 1796 "libs/wpp/ppy.tab.c"
+#line 1795 "tools/wrc/ppy.tab.c"
     break;
 
-  case 44: /* opt_mtexts: mtexts  */
-#line 338 "libs/wpp/ppy.y"
+  case 45: /* opt_mtexts: mtexts  */
+#line 324 "tools/wrc/ppy.y"
                         {
 		for((yyval.mtext) = (yyvsp[0].mtext); (yyval.mtext) && (yyval.mtext)->prev; (yyval.mtext) = (yyval.mtext)->prev)
 			;
 		}
-#line 1805 "libs/wpp/ppy.tab.c"
+#line 1804 "tools/wrc/ppy.tab.c"
     break;
 
-  case 45: /* mtexts: mtext  */
-#line 344 "libs/wpp/ppy.y"
+  case 46: /* mtexts: mtext  */
+#line 330 "tools/wrc/ppy.y"
                         { (yyval.mtext) = (yyvsp[0].mtext); }
-#line 1811 "libs/wpp/ppy.tab.c"
+#line 1810 "tools/wrc/ppy.tab.c"
     break;
 
-  case 46: /* mtexts: mtexts mtext  */
-#line 345 "libs/wpp/ppy.y"
+  case 47: /* mtexts: mtexts mtext  */
+#line 331 "tools/wrc/ppy.y"
                         { (yyval.mtext) = combine_mtext((yyvsp[-1].mtext), (yyvsp[0].mtext)); }
-#line 1817 "libs/wpp/ppy.tab.c"
+#line 1816 "tools/wrc/ppy.tab.c"
     break;
 
-  case 47: /* mtext: tLITERAL  */
-#line 348 "libs/wpp/ppy.y"
+  case 48: /* mtext: tLITERAL  */
+#line 334 "tools/wrc/ppy.y"
                         { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
-#line 1823 "libs/wpp/ppy.tab.c"
+#line 1822 "tools/wrc/ppy.tab.c"
     break;
 
-  case 48: /* mtext: tDQSTRING  */
-#line 349 "libs/wpp/ppy.y"
+  case 49: /* mtext: tDQSTRING  */
+#line 335 "tools/wrc/ppy.y"
                         { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
-#line 1829 "libs/wpp/ppy.tab.c"
+#line 1828 "tools/wrc/ppy.tab.c"
     break;
 
-  case 49: /* mtext: tSQSTRING  */
-#line 350 "libs/wpp/ppy.y"
+  case 50: /* mtext: tSQSTRING  */
+#line 336 "tools/wrc/ppy.y"
                         { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); }
-#line 1835 "libs/wpp/ppy.tab.c"
+#line 1834 "tools/wrc/ppy.tab.c"
     break;
 
-  case 50: /* mtext: tCONCAT  */
-#line 351 "libs/wpp/ppy.y"
+  case 51: /* mtext: tCONCAT  */
+#line 337 "tools/wrc/ppy.y"
                         { (yyval.mtext) = new_mtext(NULL, 0, exp_concat); }
-#line 1841 "libs/wpp/ppy.tab.c"
+#line 1840 "tools/wrc/ppy.tab.c"
     break;
 
-  case 51: /* mtext: tSTRINGIZE tIDENT  */
-#line 352 "libs/wpp/ppy.y"
+  case 52: /* mtext: tSTRINGIZE tIDENT  */
+#line 338 "tools/wrc/ppy.y"
                                 {
 		int mat = marg_index((yyvsp[0].cptr));
 		if(mat < 0)
@@ -1849,11 +1848,11 @@
 		else
 			(yyval.mtext) = new_mtext(NULL, mat, exp_stringize);
 		}
-#line 1853 "libs/wpp/ppy.tab.c"
+#line 1852 "tools/wrc/ppy.tab.c"
     break;
 
-  case 52: /* mtext: tIDENT  */
-#line 359 "libs/wpp/ppy.y"
+  case 53: /* mtext: tIDENT  */
+#line 345 "tools/wrc/ppy.y"
                         {
 		int mat = marg_index((yyvsp[0].cptr));
 		if(mat >= 0)
@@ -1861,203 +1860,203 @@
 		else if((yyvsp[0].cptr))
 			(yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text);
 		}
-#line 1865 "libs/wpp/ppy.tab.c"
+#line 1864 "tools/wrc/ppy.tab.c"
     break;
 
-  case 53: /* pp_expr: tSINT  */
-#line 368 "libs/wpp/ppy.y"
+  case 54: /* pp_expr: tSINT  */
+#line 354 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = (yyvsp[0].sint); }
-#line 1871 "libs/wpp/ppy.tab.c"
+#line 1870 "tools/wrc/ppy.tab.c"
     break;
 
-  case 54: /* pp_expr: tUINT  */
-#line 369 "libs/wpp/ppy.y"
+  case 55: /* pp_expr: tUINT  */
+#line 355 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_uint;  (yyval.cval).val.ui = (yyvsp[0].uint); }
-#line 1877 "libs/wpp/ppy.tab.c"
+#line 1876 "tools/wrc/ppy.tab.c"
     break;
 
-  case 55: /* pp_expr: tSLONG  */
-#line 370 "libs/wpp/ppy.y"
+  case 56: /* pp_expr: tSLONG  */
+#line 356 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_slong; (yyval.cval).val.sl = (yyvsp[0].slong); }
-#line 1883 "libs/wpp/ppy.tab.c"
+#line 1882 "tools/wrc/ppy.tab.c"
     break;
 
-  case 56: /* pp_expr: tULONG  */
-#line 371 "libs/wpp/ppy.y"
+  case 57: /* pp_expr: tULONG  */
+#line 357 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_ulong; (yyval.cval).val.ul = (yyvsp[0].ulong); }
-#line 1889 "libs/wpp/ppy.tab.c"
+#line 1888 "tools/wrc/ppy.tab.c"
     break;
 
-  case 57: /* pp_expr: tSLONGLONG  */
-#line 372 "libs/wpp/ppy.y"
+  case 58: /* pp_expr: tSLONGLONG  */
+#line 358 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sll;   (yyval.cval).val.sll = (yyvsp[0].sll); }
-#line 1895 "libs/wpp/ppy.tab.c"
+#line 1894 "tools/wrc/ppy.tab.c"
     break;
 
-  case 58: /* pp_expr: tULONGLONG  */
-#line 373 "libs/wpp/ppy.y"
+  case 59: /* pp_expr: tULONGLONG  */
+#line 359 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_ull;   (yyval.cval).val.ull = (yyvsp[0].ull); }
-#line 1901 "libs/wpp/ppy.tab.c"
+#line 1900 "tools/wrc/ppy.tab.c"
     break;
 
-  case 59: /* pp_expr: tDEFINED tIDENT  */
-#line 374 "libs/wpp/ppy.y"
+  case 60: /* pp_expr: tDEFINED tIDENT  */
+#line 360 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[0].cptr)) != NULL; }
-#line 1907 "libs/wpp/ppy.tab.c"
+#line 1906 "tools/wrc/ppy.tab.c"
     break;
 
-  case 60: /* pp_expr: tDEFINED '(' tIDENT ')'  */
-#line 375 "libs/wpp/ppy.y"
+  case 61: /* pp_expr: tDEFINED '(' tIDENT ')'  */
+#line 361 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[-1].cptr)) != NULL; }
-#line 1913 "libs/wpp/ppy.tab.c"
+#line 1912 "tools/wrc/ppy.tab.c"
     break;
 
-  case 61: /* pp_expr: tIDENT  */
-#line 376 "libs/wpp/ppy.y"
+  case 62: /* pp_expr: tIDENT  */
+#line 362 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = 0; }
-#line 1919 "libs/wpp/ppy.tab.c"
+#line 1918 "tools/wrc/ppy.tab.c"
     break;
 
-  case 62: /* pp_expr: pp_expr tLOGOR pp_expr  */
-#line 377 "libs/wpp/ppy.y"
+  case 63: /* pp_expr: pp_expr tLOGOR pp_expr  */
+#line 363 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) || boolean(&(yyvsp[0].cval)); }
-#line 1925 "libs/wpp/ppy.tab.c"
+#line 1924 "tools/wrc/ppy.tab.c"
     break;
 
-  case 63: /* pp_expr: pp_expr tLOGAND pp_expr  */
-#line 378 "libs/wpp/ppy.y"
+  case 64: /* pp_expr: pp_expr tLOGAND pp_expr  */
+#line 364 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) && boolean(&(yyvsp[0].cval)); }
-#line 1931 "libs/wpp/ppy.tab.c"
+#line 1930 "tools/wrc/ppy.tab.c"
     break;
 
-  case 64: /* pp_expr: pp_expr tEQ pp_expr  */
-#line 379 "libs/wpp/ppy.y"
+  case 65: /* pp_expr: pp_expr tEQ pp_expr  */
+#line 365 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ==); }
-#line 1937 "libs/wpp/ppy.tab.c"
+#line 1936 "tools/wrc/ppy.tab.c"
     break;
 
-  case 65: /* pp_expr: pp_expr tNE pp_expr  */
-#line 380 "libs/wpp/ppy.y"
+  case 66: /* pp_expr: pp_expr tNE pp_expr  */
+#line 366 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), !=); }
-#line 1943 "libs/wpp/ppy.tab.c"
+#line 1942 "tools/wrc/ppy.tab.c"
     break;
 
-  case 66: /* pp_expr: pp_expr '<' pp_expr  */
-#line 381 "libs/wpp/ppy.y"
+  case 67: /* pp_expr: pp_expr '<' pp_expr  */
+#line 367 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  <); }
-#line 1949 "libs/wpp/ppy.tab.c"
+#line 1948 "tools/wrc/ppy.tab.c"
     break;
 
-  case 67: /* pp_expr: pp_expr '>' pp_expr  */
-#line 382 "libs/wpp/ppy.y"
+  case 68: /* pp_expr: pp_expr '>' pp_expr  */
+#line 368 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  >); }
-#line 1955 "libs/wpp/ppy.tab.c"
+#line 1954 "tools/wrc/ppy.tab.c"
     break;
 
-  case 68: /* pp_expr: pp_expr tLTE pp_expr  */
-#line 383 "libs/wpp/ppy.y"
+  case 69: /* pp_expr: pp_expr tLTE pp_expr  */
+#line 369 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <=); }
-#line 1961 "libs/wpp/ppy.tab.c"
+#line 1960 "tools/wrc/ppy.tab.c"
     break;
 
-  case 69: /* pp_expr: pp_expr tGTE pp_expr  */
-#line 384 "libs/wpp/ppy.y"
+  case 70: /* pp_expr: pp_expr tGTE pp_expr  */
+#line 370 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >=); }
-#line 1967 "libs/wpp/ppy.tab.c"
+#line 1966 "tools/wrc/ppy.tab.c"
     break;
 
-  case 70: /* pp_expr: pp_expr '+' pp_expr  */
-#line 385 "libs/wpp/ppy.y"
+  case 71: /* pp_expr: pp_expr '+' pp_expr  */
+#line 371 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  +); }
-#line 1973 "libs/wpp/ppy.tab.c"
+#line 1972 "tools/wrc/ppy.tab.c"
     break;
 
-  case 71: /* pp_expr: pp_expr '-' pp_expr  */
-#line 386 "libs/wpp/ppy.y"
+  case 72: /* pp_expr: pp_expr '-' pp_expr  */
+#line 372 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  -); }
-#line 1979 "libs/wpp/ppy.tab.c"
+#line 1978 "tools/wrc/ppy.tab.c"
     break;
 
-  case 72: /* pp_expr: pp_expr '^' pp_expr  */
-#line 387 "libs/wpp/ppy.y"
+  case 73: /* pp_expr: pp_expr '^' pp_expr  */
+#line 373 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  ^); }
-#line 1985 "libs/wpp/ppy.tab.c"
+#line 1984 "tools/wrc/ppy.tab.c"
     break;
 
-  case 73: /* pp_expr: pp_expr '&' pp_expr  */
-#line 388 "libs/wpp/ppy.y"
+  case 74: /* pp_expr: pp_expr '&' pp_expr  */
+#line 374 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  &); }
-#line 1991 "libs/wpp/ppy.tab.c"
+#line 1990 "tools/wrc/ppy.tab.c"
     break;
 
-  case 74: /* pp_expr: pp_expr '|' pp_expr  */
-#line 389 "libs/wpp/ppy.y"
+  case 75: /* pp_expr: pp_expr '|' pp_expr  */
+#line 375 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  |); }
-#line 1997 "libs/wpp/ppy.tab.c"
+#line 1996 "tools/wrc/ppy.tab.c"
     break;
 
-  case 75: /* pp_expr: pp_expr '*' pp_expr  */
-#line 390 "libs/wpp/ppy.y"
+  case 76: /* pp_expr: pp_expr '*' pp_expr  */
+#line 376 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  *); }
-#line 2003 "libs/wpp/ppy.tab.c"
+#line 2002 "tools/wrc/ppy.tab.c"
     break;
 
-  case 76: /* pp_expr: pp_expr '/' pp_expr  */
-#line 391 "libs/wpp/ppy.y"
+  case 77: /* pp_expr: pp_expr '/' pp_expr  */
+#line 377 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval),  /); }
-#line 2009 "libs/wpp/ppy.tab.c"
+#line 2008 "tools/wrc/ppy.tab.c"
     break;
 
-  case 77: /* pp_expr: pp_expr tLSHIFT pp_expr  */
-#line 392 "libs/wpp/ppy.y"
+  case 78: /* pp_expr: pp_expr tLSHIFT pp_expr  */
+#line 378 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <<); }
-#line 2015 "libs/wpp/ppy.tab.c"
+#line 2014 "tools/wrc/ppy.tab.c"
     break;
 
-  case 78: /* pp_expr: pp_expr tRSHIFT pp_expr  */
-#line 393 "libs/wpp/ppy.y"
+  case 79: /* pp_expr: pp_expr tRSHIFT pp_expr  */
+#line 379 "tools/wrc/ppy.y"
                                         { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >>); }
-#line 2021 "libs/wpp/ppy.tab.c"
+#line 2020 "tools/wrc/ppy.tab.c"
     break;
 
-  case 79: /* pp_expr: '+' pp_expr  */
-#line 394 "libs/wpp/ppy.y"
+  case 80: /* pp_expr: '+' pp_expr  */
+#line 380 "tools/wrc/ppy.y"
                                         { (yyval.cval) =  (yyvsp[0].cval); }
-#line 2027 "libs/wpp/ppy.tab.c"
+#line 2026 "tools/wrc/ppy.tab.c"
     break;
 
-  case 80: /* pp_expr: '-' pp_expr  */
-#line 395 "libs/wpp/ppy.y"
+  case 81: /* pp_expr: '-' pp_expr  */
+#line 381 "tools/wrc/ppy.y"
                                         { UNARY_OP((yyval.cval), (yyvsp[0].cval), -); }
-#line 2033 "libs/wpp/ppy.tab.c"
+#line 2032 "tools/wrc/ppy.tab.c"
     break;
 
-  case 81: /* pp_expr: '~' pp_expr  */
-#line 396 "libs/wpp/ppy.y"
+  case 82: /* pp_expr: '~' pp_expr  */
+#line 382 "tools/wrc/ppy.y"
                                         { UNARY_OP((yyval.cval), (yyvsp[0].cval), ~); }
-#line 2039 "libs/wpp/ppy.tab.c"
+#line 2038 "tools/wrc/ppy.tab.c"
     break;
 
-  case 82: /* pp_expr: '!' pp_expr  */
-#line 397 "libs/wpp/ppy.y"
+  case 83: /* pp_expr: '!' pp_expr  */
+#line 383 "tools/wrc/ppy.y"
                                         { (yyval.cval).type = cv_sint; (yyval.cval).val.si = !boolean(&(yyvsp[0].cval)); }
-#line 2045 "libs/wpp/ppy.tab.c"
+#line 2044 "tools/wrc/ppy.tab.c"
     break;
 
-  case 83: /* pp_expr: '(' pp_expr ')'  */
-#line 398 "libs/wpp/ppy.y"
+  case 84: /* pp_expr: '(' pp_expr ')'  */
+#line 384 "tools/wrc/ppy.y"
                                         { (yyval.cval) =  (yyvsp[-1].cval); }
-#line 2051 "libs/wpp/ppy.tab.c"
+#line 2050 "tools/wrc/ppy.tab.c"
     break;
 
-  case 84: /* pp_expr: pp_expr '?' pp_expr ':' pp_expr  */
-#line 399 "libs/wpp/ppy.y"
+  case 85: /* pp_expr: pp_expr '?' pp_expr ':' pp_expr  */
+#line 385 "tools/wrc/ppy.y"
                                           { (yyval.cval) = boolean(&(yyvsp[-4].cval)) ? (yyvsp[-2].cval) : (yyvsp[0].cval); }
-#line 2057 "libs/wpp/ppy.tab.c"
+#line 2056 "tools/wrc/ppy.tab.c"
     break;
 
 
-#line 2061 "libs/wpp/ppy.tab.c"
+#line 2060 "tools/wrc/ppy.tab.c"
 
       default: break;
     }
@@ -2251,7 +2250,7 @@
   return yyresult;
 }
 
-#line 402 "libs/wpp/ppy.y"
+#line 388 "tools/wrc/ppy.y"
 
 
 /*
@@ -2398,8 +2397,8 @@
 static char *add_new_marg(char *str)
 {
 	char *ma;
-	macro_args = pp_xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0]));
-	macro_args[nmacro_args++] = ma = pp_xstrdup(str);
+	macro_args = xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0]));
+	macro_args[nmacro_args++] = ma = xstrdup(str);
 	return ma;
 }
 
@@ -2418,7 +2417,7 @@
 
 static mtext_t *new_mtext(char *str, int idx, def_exp_t type)
 {
-	mtext_t *mt = pp_xmalloc(sizeof(mtext_t));
+	mtext_t *mt = xmalloc(sizeof(mtext_t));
 
 	if(str == NULL)
 		mt->subst.argidx = idx;
@@ -2439,7 +2438,7 @@
 
 	if(tail->type == exp_text && mtp->type == exp_text)
 	{
-		tail->subst.text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1);
+		tail->subst.text = xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1);
 		strcat(tail->subst.text, mtp->subst.text);
 		free(mtp->subst.text);
 		free(mtp);
@@ -2505,7 +2504,7 @@
 {
 	int l1 = strlen(s1);
 	int l2 = strlen(s2);
-	s1 = pp_xrealloc(s1, l1+l2+1);
+	s1 = xrealloc(s1, l1+l2+1);
 	memcpy(s1+l1, s2, l2+1);
 	free(s2);
 	return s1;
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.tab.h b/mingw-w64-tools/widl/src/ppy.tab.h
similarity index 93%
rename from mingw-w64-tools/widl/src/wpp/ppy.tab.h
rename to mingw-w64-tools/widl/src/ppy.tab.h
index 1a63c6f..8cc205c 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.tab.h
+++ b/mingw-w64-tools/widl/src/ppy.tab.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.7.5.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -16,7 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -35,8 +35,8 @@
    especially those whose name start with YY_ or yy_.  They are
    private implementation details that can be changed or removed.  */
 
-#ifndef YY_PPY_LIBS_WPP_PPY_TAB_H_INCLUDED
-# define YY_PPY_LIBS_WPP_PPY_TAB_H_INCLUDED
+#ifndef YY_PPY_TOOLS_WRC_PPY_TAB_H_INCLUDED
+# define YY_PPY_TOOLS_WRC_PPY_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -105,7 +105,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 125 "libs/wpp/ppy.y"
+#line 118 "tools/wrc/ppy.y"
 
 	int		sint;
 	unsigned int	uint;
@@ -119,7 +119,7 @@
 	char		*marg;
 	mtext_t		*mtext;
 
-#line 123 "libs/wpp/ppy.tab.h"
+#line 123 "tools/wrc/ppy.tab.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -132,4 +132,4 @@
 
 int ppy_parse (void);
 
-#endif /* !YY_PPY_LIBS_WPP_PPY_TAB_H_INCLUDED  */
+#endif /* !YY_PPY_TOOLS_WRC_PPY_TAB_H_INCLUDED  */
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.y b/mingw-w64-tools/widl/src/ppy.y
similarity index 90%
rename from mingw-w64-tools/widl/src/wpp/ppy.y
rename to mingw-w64-tools/widl/src/ppy.y
index 5b7083b..a4b834d 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.y
+++ b/mingw-w64-tools/widl/src/ppy.y
@@ -3,7 +3,6 @@
  *
  * Copyright 1999-2000	Bertho A. Stultiens (BS)
  *
- *
  * 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
@@ -18,18 +17,10 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  *
- * History:
- * 24-Apr-2000 BS	Restructured the lot to fit the new scanner
- *			and reintegrate into the wine-tree.
- * 01-Jan-2000 BS	FIXME: win16 preprocessor calculates with
- *			16 bit ints and overflows...?
- * 26-Dec-1999 BS	Started this file
- *
  */
 
 %{
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -38,6 +29,8 @@
 #include <ctype.h>
 #include <string.h>
 
+#include "../tools.h"
+#include "utils.h"
 #include "wpp_private.h"
 
 
@@ -93,7 +86,7 @@
 	case SIZE_INT:		BIN_OP_INT(r, v1, v2, OP); break;	\
 	case SIZE_LONG:		BIN_OP_LONG(r, v1, v2, OP); break;	\
 	case SIZE_LONGLONG:	BIN_OP_LONGLONG(r, v1, v2, OP); break;	\
-	default: pp_internal_error(__FILE__, __LINE__, "Invalid type indicator (0x%04x)", v1.type);	\
+	default: assert(0);                                             \
 	}
 
 
@@ -226,8 +219,6 @@
 			break;
 		case if_error:
 			break;
-		default:
-			pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #elif directive", s);
 		}
 		}
 	| tELSE tNL		{
@@ -252,8 +243,6 @@
 			break;
 		case if_error:
 			break;
-		default:
-			pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s);
 		}
 		}
 	| tENDIF tNL		{
@@ -278,27 +267,23 @@
 	| tMACRO res_arg allmargs tMACROEND opt_mtexts tNL	{
 		pp_add_macro($1, macro_args, nmacro_args, $5);
 		}
-	| tLINE tSINT tDQSTRING	tNL	{ if($3) pp_writestring("# %d %s\n", $2 , $3); free($3); }
-	| tGCCLINE tSINT tDQSTRING tNL	{ if($3) pp_writestring("# %d %s\n", $2 , $3); free($3); }
+	| tLINE tSINT tDQSTRING	tNL	{ if($3) fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); }
+	| tGCCLINE tSINT tDQSTRING tNL	{ if($3) fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); }
 	| tGCCLINE tSINT tDQSTRING tSINT tNL
-		{ if($3) pp_writestring("# %d %s %d\n", $2, $3, $4); free($3); }
+	        { if($3) fprintf(ppy_out, "# %d %s %d\n", $2, $3, $4); free($3); }
 	| tGCCLINE tSINT tDQSTRING tSINT tSINT tNL
-		{ if($3) pp_writestring("# %d %s %d %d\n", $2 ,$3, $4, $5); free($3); }
+		{ if($3) fprintf(ppy_out, "# %d %s %d %d\n", $2 ,$3, $4, $5); free($3); }
 	| tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT  tNL
-		{ if($3) pp_writestring("# %d %s %d %d %d\n", $2 ,$3 ,$4 ,$5, $6); free($3); }
+	        { if($3) fprintf(ppy_out, "# %d %s %d %d %d\n", $2 ,$3 ,$4 ,$5, $6); free($3); }
 	| tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL
-		{ if($3) pp_writestring("# %d %s %d %d %d %d\n", $2 ,$3 ,$4 ,$5, $6, $7); free($3); }
+		{ if($3) fprintf(ppy_out, "# %d %s %d %d %d %d\n", $2 ,$3 ,$4 ,$5, $6, $7); free($3); }
 	| tGCCLINE tNL		/* The null-token */
 	| tERROR opt_text tNL	{ ppy_error("#error directive: '%s'", $2); free($2); }
 	| tWARNING opt_text tNL	{ ppy_warning("#warning directive: '%s'", $2); free($2); }
-	| tPRAGMA opt_text tNL	{ pp_writestring("#pragma %s\n", $2 ? $2 : ""); free($2); }
-	| tPPIDENT opt_text tNL	{ if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", $2); free($2); }
+	| tPRAGMA opt_text tNL	{ fprintf(ppy_out, "#pragma %s\n", $2 ? $2 : ""); free($2); }
+	| tPPIDENT opt_text tNL	{ if(pedantic) ppy_warning("#ident ignored (arg: '%s')", $2); free($2); }
         | tRCINCLUDE tRCINCLUDEPATH {
-                int nl=strlen($2) +3;
-                char *fn=pp_xmalloc(nl);
-                sprintf(fn,"\"%s\"",$2);
-                pp_do_include(fn,1);
-                free($2);
+                pp_do_include(strmake( "\"%s\"", $2 ),1);
 	}
 	| tRCINCLUDE tDQSTRING {
 		pp_do_include($2,1);
@@ -327,6 +312,7 @@
 
 emargs	: margs			{ $$ = $1; }
 	| margs ',' tELLIPSIS	{ nmacro_args *= -1; }
+	| tELLIPSIS	{ macro_args = NULL; nmacro_args = 0; }
 	;
 
 margs	: margs ',' tIDENT	{ $$ = add_new_marg($3); }
@@ -545,8 +531,8 @@
 static char *add_new_marg(char *str)
 {
 	char *ma;
-	macro_args = pp_xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0]));
-	macro_args[nmacro_args++] = ma = pp_xstrdup(str);
+	macro_args = xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0]));
+	macro_args[nmacro_args++] = ma = xstrdup(str);
 	return ma;
 }
 
@@ -565,7 +551,7 @@
 
 static mtext_t *new_mtext(char *str, int idx, def_exp_t type)
 {
-	mtext_t *mt = pp_xmalloc(sizeof(mtext_t));
+	mtext_t *mt = xmalloc(sizeof(mtext_t));
 
 	if(str == NULL)
 		mt->subst.argidx = idx;
@@ -586,7 +572,7 @@
 
 	if(tail->type == exp_text && mtp->type == exp_text)
 	{
-		tail->subst.text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1);
+		tail->subst.text = xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1);
 		strcat(tail->subst.text, mtp->subst.text);
 		free(mtp->subst.text);
 		free(mtp);
@@ -652,7 +638,7 @@
 {
 	int l1 = strlen(s1);
 	int l2 = strlen(s2);
-	s1 = pp_xrealloc(s1, l1+l2+1);
+	s1 = xrealloc(s1, l1+l2+1);
 	memcpy(s1+l1, s2, l2+1);
 	free(s2);
 	return s1;
diff --git a/mingw-w64-tools/widl/src/proxy.c b/mingw-w64-tools/widl/src/proxy.c
index 457f29a..382f39d 100644
--- a/mingw-w64-tools/widl/src/proxy.c
+++ b/mingw-w64-tools/widl/src/proxy.c
@@ -20,13 +20,9 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <ctype.h>
 
diff --git a/mingw-w64-tools/widl/src/register.c b/mingw-w64-tools/widl/src/register.c
index e13d845..634ddfb 100644
--- a/mingw-w64-tools/widl/src/register.c
+++ b/mingw-w64-tools/widl/src/register.c
@@ -19,13 +19,9 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <ctype.h>
 
diff --git a/mingw-w64-tools/widl/src/server.c b/mingw-w64-tools/widl/src/server.c
index cce880b..58abc0d 100644
--- a/mingw-w64-tools/widl/src/server.c
+++ b/mingw-w64-tools/widl/src/server.c
@@ -19,13 +19,9 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <ctype.h>
 
diff --git a/mingw-w64-tools/widl/src/typegen.c b/mingw-w64-tools/widl/src/typegen.c
index 2c1017b..f1c7db9 100644
--- a/mingw-w64-tools/widl/src/typegen.c
+++ b/mingw-w64-tools/widl/src/typegen.c
@@ -20,13 +20,9 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <assert.h>
 #include <ctype.h>
diff --git a/mingw-w64-tools/widl/src/typelib.c b/mingw-w64-tools/widl/src/typelib.c
index 8b2a240..d47e937 100644
--- a/mingw-w64-tools/widl/src/typelib.c
+++ b/mingw-w64-tools/widl/src/typelib.c
@@ -20,23 +20,18 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
-#include "wine/wpp.h"
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <ctype.h>
 
+#include "widl.h"
 #include "windef.h"
 #include "winbase.h"
-
-#include "widl.h"
 #include "utils.h"
+#include "wpp_private.h"
 #include "parser.h"
 #include "header.h"
 #include "typelib.h"
@@ -244,128 +239,144 @@
   return 0;
 }
 
-static void tlb_read(int fd, void *buf, int count)
+static void msft_read_guid(void *data, MSFT_SegDir *segdir, int offset, GUID *guid)
 {
-    if(read(fd, buf, count) < count)
-        error("error while reading importlib.\n");
+    memcpy( guid, (char *)data + segdir->pGuidTab.offset + offset, sizeof(*guid) );
 }
 
-static void tlb_lseek(int fd, off_t offset)
+static void read_msft_importlib(importlib_t *importlib, void *data, unsigned int size)
 {
-    if(lseek(fd, offset, SEEK_SET) == -1)
-        error("lseek failed\n");
-}
-
-static void msft_read_guid(int fd, MSFT_SegDir *segdir, int offset, GUID *guid)
-{
-    tlb_lseek(fd, segdir->pGuidTab.offset+offset);
-    tlb_read(fd, guid, sizeof(GUID));
-}
-
-static void read_msft_importlib(importlib_t *importlib, int fd)
-{
-    MSFT_Header header;
-    MSFT_SegDir segdir;
+    MSFT_Header *header = data;
+    MSFT_SegDir *segdir;
     int *typeinfo_offs;
     int i;
 
     importlib->allocated = 0;
+    importlib->version = header->version;
 
-    tlb_lseek(fd, 0);
-    tlb_read(fd, &header, sizeof(header));
+    typeinfo_offs = (int *)(header + 1);
+    segdir = (MSFT_SegDir *)(typeinfo_offs + header->nrtypeinfos);
 
-    importlib->version = header.version;
+    msft_read_guid(data, segdir, header->posguid, &importlib->guid);
 
-    typeinfo_offs = xmalloc(header.nrtypeinfos*sizeof(INT));
-    tlb_read(fd, typeinfo_offs, header.nrtypeinfos*sizeof(INT));
-    tlb_read(fd, &segdir, sizeof(segdir));
-
-    msft_read_guid(fd, &segdir, header.posguid, &importlib->guid);
-
-    importlib->ntypeinfos = header.nrtypeinfos;
+    importlib->ntypeinfos = header->nrtypeinfos;
     importlib->importinfos = xmalloc(importlib->ntypeinfos*sizeof(importinfo_t));
 
     for(i=0; i < importlib->ntypeinfos; i++) {
-        MSFT_TypeInfoBase base;
-        MSFT_NameIntro nameintro;
+        MSFT_TypeInfoBase *base = (MSFT_TypeInfoBase *)((char *)(segdir + 1) + typeinfo_offs[i]);
+        MSFT_NameIntro *nameintro;
         int len;
 
-        tlb_lseek(fd, sizeof(MSFT_Header) + header.nrtypeinfos*sizeof(INT) + sizeof(MSFT_SegDir)
-                 + typeinfo_offs[i]);
-        tlb_read(fd, &base, sizeof(base));
-
         importlib->importinfos[i].importlib = importlib;
-        importlib->importinfos[i].flags = (base.typekind&0xf)<<24;
+        importlib->importinfos[i].flags = (base->typekind & 0xf)<<24;
         importlib->importinfos[i].offset = -1;
         importlib->importinfos[i].id = i;
 
-        if(base.posguid != -1) {
+        if(base->posguid != -1) {
             importlib->importinfos[i].flags |= MSFT_IMPINFO_OFFSET_IS_GUID;
-            msft_read_guid(fd, &segdir, base.posguid, &importlib->importinfos[i].guid);
+            msft_read_guid(data, segdir, base->posguid, &importlib->importinfos[i].guid);
         }
         else memset( &importlib->importinfos[i].guid, 0, sizeof(importlib->importinfos[i].guid));
 
-        tlb_lseek(fd, segdir.pNametab.offset + base.NameOffset);
-        tlb_read(fd, &nameintro, sizeof(nameintro));
+        nameintro = (MSFT_NameIntro *)((char *)data + segdir->pNametab.offset + base->NameOffset);
 
-        len = nameintro.namelen & 0xff;
-
+        len = nameintro->namelen & 0xff;
         importlib->importinfos[i].name = xmalloc(len+1);
-        tlb_read(fd, importlib->importinfos[i].name, len);
+        memcpy( importlib->importinfos[i].name, nameintro + 1, len );
         importlib->importinfos[i].name[len] = 0;
     }
-
-    free(typeinfo_offs);
 }
 
-static int open_typelib(const char *name)
+static unsigned int rva_to_va( const IMAGE_NT_HEADERS32 *nt, unsigned int rva )
 {
-    char *file_name;
-    int fd;
+    IMAGE_SECTION_HEADER *sec = (IMAGE_SECTION_HEADER *)((char *)&nt->OptionalHeader + nt->FileHeader.SizeOfOptionalHeader);
+    unsigned int i;
 
-    file_name = wpp_find_include(name, NULL);
-    if(!file_name)
-        return open(name, O_RDONLY | O_BINARY );
+    for (i = 0; i < nt->FileHeader.NumberOfSections; i++, sec++)
+        if (sec->VirtualAddress <= rva && sec->VirtualAddress + sec->Misc.VirtualSize > rva)
+            return sec->PointerToRawData + (rva - sec->VirtualAddress);
+    error( "no PE section found for addr %x\n", rva );
+}
 
-    fd = open(file_name, O_RDONLY | O_BINARY );
-    free(file_name);
-    return fd;
+static void read_pe_importlib(importlib_t *importlib, void *data, unsigned int size)
+{
+    IMAGE_DOS_HEADER *dos = data;
+    IMAGE_NT_HEADERS32 *nt;
+    IMAGE_DATA_DIRECTORY *dir;
+    IMAGE_RESOURCE_DIRECTORY *root, *resdir;
+    IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;
+    IMAGE_RESOURCE_DATA_ENTRY *resdata;
+    void *ptr;
+    unsigned int i, va;
+
+    if (dos->e_lfanew < sizeof(*dos) || dos->e_lfanew >= size) error( "not a PE file\n" );
+    nt = (IMAGE_NT_HEADERS32 *)((char *)data + dos->e_lfanew);
+    if (nt->Signature != IMAGE_NT_SIGNATURE) error( "not a PE file\n" );
+    if ((char *)&nt->OptionalHeader + nt->FileHeader.SizeOfOptionalHeader > (char *)data + size)
+        error( "invalid PE file\n" );
+    switch (nt->OptionalHeader.Magic)
+    {
+    case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
+        dir = &nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
+        break;
+    case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
+        dir = &((IMAGE_NT_HEADERS64 *)nt)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
+        break;
+    default:
+        error( "invalid PE file\n" );
+    }
+    if (!dir->VirtualAddress || !dir->Size) error( "resource not found in PE file\n" );
+    va = rva_to_va( nt, dir->VirtualAddress );
+    if (va + dir->Size > size) error( "invalid resource data in PE file\n" );
+    root = resdir = (IMAGE_RESOURCE_DIRECTORY *)((char *)data + va );
+    entry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
+    for (i = 0; i < resdir->NumberOfNamedEntries; i++, entry++)
+    {
+        static const WCHAR typelibW[] = {'T','Y','P','E','L','I','B'};
+        WCHAR *name = (WCHAR *)((char *)root + entry->NameOffset);
+        if (name[0] != ARRAY_SIZE(typelibW)) continue;
+        if (!memcmp( name + 1, typelibW, sizeof(typelibW) )) break;
+    }
+    if (i == resdir->NumberOfNamedEntries) error( "typelib resource not found in PE file\n" );
+    while (entry->DataIsDirectory)
+    {
+        resdir = (IMAGE_RESOURCE_DIRECTORY *)((char *)root + entry->OffsetToDirectory);
+        entry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
+    }
+    resdata = (IMAGE_RESOURCE_DATA_ENTRY *)((char *)root + entry->OffsetToData);
+    ptr = (char *)data + rva_to_va( nt, resdata->OffsetToData );
+    if (memcmp( ptr, "MSFT", 4 )) error( "invalid typelib found in PE file\n" );
+    read_msft_importlib( importlib, ptr, resdata->Size );
 }
 
 static void read_importlib(importlib_t *importlib)
 {
-    int fd;
-    INT magic;
+    int fd, size;
+    void *data;
 
     fd = open_typelib(importlib->name);
 
     /* widl extension: if importlib name has no .tlb extension, try using .tlb */
-    if(fd < 0) {
-        const char *p = strrchr(importlib->name, '.');
-        size_t len = p ? p - importlib->name : strlen(importlib->name);
-        if(strcmp(importlib->name + len, ".tlb")) {
-            char *tlb_name = xmalloc(len + 5);
-            memcpy(tlb_name, importlib->name, len);
-            strcpy(tlb_name + len, ".tlb");
-            fd = open_typelib(tlb_name);
-            free(tlb_name);
-        }
-    }
+    if (fd < 0 && !strendswith( importlib->name, ".tlb" ))
+        fd = open_typelib( strmake( "%s.tlb", importlib->name ));
 
     if(fd < 0)
         error("Could not find importlib %s.\n", importlib->name);
 
-    tlb_read(fd, &magic, sizeof(magic));
+    size = lseek( fd, 0, SEEK_END );
+    data = xmalloc( size );
+    lseek( fd, 0, SEEK_SET );
+    if (read( fd, data, size) < size) error("error while reading importlib.\n");
+    close( fd );
 
-    switch(magic) {
-    case MSFT_MAGIC:
-        read_msft_importlib(importlib, fd);
-        break;
-    default:
-        error("Wrong or unsupported typelib magic %x\n", magic);
-    };
+    if (!memcmp( data, "MSFT", 4 ))
+        read_msft_importlib(importlib, data, size);
+    else if (!memcmp( data, "MZ", 2 ))
+        read_pe_importlib(importlib, data, size);
+    else
+        error("Wrong or unsupported typelib\n");
 
-    close(fd);
+    free( data );
 }
 
 void add_importlib(const char *name, typelib_t *typelib)
diff --git a/mingw-w64-tools/widl/src/typelib_struct.h b/mingw-w64-tools/widl/src/typelib_struct.h
index 58dd95e..2a1fb74 100644
--- a/mingw-w64-tools/widl/src/typelib_struct.h
+++ b/mingw-w64-tools/widl/src/typelib_struct.h
@@ -138,13 +138,8 @@
 /*040*/ INT     helpstringcontext;  /*  */
         INT     helpcontext;    /* */
         INT     oCustData;          /* offset in customer data table */
-#ifdef WORDS_BIGENDIAN
-        INT16   cbSizeVft;      /* virtual table size, including inherits */
-        INT16   cImplTypes;     /* nr of implemented interfaces */
-#else
         INT16   cImplTypes;     /* nr of implemented interfaces */
         INT16   cbSizeVft;      /* virtual table size, including inherits */
-#endif
 /*050*/ INT     size;           /* size in bytes, at least for structures */
         /* FIXME: name of this field */
         INT     datatype1;      /* position in type description table */
@@ -174,13 +169,8 @@
 /*  INT   recsize;       record size including some extra stuff */
     INT   DataType;     /* data type of the member, eg return of function */
     INT   Flags;        /* something to do with attribute flags (LOWORD) */
-#ifdef WORDS_BIGENDIAN
-    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
-    INT16 VtableOffset; /* offset in vtable */
-#else
     INT16 VtableOffset; /* offset in vtable */
     INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
-#endif
     INT   FKCCIC;       /* bit string with the following  */
                         /* meaning (bit 0 is the lsb): */
                         /* bits 0 - 2: FUNCKIND */
@@ -191,13 +181,8 @@
                         /* bit  13: oEntry is numeric */
                         /* bit  14: has retval param */
                         /* bits 16 - 31: index of next function with same id */
-#ifdef WORDS_BIGENDIAN
-    INT16 nroargs;      /* nr of optional arguments */
-    INT16 nrargs;       /* number of arguments (including optional ????) */
-#else
     INT16 nrargs;       /* number of arguments (including optional ????) */
     INT16 nroargs;      /* nr of optional arguments */
-#endif
     /* optional attribute fields, the number of them is variable */
     INT   OptAttr[1];
 /*
@@ -230,13 +215,8 @@
 /*  INT   recsize;      // record size including some extra stuff */
     INT   DataType;     /* data type of the variable */
     INT   Flags;        /* VarFlags (LOWORD) */
-#ifdef WORDS_BIGENDIAN
-    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */
-    INT16 VarKind;      /* VarKind */
-#else
     INT16 VarKind;      /* VarKind */
     INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */
-#endif
     INT   OffsValue;    /* value of the variable or the offset  */
                         /* in the data structure */
     /* optional attribute fields, the number of them is variable */
diff --git a/mingw-w64-tools/widl/src/utils.c b/mingw-w64-tools/widl/src/utils.c
index 634bd12..feb5900 100644
--- a/mingw-w64-tools/widl/src/utils.c
+++ b/mingw-w64-tools/widl/src/utils.c
@@ -20,7 +20,6 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <assert.h>
 #include <stdio.h>
@@ -140,35 +139,6 @@
 	}
 }
 
-char *dup_basename(const char *name, const char *ext)
-{
-	int namelen;
-	int extlen = strlen(ext);
-	char *base;
-	char *slash;
-
-	if(!name)
-		name = "widl.tab";
-
-	slash = strrchr(name, '/');
-	if (!slash)
-		slash = strrchr(name, '\\');
-
-	if (slash)
-		name = slash + 1;
-
-	namelen = strlen(name);
-
-	/* +6 for later extension (strlen("_r.rgs")) and +1 for '\0' */
-	base = xmalloc(namelen +6 +1);
-	strcpy(base, name);
-	if(!strcasecmp(name + namelen-extlen, ext))
-	{
-		base[namelen - extlen] = '\0';
-	}
-	return base;
-}
-
 size_t widl_getline(char **linep, size_t *lenp, FILE *fp)
 {
     char *line = *linep;
@@ -198,53 +168,6 @@
     return n;
 }
 
-void *xmalloc(size_t size)
-{
-    void *res;
-
-    assert(size > 0);
-    res = malloc(size);
-    if(res == NULL)
-    {
-	error("Virtual memory exhausted.\n");
-    }
-    memset(res, 0x55, size);
-    return res;
-}
-
-
-void *xrealloc(void *p, size_t size)
-{
-    void *res;
-
-    assert(size > 0);
-    res = realloc(p, size);
-    if(res == NULL)
-    {
-	error("Virtual memory exhausted.\n");
-    }
-    return res;
-}
-
-char *strmake( const char* fmt, ... )
-{
-    int n;
-    size_t size = 100;
-    va_list ap;
-
-    for (;;)
-    {
-        char *p = xmalloc( size );
-        va_start( ap, fmt );
-        n = vsnprintf( p, size, fmt, ap );
-        va_end( ap );
-        if (n == -1) size *= 2;
-        else if ((size_t)n >= size) size = n + 1;
-        else return p;
-        free( p );
-    }
-}
-
 size_t strappend(char **buf, size_t *len, size_t pos, const char* fmt, ...)
 {
     size_t size;
@@ -282,29 +205,12 @@
     return n;
 }
 
-char *xstrdup(const char *str)
-{
-	char *s;
-
-	assert(str != NULL);
-	s = xmalloc(strlen(str)+1);
-	return strcpy(s, str);
-}
-
-int strendswith(const char* str, const char* end)
-{
-    int l = strlen(str);
-    int m = strlen(end);
-    return l >= m && strcmp(str + l - m, end) == 0;
-}
-
 /*******************************************************************
  *         buffer management
  *
  * Function for writing to a memory buffer.
  */
 
-int byte_swapped = 0;
 unsigned char *output_buffer;
 size_t output_buffer_pos;
 size_t output_buffer_size;
@@ -316,32 +222,6 @@
 } resources[16];
 static unsigned int nb_resources;
 
-static void check_output_buffer_space( size_t size )
-{
-    if (output_buffer_pos + size >= output_buffer_size)
-    {
-        output_buffer_size = max( output_buffer_size * 2, output_buffer_pos + size );
-        output_buffer = xrealloc( output_buffer, output_buffer_size );
-    }
-}
-
-void init_output_buffer(void)
-{
-    output_buffer_size = 1024;
-    output_buffer_pos = 0;
-    output_buffer = xmalloc( output_buffer_size );
-}
-
-void flush_output_buffer( const char *name )
-{
-    int fd = open( name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 );
-    if (fd == -1) error( "Error creating %s\n", name );
-    if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos)
-        error( "Error writing to %s\n", name );
-    close( fd );
-    free( output_buffer );
-}
-
 static inline void put_resource_id( const char *str )
 {
     if (str[0] != '#')
@@ -429,46 +309,6 @@
     free( output_buffer );
 }
 
-void put_data( const void *data, size_t size )
-{
-    check_output_buffer_space( size );
-    memcpy( output_buffer + output_buffer_pos, data, size );
-    output_buffer_pos += size;
-}
-
-void put_byte( unsigned char val )
-{
-    check_output_buffer_space( 1 );
-    output_buffer[output_buffer_pos++] = val;
-}
-
-void put_word( unsigned short val )
-{
-    if (byte_swapped) val = (val << 8) | (val >> 8);
-    put_data( &val, sizeof(val) );
-}
-
-void put_dword( unsigned int val )
-{
-    if (byte_swapped)
-        val = ((val << 24) | ((val << 8) & 0x00ff0000) | ((val >> 8) & 0x0000ff00) | (val >> 24));
-    put_data( &val, sizeof(val) );
-}
-
-void put_qword( unsigned int val )
-{
-    if (byte_swapped)
-    {
-        put_dword( 0 );
-        put_dword( val );
-    }
-    else
-    {
-        put_dword( val );
-        put_dword( 0 );
-    }
-}
-
 /* pointer-sized word */
 void put_pword( unsigned int val )
 {
@@ -501,13 +341,3 @@
         check_output_buffer_space( size );
     }
 }
-
-void align_output( unsigned int align )
-{
-    size_t size = align - (output_buffer_pos % align);
-
-    if (size == align) return;
-    check_output_buffer_space( size );
-    memset( output_buffer + output_buffer_pos, 0, size );
-    output_buffer_pos += size;
-}
diff --git a/mingw-w64-tools/widl/src/utils.h b/mingw-w64-tools/widl/src/utils.h
index 82e0a6a..401433e 100644
--- a/mingw-w64-tools/widl/src/utils.h
+++ b/mingw-w64-tools/widl/src/utils.h
@@ -23,19 +23,6 @@
 
 #include "widltypes.h"
 
-#include <stddef.h>	/* size_t */
-
-void *xmalloc(size_t);
-void *xrealloc(void *, size_t);
-char *xstrdup(const char *str);
-int strendswith(const char* str, const char* end);
-
-#ifndef __GNUC__
-#define __attribute__(X)
-#endif
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
 void parser_error(const char *s) __attribute__((noreturn));
 int parser_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
 void error_loc(const char *s, ...) __attribute__((format (printf, 1, 2))) __attribute__((noreturn));
@@ -44,10 +31,8 @@
 void warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
 void warning_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3)));
 void chat(const char *s, ...) __attribute__((format (printf, 1, 2)));
-char *strmake(const char* fmt, ...) __attribute__((__format__ (__printf__, 1, 2 )));
 size_t strappend(char **buf, size_t *len, size_t pos, const char* fmt, ...) __attribute__((__format__ (__printf__, 4, 5 )));
 
-char *dup_basename(const char *name, const char *ext);
 size_t widl_getline(char **linep, size_t *lenp, FILE *fp);
 
 UUID *parse_uuid(const char *u);
@@ -55,23 +40,10 @@
 
 /* buffer management */
 
-extern int byte_swapped;
-extern unsigned char *output_buffer;
-extern size_t output_buffer_pos;
-extern size_t output_buffer_size;
-
-extern void init_output_buffer(void);
-extern void flush_output_buffer( const char *name );
 extern void add_output_to_resources( const char *type, const char *name );
 extern void flush_output_resources( const char *name );
-extern void put_data( const void *data, size_t size );
-extern void put_byte( unsigned char val );
-extern void put_word( unsigned short val );
-extern void put_dword( unsigned int val );
-extern void put_qword( unsigned int val );
 extern void put_pword( unsigned int val );
 extern void put_str( int indent, const char *format, ... ) __attribute__((format (printf, 2, 3)));
-extern void align_output( unsigned int align );
 
 /* typelibs expect the minor version to be stored in the higher bits and
  * major to be stored in the lower bits */
@@ -79,11 +51,4 @@
 #define MAJORVERSION(version) ((version) & 0xffff)
 #define MINORVERSION(version) (((version) >> 16) & 0xffff)
 
-#ifndef max
-#define max(a,b)   (((a) > (b)) ? (a) : (b))
-#endif
-#ifndef min
-#define min(a,b)   (((a) < (b)) ? (a) : (b))
-#endif
-
 #endif
diff --git a/mingw-w64-tools/widl/src/widl.c b/mingw-w64-tools/widl/src/widl.c
index 3f1c127..5cec4dc 100644
--- a/mingw-w64-tools/widl/src/widl.c
+++ b/mingw-w64-tools/widl/src/widl.c
@@ -20,27 +20,25 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <errno.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 #include <string.h>
 #include <assert.h>
 #include <ctype.h>
 #include <signal.h>
-#ifdef HAVE_GETOPT_H
-# include <getopt.h>
+#include <limits.h>
+#include <sys/types.h>
+#ifdef HAVE_SYS_SYSCTL_H
+# include <sys/sysctl.h>
 #endif
 
 #include "widl.h"
 #include "utils.h"
 #include "parser.h"
-#include "wine/wpp.h"
+#include "wpp_private.h"
 #include "header.h"
 #include "pathtools.h"
 
@@ -57,7 +55,8 @@
 "   --help             Display this help and exit\n"
 "   -h                 Generate headers\n"
 "   -H file            Name of header file (default is infile.h)\n"
-"   -I path            Set include search dir to path (multiple -I allowed)\n"
+"   -I directory       Add directory to the include search path (multiple -I allowed)\n"
+"   -L directory       Add directory to the library search path (multiple -L allowed)\n"
 "   --local-stubs=file Write empty stubs for call_as/local methods to file\n"
 "   -m32, -m64         Set the target architecture (Win32 or Win64)\n"
 "   -N                 Do not preprocess input\n"
@@ -94,21 +93,7 @@
 static const char version_string[] = "Wine IDL Compiler version " PACKAGE_VERSION "\n"
 			"Copyright 2002 Ove Kaaven\n";
 
-#ifdef __i386__
-enum target_cpu target_cpu = CPU_x86;
-#elif defined(__x86_64__)
-enum target_cpu target_cpu = CPU_x86_64;
-#elif defined(__powerpc64__)
-enum target_cpu target_cpu = CPU_POWERPC64;
-#elif defined(__powerpc__)
-enum target_cpu target_cpu = CPU_POWERPC;
-#elif defined(__arm__)
-enum target_cpu target_cpu = CPU_ARM;
-#elif defined(__aarch64__)
-enum target_cpu target_cpu = CPU_ARM64;
-#else
-#error Unsupported CPU
-#endif
+static struct target target;
 
 int debuglevel = DEBUGLEVEL_NONE;
 int parser_debug, yy_flex_debug;
@@ -154,6 +139,10 @@
 const char *prefix_client = "";
 const char *prefix_server = "";
 static const char *includedir;
+static const char *dlldir;
+static struct strarray dlldirs;
+static char *output_name;
+static const char *sysroot = "";
 
 int line_number = 1;
 
@@ -186,55 +175,30 @@
 };
 
 static const char short_options[] =
-    "b:cC:d:D:EhH:I:m:No:O:pP:rsS:tT:uU:VW";
-static const struct option long_options[] = {
-    { "acf", 1, NULL, ACF_OPTION },
-    { "app_config", 0, NULL, APP_CONFIG_OPTION },
-    { "dlldata", 1, NULL, DLLDATA_OPTION },
-    { "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION },
-    { "help", 0, NULL, PRINT_HELP },
-    { "local-stubs", 1, NULL, LOCAL_STUBS_OPTION },
-    { "nostdinc", 0, NULL, NOSTDINC_OPTION },
-    { "ns_prefix", 0, NULL, RT_NS_PREFIX },
-    { "oldnames", 0, NULL, OLDNAMES_OPTION },
-    { "output", 0, NULL, 'o' },
-    { "prefix-all", 1, NULL, PREFIX_ALL_OPTION },
-    { "prefix-client", 1, NULL, PREFIX_CLIENT_OPTION },
-    { "prefix-server", 1, NULL, PREFIX_SERVER_OPTION },
-    { "robust", 0, NULL, ROBUST_OPTION },
-    { "sysroot", 1, NULL, SYSROOT_OPTION },
-    { "target", 0, NULL, 'b' },
-    { "winrt", 0, NULL, RT_OPTION },
-    { "win32", 0, NULL, WIN32_OPTION },
-    { "win64", 0, NULL, WIN64_OPTION },
-    { "win32-align", 1, NULL, WIN32_ALIGN_OPTION },
-    { "win64-align", 1, NULL, WIN64_ALIGN_OPTION },
-    { NULL, 0, NULL, 0 }
-};
-
-static const struct
-{
-    const char     *name;
-    enum target_cpu cpu;
-} cpu_names[] =
-{
-    { "i386",           CPU_x86 },
-    { "i486",           CPU_x86 },
-    { "i586",           CPU_x86 },
-    { "i686",           CPU_x86 },
-    { "i786",           CPU_x86 },
-    { "amd64",          CPU_x86_64 },
-    { "x86_64",         CPU_x86_64 },
-    { "powerpc",        CPU_POWERPC },
-    { "powerpc64",      CPU_POWERPC64 },
-    { "powerpc64le",    CPU_POWERPC64 },
-    { "arm",            CPU_ARM },
-    { "armv5",          CPU_ARM },
-    { "armv6",          CPU_ARM },
-    { "armv7",          CPU_ARM },
-    { "armv7a",         CPU_ARM },
-    { "arm64",          CPU_ARM64 },
-    { "aarch64",        CPU_ARM64 },
+    "b:cC:d:D:EhH:I:L:m:No:O:pP:rsS:tT:uU:VW";
+static const struct long_option long_options[] = {
+    { "acf", 1, ACF_OPTION },
+    { "app_config", 0, APP_CONFIG_OPTION },
+    { "dlldata", 1, DLLDATA_OPTION },
+    { "dlldata-only", 0, DLLDATA_ONLY_OPTION },
+    { "help", 0, PRINT_HELP },
+    { "local-stubs", 1, LOCAL_STUBS_OPTION },
+    { "nostdinc", 0, NOSTDINC_OPTION },
+    { "ns_prefix", 0, RT_NS_PREFIX },
+    { "oldnames", 0, OLDNAMES_OPTION },
+    { "output", 0, 'o' },
+    { "prefix-all", 1, PREFIX_ALL_OPTION },
+    { "prefix-client", 1, PREFIX_CLIENT_OPTION },
+    { "prefix-server", 1, PREFIX_SERVER_OPTION },
+    { "robust", 0, ROBUST_OPTION },
+    { "sysroot", 1, SYSROOT_OPTION },
+    { "target", 0, 'b' },
+    { "winrt", 0, RT_OPTION },
+    { "win32", 0, WIN32_OPTION },
+    { "win64", 0, WIN64_OPTION },
+    { "win32-align", 1, WIN32_ALIGN_OPTION },
+    { "win64-align", 1, WIN64_ALIGN_OPTION },
+    { NULL }
 };
 
 static void rm_tempfile(void);
@@ -249,16 +213,9 @@
 static char *make_token(const char *name)
 {
   char *token;
-  char *slash;
   int i;
 
-  slash = strrchr(name, '/');
-  if(!slash)
-    slash = strrchr(name, '\\');
-
-  if (slash) name = slash + 1;
-
-  token = xstrdup(name);
+  token = get_basename( name );
   for (i=0; token[i]; i++) {
     if (!isalnum(token[i])) token[i] = '_';
     else token[i] = tolower(token[i]);
@@ -269,7 +226,7 @@
 /* duplicate a basename into a valid C token */
 static char *dup_basename_token(const char *name, const char *ext)
 {
-    char *p, *ret = dup_basename( name, ext );
+    char *p, *ret = replace_extension( get_basename(name), ext, "" );
     /* map invalid characters to '_' */
     for (p = ret; *p; p++) if (!isalnum(*p)) *p = '_';
     return ret;
@@ -296,60 +253,10 @@
     if (p)
         version += atoi(p + 1);
 
-    snprintf(version_str, sizeof(version_str), "__WIDL__=0x%x", version);
+    sprintf(version_str, "__WIDL__=0x%x", version);
     wpp_add_cmdline_define(version_str);
 }
 
-static void set_cpu( const char *cpu, int error_out )
-{
-    unsigned int i;
-    for (i = 0; i < ARRAY_SIZE( cpu_names ); i++)
-    {
-        if (!strcmp( cpu_names[i].name, cpu ))
-        {
-            target_cpu = cpu_names[i].cpu;
-            return;
-        }
-    }
-    if (error_out)
-        error( "Unrecognized CPU '%s'\n", cpu );
-}
-
-/* Set the target platform based on a potential prefix of the executable name.
- * If not found, or not matching a known CPU name, just proceed silently. */
-static void init_argv0_target( const char *argv0 )
-{
-    char *p, *name;
-
-    if ((p = strrchr(argv0, '/')) != NULL)
-        argv0 = p + 1;
-    if ((p = strrchr(argv0, '\\')) != NULL)
-        argv0 = p + 1;
-
-    name = xstrdup( argv0 );
-    if (!(p = strchr(name, '-')))
-    {
-        free( name );
-        return;
-    }
-    *p = 0;
-    set_cpu( name, 0 );
-    free( name );
-}
-
-/* set the target platform */
-static void set_target( const char *target )
-{
-    char *p, *spec = xstrdup( target );
-
-    /* target specification is in the form CPU-MANUFACTURER-OS or CPU-MANUFACTURER-KERNEL-OS */
-
-    if (!(p = strchr( spec, '-' ))) error( "Invalid target specification '%s'\n", target );
-    *p++ = 0;
-    set_cpu( spec, 1 );
-    free( spec );
-}
-
 /* clean things up when aborting on a signal */
 static void exit_on_signal( int sig )
 {
@@ -382,33 +289,10 @@
   fprintf(fp, "#endif\n\n");
 }
 
-typedef struct
-{
-  char *filename;
-  struct list link;
-} filename_node_t;
-
-static void add_filename_node(struct list *list, const char *name)
-{
-  filename_node_t *node = xmalloc(sizeof *node);
-  node->filename = dup_basename( name, ".idl" );
-  list_add_tail(list, &node->link);
-}
-
-static void free_filename_nodes(struct list *list)
-{
-  filename_node_t *node, *next;
-  LIST_FOR_EACH_ENTRY_SAFE(node, next, list, filename_node_t, link) {
-    list_remove(&node->link);
-    free(node->filename);
-    free(node);
-  }
-}
-
-static void write_dlldata_list(struct list *filenames, int define_proxy_delegation)
+static void write_dlldata_list( struct strarray filenames, int define_proxy_delegation)
 {
   FILE *dlldata;
-  filename_node_t *node;
+  unsigned int i;
 
   dlldata = fopen(dlldata_name, "w");
   if (!dlldata)
@@ -422,13 +306,13 @@
   fprintf(dlldata, "#include <rpcproxy.h>\n\n");
   start_cplusplus_guard(dlldata);
 
-  LIST_FOR_EACH_ENTRY(node, filenames, filename_node_t, link)
-    fprintf(dlldata, "EXTERN_PROXY_FILE(%s)\n", node->filename);
+  for (i = 0; i < filenames.count; i++)
+    fprintf(dlldata, "EXTERN_PROXY_FILE(%s)\n", filenames.str[i]);
 
   fprintf(dlldata, "\nPROXYFILE_LIST_START\n");
   fprintf(dlldata, "/* Start of list */\n");
-  LIST_FOR_EACH_ENTRY(node, filenames, filename_node_t, link)
-    fprintf(dlldata, "  REFERENCE_PROXY_FILE(%s),\n", node->filename);
+  for (i = 0; i < filenames.count; i++)
+    fprintf(dlldata, "  REFERENCE_PROXY_FILE(%s),\n", filenames.str[i]);
   fprintf(dlldata, "/* End of list */\n");
   fprintf(dlldata, "PROXYFILE_LIST_END\n\n");
 
@@ -446,9 +330,8 @@
 
 void write_dlldata(const statement_list_t *stmts)
 {
-  struct list filenames = LIST_INIT(filenames);
+  struct strarray filenames = empty_strarray;
   int define_proxy_delegation = 0;
-  filename_node_t *node;
   FILE *dlldata;
 
   if (!do_dlldata || !need_proxy_file(stmts))
@@ -479,7 +362,7 @@
           --end;
         *end = '\0';
         if (start < end)
-          add_filename_node(&filenames, start);
+          strarray_add(&filenames, replace_extension( get_basename( start ), ".idl", "" ));
       }else if (!define_proxy_delegation && strncmp(start, delegation_define, sizeof(delegation_define)-1)) {
           define_proxy_delegation = 1;
       }
@@ -492,16 +375,12 @@
     fclose(dlldata);
   }
 
-  LIST_FOR_EACH_ENTRY(node, &filenames, filename_node_t, link)
-    if (strcmp(proxy_token, node->filename) == 0) {
+  if (strarray_exists( &filenames, proxy_token ))
       /* We're already in the list, no need to regenerate this file.  */
-      free_filename_nodes(&filenames);
       return;
-    }
 
-  add_filename_node(&filenames, proxy_token);
-  write_dlldata_list(&filenames, define_proxy_delegation);
-  free_filename_nodes(&filenames);
+  strarray_add(&filenames, proxy_token);
+  write_dlldata_list(filenames, define_proxy_delegation);
 }
 
 static void write_id_guid(FILE *f, const char *type, const char *guid_prefix, const char *name, const UUID *uuid)
@@ -604,44 +483,30 @@
 static void init_argv0_dir( const char *argv0 )
 {
 #ifndef _WIN32
-    char *p, *dir;
+    char *dir;
 
 #if defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
     dir = realpath( "/proc/self/exe", NULL );
 #elif defined (__FreeBSD__) || defined(__DragonFly__)
-    dir = realpath( "/proc/curproc/file", NULL );
+    static int pathname[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
+    size_t path_size = PATH_MAX;
+    char *path = malloc( path_size );
+    if (path && !sysctl( pathname, sizeof(pathname)/sizeof(pathname[0]), path, &path_size, NULL, 0 ))
+        dir = realpath( path, NULL );
+    free( path );
 #else
     dir = realpath( argv0, NULL );
 #endif
     if (!dir) return;
-    if (!(p = strrchr( dir, '/' ))) return;
-    if (p == dir) p++;
-    *p = 0;
-    includedir = strmake( "%s/%s", dir, BIN_TO_INCLUDEDIR );
-    free( dir );
+    includedir = strmake( "%s/%s", get_dirname( dir ), BIN_TO_INCLUDEDIR );
+    dlldir = strmake( "%s/%s", get_dirname( dir ), BIN_TO_DLLDIR );
 #endif
 }
 
-int main(int argc,char *argv[])
+static void option_callback( int optc, char *optarg )
 {
-  int optc;
-  int ret = 0;
-  int opti = 0;
-  char *output_name = NULL;
-  const char *sysroot = "";
-
-  signal( SIGTERM, exit_on_signal );
-  signal( SIGINT, exit_on_signal );
-#ifdef SIGHUP
-  signal( SIGHUP, exit_on_signal );
-#endif
-  init_argv0_dir( argv[0] );
-  init_argv0_target( argv[0] );
-
-  now = time(NULL);
-
-  while((optc = getopt_long_only(argc, argv, short_options, long_options, &opti)) != EOF) {
-    switch(optc) {
+    switch (optc)
+    {
     case DLLDATA_OPTION:
       dlldata_name = xstrdup(optarg);
       break;
@@ -671,7 +536,7 @@
       break;
     case PRINT_HELP:
       fprintf(stderr, "%s", usage);
-      return 0;
+      exit(0);
     case RT_OPTION:
       winrt_mode = 1;
       break;
@@ -708,7 +573,8 @@
         /* FIXME: Support robust option */
         break;
     case 'b':
-      set_target( optarg );
+        if (!parse_target( optarg, &target ))
+            error( "Invalid target specification '%s'\n", optarg );
       break;
     case 'c':
       do_everything = 0;
@@ -737,6 +603,9 @@
     case 'I':
       wpp_add_include_path(optarg);
       break;
+    case 'L':
+      strarray_add( &dlldirs, optarg );
+      break;
     case 'm':
       if (!strcmp( optarg, "32" )) pointer_size = 4;
       else if (!strcmp( optarg, "64" )) pointer_size = 8;
@@ -789,15 +658,75 @@
       break;
     case 'V':
       printf("%s", version_string);
-      return 0;
+      exit(0);
     case 'W':
       pedantic = 1;
       break;
-    default:
-      fprintf(stderr, "%s", usage);
-      return 1;
+    case '?':
+      fprintf(stderr, "widl: %s\n\n%s", optarg, usage);
+      exit(1);
     }
-  }
+}
+
+int open_typelib( const char *name )
+{
+    static const char *default_dirs[] = { DLLDIR, "/usr/lib/wine", "/usr/local/lib/wine" };
+    struct target win_target = { target.cpu, PLATFORM_WINDOWS };
+    const char *pe_dir = get_arch_dir( win_target );
+    int fd;
+    unsigned int i;
+
+#define TRYOPEN(str) do { \
+        char *file = str; \
+        if ((fd = open( file, O_RDONLY | O_BINARY )) != -1) return fd; \
+        free( file ); } while(0)
+
+    for (i = 0; i < dlldirs.count; i++)
+    {
+        if (strendswith( dlldirs.str[i], "/*" ))  /* special case for wine build tree */
+        {
+            int namelen = strlen( name );
+            if (strendswith( name, ".dll" )) namelen -= 4;
+            TRYOPEN( strmake( "%.*s/%.*s/%s", (int)strlen(dlldirs.str[i]) - 2, dlldirs.str[i],
+                              namelen, name, name ));
+        }
+        else
+        {
+            TRYOPEN( strmake( "%s%s/%s", dlldirs.str[i], pe_dir, name ));
+            TRYOPEN( strmake( "%s/%s", dlldirs.str[i], name ));
+        }
+    }
+
+    if (stdinc)
+    {
+        if (dlldir) TRYOPEN( strmake( "%s%s/%s", dlldir, pe_dir, name ));
+        for (i = 0; i < ARRAY_SIZE(default_dirs); i++)
+        {
+            if (i && !strcmp( default_dirs[i], default_dirs[0] )) continue;
+            TRYOPEN( strmake( "%s%s/%s", default_dirs[i], pe_dir, name ));
+        }
+    }
+    error( "cannot find %s\n", name );
+#undef TRYOPEN
+}
+
+int main(int argc,char *argv[])
+{
+  int i;
+  int ret = 0;
+  struct strarray files;
+
+  signal( SIGTERM, exit_on_signal );
+  signal( SIGINT, exit_on_signal );
+#ifdef SIGHUP
+  signal( SIGHUP, exit_on_signal );
+#endif
+  init_argv0_dir( argv[0] );
+  target = init_argv0_target( argv[0] );
+
+  now = time(NULL);
+
+  files = parse_options( argc, argv, short_options, long_options, 1, option_callback );
 
   if (stdinc)
   {
@@ -809,33 +738,10 @@
       wpp_add_include_path(strmake("%s%s/%s", sysroot, exe_path, BIN_TO_INCLUDEDIR));
   }
 
-  switch (target_cpu)
-  {
-  case CPU_x86:
-      if (pointer_size == 8) target_cpu = CPU_x86_64;
-      else pointer_size = 4;
-      break;
-  case CPU_x86_64:
-      if (pointer_size == 4) target_cpu = CPU_x86;
-      else pointer_size = 8;
-      break;
-  case CPU_ARM:
-      if (pointer_size == 8) target_cpu = CPU_ARM64;
-      else pointer_size = 4;
-      break;
-  case CPU_ARM64:
-      if (pointer_size == 4) target_cpu = CPU_ARM;
-      pointer_size = 8;
-      break;
-  case CPU_POWERPC64:
-      if (pointer_size == 4) error( "Cannot build 32-bit code for this CPU\n" );
-      pointer_size = 8;
-      break;
-  default:
-      if (pointer_size == 8) error( "Cannot build 64-bit code for this CPU\n" );
-      pointer_size = 4;
-      break;
-  }
+  if (pointer_size)
+      set_target_ptr_size( &target, pointer_size );
+  else
+      pointer_size = get_target_ptr_size( target );
 
   /* if nothing specified, try to guess output type from the output file name */
   if (output_name && do_everything && !do_header && !do_typelib && !do_proxies &&
@@ -850,6 +756,7 @@
       else if (strendswith( output_name, "_i.c" )) do_idfile = 1;
       else if (strendswith( output_name, "_r.res" )) do_regscript = 1;
       else if (strendswith( output_name, "_t.res" )) do_typelib = 1;
+      else if (strendswith( output_name, "_l.res" )) do_typelib = 1;
       else if (strendswith( output_name, "dlldata.c" )) do_dlldata = 1;
       else do_everything = 1;
   }
@@ -874,22 +781,21 @@
   if (!dlldata_name && do_dlldata)
     dlldata_name = xstrdup("dlldata.c");
 
-  if(optind < argc) {
+  if (files.count) {
     if (do_dlldata && !do_everything) {
-      struct list filenames = LIST_INIT(filenames);
-      for ( ; optind < argc; ++optind)
-        add_filename_node(&filenames, argv[optind]);
+      struct strarray filenames = empty_strarray;
+      for (i = 0; i < files.count; i++)
+          strarray_add(&filenames, replace_extension( get_basename( files.str[i] ), ".idl", "" ));
 
-      write_dlldata_list(&filenames, 0 /* FIXME */ );
-      free_filename_nodes(&filenames);
+      write_dlldata_list(filenames, 0 /* FIXME */ );
       return 0;
     }
-    else if (optind != argc - 1) {
+    else if (files.count > 1) {
       fprintf(stderr, "%s", usage);
       return 1;
     }
     else
-      input_idl_name = input_name = xstrdup(argv[optind]);
+      input_idl_name = input_name = xstrdup(files.str[0]);
   }
   else {
     fprintf(stderr, "%s", usage);
@@ -909,40 +815,26 @@
                  (debuglevel & DEBUGLEVEL_PPTRACE) != 0,
                  (debuglevel & DEBUGLEVEL_PPMSG) != 0 );
 
-  if (!header_name) {
-    header_name = dup_basename(input_name, ".idl");
-    strcat(header_name, ".h");
-  }
+  if (!header_name)
+      header_name = replace_extension( get_basename(input_name), ".idl", ".h" );
 
-  if (!typelib_name && do_typelib) {
-    typelib_name = dup_basename(input_name, ".idl");
-    strcat(typelib_name, ".tlb");
-  }
+  if (!typelib_name && do_typelib)
+      typelib_name = replace_extension( get_basename(input_name), ".idl", ".tlb" );
 
-  if (!proxy_name && do_proxies) {
-    proxy_name = dup_basename(input_name, ".idl");
-    strcat(proxy_name, "_p.c");
-  }
+  if (!proxy_name && do_proxies)
+      proxy_name = replace_extension( get_basename(input_name), ".idl", "_p.c" );
 
-  if (!client_name && do_client) {
-    client_name = dup_basename(input_name, ".idl");
-    strcat(client_name, "_c.c");
-  }
+  if (!client_name && do_client)
+      client_name = replace_extension( get_basename(input_name), ".idl", "_c.c" );
 
-  if (!server_name && do_server) {
-    server_name = dup_basename(input_name, ".idl");
-    strcat(server_name, "_s.c");
-  }
+  if (!server_name && do_server)
+      server_name = replace_extension( get_basename(input_name), ".idl", "_s.c" );
 
-  if (!regscript_name && do_regscript) {
-    regscript_name = dup_basename(input_name, ".idl");
-    strcat(regscript_name, "_r.rgs");
-  }
+  if (!regscript_name && do_regscript)
+      regscript_name = replace_extension( get_basename(input_name), ".idl", "_r.rgs" );
 
-  if (!idfile_name && do_idfile) {
-    idfile_name = dup_basename(input_name, ".idl");
-    strcat(idfile_name, "_i.c");
-  }
+  if (!idfile_name && do_idfile)
+      idfile_name = replace_extension( get_basename(input_name), ".idl", "_i.c" );
 
   if (do_proxies) proxy_token = dup_basename_token(proxy_name,"_p.c");
   if (do_client) client_token = dup_basename_token(client_name,"_c.c");
@@ -961,14 +853,9 @@
     {
         FILE *output;
         int fd;
-        char *name = xmalloc( strlen(header_name) + 8 );
+        char *name;
 
-        strcpy( name, header_name );
-        strcat( name, ".XXXXXX" );
-
-        if ((fd = mkstemps( name, 0 )) == -1)
-            error("Could not generate a temp name from %s\n", name);
-
+        fd = make_temp_file( header_name, NULL, &name );
         temp_name = name;
         if (!(output = fdopen(fd, "wt")))
             error("Could not open fd %s for writing\n", name);
diff --git a/mingw-w64-tools/widl/src/widl.h b/mingw-w64-tools/widl/src/widl.h
index bc6226c..c638821 100644
--- a/mingw-w64-tools/widl/src/widl.h
+++ b/mingw-w64-tools/widl/src/widl.h
@@ -21,6 +21,7 @@
 #ifndef __WIDL_WIDL_H
 #define __WIDL_WIDL_H
 
+#include "../tools.h"
 #include "widltypes.h"
 
 #include <time.h>
@@ -74,13 +75,6 @@
 extern int line_number;
 extern int char_number;
 
-enum target_cpu
-{
-    CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64, CPU_POWERPC64, CPU_LAST = CPU_POWERPC64
-};
-
-extern enum target_cpu target_cpu;
-
 enum stub_mode
 {
     MODE_Os,  /* inline stubs */
@@ -88,6 +82,7 @@
     MODE_Oif  /* new-style fully interpreted stubs */
 };
 extern enum stub_mode get_stub_mode(void);
+extern int open_typelib( const char *name );
 
 extern void write_header(const statement_list_t *stmts);
 extern void write_id_data(const statement_list_t *stmts);
diff --git a/mingw-w64-tools/widl/src/wpp/wpp.c b/mingw-w64-tools/widl/src/wpp.c
similarity index 77%
rename from mingw-w64-tools/widl/src/wpp/wpp.c
rename to mingw-w64-tools/widl/src/wpp.c
index 0e26121..d8d5052 100644
--- a/mingw-w64-tools/widl/src/wpp/wpp.c
+++ b/mingw-w64-tools/widl/src/wpp.c
@@ -20,7 +20,6 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <assert.h>
 #include <ctype.h>
@@ -30,12 +29,10 @@
 #include <string.h>
 #include <stdarg.h>
 #include <time.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
 
+#include "../tools.h"
+#include "utils.h"
 #include "wpp_private.h"
-#include "wine/wpp.h"
 
 struct pp_status pp_status;
 
@@ -57,43 +54,9 @@
 };
 
 static struct list cmdline_defines = LIST_INIT( cmdline_defines );
+static struct strarray includes;
 
-void *pp_xmalloc(size_t size)
-{
-    void *res;
-
-    assert(size > 0);
-    res = malloc(size);
-    if(res == NULL)
-    {
-        fprintf( stderr, "Virtual memory exhausted\n" );
-        exit(1);
-    }
-    return res;
-}
-
-void *pp_xrealloc(void *p, size_t size)
-{
-    void *res;
-
-    assert(size > 0);
-    res = realloc(p, size);
-    if(res == NULL)
-    {
-        fprintf( stderr, "Virtual memory exhausted\n" );
-        exit(1);
-    }
-    return res;
-}
-
-char *pp_xstrdup(const char *str)
-{
-	int len = strlen(str)+1;
-	return memcpy(pp_xmalloc(len), str, len);
-}
-
-char *wpp_lookup(const char *name, int type, const char *parent_name,
-                 char **include_path, int include_path_count)
+static char *wpp_lookup(const char *name, int type, const char *parent_name)
 {
     char *cpy;
     char *cptr;
@@ -101,7 +64,7 @@
     const char *ccptr;
     int i, fd;
 
-    cpy = pp_xmalloc(strlen(name)+1);
+    cpy = xmalloc(strlen(name)+1);
     cptr = cpy;
 
     for(ccptr = name; *ccptr; ccptr++)
@@ -122,13 +85,7 @@
     if(type && parent_name)
     {
         /* Search directory of parent include and then -I path */
-        const char *p;
-
-        if ((p = strrchr( parent_name, '/' ))) p++;
-        else p = parent_name;
-        path = pp_xmalloc( (p - parent_name) + strlen(cpy) + 1 );
-        memcpy( path, parent_name, p - parent_name );
-        strcpy( path + (p - parent_name), cpy );
+        path = strmake( "%s/%s", get_dirname(parent_name), cpy );
         fd = open( path, O_RDONLY );
         if (fd != -1)
         {
@@ -139,12 +96,9 @@
         free( path );
     }
     /* Search -I path */
-    for(i = 0; i < include_path_count; i++)
+    for(i = 0; i < includes.count; i++)
     {
-        path = pp_xmalloc(strlen(include_path[i]) + strlen(cpy) + 2);
-        strcpy(path, include_path[i]);
-        strcat(path, "/");
-        strcat(path, cpy);
+        path = strmake("%s/%s", includes.str[i], cpy);
         fd = open( path, O_RDONLY );
         if (fd != -1)
         {
@@ -196,7 +150,7 @@
 }
 
 /* initialize the define state */
-void pp_init_define_state(void)
+static void pp_init_define_state(void)
 {
     int i;
 
@@ -204,7 +158,7 @@
 }
 
 /* free the current define state */
-void pp_free_define_state(void)
+static void pp_free_define_state(void)
 {
     int i;
     pp_entry_t *ppp, *ppp2;
@@ -228,7 +182,7 @@
 
 	if((ppp = pplookup(name)) == NULL)
 	{
-		if(pp_status.pedantic)
+		if(pedantic)
 			ppy_warning("%s was not defined", name);
 		return;
 	}
@@ -252,16 +206,17 @@
 	idx = pphash(def);
 	if((ppp = pplookup(def)) != NULL)
 	{
-		if(pp_status.pedantic)
-			ppy_warning("Redefinition of %s\n\tPrevious definition: %s:%d", def, ppp->filename, ppp->linenumber);
+		if(pedantic)
+			ppy_warning("Redefinition of %s\n%s:%d: note: previous definition was here",
+                                    def, ppp->filename, ppp->linenumber);
 		pp_del_define(def);
 	}
-	ppp = pp_xmalloc(sizeof(pp_entry_t));
+	ppp = xmalloc(sizeof(pp_entry_t));
 	memset( ppp, 0, sizeof(*ppp) );
-	ppp->ident = pp_xstrdup(def);
+	ppp->ident = xstrdup(def);
 	ppp->type = def_define;
-	ppp->subst.text = text ? pp_xstrdup(text) : NULL;
-	ppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : "<internal or cmdline>");
+	ppp->subst.text = text ? xstrdup(text) : NULL;
+	ppp->filename = xstrdup(pp_status.input ? pp_status.input : "<internal or cmdline>");
 	ppp->linenumber = pp_status.input ? pp_status.line_number : 0;
         list_add_head( &pp_defines[idx], &ppp->entry );
 	if(ppp->subst.text)
@@ -292,18 +247,19 @@
 	idx = pphash(id);
 	if((ppp = pplookup(id)) != NULL)
 	{
-		if(pp_status.pedantic)
-			ppy_warning("Redefinition of %s\n\tPrevious definition: %s:%d", id, ppp->filename, ppp->linenumber);
+		if(pedantic)
+			ppy_warning("Redefinition of %s\n%s:%d: note: previous definition was here",
+                                    id, ppp->filename, ppp->linenumber);
 		pp_del_define(id);
 	}
-	ppp = pp_xmalloc(sizeof(pp_entry_t));
+	ppp = xmalloc(sizeof(pp_entry_t));
 	memset( ppp, 0, sizeof(*ppp) );
 	ppp->ident	= id;
 	ppp->type	= def_macro;
 	ppp->margs	= args;
 	ppp->nargs	= nargs;
 	ppp->subst.mtext= exp;
-	ppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : "<internal or cmdline>");
+	ppp->filename = xstrdup(pp_status.input ? pp_status.input : "<internal or cmdline>");
 	ppp->linenumber = pp_status.input ? pp_status.line_number : 0;
         list_add_head( &pp_defines[idx], &ppp->entry );
 	if(pp_status.debug)
@@ -338,51 +294,26 @@
  * Include management
  *-------------------------------------------------------------------------
  */
-#if defined(_WIN32) || defined(__MSDOS__)
-#define INCLUDESEPARATOR	";"
-#else
-#define INCLUDESEPARATOR	":"
-#endif
-
-static char **includepath;
-static int nincludepath = 0;
-
 void wpp_add_include_path(const char *path)
 {
-	char *tok;
-	char *cpy = pp_xstrdup(path);
+	char *dir = xstrdup(path);
+	char *cptr;
 
-	tok = strtok(cpy, INCLUDESEPARATOR);
-	while(tok)
+	for(cptr = dir; *cptr; cptr++)
 	{
-		if(*tok) {
-			char *dir;
-			char *cptr;
-
-			dir = pp_xstrdup(tok);
-			for(cptr = dir; *cptr; cptr++)
-			{
-				/* Convert to forward slash */
-				if(*cptr == '\\')
-					*cptr = '/';
-			}
-			/* Kill eventual trailing '/' */
-			if(*(cptr = dir + strlen(dir)-1) == '/')
-				*cptr = '\0';
-
-			/* Add to list */
-			includepath = pp_xrealloc(includepath, (nincludepath+1) * sizeof(*includepath));
-			includepath[nincludepath] = dir;
-			nincludepath++;
-		}
-		tok = strtok(NULL, INCLUDESEPARATOR);
+		/* Convert to forward slash */
+		if(*cptr == '\\')
+			*cptr = '/';
 	}
-	free(cpy);
+	/* Kill eventual trailing '/' */
+	if(*(cptr = dir + strlen(dir)-1) == '/') *cptr = '\0';
+
+        strarray_add( &includes, dir );
 }
 
 char *wpp_find_include(const char *name, const char *parent_name)
 {
-    return wpp_lookup(name, !!parent_name, parent_name, includepath, nincludepath);
+    return wpp_lookup(name, !!parent_name, parent_name);
 }
 
 void *pp_open_include(const char *name, int type, const char *parent_name, char **newpath)
@@ -390,7 +321,7 @@
     char *path;
     void *fp;
 
-    if (!(path = wpp_lookup(name, type, parent_name, includepath, nincludepath))) return NULL;
+    if (!(path = wpp_lookup(name, type, parent_name))) return NULL;
     fp = fopen(path, "rt");
 
     if (fp)
@@ -465,7 +396,7 @@
 void pp_push_if(pp_if_state_t s)
 {
 	if(if_stack_idx >= MAXIFSTACK)
-		pp_internal_error(__FILE__, __LINE__, "#if-stack overflow; #{if,ifdef,ifndef} nested too deeply (> %d)", MAXIFSTACK);
+		error("#if-stack overflow; #{if,ifdef,ifndef} nested too deeply (> %d)\n", MAXIFSTACK);
 
 	if(pp_flex_debug)
 		fprintf(stderr, "Push if %s:%d: %s(%d) -> %s(%d)\n", pp_status.input, pp_status.line_number, pp_if_state_str[pp_if_state()], if_stack_idx, pp_if_state_str[s], if_stack_idx+1);
@@ -483,8 +414,8 @@
 	case if_ignore:
 		pp_push_ignore_state();
 		break;
-	default:
-		pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d)", (int)pp_if_state());
+	case if_error:
+		assert(0);
 	}
 }
 
@@ -507,8 +438,8 @@
 	case if_ignore:
 		pp_pop_ignore_state();
 		break;
-	default:
-		pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d)", (int)pp_if_state());
+	case if_error:
+		assert(0);
 	}
 
 	if(pp_flex_debug)
@@ -546,8 +477,8 @@
 	case if_ignore:
 		pp_push_if(if_ignore);
 		break;
-	default:
-		pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #{if,ifdef,ifndef} directive", (int)pp_if_state());
+	case if_error:
+		assert(0);
 	}
 }
 
@@ -582,17 +513,6 @@
 	return 0;
 }
 
-void pp_internal_error(const char *file, int line, const char *s, ...)
-{
-	va_list ap;
-	va_start(ap, s);
-	fprintf(stderr, "Internal error (please report) %s %d: ", file, line);
-	vfprintf(stderr, s, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-	exit(3);
-}
-
 static void add_cmdline_defines(void)
 {
     struct define *def;
@@ -634,14 +554,14 @@
         if (!strcmp( def->name, name ))
         {
             free( def->value );
-            def->value = pp_xstrdup(value);
+            def->value = xstrdup(value);
             return;
         }
     }
 
-    def = pp_xmalloc( sizeof(*def) );
-    def->name  = pp_xstrdup(name);
-    def->value = pp_xstrdup(value);
+    def = xmalloc( sizeof(*def) );
+    def->name  = xstrdup(name);
+    def->value = xstrdup(value);
     list_add_head( &cmdline_defines, &def->entry );
 }
 
@@ -667,7 +587,7 @@
 void wpp_add_cmdline_define( const char *value )
 {
     char *p;
-    char *str = pp_xstrdup(value);
+    char *str = xstrdup(value);
 
     p = strchr( str, '=' );
     if (p) *p++ = 0;
@@ -685,13 +605,6 @@
 }
 
 
-/* set the pedantic mode */
-void wpp_set_pedantic( int on )
-{
-    pp_status.pedantic = on;
-}
-
-
 /* the main preprocessor parsing loop */
 int wpp_parse( const char *input, FILE *output )
 {
@@ -709,10 +622,10 @@
     else if (!(pp_status.file = fopen(input, "rt")))
         ppy_error("Could not open %s\n", input);
 
-    pp_status.input = input ? pp_xstrdup(input) : NULL;
+    pp_status.input = input ? xstrdup(input) : NULL;
 
     ppy_out = output;
-    pp_writestring("# 1 \"%s\" 1\n", input ? input : "");
+    fprintf(ppy_out, "# 1 \"%s\" 1\n", input ? input : "");
 
     ret = ppy_parse();
 
diff --git a/mingw-w64-tools/widl/src/wpp/wpp_private.h b/mingw-w64-tools/widl/src/wpp_private.h
similarity index 88%
rename from mingw-w64-tools/widl/src/wpp/wpp_private.h
rename to mingw-w64-tools/widl/src/wpp_private.h
index fbcd3c0..435dbcc 100644
--- a/mingw-w64-tools/widl/src/wpp/wpp_private.h
+++ b/mingw-w64-tools/widl/src/wpp_private.h
@@ -24,6 +24,14 @@
 #include <string.h>
 #include "wine/list.h"
 
+extern void wpp_del_define( const char *name );
+extern void wpp_add_cmdline_define( const char *value );
+extern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug );
+extern void wpp_add_include_path( const char *path );
+extern char *wpp_find_include( const char *name, const char *parent_name );
+/* Return value == 0 means successful execution */
+extern int wpp_parse( const char *input, FILE *output );
+
 struct pp_entry;	/* forward */
 /*
  * Include logic
@@ -146,12 +154,7 @@
 
 
 
-void *pp_xmalloc(size_t);
-void *pp_xrealloc(void *, size_t);
-char *pp_xstrdup(const char *str);
 pp_entry_t *pplookup(const char *ident);
-void pp_init_define_state(void);
-void pp_free_define_state(void);
 pp_entry_t *pp_add_define(const char *def, const char *text);
 pp_entry_t *pp_add_macro(char *ident, char *args[], int nargs, mtext_t *exp);
 void pp_del_define(const char *name);
@@ -161,16 +164,9 @@
 pp_if_state_t pp_pop_if(void);
 pp_if_state_t pp_if_state(void);
 int pp_get_if_depth(void);
-char *wpp_lookup(const char *name, int type, const char *parent_name,
-                 char **include_path, int include_path_count);
-
-#ifndef __GNUC__
-#define __attribute__(x)  /*nothing*/
-#endif
 
 int ppy_error(const char *s, ...) __attribute__((format (printf, 1, 2)));
 int ppy_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
-void pp_internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4)));
 
 /* current preprocessor state */
 /* everything is in this structure to avoid polluting the global symbol space */
@@ -180,13 +176,12 @@
     FILE *file;         /* current input file descriptor */
     int line_number;    /* current line number */
     int char_number;    /* current char number in line */
-    int pedantic;       /* pedantic option */
     int debug;          /* debug messages flag */
 };
 
 extern struct pp_status pp_status;
 extern include_state_t pp_incl_state;
-extern struct list pp_includelogiclist;
+extern int pedantic;
 
 /*
  * From ppl.l
@@ -201,8 +196,6 @@
 void pp_push_ignore_state(void);
 void pp_pop_ignore_state(void);
 
-void pp_writestring(const char *format, ...) __attribute__((format (printf, 1, 2)));
-
 /*
  * From ppy.y
  */
diff --git a/mingw-w64-tools/widl/src/write_msft.c b/mingw-w64-tools/widl/src/write_msft.c
index c39f382..2df1b31 100644
--- a/mingw-w64-tools/widl/src/write_msft.c
+++ b/mingw-w64-tools/widl/src/write_msft.c
@@ -28,7 +28,6 @@
  */
 
 #include "config.h"
-#include "wine/port.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -39,12 +38,11 @@
 
 #define NONAMELESSUNION
 
+#include "widl.h"
 #include "winerror.h"
 #include "windef.h"
 #include "winbase.h"
 #include "winnls.h"
-
-#include "widl.h"
 #include "typelib.h"
 #include "typelib_struct.h"
 #include "utils.h"
@@ -304,17 +302,10 @@
 
     value = lhash_val_of_name_sys(typelib->typelib_header.varflags & 0x0f, typelib->typelib_header.lcid, converted_name + 4);
 
-#ifdef WORDS_BIGENDIAN
-    converted_name[3] = length & 0xff;
-    converted_name[2] = length >> 8;
-    converted_name[1] = value;
-    converted_name[0] = value >> 8;
-#else
     converted_name[0] = length & 0xff;
     converted_name[1] = length >> 8;
     converted_name[2] = value;
     converted_name[3] = value >> 8;
-#endif
 
     for (offset = (4 - length) & 3; offset; offset--) converted_name[length + offset + 3] = 0x57;
 
@@ -351,14 +342,8 @@
     if (length < 3) size += 4;
     converted_string = xmalloc(size);
     memcpy(converted_string + 2, string, length);
-
-#ifdef WORDS_BIGENDIAN
-    converted_string[1] = length & 0xff;
-    converted_string[0] = (length >> 8) & 0xff;
-#else
     converted_string[0] = length & 0xff;
     converted_string[1] = (length >> 8) & 0xff;
-#endif
 
     if(length < 3) { /* strings of this length are padded with up to 8 bytes incl the 2 byte length */
         for(offset = 0; offset < 4; offset++)
@@ -1221,7 +1206,8 @@
     int vt;
 
     if (expr->type == EXPR_STRLIT || expr->type == EXPR_WSTRLIT) {
-        if (get_type_vt(type) != VT_BSTR)
+        vt = get_type_vt(type);
+        if (vt != VT_BSTR && vt != VT_VARIANT)
             error("string default value applied to non-string type\n");
         chat("default value '%s'\n", expr->u.sval);
         write_string_value(typelib, out, expr->u.sval);
@@ -1251,6 +1237,20 @@
         case VT_UINT:
         case VT_HRESULT:
             break;
+        case VT_VARIANT: {
+            switch (expr->type) {
+            case EXPR_DOUBLE:
+                vt = VT_R4;
+                break;
+            case EXPR_NUM:
+                vt = VT_I4;
+                break;
+            default:
+                warning("can't write default VT_VARIANT value for expression type %d.\n", expr->type);
+                return;
+            }
+            break;
+        }
         default:
             warning("can't write value of type %d yet\n", vt);
             return;
@@ -2725,7 +2725,6 @@
 
     ctl2_finalize_typeinfos(typelib, filepos);
 
-    byte_swapped = 0;
     init_output_buffer();
 
     put_data(&typelib->typelib_header, sizeof(typelib->typelib_header));
@@ -2758,7 +2757,8 @@
         if (expr)
             sprintf( typelib_id, "#%d", expr->cval );
         add_output_to_resources( "TYPELIB", typelib_id );
-        output_typelib_regscript( typelib->typelib );
+        if (strendswith( typelib_name, "_t.res" ))  /* add typelib registration */
+            output_typelib_regscript( typelib->typelib );
     }
     else flush_output_buffer( typelib_name );
 }
diff --git a/mingw-w64-tools/widl/tools.h b/mingw-w64-tools/widl/tools.h
new file mode 100644
index 0000000..1065d25
--- /dev/null
+++ b/mingw-w64-tools/widl/tools.h
@@ -0,0 +1,753 @@
+/*
+ * Helper functions for the Wine tools
+ *
+ * Copyright 2021 Alexandre Julliard
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_TOOLS_H
+#define __WINE_TOOLS_H
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include <errno.h>
+
+#ifdef _WIN32
+# include <direct.h>
+# include <io.h>
+# include <process.h>
+# define mkdir(path,mode) mkdir(path)
+# ifndef S_ISREG
+#  define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)
+# endif
+# ifdef _MSC_VER
+#  define popen _popen
+#  define pclose _pclose
+#  define strtoll _strtoi64
+#  define strtoull _strtoui64
+#  define strncasecmp _strnicmp
+#  define strcasecmp _stricmp
+# endif
+#else
+# include <sys/wait.h>
+# include <unistd.h>
+# ifndef O_BINARY
+#  define O_BINARY 0
+# endif
+# ifndef __int64
+#   if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
+#     define __int64 long
+#   else
+#     define __int64 long long
+#   endif
+# endif
+#endif
+
+#if !defined(__GNUC__) && !defined(__attribute__)
+#define __attribute__(x)
+#endif
+
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#endif
+
+struct target
+{
+    enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64 } cpu;
+
+    enum
+    {
+        PLATFORM_UNSPECIFIED,
+        PLATFORM_APPLE,
+        PLATFORM_ANDROID,
+        PLATFORM_LINUX,
+        PLATFORM_FREEBSD,
+        PLATFORM_SOLARIS,
+        PLATFORM_WINDOWS,
+        PLATFORM_MINGW,
+        PLATFORM_CYGWIN
+    } platform;
+};
+
+static inline void *xmalloc( size_t size )
+{
+    void *res = malloc( size ? size : 1 );
+
+    if (res == NULL)
+    {
+        fprintf( stderr, "Virtual memory exhausted.\n" );
+        exit(1);
+    }
+    return res;
+}
+
+static inline void *xrealloc (void *ptr, size_t size)
+{
+    void *res = realloc( ptr, size );
+
+    if (size && res == NULL)
+    {
+        fprintf( stderr, "Virtual memory exhausted.\n" );
+        exit(1);
+    }
+    return res;
+}
+
+static inline char *xstrdup( const char *str )
+{
+    return strcpy( xmalloc( strlen(str)+1 ), str );
+}
+
+static inline int strendswith( const char *str, const char *end )
+{
+    int l = strlen( str );
+    int m = strlen( end );
+    return l >= m && !strcmp( str + l - m, end );
+}
+
+static char *strmake( const char* fmt, ... ) __attribute__ ((__format__ (__printf__, 1, 2)));
+static inline char *strmake( const char* fmt, ... )
+{
+    int n;
+    size_t size = 100;
+    va_list ap;
+
+    for (;;)
+    {
+        char *p = xmalloc( size );
+        va_start( ap, fmt );
+	n = vsnprintf( p, size, fmt, ap );
+	va_end( ap );
+        if (n == -1) size *= 2;
+        else if ((size_t)n >= size) size = n + 1;
+        else return p;
+        free( p );
+    }
+}
+
+/* string array functions */
+
+struct strarray
+{
+    unsigned int count;  /* strings in use */
+    unsigned int size;   /* total allocated size */
+    const char **str;
+};
+
+static const struct strarray empty_strarray;
+
+static inline void strarray_add( struct strarray *array, const char *str )
+{
+    if (array->count == array->size)
+    {
+	if (array->size) array->size *= 2;
+        else array->size = 16;
+	array->str = xrealloc( array->str, sizeof(array->str[0]) * array->size );
+    }
+    array->str[array->count++] = str;
+}
+
+static inline void strarray_addall( struct strarray *array, struct strarray added )
+{
+    unsigned int i;
+
+    for (i = 0; i < added.count; i++) strarray_add( array, added.str[i] );
+}
+
+static inline int strarray_exists( const struct strarray *array, const char *str )
+{
+    unsigned int i;
+
+    for (i = 0; i < array->count; i++) if (!strcmp( array->str[i], str )) return 1;
+    return 0;
+}
+
+static inline void strarray_add_uniq( struct strarray *array, const char *str )
+{
+    if (!strarray_exists( array, str )) strarray_add( array, str );
+}
+
+static inline void strarray_addall_uniq( struct strarray *array, struct strarray added )
+{
+    unsigned int i;
+
+    for (i = 0; i < added.count; i++) strarray_add_uniq( array, added.str[i] );
+}
+
+static inline struct strarray strarray_fromstring( const char *str, const char *delim )
+{
+    struct strarray array = empty_strarray;
+    char *buf = xstrdup( str );
+    const char *tok;
+
+    for (tok = strtok( buf, delim ); tok; tok = strtok( NULL, delim ))
+        strarray_add( &array, xstrdup( tok ));
+    free( buf );
+    return array;
+}
+
+static inline struct strarray strarray_frompath( const char *path )
+{
+    if (!path) return empty_strarray;
+#ifdef _WIN32
+    return strarray_fromstring( path, ";" );
+#else
+    return strarray_fromstring( path, ":" );
+#endif
+}
+
+static inline char *strarray_tostring( struct strarray array, const char *sep )
+{
+    char *str;
+    unsigned int i, len = 1 + (array.count - 1) * strlen(sep);
+
+    if (!array.count) return xstrdup("");
+    for (i = 0; i < array.count; i++) len += strlen( array.str[i] );
+    str = xmalloc( len );
+    strcpy( str, array.str[0] );
+    for (i = 1; i < array.count; i++)
+    {
+        strcat( str, sep );
+        strcat( str, array.str[i] );
+    }
+    return str;
+}
+
+static inline void strarray_qsort( struct strarray *array, int (*func)(const char **, const char **) )
+{
+    if (array->count) qsort( array->str, array->count, sizeof(*array->str), (void *)func );
+}
+
+static inline const char *strarray_bsearch( const struct strarray *array, const char *str,
+                                            int (*func)(const char **, const char **) )
+{
+    char **res = NULL;
+
+    if (array->count) res = bsearch( &str, array->str, array->count, sizeof(*array->str), (void *)func );
+    return res ? *res : NULL;
+}
+
+static inline void strarray_trace( struct strarray args )
+{
+    unsigned int i;
+
+    for (i = 0; i < args.count; i++)
+    {
+        if (strpbrk( args.str[i], " \t\n\r")) printf( "\"%s\"", args.str[i] );
+        else printf( "%s", args.str[i] );
+        putchar( i < args.count - 1 ? ' ' : '\n' );
+    }
+}
+
+static inline int strarray_spawn( struct strarray args )
+{
+#ifdef _WIN32
+    strarray_add( &args, NULL );
+    return _spawnvp( _P_WAIT, args.str[0], args.str );
+#else
+    pid_t pid, wret;
+    int status;
+
+    if (!(pid = fork()))
+    {
+        strarray_add( &args, NULL );
+        execvp( args.str[0], (char **)args.str );
+        _exit(1);
+    }
+    if (pid == -1) return -1;
+
+    while (pid != (wret = waitpid( pid, &status, 0 )))
+        if (wret == -1 && errno != EINTR) break;
+
+    if (pid == wret && WIFEXITED(status)) return WEXITSTATUS(status);
+    return 255; /* abnormal exit with an abort or an interrupt */
+#endif
+}
+
+static inline char *get_basename( const char *file )
+{
+    const char *ret = strrchr( file, '/' );
+    return xstrdup( ret ? ret + 1 : file );
+}
+
+static inline char *get_basename_noext( const char *file )
+{
+    char *ext, *ret = get_basename( file );
+    if ((ext = strrchr( ret, '.' ))) *ext = 0;
+    return ret;
+}
+
+static inline char *get_dirname( const char *file )
+{
+    const char *end = strrchr( file, '/' );
+    if (!end) return xstrdup( "." );
+    if (end == file) end++;
+    return strmake( "%.*s", (int)(end - file), file );
+}
+
+static inline char *replace_extension( const char *name, const char *old_ext, const char *new_ext )
+{
+    int name_len = strlen( name );
+
+    if (strendswith( name, old_ext )) name_len -= strlen( old_ext );
+    return strmake( "%.*s%s", name_len, name, new_ext );
+}
+
+
+static inline int make_temp_file( const char *prefix, const char *suffix, char **name )
+{
+    static unsigned int value;
+    int fd, count;
+    const char *tmpdir = NULL;
+
+    if (!prefix) prefix = "tmp";
+    if (!suffix) suffix = "";
+    value += time(NULL) + getpid();
+
+    for (count = 0; count < 0x8000; count++)
+    {
+        if (tmpdir)
+            *name = strmake( "%s/%s-%08x%s", tmpdir, prefix, value, suffix );
+        else
+            *name = strmake( "%s-%08x%s", prefix, value, suffix );
+        fd = open( *name, O_RDWR | O_CREAT | O_EXCL, 0600 );
+        if (fd >= 0) return fd;
+        value += 7777;
+        if (errno == EACCES && !tmpdir && !strchr( prefix, '/' ))
+        {
+            if (!(tmpdir = getenv("TMPDIR"))) tmpdir = "/tmp";
+        }
+        free( *name );
+    }
+    fprintf( stderr, "failed to create temp file for %s%s\n", prefix, suffix );
+    exit(1);
+}
+
+
+static inline struct target get_default_target(void)
+{
+    struct target target;
+#ifdef __i386__
+    target.cpu = CPU_i386;
+#elif defined(__x86_64__)
+    target.cpu = CPU_x86_64;
+#elif defined(__arm__)
+    target.cpu = CPU_ARM;
+#elif defined(__aarch64__)
+    target.cpu = CPU_ARM64;
+#else
+#error Unsupported CPU
+#endif
+
+#ifdef __APPLE__
+    target.platform = PLATFORM_APPLE;
+#elif defined(__ANDROID__)
+    target.platform = PLATFORM_ANDROID;
+#elif defined(__linux__)
+    target.platform = PLATFORM_LINUX;
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+    target.platform = PLATFORM_FREEBSD;
+#elif defined(__sun)
+    target.platform = PLATFORM_SOLARIS;
+#elif defined(__CYGWIN__)
+    target.platform = PLATFORM_CYGWIN;
+#elif defined(_WIN32)
+    target.platform = PLATFORM_MINGW;
+#else
+    target.platform = PLATFORM_UNSPECIFIED;
+#endif
+
+    return target;
+}
+
+
+static inline unsigned int get_target_ptr_size( struct target target )
+{
+    static const unsigned int sizes[] =
+    {
+        [CPU_i386]      = 4,
+        [CPU_x86_64]    = 8,
+        [CPU_ARM]       = 4,
+        [CPU_ARM64]     = 8,
+    };
+    return sizes[target.cpu];
+}
+
+
+static inline void set_target_ptr_size( struct target *target, unsigned int size )
+{
+    switch (target->cpu)
+    {
+    case CPU_i386:
+        if (size == 8) target->cpu = CPU_x86_64;
+        break;
+    case CPU_x86_64:
+        if (size == 4) target->cpu = CPU_i386;
+        break;
+    case CPU_ARM:
+        if (size == 8) target->cpu = CPU_ARM64;
+        break;
+    case CPU_ARM64:
+        if (size == 4) target->cpu = CPU_ARM;
+        break;
+    }
+}
+
+
+static inline int get_cpu_from_name( const char *name )
+{
+    static const struct
+    {
+        const char *name;
+        int         cpu;
+    } cpu_names[] =
+    {
+        { "i386",      CPU_i386 },
+        { "i486",      CPU_i386 },
+        { "i586",      CPU_i386 },
+        { "i686",      CPU_i386 },
+        { "i786",      CPU_i386 },
+        { "x86_64",    CPU_x86_64 },
+        { "amd64",     CPU_x86_64 },
+        { "aarch64",   CPU_ARM64 },
+        { "arm64",     CPU_ARM64 },
+        { "arm",       CPU_ARM },
+    };
+    unsigned int i;
+
+    for (i = 0; i < ARRAY_SIZE(cpu_names); i++)
+        if (!strncmp( cpu_names[i].name, name, strlen(cpu_names[i].name) )) return cpu_names[i].cpu;
+    return -1;
+}
+
+
+static inline int get_platform_from_name( const char *name )
+{
+    static const struct
+    {
+        const char *name;
+        int         platform;
+    } platform_names[] =
+    {
+        { "macos",       PLATFORM_APPLE },
+        { "darwin",      PLATFORM_APPLE },
+        { "android",     PLATFORM_ANDROID },
+        { "linux",       PLATFORM_LINUX },
+        { "freebsd",     PLATFORM_FREEBSD },
+        { "solaris",     PLATFORM_SOLARIS },
+        { "mingw32",     PLATFORM_MINGW },
+        { "windows-gnu", PLATFORM_MINGW },
+        { "winnt",       PLATFORM_MINGW },
+        { "windows",     PLATFORM_WINDOWS },
+        { "cygwin",      PLATFORM_CYGWIN },
+    };
+    unsigned int i;
+
+    for (i = 0; i < ARRAY_SIZE(platform_names); i++)
+        if (!strncmp( platform_names[i].name, name, strlen(platform_names[i].name) ))
+            return platform_names[i].platform;
+    return -1;
+};
+
+
+static inline const char *get_arch_dir( struct target target )
+{
+    static const char *cpu_names[] =
+    {
+        [CPU_i386]   = "i386",
+        [CPU_x86_64] = "x86_64",
+        [CPU_ARM]    = "arm",
+        [CPU_ARM64]  = "aarch64"
+    };
+
+    if (!cpu_names[target.cpu]) return "";
+
+    switch (target.platform)
+    {
+    case PLATFORM_WINDOWS:
+    case PLATFORM_CYGWIN:
+    case PLATFORM_MINGW:
+        return strmake( "/%s-windows", cpu_names[target.cpu] );
+    default:
+        return strmake( "/%s-unix", cpu_names[target.cpu] );
+    }
+}
+
+static inline int parse_target( const char *name, struct target *target )
+{
+    int res;
+    char *p, *spec = xstrdup( name );
+
+    /* target specification is in the form CPU-MANUFACTURER-OS or CPU-MANUFACTURER-KERNEL-OS */
+
+    /* get the CPU part */
+
+    if ((p = strchr( spec, '-' )))
+    {
+        *p++ = 0;
+        if ((res = get_cpu_from_name( spec )) == -1)
+        {
+            free( spec );
+            return 0;
+        }
+        target->cpu = res;
+    }
+    else if (!strcmp( spec, "mingw32" ))
+    {
+        target->cpu = CPU_i386;
+        p = spec;
+    }
+    else
+    {
+        free( spec );
+        return 0;
+    }
+
+    /* get the OS part */
+
+    target->platform = PLATFORM_UNSPECIFIED;  /* default value */
+    for (;;)
+    {
+        if ((res = get_platform_from_name( p )) != -1)
+        {
+            target->platform = res;
+            break;
+        }
+        if (!(p = strchr( p, '-' ))) break;
+        p++;
+    }
+
+    free( spec );
+    return 1;
+}
+
+
+static inline struct target init_argv0_target( const char *argv0 )
+{
+    char *name = get_basename( argv0 );
+    struct target target;
+
+    if (!strchr( name, '-' ) || !parse_target( name, &target ))
+        target = get_default_target();
+
+    free( name );
+    return target;
+}
+
+
+/* output buffer management */
+
+extern unsigned char *output_buffer;
+extern size_t output_buffer_pos;
+extern size_t output_buffer_size;
+
+static inline void check_output_buffer_space( size_t size )
+{
+    if (output_buffer_pos + size >= output_buffer_size)
+    {
+        output_buffer_size = max( output_buffer_size * 2, output_buffer_pos + size );
+        output_buffer = xrealloc( output_buffer, output_buffer_size );
+    }
+}
+
+static inline void init_output_buffer(void)
+{
+    output_buffer_size = 1024;
+    output_buffer_pos = 0;
+    output_buffer = xmalloc( output_buffer_size );
+}
+
+static inline void put_data( const void *data, size_t size )
+{
+    check_output_buffer_space( size );
+    memcpy( output_buffer + output_buffer_pos, data, size );
+    output_buffer_pos += size;
+}
+
+static inline void put_byte( unsigned char val )
+{
+    check_output_buffer_space( 1 );
+    output_buffer[output_buffer_pos++] = val;
+}
+
+static inline void put_word( unsigned short val )
+{
+    check_output_buffer_space( 2 );
+    output_buffer[output_buffer_pos++] = val;
+    output_buffer[output_buffer_pos++] = val >> 8;
+}
+
+static inline void put_dword( unsigned int val )
+{
+    check_output_buffer_space( 4 );
+    output_buffer[output_buffer_pos++] = val;
+    output_buffer[output_buffer_pos++] = val >> 8;
+    output_buffer[output_buffer_pos++] = val >> 16;
+    output_buffer[output_buffer_pos++] = val >> 24;
+}
+
+static inline void put_qword( unsigned int val )
+{
+    put_dword( val );
+    put_dword( 0 );
+}
+
+static inline void align_output( unsigned int align )
+{
+    size_t size = align - (output_buffer_pos % align);
+
+    if (size == align) return;
+    check_output_buffer_space( size );
+    memset( output_buffer + output_buffer_pos, 0, size );
+    output_buffer_pos += size;
+}
+
+static inline void flush_output_buffer( const char *name )
+{
+    int fd = open( name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 );
+
+    if (fd == -1 || write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos)
+    {
+        perror( name );
+        exit(1);
+    }
+    close( fd );
+    free( output_buffer );
+}
+
+/* command-line option parsing */
+/* partly based on the Glibc getopt() implementation */
+
+struct long_option
+{
+    const char *name;
+    int has_arg;
+    int val;
+};
+
+static inline struct strarray parse_options( int argc, char **argv, const char *short_opts,
+                                             const struct long_option *long_opts, int long_only,
+                                             void (*callback)( int, char* ) )
+{
+    struct strarray ret = empty_strarray;
+    const char *flag;
+    char *start, *end;
+    int i;
+
+#define OPT_ERR(fmt) { callback( '?', strmake( fmt, argv[1] )); continue; }
+
+    for (i = 1; i < argc; i++)
+    {
+        if (argv[i][0] != '-' || !argv[i][1])  /* not an option */
+        {
+            strarray_add( &ret, argv[i] );
+            continue;
+        }
+        if (!strcmp( argv[i], "--" ))
+        {
+            /* add remaining args */
+            while (++i < argc) strarray_add( &ret, argv[i] );
+            break;
+        }
+        start = argv[i] + 1 + (argv[i][1] == '-');
+
+        if (argv[i][1] == '-' || (long_only && (argv[i][2] || !strchr( short_opts, argv[i][1] ))))
+        {
+            /* handle long option */
+            const struct long_option *opt, *found = NULL;
+            int count = 0;
+
+            if (!(end = strchr( start, '=' ))) end = start + strlen(start);
+            for (opt = long_opts; opt && opt->name; opt++)
+            {
+                if (strncmp( opt->name, start, end - start )) continue;
+                if (!opt->name[end - start])  /* exact match */
+                {
+                    found = opt;
+                    count = 1;
+                    break;
+                }
+                if (!found)
+                {
+                    found = opt;
+                    count++;
+                }
+                else if (long_only || found->has_arg != opt->has_arg || found->val != opt->val)
+                {
+                    count++;
+                }
+            }
+
+            if (count > 1) OPT_ERR( "option '%s' is ambiguous" );
+
+            if (found)
+            {
+                if (*end)
+                {
+                    if (!found->has_arg) OPT_ERR( "argument not allowed in '%s'" );
+                    end++;  /* skip '=' */
+                }
+                else if (found->has_arg == 1)
+                {
+                    if (i == argc - 1) OPT_ERR( "option '%s' requires an argument" );
+                    end = argv[++i];
+                }
+                else end = NULL;
+
+                callback( found->val, end );
+                continue;
+            }
+            if (argv[i][1] == '-' || !long_only || !strchr( short_opts, argv[i][1] ))
+                OPT_ERR( "unrecognized option '%s'" );
+        }
+
+        /* handle short option */
+        for ( ; *start; start++)
+        {
+            if (!(flag = strchr( short_opts, *start ))) OPT_ERR( "invalid option '%s'" );
+            if (flag[1] == ':')
+            {
+                end = start + 1;
+                if (!*end) end = NULL;
+                if (flag[2] != ':' && !end)
+                {
+                    if (i == argc - 1) OPT_ERR( "option '%s' requires an argument" );
+                    end = argv[++i];
+                }
+                callback( *start, end );
+                break;
+            }
+            callback( *start, NULL );
+        }
+    }
+    return ret;
+#undef OPT_ERR
+}
+
+#endif /* __WINE_TOOLS_H */
diff --git a/mingw-w64-tools/widl/wine-import.sh b/mingw-w64-tools/widl/wine-import.sh
index 49d8854..1c3f0e0 100755
--- a/mingw-w64-tools/widl/wine-import.sh
+++ b/mingw-w64-tools/widl/wine-import.sh
@@ -23,29 +23,34 @@
 
 for f in ppl.l ppl.yy.c ppy.tab.c ppy.tab.h ppy.y wpp.c wpp_private.h
 do
-	if [ ! -f $WINE_DIR/libs/wpp/$f ] && [ -f $WINE_BUILD_DIR/libs/wpp/$f ]; then
-		cp $WINE_BUILD_DIR/libs/wpp/$f src/wpp
+	if [ ! -f $WINE_DIR/tools/wrc/$f ] && [ -f $WINE_BUILD_DIR/tools/wrc/$f ]; then
+		cp $WINE_BUILD_DIR/tools/wrc/$f src
 	else
-		cp $WINE_DIR/libs/wpp/$f src/wpp
+		cp $WINE_DIR/tools/wrc/$f src
 	fi
 done
 
-for f in basetsd.h guiddef.h excpt.h ndrtypes.h poppack.h pshpack1.h pshpack2.h pshpack4.h pshpack8.h threadpoolapiset.h \
+for f in tools.h
+do
+	if [ ! -f $WINE_DIR/tools/$f ] && [ -f $WINE_BUILD_DIR/tools/$f ]; then
+		cp $WINE_BUILD_DIR/tools/$f .
+	else
+		cp $WINE_DIR/tools/$f .
+	fi
+done
+
+for f in basetsd.h concurrencysal.h driverspecs.h guiddef.h excpt.h namespaceapi.h ndrtypes.h poppack.h pshpack1.h \
+        processthreadsapi.h pshpack2.h pshpack4.h pshpack8.h sal.h specstrings.h threadpoolapiset.h \
         timezoneapi.h winbase.h windef.h winerror.h winnls.h winnt.h winnt.rh synchapi.h winapifamily.h
 do
 	cp $WINE_DIR/include/$f include
 done
 
-for f in list.h wpp.h
+for f in list.h
 do
 	cp $WINE_DIR/include/wine/$f include/wine
 done
 
-for f in getopt.c
-do
-	cp $WINE_DIR/libs/port/$f src/port/
-done
-
 sed s/Wine/WIDL/ < $WINE_DIR/VERSION >VERSION
 for f in patches/*
 do