widl: Update to 7.7

Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-tools/widl/VERSION b/mingw-w64-tools/widl/VERSION
index 5c10359..8842174 100644
--- a/mingw-w64-tools/widl/VERSION
+++ b/mingw-w64-tools/widl/VERSION
@@ -1 +1 @@
-WIDL version 7.0
+WIDL version 7.7
diff --git a/mingw-w64-tools/widl/configure b/mingw-w64-tools/widl/configure
index 60601fd..0904f2a 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 7.0.
+# Generated by GNU Autoconf 2.71 for widl 7.7.
 #
 # 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='7.0'
-PACKAGE_STRING='widl 7.0'
+PACKAGE_VERSION='7.7'
+PACKAGE_STRING='widl 7.7'
 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 7.0 to adapt to many kinds of systems.
+\`configure' configures widl 7.7 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 7.0:";;
+     short | recursive ) echo "Configuration of widl 7.7:";;
    esac
   cat <<\_ACEOF
 
@@ -1493,7 +1493,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-widl configure 7.0
+widl configure 7.7
 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 7.0, which was
+It was created by widl $as_me 7.7, 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='7.0'
+ VERSION='7.7'
 
 
 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 7.0, which was
+This file was extended by widl $as_me 7.7, 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 7.0
+widl config.status 7.7
 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 a4774a2..6a6a394 100644
--- a/mingw-w64-tools/widl/include/basetsd.h
+++ b/mingw-w64-tools/widl/include/basetsd.h
@@ -108,7 +108,6 @@
 typedef /* [public] */ signed __int3264   LONG_PTR, *PLONG_PTR;
 typedef /* [public] */ unsigned __int3264 UINT_PTR, *PUINT_PTR;
 typedef /* [public] */ unsigned __int3264 ULONG_PTR, *PULONG_PTR;
-typedef ULONG_PTR                   DWORD_PTR, *PDWORD_PTR;
 
 #elif defined(_WIN64)
 
@@ -118,17 +117,20 @@
 typedef signed __int64   LONG_PTR, *PLONG_PTR;
 typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
 typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
-typedef ULONG_PTR        DWORD_PTR, *PDWORD_PTR;
 
 #else
 
 #define __int3264 __int32
 
+#ifdef WINE_NO_LONG_TYPES
 typedef long          INT_PTR, *PINT_PTR;
 typedef unsigned long UINT_PTR, *PUINT_PTR;
+#else
+typedef int           INT_PTR, *PINT_PTR;
+typedef unsigned int  UINT_PTR, *PUINT_PTR;
+#endif
 typedef long          LONG_PTR, *PLONG_PTR;
 typedef unsigned long ULONG_PTR, *PULONG_PTR;
-typedef ULONG_PTR     DWORD_PTR, *PDWORD_PTR;
 
 #endif
 
@@ -151,16 +153,54 @@
 
 #if !defined(__midl) && !defined(__WIDL__)
 
-static inline ULONG32 HandleToULong(const void *h)
+#if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
+
+static inline unsigned long HandleToULong(const void *h)
 {
-    return (ULONG32)(ULONG_PTR)h;
+    return (unsigned long)(ULONG_PTR)h;
 }
 
-static inline LONG32 HandleToLong(const void *h)
+static inline long HandleToLong(const void *h)
 {
-    return (LONG32)(LONG_PTR)h;
+    return (long)(LONG_PTR)h;
 }
 
+static inline unsigned long PtrToUlong(const void *p)
+{
+    return (unsigned long)(ULONG_PTR)p;
+}
+
+static inline long PtrToLong(const void *p)
+{
+    return (long)(LONG_PTR)p;
+}
+
+
+#else
+
+static inline unsigned HandleToULong(const void *h)
+{
+    return (unsigned)(ULONG_PTR)h;
+}
+
+static inline int HandleToLong(const void *h)
+{
+    return (int)(LONG_PTR)h;
+}
+
+static inline unsigned PtrToUlong(const void *p)
+{
+    return (unsigned)(ULONG_PTR)p;
+}
+
+static inline int PtrToLong(const void *p)
+{
+    return (int)(LONG_PTR)p;
+}
+
+
+#endif /* !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES) */
+
 static inline void *ULongToHandle(ULONG32 ul)
 {
     return (void *)(ULONG_PTR)ul;
@@ -171,16 +211,6 @@
     return (void *)(LONG_PTR)l;
 }
 
-static inline ULONG32 PtrToUlong(const void *p)
-{
-    return (ULONG32)(ULONG_PTR)p;
-}
-
-static inline LONG32 PtrToLong(const void *p)
-{
-    return (LONG32)(LONG_PTR)p;
-}
-
 static inline UINT32 PtrToUint(const void *p)
 {
     return (UINT32)(UINT_PTR)p;
@@ -262,7 +292,7 @@
 
 typedef LONG_PTR SSIZE_T, *PSSIZE_T;
 typedef ULONG_PTR SIZE_T, *PSIZE_T;
-
+typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
 typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
 
 #define MINLONGLONG             ((LONGLONG)~MAXLONGLONG)
diff --git a/mingw-w64-tools/widl/include/guiddef.h b/mingw-w64-tools/widl/include/guiddef.h
index d09ea98..912fcea 100644
--- a/mingw-w64-tools/widl/include/guiddef.h
+++ b/mingw-w64-tools/widl/include/guiddef.h
@@ -30,7 +30,7 @@
 #else
 typedef struct _GUID
 {
-#ifdef WINE_USE_LONG
+#ifndef __LP64__
     unsigned long  Data1;
 #else
     unsigned int   Data1;
diff --git a/mingw-w64-tools/widl/include/winbase.h b/mingw-w64-tools/widl/include/winbase.h
index 0a0bfde..a0c62d7 100644
--- a/mingw-w64-tools/widl/include/winbase.h
+++ b/mingw-w64-tools/widl/include/winbase.h
@@ -1901,6 +1901,7 @@
 WINBASEAPI BOOL        WINAPI CreateProcessInternalW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION,HANDLE*);
 #define                       CreateProcessInternal WINELIB_NAME_AW(CreateProcessInternal)
 WINADVAPI  BOOL        WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+WINADVAPI  BOOL        WINAPI CreateProcessWithTokenW(HANDLE,DWORD,LPCWSTR,LPWSTR,DWORD,void *,LPCWSTR,STARTUPINFOW *,PROCESS_INFORMATION *);
 WINBASEAPI HANDLE      WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
 WINBASEAPI HANDLE      WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD);
 WINADVAPI  BOOL        WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE);
@@ -2405,6 +2406,7 @@
 WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER);
 WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER);
 WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+WINBASEAPI BOOL        WINAPI IsApiSetImplemented(LPCSTR);
 WINBASEAPI BOOL        WINAPI IsBadCodePtr(FARPROC);
 WINBASEAPI BOOL        WINAPI IsBadHugeReadPtr(LPCVOID,UINT_PTR);
 WINBASEAPI BOOL        WINAPI IsBadHugeWritePtr(LPVOID,UINT_PTR);
diff --git a/mingw-w64-tools/widl/include/windef.h b/mingw-w64-tools/widl/include/windef.h
index f352706..cb7eb11 100644
--- a/mingw-w64-tools/widl/include/windef.h
+++ b/mingw-w64-tools/widl/include/windef.h
@@ -237,7 +237,7 @@
 #define BASETYPES
 typedef unsigned char UCHAR, *PUCHAR;
 typedef unsigned short USHORT, *PUSHORT;
-#ifdef WINE_USE_LONG
+#if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
 typedef unsigned long ULONG, *PULONG;
 #else
 typedef unsigned int ULONG, *PULONG;
@@ -253,7 +253,7 @@
 typedef unsigned int    UINT,       *PUINT;
 typedef float           FLOAT,      *PFLOAT;
 typedef char                        *PSZ;
-#ifdef WINE_USE_LONG
+#if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
 typedef long                                   *LPLONG;
 typedef unsigned long   DWORD,      *PDWORD,   *LPDWORD;
 #else
diff --git a/mingw-w64-tools/widl/include/winerror.h b/mingw-w64-tools/widl/include/winerror.h
index f412989..d51d564 100644
--- a/mingw-w64-tools/widl/include/winerror.h
+++ b/mingw-w64-tools/widl/include/winerror.h
@@ -89,11 +89,11 @@
 #define __HRESULT_FROM_WIN32(x)   ((HRESULT)(x) > 0 ? ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)(x) )
 #ifndef _HRESULT_DEFINED
 #define _HRESULT_DEFINED
-# ifdef _MSC_VER
-typedef long            HRESULT;
-# else
-typedef int             HRESULT;
-# endif
+#if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
+typedef long HRESULT;
+#else
+typedef int HRESULT;
+#endif
 #endif
 static inline HRESULT HRESULT_FROM_WIN32(unsigned int x)
 {
@@ -2578,6 +2578,25 @@
 #define E_CHANGED_STATE                                    _HRESULT_TYPEDEF_(0x8000000C)
 #define E_ILLEGAL_STATE_CHANGE                             _HRESULT_TYPEDEF_(0x8000000D)
 #define E_ILLEGAL_METHOD_CALL                              _HRESULT_TYPEDEF_(0x8000000E)
+#define RO_E_METADATA_NAME_NOT_FOUND                       _HRESULT_TYPEDEF_(0x8000000F)
+#define RO_E_METADATA_NAME_IS_NAMESPACE                    _HRESULT_TYPEDEF_(0x80000010)
+#define RO_E_METADATA_INVALID_TYPE_FORMAT                  _HRESULT_TYPEDEF_(0x80000011)
+#define RO_E_INVALID_METADATA_FILE                         _HRESULT_TYPEDEF_(0x80000012)
+#define RO_E_CLOSED                                        _HRESULT_TYPEDEF_(0x80000013)
+#define RO_E_EXCLUSIVE_WRITE                               _HRESULT_TYPEDEF_(0x80000014)
+#define RO_E_CHANGE_NOTIFICATION_IN_PROGRESS               _HRESULT_TYPEDEF_(0x80000015)
+#define RO_E_ERROR_STRING_NOT_FOUND                        _HRESULT_TYPEDEF_(0x80000016)
+#define E_STRING_NOT_NULL_TERMINATED                       _HRESULT_TYPEDEF_(0x80000017)
+#define E_ILLEGAL_DELEGATE_ASSIGNMENT                      _HRESULT_TYPEDEF_(0x80000018)
+#define E_ASYNC_OPERATION_NOT_STARTED                      _HRESULT_TYPEDEF_(0x80000019)
+#define E_APPLICATION_EXITING                              _HRESULT_TYPEDEF_(0x8000001A)
+#define E_APPLICATION_VIEW_EXITING                         _HRESULT_TYPEDEF_(0x8000001B)
+#define RO_E_MUST_BE_AGILE                                 _HRESULT_TYPEDEF_(0x8000001C)
+#define RO_E_UNSUPPORTED_FROM_MTA                          _HRESULT_TYPEDEF_(0x8000001D)
+#define RO_E_COMMITTED                                     _HRESULT_TYPEDEF_(0x8000001E)
+#define RO_E_BLOCKED_CROSS_ASTA_CALL                       _HRESULT_TYPEDEF_(0x8000001F)
+#define RO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER             _HRESULT_TYPEDEF_(0x80000020)
+#define RO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER  _HRESULT_TYPEDEF_(0x80000021)
 
 #define E_NOTIMPL                                          _HRESULT_TYPEDEF_(0x80004001)
 #define E_NOINTERFACE                                      _HRESULT_TYPEDEF_(0x80004002)
diff --git a/mingw-w64-tools/widl/include/winnls.h b/mingw-w64-tools/widl/include/winnls.h
index 4b1323c..e095cbc 100644
--- a/mingw-w64-tools/widl/include/winnls.h
+++ b/mingw-w64-tools/widl/include/winnls.h
@@ -316,6 +316,9 @@
 #define LOCALE_SSHORTTIME           0x0079
 #define LOCALE_SOPENTYPELANGUAGETAG 0X007A
 #define LOCALE_SSORTLOCALE          0x007B
+#define LOCALE_SRELATIVELONGDATE    0x007C
+#define LOCALE_SSHORTESTAM          0x007E
+#define LOCALE_SSHORTESTPM          0x007F
 
 #define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012
 #define LOCALE_IPAPERSIZE             0x100A
@@ -538,6 +541,9 @@
 #define CAL_SSHORTESTDAYNAME7  0x37
 #define CAL_SMONTHDAY          0x38
 #define CAL_SABBREVERASTRING   0x39
+#define CAL_SRELATIVELONGDATE  0x3a
+#define CAL_SENGLISHERANAME    0x3b
+#define CAL_SENGLISHABBREVERANAME 0x3c
 
 /* Calendar types */
 #define CAL_GREGORIAN              1
@@ -902,6 +908,7 @@
 WINBASEAPI BOOL        WINAPI GetCPInfoExW(UINT,DWORD,LPCPINFOEXW);
 #define                       GetCPInfoEx WINELIB_NAME_AW(GetCPInfoEx)
 WINBASEAPI INT         WINAPI GetCalendarInfoA(LCID,DWORD,DWORD,LPSTR,INT,LPDWORD);
+WINBASEAPI INT         WINAPI GetCalendarInfoEx(const WCHAR*,CALID,const WCHAR*,CALTYPE,WCHAR*,INT,DWORD*);
 WINBASEAPI INT         WINAPI GetCalendarInfoW(LCID,DWORD,DWORD,LPWSTR,INT,LPDWORD);
 #define                       GetCalendarInfo WINELIB_NAME_AW(GetCalendarInfo)
 WINBASEAPI INT         WINAPI GetCurrencyFormatA(LCID,DWORD,LPCSTR,const CURRENCYFMTA*,LPSTR,INT);
diff --git a/mingw-w64-tools/widl/include/winnt.h b/mingw-w64-tools/widl/include/winnt.h
index 9296a3d..e853ddb 100644
--- a/mingw-w64-tools/widl/include/winnt.h
+++ b/mingw-w64-tools/widl/include/winnt.h
@@ -467,7 +467,7 @@
 typedef BYTE            BOOLEAN,    *PBOOLEAN;
 typedef char            CHAR,       *PCHAR;
 typedef short           SHORT,      *PSHORT;
-#ifdef WINE_USE_LONG
+#if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
 typedef long            LONG,       *PLONG;
 #else
 typedef int             LONG,       *PLONG;
@@ -604,7 +604,7 @@
 
 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
 #ifndef __MSABI_LONG
-# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+#if !defined(__LP64__) && !defined(WINE_NO_LONG_TYPES)
 #  define __MSABI_LONG(x)         x ## l
 # else
 #  define __MSABI_LONG(x)         x
@@ -5861,6 +5861,7 @@
 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES                9
 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS          10
 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO            11
+#define ACTIVATION_CONTEXT_SECTION_WINRT_ACTIVATABLE_CLASSES     12
 
 typedef enum _JOBOBJECTINFOCLASS
 {
@@ -6276,6 +6277,7 @@
 #define InterlockedDecrement16 _InterlockedDecrement16
 #define InterlockedExchange _InterlockedExchange
 #define InterlockedExchangeAdd _InterlockedExchangeAdd
+#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
 #define InterlockedExchangePointer _InterlockedExchangePointer
 #define InterlockedIncrement _InterlockedIncrement
 #define InterlockedIncrement16 _InterlockedIncrement16
@@ -6349,8 +6351,10 @@
 
 #elif defined(__x86_64__)
 
+#pragma intrinsic(_InterlockedExchangeAdd64)
 #pragma intrinsic(__faststorefence)
 
+long long _InterlockedExchangeAdd64(long long volatile *, long long);
 void __faststorefence(void);
 
 static FORCEINLINE void MemoryBarrier(void)
@@ -6367,6 +6371,10 @@
 
 #elif defined(__aarch64__)
 
+#pragma intrinsic(_InterlockedExchangeAdd64)
+
+long long _InterlockedExchangeAdd64(long long volatile *, long long);
+
 static FORCEINLINE void MemoryBarrier(void)
 {
     __dmb(_ARM64_BARRIER_SY);
@@ -6432,6 +6440,11 @@
     return __sync_fetch_and_add( dest, incr );
 }
 
+static FORCEINLINE LONGLONG WINAPI InterlockedExchangeAdd64( LONGLONG volatile *dest, LONGLONG incr )
+{
+    return __sync_fetch_and_add( dest, incr );
+}
+
 static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
 {
     return __sync_add_and_fetch( dest, 1 );
@@ -6492,10 +6505,6 @@
 
 #pragma intrinsic(_InterlockedCompareExchange128)
 unsigned char _InterlockedCompareExchange128(volatile __int64 *, __int64, __int64, __int64 *);
-static FORCEINLINE unsigned char WINAPI InterlockedCompareExchange128( volatile __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare )
-{
-    return _InterlockedCompareExchange128( dest, xchg_high, xchg_low, compare );
-}
 
 #else
 
@@ -6515,7 +6524,14 @@
 }
 
 #endif
-#endif
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)(a), (b))
+
+#else /* _WIN64 */
+
+#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)(a), (b))
+
+#endif /* _WIN64 */
 
 static FORCEINLINE void YieldProcessor(void)
 {
diff --git a/mingw-w64-tools/widl/src/hash.c b/mingw-w64-tools/widl/src/hash.c
index d65a251..a50c090 100644
--- a/mingw-w64-tools/widl/src/hash.c
+++ b/mingw-w64-tools/widl/src/hash.c
@@ -515,59 +515,6 @@
   switch (PRIMARYLANGID(LANGIDFROMLCID(lcid)))
   {
   default:
-    fprintf(stderr, "Unknown lcid %x, treating as latin-based, please report\n", lcid);
-    /* .. Fall Through .. */
-  case LANG_AFRIKAANS:  case LANG_ALBANIAN:   case LANG_ARMENIAN:
-  case LANG_ASSAMESE:   case LANG_AZERI:      case LANG_BASQUE:
-  case LANG_BELARUSIAN: case LANG_BENGALI:    case LANG_BULGARIAN:
-  case LANG_CATALAN:    case LANG_DANISH:     case LANG_DIVEHI:
-  case LANG_DUTCH:      case LANG_ENGLISH:    case LANG_ESTONIAN:
-  case LANG_FAEROESE:   case LANG_FINNISH:    case LANG_FRENCH:
-  case LANG_GALICIAN:   case LANG_GEORGIAN:   case LANG_GERMAN:
-  case LANG_GUJARATI:   case LANG_HINDI:      case LANG_INDONESIAN:
-  case LANG_ITALIAN:    case LANG_KANNADA:    case LANG_KASHMIRI:
-  case LANG_KAZAK:      case LANG_KONKANI:    case LANG_KYRGYZ:
-  case LANG_LATVIAN:    case LANG_LITHUANIAN: case LANG_MACEDONIAN:
-  case LANG_MALAY:      case LANG_MALAYALAM:  case LANG_MANIPURI:
-  case LANG_MARATHI:    case LANG_MONGOLIAN:  case LANG_NEPALI:
-  case LANG_ORIYA:      case LANG_PORTUGUESE: case LANG_PUNJABI:
-  case LANG_ROMANIAN:   case LANG_SANSKRIT:   case LANG_SERBIAN:
-  case LANG_SINDHI:     case LANG_SLOVENIAN:  case LANG_SWAHILI:
-  case LANG_SWEDISH:    case LANG_SYRIAC:     case LANG_TAMIL:
-  case LANG_TATAR:      case LANG_TELUGU:     case LANG_THAI:
-  case LANG_UKRAINIAN:  case LANG_URDU:       case LANG_UZBEK:
-  case LANG_VIETNAMESE: case LANG_MALTESE:    case LANG_IRISH:
-  case LANG_SAMI:       case LANG_UPPER_SORBIAN: case LANG_TSWANA:
-  case LANG_XHOSA:      case LANG_ZULU:       case LANG_WELSH:
-  case LANG_BRETON:     case LANG_SCOTTISH_GAELIC: case LANG_NEUTRAL:
-/* some languages not in all windows versions or ReactOS */
-#ifdef LANG_MANX_GAELIC
-  case LANG_MANX_GAELIC:
-#endif
-#ifdef LANG_TAJIK
-  case LANG_TAJIK:
-#endif
-#ifdef LANG_ROMANSH
-  case LANG_ROMANSH:
-#endif
-#ifdef LANG_SUTU
-  case LANG_SUTU:
-#endif
-#ifdef LANG_TSONGA
-  case LANG_TSONGA:
-#endif
-#ifdef LANG_VENDA
-  case LANG_VENDA:
-#endif
-#ifdef LANG_ESPERANTO
-  case LANG_ESPERANTO:
-#endif
-#ifdef LANG_WALON
-  case LANG_WALON:
-#endif
-#ifdef LANG_CORNISH
-  case LANG_CORNISH:
-#endif
     nOffset = 16;
     pnLookup = Lookup_16;
     break;
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c
index f6e0c50..484fa99 100644
--- a/mingw-w64-tools/widl/src/parser.tab.c
+++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -148,8 +148,8 @@
 
 static var_t *reg_const(var_t *var);
 
-static void push_namespace(const char *name);
-static void pop_namespace(const char *name);
+static void push_namespaces(str_list_t *names);
+static void pop_namespaces(str_list_t *names);
 static void push_parameters_namespace(const char *name);
 static void pop_parameters_namespace(const char *name);
 
@@ -1220,16 +1220,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3873
+#define YYLAST   3920
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  235
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  145
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  492
+#define YYNRULES  493
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  901
+#define YYNSTATES  903
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   465
@@ -1333,22 +1333,22 @@
      922,   923,   924,   925,   926,   927,   928,   931,   932,   935,
      936,   937,   938,   939,   940,   941,   942,   943,   947,   948,
      952,   953,   956,   961,   962,   963,   964,   965,   969,   970,
-     974,   977,   981,   984,   988,   991,   995,   998,   999,  1003,
-    1004,  1007,  1010,  1013,  1014,  1017,  1018,  1022,  1024,  1028,
-    1029,  1030,  1033,  1037,  1038,  1042,  1043,  1043,  1043,  1047,
-    1052,  1053,  1051,  1060,  1061,  1062,  1063,  1065,  1066,  1069,
-    1069,  1082,  1086,  1087,  1091,  1094,  1097,  1102,  1103,  1104,
-    1108,  1112,  1115,  1116,  1119,  1120,  1124,  1126,  1130,  1131,
-    1135,  1136,  1137,  1141,  1143,  1144,  1148,  1149,  1150,  1151,
-    1156,  1158,  1159,  1164,  1166,  1170,  1171,  1176,  1177,  1178,
-    1179,  1183,  1191,  1193,  1194,  1199,  1201,  1205,  1206,  1213,
-    1214,  1215,  1216,  1217,  1221,  1228,  1229,  1232,  1233,  1236,
-    1243,  1244,  1249,  1250,  1254,  1255,  1256,  1257,  1258,  1259,
-    1263,  1264,  1265,  1268,  1272,  1273,  1274,  1275,  1276,  1277,
-    1278,  1279,  1280,  1281,  1285,  1286,  1287,  1290,  1297,  1299,
-    1305,  1306,  1307,  1311,  1312,  1316,  1317,  1321,  1328,  1337,
-    1338,  1342,  1343,  1347,  1349,  1350,  1351,  1355,  1356,  1361,
-    1362,  1363,  1364
+     974,   977,   981,   984,   988,   991,   995,   996,   999,  1000,
+    1004,  1005,  1008,  1011,  1014,  1015,  1018,  1019,  1023,  1025,
+    1029,  1030,  1031,  1034,  1038,  1039,  1043,  1044,  1044,  1044,
+    1048,  1053,  1054,  1052,  1061,  1062,  1063,  1064,  1066,  1067,
+    1070,  1070,  1083,  1087,  1088,  1092,  1095,  1098,  1103,  1104,
+    1105,  1109,  1113,  1116,  1117,  1120,  1121,  1125,  1127,  1131,
+    1132,  1136,  1137,  1138,  1142,  1144,  1145,  1149,  1150,  1151,
+    1152,  1157,  1159,  1160,  1165,  1167,  1171,  1172,  1177,  1178,
+    1179,  1180,  1184,  1192,  1194,  1195,  1200,  1202,  1206,  1207,
+    1214,  1215,  1216,  1217,  1218,  1222,  1229,  1230,  1233,  1234,
+    1237,  1244,  1245,  1250,  1251,  1255,  1256,  1257,  1258,  1259,
+    1260,  1264,  1265,  1266,  1269,  1273,  1274,  1275,  1276,  1277,
+    1278,  1279,  1280,  1281,  1282,  1286,  1287,  1288,  1291,  1298,
+    1300,  1306,  1307,  1308,  1312,  1313,  1317,  1318,  1322,  1329,
+    1338,  1339,  1343,  1344,  1348,  1350,  1351,  1352,  1356,  1357,
+    1362,  1363,  1364,  1365
 };
 #endif
 
@@ -1451,12 +1451,12 @@
 }
 #endif
 
-#define YYPACT_NINF (-646)
+#define YYPACT_NINF (-653)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-480)
+#define YYTABLE_NINF (-481)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1465,97 +1465,97 @@
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -646,   119,  1924,  -646,   -93,  -646,   -51,   -33,   307,  -646,
-    -646,  -646,   307,  -646,   -47,   -37,   307,  -646,   308,  -646,
-    -646,  -646,  -646,    96,   190,  -646,  -646,  -646,  -646,  -646,
-     307,    96,   210,   -12,  -646,   307,    18,    96,   385,  -646,
-    -646,   338,   392,   385,  -646,  -646,  3673,  -646,  -646,  -646,
-    -646,    33,  -646,  -646,  -646,  -646,  -646,     0,  3007,   104,
-     117,  -646,  -646,  -646,   396,    69,  -646,   120,  -646,   154,
-    -646,   165,  -646,    93,   169,   206,   178,   202,  -646,  -646,
-    -646,   296,   296,   296,   118,  3263,   204,  -646,   296,   205,
-     207,  -646,    65,  -646,   -33,   244,  -646,  -646,  -646,  -646,
-     357,  -646,  -646,    12,   143,  -646,  -646,  -646,   208,   168,
-    -646,  -646,    86,  -646,  3263,  -646,  -646,   193,   189,   -88,
-     -81,  -646,   158,  -646,   203,  -646,  -646,   209,  -646,  -646,
-    -646,   212,   213,  -646,  -646,  -646,  -646,  -646,   214,   215,
-    -646,   220,  -646,  -646,  -646,  -646,   224,  -646,  -646,  -646,
-     225,  -646,  -646,  -646,   227,   230,  -646,  -646,   234,  -646,
-    -646,  -646,  -646,  -646,   235,   238,   241,   242,   243,  -646,
-     245,  -646,  -646,   246,  -646,   247,  -646,  -646,   249,   252,
-    -646,  -646,   253,  -646,  -646,  -646,  -646,  -646,  -646,  -646,
-    -646,  -646,  -646,  -646,   254,  -646,  -646,   256,  -646,   257,
-     258,  -646,  -646,  -646,  -646,  -646,  -646,   259,  -646,  -646,
-     260,  -646,  -646,  -646,   261,  -646,   262,  -646,  -646,   263,
-     268,   269,   270,  -646,  -646,  -646,   271,   272,  -646,  -646,
-     273,   275,   276,   -63,  -646,  -646,  -646,  2071,  1122,  3263,
-     307,   211,   279,   399,   307,   405,   415,   280,   282,   283,
-     284,   286,  -646,   118,   289,   293,  -646,   216,   228,  3366,
-    -646,  -646,  -646,  -646,  -646,   294,  -646,  -646,  -646,  -646,
-    -646,  -646,  -646,  -646,  -646,  -646,  -646,  -646,   118,   118,
-    -646,  -646,   278,   -16,  -646,  -646,  -646,   296,  -646,  -646,
-    -646,   291,  -646,  -646,  -646,   -58,  -646,  -646,   520,   302,
-     -49,   113,  -646,  -646,   318,   331,   309,  -646,   313,  -646,
-    3234,   532,   151,   307,   928,  3234,   540,   151,   928,   542,
-     546,   928,  3234,   928,   549,   550,   928,   551,   928,   928,
-    2577,   928,   928,    44,   555,   557,   -45,   558,   928,  3263,
-     928,  3234,   928,  3263,   134,  3263,  3263,   151,   223,   560,
-    3263,  3673,   345,  -646,   344,   353,  -646,  -646,  -646,  -646,
-     358,  -646,   359,  -646,   360,  -646,   361,   363,   364,  -646,
-    -646,  -646,   178,   307,  -646,  3234,  -646,  -646,   365,  -646,
-     365,   -74,  -646,  -646,  -646,   366,   386,  -646,  -646,  -646,
-     396,    80,   380,  -646,   -91,  -646,     2,   115,   367,  -646,
-     928,   807,  2577,  -646,  -646,    55,    65,  -646,   369,  -646,
-     423,  -646,   307,   371,   397,   370,  -646,   307,   599,   599,
-    -646,   129,   211,   130,  -646,   373,   401,   375,  -646,  -646,
-     376,   377,  -646,  -646,  -646,  -646,  -646,  -646,  -646,  -646,
-    -646,   381,  -646,   928,   928,   928,   928,   928,   928,   877,
-    2790,  -104,  -646,   388,   408,   398,   390,   412,  2790,   393,
-     394,  -646,   -99,   400,   402,   407,   410,   411,   413,   417,
-     418,  1668,   420,  3234,    88,   422,   -95,  -646,  2790,  -646,
-    -646,  -646,   424,   425,   427,   428,   429,   419,   430,   -76,
-     432,   426,  2391,   433,  -646,  -646,  -646,  -646,  -646,  -646,
-     434,   435,   437,   439,   403,  -646,   440,   441,   442,  -646,
-    3673,  -646,   629,  -646,  -646,  -646,  -646,  -646,  -646,  -646,
-     -57,   118,  1551,   131,   144,   178,   423,   486,  -646,  -646,
-    -646,  3366,  -646,  1414,   469,   -50,   449,  -646,  -646,  -646,
-    -646,   866,  -646,  2687,   446,   474,  -646,  -646,  -646,  -646,
-    -646,  -646,   -66,  -646,  -646,   495,   470,  -646,  -646,   161,
-     928,  -646,  -646,   477,  -646,    53,    62,  -646,  3234,  -646,
-    3234,   451,  -646,   456,  -646,   458,  -646,  3131,  -646,  -646,
-    -646,  3411,    73,    73,    73,    73,    73,    73,  -646,  2467,
-     233,  3514,   296,   928,   928,   685,   928,   928,   928,   928,
-     928,   928,   928,   928,   928,   928,   928,   928,   928,   928,
-     928,   928,   928,   686,   928,   928,  -646,  -646,   540,   688,
-    -646,   928,  -646,  -646,   682,  -646,  -646,  -646,  -646,  -646,
-    -646,  -646,  -646,  -646,  -646,  -646,    88,  -646,  2203,  -646,
-      88,  -646,  -646,  -646,    87,  -646,   928,  -646,  -646,  -646,
-    -646,  -646,  -646,   928,  -646,  -646,  -646,  3234,  -646,  -646,
-    -646,  -646,  -646,  -646,   690,  -646,  -646,  -646,  -646,   -39,
-     465,  -646,  -646,  2577,  -646,   497,   178,  -646,   518,  3234,
-     178,    59,  -646,   178,  -646,    69,  -646,   423,   476,  -646,
-    -646,  -646,   502,   483,  1778,   482,  -646,  -646,  -646,  2474,
-      55,  -646,   487,   484,   495,  3366,  -646,  -646,   307,   503,
-    -646,  -646,  -646,    88,   488,   118,   160,   307,  -646,  -646,
-    -646,  -646,   233,  -646,  -646,  2350,  -646,   233,  -646,   485,
-      94,   296,  -646,   198,   198,  -646,  1186,  1186,   137,   137,
-    2117,  2809,  2762,  1117,  2288,  2816,   137,   137,    39,    39,
-      73,    73,    73,  -646,  2709,  -646,  -646,   489,  -646,  -646,
-      52,  -646,   491,    88,   492,  -646,  2577,  -646,  -646,   493,
-    -646,  -646,   423,  -646,   178,  1268,   307,   494,   118,  -646,
-    -646,   307,   423,   490,   499,  -646,    69,  -646,   514,  -646,
-    -646,  -646,  -646,  3234,   500,  -646,  -646,  -646,  -646,  -646,
-     716,  -646,  -646,   -35,  -646,  -646,   522,  -646,   -94,  -646,
-    -646,   501,  -646,   504,    51,  -646,   505,    88,   506,  -646,
-     928,  2577,  -646,  -646,   928,  -646,  -646,  -646,    52,  -646,
-    -646,  -646,   507,  -646,   521,  -646,  -646,   -34,   178,  -646,
-    -646,  -646,   396,  -646,  -646,   423,  1675,  -646,   523,   524,
-     928,  -646,    88,  -646,  -646,  -646,  -646,    52,  -646,  -646,
-    -646,    73,   516,  2790,  -646,  -646,  3366,   519,  -646,  -646,
-      69,  -646,   178,  -646,  -646,  -646,  -646,    54,  -646,  -646,
-       4,  2577,  -646,   928,   526,  -646,  -646,   527,   517,   528,
-     200,  -646,  -646,   200,  -646,  -646,   529,   178,  -646,  -646,
-    -646
+    -653,   123,  1972,  -653,   -70,  -653,   -79,   -40,   342,  -653,
+    -653,  -653,   342,  -653,   -38,   -53,   342,  -653,   375,  -653,
+    -653,  -653,  -653,    69,   212,  -653,  -653,  -653,  -653,  -653,
+     342,    69,   221,    25,  -653,   342,    54,    69,   498,  -653,
+    -653,   376,   404,   498,  -653,  -653,  3720,  -653,  -653,  -653,
+    -653,     1,  -653,  -653,  -653,  -653,  -653,    57,  3054,    63,
+      74,  -653,  -653,  -653,   415,    97,  -653,    93,  -653,    99,
+    -653,   119,  -653,    33,   125,   159,   134,   135,  -653,  -653,
+    -653,    17,    17,    17,   214,  3310,   143,  -653,    17,   170,
+     171,  -653,    73,  -653,   -40,   145,  -653,  -653,  -653,  -653,
+     325,  -653,  -653,   -19,   156,  -653,  -653,  -653,   174,   194,
+    -653,  -653,    83,  -653,  3310,  -653,  -653,    85,   180,   -89,
+    -100,  -653,   179,  -653,   182,  -653,  -653,   185,  -653,  -653,
+    -653,   189,   197,  -653,  -653,  -653,  -653,  -653,   202,   203,
+    -653,   207,  -653,  -653,  -653,  -653,   216,  -653,  -653,  -653,
+     220,  -653,  -653,  -653,   224,   225,  -653,  -653,   228,  -653,
+    -653,  -653,  -653,  -653,   229,   231,   237,   239,   241,  -653,
+     243,  -653,  -653,   246,  -653,   248,  -653,  -653,   249,   252,
+    -653,  -653,   253,  -653,  -653,  -653,  -653,  -653,  -653,  -653,
+    -653,  -653,  -653,  -653,   254,  -653,  -653,   255,  -653,   257,
+     274,  -653,  -653,  -653,  -653,  -653,  -653,   275,  -653,  -653,
+     276,  -653,  -653,  -653,   279,  -653,   281,  -653,  -653,   283,
+     284,   286,   287,  -653,  -653,  -653,   288,   289,  -653,  -653,
+     292,   294,   295,   -93,  -653,  -653,  -653,  2119,  1170,  3310,
+     342,   227,   244,   419,   342,   423,   435,   267,   301,   302,
+     306,   307,  -653,   214,   316,   318,  -653,   327,   347,  3413,
+    -653,  -653,  -653,   551,  -653,  -653,   331,  -653,  -653,  -653,
+    -653,  -653,  -653,  -653,  -653,  -653,  -653,  -653,  -653,   214,
+     214,  -653,  -653,   328,  -107,  -653,  -653,  -653,    17,  -653,
+    -653,  -653,   334,  -653,  -653,  -653,   -49,  -653,  -653,   563,
+     336,   -59,    60,  -653,  -653,   365,   368,   345,  -653,   348,
+    -653,  3281,   573,   105,   342,   967,  3281,   579,   105,   967,
+     578,   580,   967,  3281,   967,   581,   582,   967,   584,   967,
+     967,  2625,   967,   967,    49,   585,   588,   -50,   592,   967,
+    3310,   967,  3281,   967,  3310,   298,  3310,  3310,   105,   265,
+     597,  3310,  3720,   380,  -653,   362,   381,  -653,  -653,  -653,
+    -653,   386,  -653,   388,  -653,   389,  -653,    95,   391,   393,
+    -653,  -653,  -653,   134,   342,  -653,  3281,  -653,  -653,   394,
+    -653,   394,   -88,  -653,  -653,  -653,   395,   417,  -653,  -653,
+    -653,   415,   128,   411,  -653,   -91,  -653,  -653,    -5,    52,
+     396,  -653,   967,   142,  2625,  -653,  -653,    51,    73,  -653,
+     401,  -653,   442,  -653,   342,   403,   429,   405,  -653,   342,
+     634,   634,  -653,   115,   227,   138,  -653,   408,   436,   410,
+    -653,  -653,   412,   413,  -653,  -653,  -653,  -653,  -653,  -653,
+    -653,  -653,  -653,   416,  -653,   967,   967,   967,   967,   967,
+     967,   881,  2838,   -97,  -653,   421,   444,   426,   424,   450,
+    2838,   425,   427,  -653,   -95,   428,   430,   431,   434,   438,
+     441,   443,   446,  1716,   447,  3281,   157,   448,   -72,  -653,
+    2838,  -653,  -653,  -653,   449,   451,   452,   453,   454,   456,
+     457,   -37,   460,   462,  2439,   463,  -653,  -653,  -653,  -653,
+    -653,  -653,   465,   468,   469,   472,   433,  -653,   473,   474,
+     475,  -653,  3720,  -653,   660,  -653,  -653,  -653,  -653,  -653,
+    -653,  -653,   -46,   214,  1599,   160,   161,   134,   442,   515,
+    -653,  -653,  -653,  3413,  -653,  1462,   481,   -63,   483,  -653,
+    -653,  -653,  -653,   901,  -653,  2735,   477,   508,  -653,  -653,
+    -653,  -653,  -653,  -653,   -21,  -653,  -653,   497,   503,  -653,
+    -653,   167,   967,  -653,  -653,   511,  -653,    42,    44,  -653,
+    3281,  -653,  3281,   485,  -653,   490,  -653,   491,  -653,  3178,
+    -653,  -653,  -653,  3458,    43,    43,    43,    43,    43,    43,
+    -653,  2515,   282,  3561,    17,   967,   967,   718,   967,   967,
+     967,   967,   967,   967,   967,   967,   967,   967,   967,   967,
+     967,   967,   967,   967,   967,   719,   967,   967,  -653,  -653,
+     579,   717,  -653,   967,  -653,  -653,   715,  -653,  -653,  -653,
+    -653,  -653,  -653,  -653,  -653,  -653,  -653,  -653,   157,  -653,
+    2251,  -653,   157,  -653,  -653,  -653,   -73,  -653,   967,  -653,
+    -653,  -653,  -653,  -653,  -653,   967,  -653,  -653,  -653,  3281,
+    -653,  -653,  -653,  -653,  -653,  -653,   720,  -653,  -653,  -653,
+    -653,   -47,   494,  -653,  -653,  2625,  -653,   522,   134,  -653,
+     543,  3281,   134,    31,  -653,   134,  -653,    97,  -653,   442,
+     500,  -653,  -653,  -653,   523,   504,  1826,   501,  -653,  -653,
+    -653,  2522,    51,  -653,   507,   506,   497,  3413,  -653,  -653,
+     342,   525,  -653,  -653,  -653,   157,   512,   214,   168,   342,
+    -653,  -653,  -653,  -653,   282,  -653,  -653,  2398,  -653,   282,
+    -653,   502,   -14,    17,  -653,   278,   278,  -653,   583,   583,
+     250,   250,   728,  2164,  2810,  1089,  2336,  2854,   250,   250,
+     215,   215,    43,    43,    43,  -653,  2757,  -653,  -653,   519,
+    -653,  -653,    80,  -653,   521,   157,   524,  -653,  2625,  -653,
+    -653,   527,  -653,  -653,   442,  -653,   134,  1316,   342,   529,
+     214,  -653,  -653,   342,   442,   526,   535,  -653,    97,  -653,
+     534,  -653,  -653,  -653,  -653,  3281,   536,  -653,  -653,  -653,
+    -653,  -653,   753,  -653,  -653,   -43,  -653,  -653,   559,  -653,
+    -101,  -653,  -653,   538,  -653,   537,   144,  -653,   540,   157,
+     546,  -653,   967,  2625,  -653,  -653,   967,  -653,  -653,  -653,
+      80,  -653,  -653,  -653,   547,  -653,   557,  -653,  -653,   -31,
+     134,  -653,  -653,  -653,   415,  -653,  -653,   442,  1723,  -653,
+     542,   552,   967,  -653,   157,  -653,  -653,  -653,  -653,    80,
+    -653,  -653,  -653,    43,   549,  2838,  -653,  -653,  3413,   544,
+    -653,  -653,    97,  -653,   134,  -653,  -653,  -653,  -653,    10,
+    -653,  -653,   -15,  2625,  -653,   967,   575,  -653,  -653,   556,
+     553,   586,   222,  -653,  -653,   222,  -653,  -653,   558,   134,
+    -653,  -653,  -653
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1563,18 +1563,18 @@
    means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-      11,     0,    88,     1,   303,    55,   463,   473,     0,   314,
-     306,   325,     0,   391,     0,     0,     0,   313,   301,   315,
-     387,   312,   316,   317,     0,   390,   319,   326,   327,   324,
-       0,   317,     0,     0,   389,     0,     0,   317,     0,   321,
-     388,   301,   301,   311,   454,   307,   105,     2,    27,    26,
-      56,     0,    50,    28,    53,    28,    25,     0,    89,   456,
-       0,   330,   455,   308,     0,     0,   466,     0,    19,     0,
+      11,     0,    88,     1,   303,    55,   464,   474,     0,   314,
+     306,   325,     0,   392,     0,     0,     0,   313,   301,   315,
+     388,   312,   316,   317,     0,   391,   319,   326,   327,   324,
+       0,   317,     0,     0,   390,     0,     0,   317,     0,   321,
+     389,   301,   301,   311,   455,   307,   105,     2,    27,    26,
+      56,     0,    50,    28,    53,    28,    25,     0,    89,   457,
+       0,   330,   456,   308,     0,     0,   467,     0,    19,     0,
       23,     0,    21,     0,     0,     0,    48,     0,    17,    16,
-      24,   398,   398,   398,     0,     0,   458,   464,   398,     0,
-     460,   328,     0,     4,   473,     0,   303,   304,   344,   340,
-       0,     5,   351,   457,     0,   302,   318,   323,     0,   365,
-     322,   346,     0,   342,     0,   320,   309,   459,     0,   461,
+      24,   399,   399,   399,     0,     0,   459,   465,   399,     0,
+     461,   328,     0,     4,   474,     0,   303,   304,   344,   340,
+       0,     5,   352,   458,     0,   302,   318,   323,     0,   366,
+     322,   346,     0,   342,     0,   320,   309,   460,     0,   462,
        0,   310,     0,   107,     0,   109,   110,     0,   111,   112,
      113,     0,     0,   116,   117,   118,   119,   120,     0,     0,
      123,     0,   125,   126,   127,   128,     0,   130,   131,   132,
@@ -1583,117 +1583,117 @@
        0,   154,   155,     0,   157,     0,   159,   160,   163,     0,
      164,   165,     0,   167,   168,   169,   170,   171,   172,   173,
      174,   175,   176,   177,     0,   179,   180,     0,   182,     0,
-       0,   185,   186,   187,   188,   452,   189,     0,   191,   450,
+       0,   185,   186,   187,   188,   453,   189,     0,   191,   451,
        0,   193,   194,   195,     0,   197,     0,   199,   200,     0,
-       0,     0,     0,   205,   451,   206,     0,     0,   210,   211,
+       0,     0,     0,   205,   452,   206,     0,     0,   210,   211,
        0,     0,     0,     0,    91,   215,    51,    88,    88,     0,
-       0,    88,     0,   301,     0,   301,   301,     0,   456,     0,
-       0,     0,   379,     0,   458,   460,    52,   303,   465,     0,
-      18,    22,    20,    12,    15,     0,    49,   381,    14,   402,
-     399,   401,   400,   218,   219,   220,   221,   392,     0,     0,
-     305,   406,   442,   405,   298,   456,   458,   398,   460,   394,
-      54,     0,   485,   484,   486,     0,   481,   474,     0,     0,
-       0,    88,    71,   366,     0,     0,     0,   284,     0,   290,
+       0,    88,     0,   301,     0,   301,   301,     0,   457,     0,
+       0,     0,   380,     0,   459,   461,    52,   303,   466,     0,
+      18,    22,    20,     0,    12,    15,     0,    49,   382,    14,
+     403,   400,   402,   401,   218,   219,   220,   221,   393,     0,
+       0,   305,   407,   443,   406,   298,   457,   459,   399,   461,
+     395,    54,     0,   486,   485,   487,     0,   482,   475,     0,
+       0,     0,    88,    71,   367,     0,     0,     0,   284,     0,
+     290,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   237,     0,     0,     0,     0,     0,     0,
+       0,   237,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   105,    90,    72,     0,     0,    45,    42,    43,
+      44,     0,    36,     0,    40,     0,    38,     0,     0,     0,
+      34,    33,    41,    48,     0,   386,     0,    89,    46,   458,
+      74,   460,   462,    75,   348,   348,     0,   360,   297,   329,
+     333,     0,   334,   336,   338,     0,   347,    11,     0,     0,
+       0,   405,     0,     0,    77,   409,   396,     0,     0,   481,
+       0,    70,     0,     7,     0,     0,   228,   233,   229,     0,
+       0,     0,   463,    88,    88,    88,   104,     0,     0,     0,
+     217,   216,     0,     0,   248,   239,   240,   241,   245,   246,
+     247,   242,   243,     0,   244,     0,     0,     0,     0,     0,
+       0,     0,   282,     0,   280,     0,     0,    99,     0,     0,
+     283,     0,     0,    94,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   428,     0,     0,   235,
+     238,    96,    97,    98,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   450,   445,   446,   447,
+     448,   449,     0,     0,     0,     0,   471,   473,     0,     0,
+       0,    92,   105,     8,     0,    35,    39,    37,    31,    30,
+      29,    76,     0,     0,    88,    88,    88,    48,     0,   378,
+     331,   335,   337,     0,   332,    88,     0,    88,     0,   394,
+     404,   408,   444,     0,    87,     0,     0,    81,    78,    79,
+     492,   490,   493,   491,     0,   488,   483,   476,     0,   231,
+     234,    88,     0,   363,   364,   368,    59,     0,     0,   454,
+       0,   285,     0,     0,   469,    89,   291,     0,   106,     0,
+     108,   209,   114,     0,   272,   271,   270,   273,   268,   269,
+     464,     0,   416,     0,   399,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   237,     0,     0,     0,     0,     0,     0,     0,
-     237,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   105,    90,    72,     0,     0,    45,    42,    43,    44,
-       0,    36,     0,    40,     0,    38,     0,     0,     0,    34,
-      33,    41,    48,     0,   385,     0,    89,    46,   457,    74,
-     459,   461,    75,   347,   347,     0,   359,   297,   329,   333,
-       0,   334,   336,   338,     0,    11,     0,     0,     0,   404,
-       0,     0,    77,   408,   395,     0,     0,   480,     0,    70,
-       0,     7,     0,     0,   228,   233,   229,     0,     0,     0,
-     462,    88,    88,    88,   104,     0,     0,     0,   217,   216,
-       0,     0,   248,   239,   240,   241,   245,   246,   247,   242,
-     243,     0,   244,     0,     0,     0,     0,     0,     0,     0,
-     282,     0,   280,     0,     0,    99,     0,     0,   283,     0,
-       0,    94,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   427,     0,     0,   235,   238,    96,
-      97,    98,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   449,   444,   445,   446,   447,   448,
-       0,     0,     0,     0,   470,   472,     0,     0,     0,    92,
-     105,     8,     0,    35,    39,    37,    31,    30,    29,    76,
-       0,     0,    88,    88,    88,    48,     0,   377,   331,   335,
-     337,     0,   332,    88,     0,    88,     0,   393,   403,   407,
-     443,     0,    87,     0,     0,    81,    78,    79,   491,   489,
-     492,   490,     0,   487,   482,   475,     0,   231,   234,    88,
-       0,   362,   363,   367,    59,     0,     0,   453,     0,   285,
-       0,     0,   468,    89,   291,     0,   106,     0,   108,   209,
-     114,     0,   272,   271,   270,   273,   268,   269,   463,     0,
-     415,     0,   398,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   115,   121,     0,     0,
-     122,     0,   129,   133,     0,   137,   138,   141,   147,   148,
-     149,   150,   151,   153,   156,   158,   427,   392,    77,   432,
-     427,   429,   428,    84,   424,   162,   237,   161,   166,   178,
-     181,   183,   184,     0,   192,   196,   198,     0,   201,   202,
-     204,   203,   207,   208,     0,   212,   213,   214,    93,     0,
-       0,    28,   370,    77,   435,   467,    48,    47,     0,    89,
-      48,     0,   348,    48,   345,   360,   361,     0,     0,   339,
-      13,   353,     0,     0,     0,     0,    86,    85,   409,     0,
-       0,   483,   479,     0,   475,     0,   230,   232,     0,     0,
-      60,    57,    58,     0,   460,     0,   458,   299,   289,   288,
-     101,   103,   415,   279,   392,    77,   419,   415,   416,     0,
-     412,   398,   396,   261,   262,   274,   255,   256,   259,   260,
-     250,   251,     0,   252,   253,   254,   258,   257,   264,   263,
-     266,   267,   265,   275,     0,   281,   100,     0,    95,    83,
-     427,   392,     0,   427,     0,   423,    77,   431,   236,     0,
-     102,   471,     0,    10,    48,    88,     0,     0,     0,   386,
-     341,     0,     0,     0,     0,   343,   373,   374,   378,    46,
-     355,   354,   357,     0,     0,   296,   358,    82,    80,   488,
-       0,   478,   476,     0,   364,   368,   437,   440,     0,   287,
-     294,     0,   300,     0,   415,   392,     0,   427,     0,   411,
-       0,    77,   418,   397,     0,   278,   124,   422,   427,   433,
-     426,   430,     0,   190,     0,    73,    32,     0,    48,   436,
-     384,   382,     0,   349,   350,     0,    88,   356,     0,     0,
-       0,   439,     0,   286,   222,   277,   410,   427,   420,   414,
-     417,   276,     0,   249,   425,   434,     0,     0,   369,   383,
-     375,   376,    48,   477,     6,   438,   441,     0,   413,   421,
-       0,    77,   380,     0,     0,   469,   223,     0,     0,     0,
-      88,     9,   371,    88,   293,   225,     0,    48,   224,   292,
-     372
+       0,     0,     0,     0,     0,     0,     0,     0,   115,   121,
+       0,     0,   122,     0,   129,   133,     0,   137,   138,   141,
+     147,   148,   149,   150,   151,   153,   156,   158,   428,   393,
+      77,   433,   428,   430,   429,    84,   425,   162,   237,   161,
+     166,   178,   181,   183,   184,     0,   192,   196,   198,     0,
+     201,   202,   204,   203,   207,   208,     0,   212,   213,   214,
+      93,     0,     0,    28,   371,    77,   436,   468,    48,    47,
+       0,    89,    48,     0,   349,    48,   345,   361,   362,     0,
+       0,   339,    13,   354,     0,     0,     0,     0,    86,    85,
+     410,     0,     0,   484,   480,     0,   476,     0,   230,   232,
+       0,     0,    60,    57,    58,     0,   461,     0,   459,   299,
+     289,   288,   101,   103,   416,   279,   393,    77,   420,   416,
+     417,     0,   413,   399,   397,   261,   262,   274,   255,   256,
+     259,   260,   250,   251,     0,   252,   253,   254,   258,   257,
+     264,   263,   266,   267,   265,   275,     0,   281,   100,     0,
+      95,    83,   428,   393,     0,   428,     0,   424,    77,   432,
+     236,     0,   102,   472,     0,    10,    48,    88,     0,     0,
+       0,   387,   341,     0,     0,     0,     0,   343,   374,   375,
+     379,    46,   356,   355,   358,     0,     0,   296,   359,    82,
+      80,   489,     0,   479,   477,     0,   365,   369,   438,   441,
+       0,   287,   294,     0,   300,     0,   416,   393,     0,   428,
+       0,   412,     0,    77,   419,   398,     0,   278,   124,   423,
+     428,   434,   427,   431,     0,   190,     0,    73,    32,     0,
+      48,   437,   385,   383,     0,   350,   351,     0,    88,   357,
+       0,     0,     0,   440,     0,   286,   222,   277,   411,   428,
+     421,   415,   418,   276,     0,   249,   426,   435,     0,     0,
+     370,   384,   376,   377,    48,   478,     6,   439,   442,     0,
+     414,   422,     0,    77,   381,     0,     0,   470,   223,     0,
+       0,     0,    88,     9,   372,    88,   293,   225,     0,    48,
+     224,   292,   373
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -646,  -646,  -646,  -646,  -646,  -646,  -646,   337,  -646,   -52,
-    -646,   -54,  -311,    -1,  -646,   336,  -646,  -646,  -646,  -646,
-    -646,  -646,  -646,    37,  -575,  -646,  -646,  -296,  -258,  -234,
-      -2,  -646,  -646,  -646,   443,  -261,  -646,  -646,  -287,  -189,
-     -73,  -646,  -646,  -646,  -646,  -646,   201,    16,   421,   116,
-     299,  -646,  -285,  -316,  -646,  -646,  -646,  -646,  -130,  -337,
-    -646,    71,  -646,    63,    -6,   -70,  -251,   153,   188,  -229,
-    -244,  -255,   236,  -645,    15,    38,    29,    40,    30,    43,
-      45,   382,  -646,    35,  -646,  -646,  -646,  -646,  -646,    60,
-      -7,    21,  -646,  -646,    46,  -646,  -646,  -646,  -646,    47,
-    -646,  -646,  -646,  -646,    50,  -646,  -646,  -375,  -593,     7,
-     196,   -55,   -62,  -228,  -646,  -646,  -646,  -619,  -646,  -633,
-    -646,  -559,  -646,  -646,  -646,   -78,  -646,   525,  -646,   444,
-      11,  -379,    31,  -646,    14,  -646,   677,    75,  -646,  -646,
-      79,  -646,   378,  -646,    83
+    -653,  -653,  -653,  -653,  -653,  -653,  -653,   392,  -653,   -52,
+    -653,    12,  -266,    -1,  -653,   369,  -653,  -653,  -653,  -653,
+    -653,  -653,  -653,    21,  -559,  -653,  -653,  -286,  -241,  -220,
+      -2,  -653,  -653,  -653,   487,  -282,  -653,  -653,  -298,  -221,
+     -80,  -653,  -653,  -653,  -653,  -653,   245,    16,   464,   163,
+     420,  -653,  -280,  -271,  -653,  -653,  -653,  -653,  -103,  -331,
+    -653,   111,  -653,    48,    -6,   -64,  -254,    81,   242,  -217,
+    -245,  -252,   285,  -646,     9,    23,    13,    28,    15,    29,
+      30,   432,  -653,    20,  -653,  -653,  -653,  -653,  -653,    98,
+      34,     6,  -653,  -653,    35,  -653,  -653,  -653,  -653,    36,
+    -653,  -653,  -653,  -653,    37,  -653,  -653,  -380,  -555,     7,
+     232,   -42,   -55,  -192,  -653,  -653,  -653,  -626,  -653,  -652,
+    -653,  -464,  -653,  -653,  -653,   -35,  -653,   561,  -653,   479,
+      11,  -293,    -8,  -653,    14,  -653,   726,   120,  -653,  -653,
+     121,  -653,   422,  -653,   126
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,     1,    47,   300,    48,   669,   356,     2,   395,   237,
-     671,   522,   267,   357,    50,   565,    51,    52,    53,    54,
-     358,   247,    55,   359,   544,   545,   546,   547,   639,    57,
-     376,   233,   462,   482,   720,   424,   490,   425,   234,   430,
-     640,   877,   886,   413,   414,   415,   416,   285,   476,   477,
-     450,   451,   452,   459,   421,   569,   574,   423,   895,   896,
-     794,    60,   811,   104,    61,   641,    62,   107,    63,    64,
-      65,    66,   393,   394,   360,   361,   362,   363,   364,   365,
-     366,   523,   682,   367,    75,   535,   694,    76,   527,   562,
-     563,   368,   417,   709,   369,   776,   897,   788,   688,   370,
-     386,   783,   784,   242,   371,    81,    82,    83,   397,   474,
-     590,   269,    85,   282,   283,   728,   818,   729,   730,   642,
-     764,   643,   644,   675,   851,   807,   808,   284,   500,   235,
-     286,    87,    88,    89,   288,   506,    93,   703,   704,    94,
-      95,   295,   296,   552,   553
+       0,     1,    47,   301,    48,   671,   357,     2,   397,   237,
+     673,   524,   268,   358,    50,   567,    51,    52,    53,    54,
+     359,   247,    55,   360,   546,   547,   548,   549,   641,    57,
+     377,   233,   464,   484,   722,   426,   492,   427,   234,   432,
+     642,   879,   888,   415,   416,   417,   418,   286,   478,   479,
+     452,   453,   454,   461,   423,   571,   576,   425,   897,   898,
+     796,    60,   813,   104,    61,   643,    62,   107,    63,    64,
+      65,    66,   394,   395,   361,   362,   363,   364,   365,   366,
+     367,   525,   684,   368,    75,   537,   696,    76,   529,   564,
+     565,   369,   419,   711,   370,   778,   899,   790,   690,   371,
+     387,   785,   786,   242,   372,    81,    82,    83,   399,   476,
+     592,   270,    85,   283,   284,   730,   820,   731,   732,   644,
+     766,   645,   646,   677,   853,   809,   810,   285,   502,   235,
+     287,    87,    88,    89,   289,   508,    93,   705,   706,    94,
+      95,   296,   297,   554,   555
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1701,786 +1701,796 @@
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      58,    49,    98,   238,   392,   463,    99,   375,   389,    84,
-     102,   279,   105,    86,   281,   391,    90,    67,    59,   270,
-     270,   270,   537,    77,   109,   403,   270,   271,   272,   113,
-     390,    69,    71,   289,   472,   105,   105,    74,   465,    56,
-      68,   468,    70,   470,   760,    72,   475,    73,    78,    79,
-     398,   399,    80,   487,   453,    96,   595,    97,   258,   710,
-     803,   519,   239,   762,   509,   253,   410,   412,   710,   254,
-     592,   479,   255,   249,   248,   692,   772,   759,   280,   252,
-     806,   765,  -479,   548,   540,   571,   575,   250,   251,   304,
-     595,    96,  -303,    97,   291,   273,   273,   883,   777,   308,
-      13,    13,   615,   813,   118,   120,  -303,   624,   819,   205,
-     265,   646,   852,   209,   884,   531,   287,    30,    96,     3,
-      97,    96,   532,    97,   292,   549,   240,   781,   457,   616,
-     646,   814,   273,    91,   625,   853,   274,   274,   647,   293,
-     700,   -66,  -303,   351,   224,   306,   305,   294,   406,   309,
-     816,   534,   593,   594,   595,   672,  -303,   655,   503,   273,
-     428,  -304,   273,   429,    13,   352,   556,   701,   828,   538,
-     407,   531,   708,   274,   782,   673,   480,    46,   849,   867,
-     279,   390,   411,   281,   110,   100,   241,   568,   570,   570,
-     115,   832,   773,   101,    92,   856,   275,   275,   693,   108,
-     274,   827,   592,   274,   830,   279,   279,   106,   281,   281,
-     531,   401,   731,   111,   684,   595,   402,   887,   481,   806,
-     112,   880,   857,   668,   550,   270,   116,   276,   276,   504,
-     505,   121,   404,   275,   374,    58,    58,   105,   379,   105,
-     105,   -62,  -303,   431,    84,    84,   862,   280,    86,    86,
-     114,    90,    90,    59,    59,   610,   611,   612,   859,   551,
-     275,   494,   236,   275,   276,   613,   614,   724,   637,   864,
-     373,   686,   280,   280,    16,   707,   392,   273,   401,   401,
-     389,   259,   685,   725,   638,   885,   711,   391,   678,   681,
-     681,   276,   259,   674,   276,   712,   529,   390,   878,   613,
-     614,   570,   390,   520,   637,   757,   888,   280,   118,   120,
-      96,   103,    97,    97,   401,   401,   721,   426,   274,   766,
-     638,   401,   454,   263,   279,   412,   821,   281,   473,   464,
-     755,   277,   726,   -61,   277,   495,   496,   497,   498,   499,
-      46,   117,   557,    97,  -226,    13,   256,   278,   491,   260,
-     278,   608,   609,   610,   611,   612,    46,    46,    46,   298,
-     567,   572,   680,   613,   614,   779,   299,   280,   769,   780,
-     488,    46,   785,   301,   493,   683,   501,   502,   275,    20,
-     303,   508,   521,   261,   528,   537,   767,   591,    46,  -295,
-     310,   280,  -227,  -295,   262,   119,   770,    97,   264,   257,
-     473,    97,   378,   798,    97,    25,   280,   266,   380,   276,
-      97,   561,   608,   609,   610,   611,   612,   536,   381,   307,
-      97,   573,   -64,  -303,   613,   614,     4,    46,    97,   894,
-      11,   268,   787,   -63,   290,   311,   -65,   302,    46,   537,
-    -331,   312,   388,   786,   313,   314,   315,   316,   279,   724,
-     392,   281,   317,   537,   389,    34,   318,   319,   390,   320,
-     401,   391,   321,   835,   726,   725,   322,   323,   280,   726,
-     324,    40,   822,   325,   326,   327,   390,   328,   329,   330,
-     636,   331,   537,    23,   332,   333,   334,   810,   335,   336,
-     337,   338,   339,   340,   341,   342,    26,    27,    28,    29,
-     343,   344,   345,   346,   347,   348,    31,   349,   350,   377,
-     382,   -67,   400,   383,   384,   280,   385,   727,   -68,   591,
-     679,   677,   -69,   405,   396,   408,   418,   868,   834,    84,
-     270,    58,    49,    86,   875,   409,    90,   732,    59,   419,
-      84,   427,   420,   390,    86,   422,   455,    90,    67,    59,
-     839,   460,    37,   842,    77,   461,   726,    39,   466,   467,
-     469,   882,    69,    71,   483,   763,   484,   486,    74,   507,
-      56,    68,   510,    70,   511,   713,    72,   715,    73,    78,
-      79,   716,   714,    80,   454,   512,   900,   513,   514,   515,
-     871,   516,   517,   518,   526,  -303,   530,   525,   889,   555,
-     539,   870,   558,   559,   560,   564,   576,   577,   578,   579,
-     580,   392,   678,   581,   618,   389,   390,   458,   621,   775,
-     458,   617,   391,   620,   619,   653,   622,   623,   471,   664,
-     280,   478,   657,   626,   280,   627,   473,   390,   670,   478,
-     628,   492,   279,   629,   630,   281,   631,   812,   687,   727,
-     632,   633,   817,   635,   727,   645,   570,   648,   649,   570,
-     650,   651,   652,   654,   454,   656,   659,   660,   661,   270,
-     662,   473,   663,   665,   666,   667,   823,   691,   695,   698,
-     699,   702,   705,   708,   717,   718,   253,   719,   735,   753,
-     254,   758,   793,   255,   756,   248,   771,   473,   774,   458,
-     543,    84,   561,   778,   241,   279,   789,   280,   281,   280,
-     790,   280,   791,   796,    92,   801,   805,   809,   820,   843,
-     845,   848,   826,   473,   829,   831,   833,   838,   844,   847,
-     850,   854,   533,   866,   890,   846,   893,   855,   858,   860,
-     865,   727,   582,   583,   584,   585,   586,   587,   589,   879,
-     892,   881,   873,   874,   280,   566,   891,   280,   899,   456,
-     706,   489,   768,   898,   473,   795,   524,   689,   804,   837,
-     561,   297,   280,    58,   876,   840,   841,   722,   387,   802,
-     485,   800,    84,   799,   554,     0,    86,     0,     0,    90,
-       0,    59,     0,     0,     0,     0,     0,     0,     0,     0,
-     253,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     432,   280,     0,   433,   434,   435,   436,   437,   438,   473,
-       0,     0,   280,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   869,     0,     0,     0,
-     585,     0,     0,     0,   679,   677,   280,     0,     0,     0,
-       0,   280,     0,    84,     0,     0,     0,    86,     0,     0,
-      90,     0,    59,     0,     0,     0,     0,     0,     0,   432,
-       0,     0,   433,   434,   435,   436,   437,   438,     0,   473,
-     432,     0,   588,   433,   434,   435,   436,   437,   438,     0,
-       0,   439,   733,   734,     0,   736,   737,   738,   739,   740,
-     741,   742,   743,   744,   745,   746,   747,   748,   749,   750,
-     751,   752,     0,   754,     9,     0,    10,     0,     0,     0,
-     458,     0,    11,     0,     0,     0,    13,     0,     0,     0,
-       0,   432,     0,     0,   433,   434,   435,   436,   437,   438,
-       0,     0,     0,   440,     0,   478,     0,     0,    17,     0,
-     439,     0,     0,     0,   243,    19,     0,     0,     0,     0,
-      20,   439,     0,     0,     0,    21,     0,     0,    22,     0,
-       0,     0,     0,     0,     0,    23,     0,     0,   441,     0,
-       0,     0,     0,     0,     0,     0,    25,     0,    26,    27,
-      28,    29,   442,     0,     0,     0,     0,     0,    31,     0,
-       0,     0,   440,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   439,   440,     0,     0,     0,     0,   443,     0,
-       0,   444,   445,   541,     0,     0,   447,   448,     0,     0,
-       0,     0,     0,     0,     0,   542,    34,   441,     0,   449,
-       0,     0,     0,    36,    37,    38,     0,     0,   441,    39,
-       0,   442,    40,     0,     0,     0,   245,     0,     0,     0,
-       0,     0,   442,     0,   440,   246,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,    44,    45,   443,     0,     0,
-     444,   445,   446,     0,     0,   447,   448,     0,   443,     0,
-       0,   444,   445,   446,   696,     0,   447,   448,   449,   441,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   449,
-       0,     0,     0,   442,     0,     0,     0,     0,     0,   861,
-       0,     0,     0,   863,     0,     4,     5,     6,     0,     0,
-       0,     0,   593,   594,   595,   596,   597,   598,   599,   443,
-       0,     0,   444,   445,   446,     0,     0,   447,   448,   458,
-       0,     0,     0,     8,     0,     0,     0,     0,     0,     9,
-     449,    10,     0,     0,     0,     0,     0,    11,    12,     0,
-       0,    13,     0,     0,     0,     0,     0,     0,    14,     0,
-     354,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      58,    49,    98,   238,   280,   390,    99,   393,    77,    84,
+     102,    67,   105,    86,   392,    69,    90,    71,    59,   539,
+     282,   376,    74,    56,   109,    68,   271,   271,   271,   113,
+      70,    72,    73,   271,   455,   105,   105,    78,    79,    80,
+     272,   273,   391,   405,   467,   474,   290,   470,   712,   472,
+     712,   465,   477,   885,   511,    96,   412,    97,   258,   489,
+     597,   805,   694,   808,   252,   253,    13,   249,   774,   254,
+     886,   250,   255,   251,   248,  -480,   481,   288,   281,   550,
+     309,   764,   414,    96,   762,    97,   305,   400,   401,   118,
+     120,  -303,  -303,   573,   577,   266,   274,   459,   815,   783,
+      20,    13,   292,   821,   205,   854,   307,   521,   209,   617,
+      30,   626,   110,   352,   430,   533,   779,   431,   115,   239,
+     403,   551,   534,     3,   274,   404,    25,   505,   855,    13,
+     310,   542,   293,  -304,   648,   353,   618,   275,   627,   224,
+     -66,  -303,  -303,   306,   536,   434,   784,   294,   435,   436,
+     437,   438,   439,   440,   403,   295,    91,   408,   594,   768,
+      96,   649,    97,   533,    46,   275,   674,   558,   818,   648,
+     851,   816,   413,   280,   761,   710,    34,   101,   767,   409,
+     106,   482,   869,   240,   775,   702,   675,    92,   274,   282,
+     858,   533,    40,    13,   100,   391,   657,   276,   889,   280,
+     280,   274,   808,   570,   572,   572,   695,   540,   830,   834,
+     -62,  -303,   703,   403,   670,   282,   282,    96,   823,    97,
+     552,   108,   882,   483,   111,   276,   441,    16,   277,   275,
+     236,   374,   597,   271,   375,    58,    58,   105,   380,   105,
+     105,   887,   275,   241,    84,    84,   406,   281,    86,    86,
+     433,    90,    90,    59,    59,   553,   277,   112,   274,   263,
+     299,   686,   859,   264,   864,   595,   596,   597,   278,   615,
+     616,   506,   507,   281,   281,   713,   688,   714,   442,   390,
+     116,   393,   709,   687,   279,   121,   114,    46,   392,   276,
+     594,  -226,   -61,   118,   120,   597,   639,   723,   829,   275,
+     733,   832,   276,   256,   680,   683,   683,   403,   281,   259,
+     522,   391,   640,   443,   -64,  -303,   391,   572,   428,   280,
+     277,   263,   260,   456,   890,   518,   274,   444,   261,   475,
+     466,   676,   490,   277,   300,   282,   495,   757,   503,   504,
+     259,   414,    46,   510,   531,    96,   569,    97,   262,   493,
+     559,   728,   759,   445,   265,   861,   446,   447,   543,   276,
+     726,   449,   450,   267,   269,    46,   866,   275,   281,   574,
+     544,   403,   -63,   639,   451,   771,   727,   772,   103,   117,
+      97,    97,   539,   523,   403,   530,   302,    46,    46,   640,
+     277,   682,   685,   281,    46,   880,   593,  -295,  -227,   291,
+     -65,  -295,   475,   303,   538,   769,   304,   119,   281,    97,
+     308,   311,   781,   563,   312,   800,   782,   313,   257,   787,
+      97,   314,   379,   575,    97,   496,   381,   276,    97,   315,
+     278,   612,   613,   614,   316,   317,   539,   789,   382,   318,
+      97,   615,   616,   280,   788,     4,   279,    97,   319,    46,
+     539,   896,   320,   390,    46,   393,   321,   322,   277,   282,
+     323,   324,   392,   325,   610,   611,   612,   613,   614,   326,
+     281,   327,   391,   328,   378,   329,   615,   616,   330,   539,
+     331,   332,   638,   728,   333,   334,   335,   336,   728,   337,
+     391,   824,   610,   611,   612,   613,   614,   383,   726,   497,
+     498,   499,   500,   501,   615,   616,   338,   339,   340,   403,
+     837,   341,   729,   342,   727,   343,   344,   281,   345,   346,
+     347,   348,   681,   679,   349,   812,   350,   351,   593,   836,
+     -67,    84,   384,    58,    49,    86,   385,   386,    90,   271,
+      59,    77,    84,    11,    67,   -68,    86,   -69,    69,    90,
+      71,    59,   734,   389,   396,    74,    56,   391,    68,  -331,
+     765,   398,   402,    70,    72,    73,   407,   844,   410,   411,
+      78,    79,    80,   420,   870,   728,   421,   715,   422,   717,
+     424,   877,   429,   718,   716,   457,   456,   462,   841,   463,
+     468,   469,   513,   471,   485,   873,    23,   486,   595,   596,
+     597,   488,   872,   600,   601,   891,   509,   512,   884,    26,
+      27,    28,    29,   514,   390,   515,   393,   516,   517,    31,
+     519,   777,   520,   392,  -303,   528,   527,   532,   680,   541,
+     391,   557,   281,   902,   560,   561,   281,   280,   475,   562,
+     566,   578,   579,   580,   729,   581,   582,   819,   583,   729,
+     620,   391,   621,   282,   619,   814,   623,   622,   624,   666,
+     625,   628,   655,   629,   630,    37,   456,   631,   659,   672,
+      39,   632,   572,   475,   633,   572,   634,   689,   271,   635,
+     637,   647,   650,   704,   651,   652,   653,   654,   253,   693,
+     656,   825,   254,   658,   795,   255,   661,   248,   662,   475,
+     280,   663,   664,    84,   563,   665,   667,   668,   669,   281,
+     700,   281,   697,   281,   701,   707,   282,   710,   719,   720,
+     721,   737,   755,   758,   760,   475,   773,   776,   780,   241,
+     791,   792,   798,   793,    92,   822,   729,   803,   807,   460,
+     847,   811,   460,   595,   596,   597,   598,   599,   600,   601,
+     473,   603,   828,   480,   831,   845,   281,   833,   850,   281,
+     835,   480,   840,   494,   846,   849,   475,   852,   856,   868,
+     857,   875,   563,   860,   281,    58,   883,   842,   843,   862,
+     867,   876,   881,   892,    84,   893,   894,   901,    86,   535,
+     568,    90,   900,    59,   895,   608,   609,   610,   611,   612,
+     613,   614,   253,   848,   458,   491,   708,   797,   806,   615,
+     616,   770,   839,   281,   388,   724,   487,   526,   691,   878,
+     298,   475,   460,   545,   281,   802,   804,     0,   801,     0,
+     556,     0,     0,     0,     0,     0,     0,     0,   871,     0,
+       0,     0,     0,     0,     0,     0,   681,   679,   281,     0,
+       0,     0,     0,   281,     0,    84,     0,     0,     0,    86,
+       0,     0,    90,     0,    59,   584,   585,   586,   587,   588,
+     589,   591,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   475,     0,     0,   434,     0,   590,   435,   436,   437,
+     438,   439,   440,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   434,     0,     0,   435,   436,   437,
+     438,   439,   440,     0,     0,     0,     0,     0,     9,     0,
+      10,     0,     0,     0,     0,     0,    11,     0,     0,     0,
+      13,     0,     0,     0,     0,     0,     0,   605,   606,   607,
+     608,   609,   610,   611,   612,   613,   614,     0,     0,     0,
+       0,     0,    17,     0,   615,   616,     0,     0,   243,    19,
+       0,     0,     0,   587,    20,   441,     0,     0,     0,    21,
+     434,     0,    22,   435,   436,   437,   438,   439,   440,    23,
+       0,     0,     0,     0,     0,   441,     0,     0,     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,   735,   736,   442,   738,   739,
+     740,   741,   742,   743,   744,   745,   746,   747,   748,   749,
+     750,   751,   752,   753,   754,     0,   756,   442,     0,     0,
+      34,     0,     0,   460,     0,     0,     0,    36,    37,    38,
+       0,   441,   443,    39,     0,     0,    40,     0,     0,     0,
+     245,     0,     0,     0,     0,     0,   444,     0,   480,   246,
+       0,    43,   443,     0,     0,     0,     0,     0,     0,    44,
+      45,     0,     0,     0,     0,     0,   444,     0,     0,     0,
+       0,     0,   445,     0,     0,   446,   447,   448,     0,     0,
+     449,   450,     0,   442,   595,   596,   597,   598,   599,   600,
+     601,     0,   445,   451,     0,   446,   447,   448,     0,     0,
+     449,   450,     0,     0,     0,     0,     0,     0,     0,   698,
+       0,     0,     0,   451,     0,     0,     0,     0,   443,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   444,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     4,     5,     6,     0,     0,   445,     0,
+       0,   446,   447,   448,     0,     0,   449,   450,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   451,
+       0,     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,    14,     0,   355,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    16,     0,
+       0,    17,   863,     0,     0,     0,   865,    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,   460,     0,     0,    24,   356,     0,     0,    25,
+       0,    26,    27,    28,    29,    30,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,    32,   606,
+     607,   608,   609,   610,   611,   612,   613,   614,     0,     0,
+       0,     0,     0,     0,     0,   615,   616,    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,   355,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    16,     0,     0,    17,     0,     0,
+       0,     0,     0,    18,    19,     0,     0,    46,     0,    20,
+       0,   373,     0,     0,    21,     0,     0,    22,     0,     0,
+       0,     0,     0,     0,    23,     0,     0,     0,     0,     0,
+       0,    24,   356,     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,     0,
+       0,     0,     0,    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,
+      15,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       16,     0,     0,    17,     0,     0,     0,     0,     0,    18,
-      19,   593,   594,   595,     0,    20,   598,   599,     0,     0,
+      19,     0,     0,    46,     0,    20,     0,   838,     0,     0,
       21,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-      23,     0,     0,     0,     0,     0,     0,    24,   355,     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,     4,     5,     6,     0,     0,     0,     0,    33,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     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,     0,     0,     0,    18,    19,     0,     0,
+       0,     0,    20,     0,     0,     0,     0,    21,     0,    46,
+      22,     0,     0,   692,     0,     0,     0,    23,     0,     0,
+       0,     0,     0,     0,    24,     0,     0,     0,    25,     0,
+      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
+      31,     0,     0,     0,     0,     0,     4,     5,     6,     0,
+       0,   595,   596,   597,   598,   599,   600,   601,   602,   603,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       9,     0,    10,     0,     0,    36,    37,    38,    11,     0,
+       0,    39,    13,     0,    40,     0,     0,     0,    41,    14,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,    43,
+       0,     0,     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,     4,
+     678,     6,    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,     9,     0,    10,     0,     0,     0,     0,
+      33,    11,     0,     0,     0,    13,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,     0,     0,     0,    36,
+      37,    38,     0,     0,     0,    39,     0,    17,    40,     0,
+       0,     0,    41,   243,    19,     0,     0,     0,     0,    20,
+       0,    42,     0,    43,    21,     0,     0,    22,     0,     0,
+       0,    44,    45,   604,    23,   605,   606,   607,   608,   609,
+     610,   611,   612,   613,   614,    25,     0,    26,    27,    28,
+      29,     0,   615,   616,     0,     0,     0,    31,     0,   636,
+      46,     0,     0,     0,   874,     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,     0,     0,     0,     0,    34,     7,     0,     0,     0,
+       0,     0,    36,    37,    38,     0,     0,     0,    39,     0,
+       0,    40,     0,     8,     0,   245,     0,     0,     0,     9,
+       0,    10,     0,     0,   246,     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,     0,     0,     0,    18,
+      19,     0,     0,    46,     0,    20,     0,   794,     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,     0,     0,     0,     0,    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,   354,   604,   605,   606,
-     607,   608,   609,   610,   611,   612,    16,     0,     0,    17,
-       0,     0,     0,   613,   614,    18,    19,     0,     0,    46,
-       0,    20,     0,   372,     0,     0,    21,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,    23,     0,     0,     0,
-       0,     0,     0,    24,   355,     0,     0,    25,     0,    26,
-      27,    28,    29,    30,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,    32,     0,   606,   607,
-     608,   609,   610,   611,   612,     0,     0,     0,     0,     0,
-       0,     0,   613,   614,     0,    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,    15,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    16,     0,     0,    17,     0,     0,     0,     0,
-       0,    18,    19,     0,     0,    46,     0,    20,     0,   836,
-       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,     4,     5,     6,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     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,     0,     0,     0,    18,    19,
-       0,     0,     0,     0,    20,     0,     0,     0,     0,    21,
-       0,    46,    22,     0,     0,   690,     0,     0,     0,    23,
-       0,     0,     0,     0,     0,     0,    24,     0,     0,     0,
+       0,     0,     4,     5,     6,     0,     0,     0,     0,     0,
+       0,    34,   354,     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,   355,     0,   595,
+     596,   597,   598,   599,   600,   601,     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,     0,     0,     0,    23,     0,     0,
+       0,     0,     0,     0,    24,   356,     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,     4,     0,     6,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,    35,    36,    37,    38,     9,     0,
+      10,    39,     0,     0,    40,   274,    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,   243,    19,
+       0,     0,     0,     0,    20,     0,   275,     0,     0,    21,
+       0,     0,    22,     0,     0,     0,    46,     0,     0,    23,
+       0,   595,   596,   597,   598,   599,   600,   601,     0,     0,
       25,     0,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     4,     5,
-       6,     0,     0,   593,   594,   595,   596,   597,   598,   599,
-     600,   601,     0,     0,     0,     0,     0,     0,    33,     0,
+       0,     0,    31,   605,   606,   607,   608,   609,   610,   611,
+     612,   613,   614,     0,     0,     0,     0,     0,     0,     0,
+     615,   616,     0,     0,     0,     0,   276,     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,   277,     0,     0,
+     245,     0,     0,     0,     0,     9,     0,    10,     0,   246,
+       0,    43,   274,    11,     0,     0,     0,    13,     0,    44,
+      45,     0,     0,     0,   595,   596,   597,   598,   599,   600,
+     601,   602,   603,     0,     0,     0,     0,   763,     0,    17,
+       0,     0,     0,     0,     0,   243,    19,     0,    46,     0,
+       0,    20,     0,   275,     0,     0,    21,     0,     0,    22,
+       0,     0,     0,     0,     0,     0,    23,     0,     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,     0,     0,     4,     0,     6,     0,     0,
+     595,   596,   597,   598,   599,   600,   601,   602,   603,     0,
+       0,     0,     0,   276,     0,     0,   799,   607,   608,   609,
+     610,   611,   612,   613,   614,     0,     0,    34,     0,     9,
+       0,    10,   615,   616,    36,    37,    38,    11,     0,     0,
+      39,    13,     0,    40,   277,     0,     0,   245,     0,     0,
+       0,     0,     0,     0,     0,     0,   246,     0,    43,     0,
+       0,     0,     0,    17,     0,     0,    44,    45,     0,   243,
+      19,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+      21,     0,     0,    22,   817,     0,     0,     0,     0,     0,
+      23,     0,     0,     0,     0,    46,     0,     0,     4,     0,
+       6,    25,     0,    26,    27,    28,    29,     0,     0,     0,
+       0,     0,     0,    31,     0,     0,   604,     0,   605,   606,
+     607,   608,   609,   610,   611,   612,   613,   614,     0,     0,
+       0,     0,     9,     0,    10,   615,   616,     0,     0,     0,
+      11,     0,   660,     0,    13,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,     0,    36,    37,
+      38,     0,     0,     0,    39,     0,    17,    40,     0,     0,
+       0,   245,   243,    19,     0,     0,     0,     0,    20,     0,
+     246,     0,    43,    21,     0,     0,    22,     0,     0,     0,
+      44,    45,   604,    23,   605,   606,   607,   608,   609,   610,
+     611,   612,   613,   614,    25,     0,    26,    27,    28,    29,
+       0,   615,   616,     0,     0,     0,    31,     0,   725,    46,
+     595,   596,   597,   598,   599,   600,   601,   602,   603,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     9,     0,    10,     0,     0,    36,    37,    38,
-      11,     0,     0,    39,    13,     0,    40,     0,     0,     0,
-      41,    14,     0,     0,     0,     0,     0,     0,     0,    42,
-       0,    43,     0,     0,     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,     4,   676,     6,    25,     0,    26,    27,    28,    29,
-       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,   595,   596,   597,   598,   599,   600,   601,   602,
+     603,     0,     0,     0,    34,     0,     0,     0,     0,     0,
+       0,    36,    37,    38,     0,     0,     0,    39,     0,     0,
+      40,     0,     0,     0,   245,     0,     0,     0,     0,     0,
+       0,     0,     0,   246,     0,    43,     0,     0,     0,     0,
+       0,     0,     0,    44,    45,   595,   596,   597,   598,   599,
+     600,   601,   602,   603,     0,     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,
-       0,     0,    33,    11,     0,     0,     0,    13,     0,     0,
-       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
-       0,    36,    37,    38,     0,     0,     0,    39,     0,    17,
-      40,     0,     0,     0,    41,   243,    19,     0,     0,     0,
-       0,    20,     0,    42,     0,    43,    21,     0,     0,    22,
-       0,     0,     0,    44,    45,   602,    23,   603,   604,   605,
-     606,   607,   608,   609,   610,   611,   612,    25,     0,    26,
-      27,    28,    29,     0,   613,   614,     0,     0,     0,    31,
-       0,   634,    46,     0,     0,     0,   872,     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,     0,     0,     0,     0,    34,     7,     0,
-       0,     0,     0,     0,    36,    37,    38,     0,     0,     0,
-      39,     0,     0,    40,     0,     8,     0,   245,     0,     0,
-       0,     9,     0,    10,     0,     0,   246,     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,     0,     0,
-       0,    18,    19,     0,     0,    46,     0,    20,     0,   792,
-       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,     0,     0,     0,
-       0,    33,     0,     0,     4,     5,     6,     0,     0,     0,
-       0,     0,     0,    34,   353,     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,   354,
-       0,     0,   593,   594,   595,   596,   597,   598,   599,    16,
-     601,     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,     0,     0,     0,    23,
-       0,     0,     0,     0,     0,     0,    24,   355,     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,     4,     0,     6,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,    35,    36,    37,    38,
-       9,     0,    10,    39,     0,     0,    40,   273,    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,
-     243,    19,     0,     0,     0,     0,    20,     0,   274,     0,
-       0,    21,     0,     0,    22,     0,     0,     0,    46,     0,
-       0,    23,     0,   593,   594,   595,   596,   597,   598,   599,
-       0,     0,    25,     0,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,    31,     0,   603,   604,   605,   606,
-     607,   608,   609,   610,   611,   612,     0,     0,     0,     0,
-       0,     0,     0,   613,   614,     0,     0,     0,   275,     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,   276,
-       0,     0,   245,     0,     0,     0,     0,     9,     0,    10,
-       0,   246,     0,    43,   273,    11,     0,     0,     0,    13,
-       0,    44,    45,     0,     0,     0,   593,   594,   595,   596,
-     597,   598,   599,   600,   601,     0,     0,     0,     0,   761,
-       0,    17,     0,     0,     0,     0,     0,   243,    19,     0,
-      46,     0,     0,    20,     0,   274,     0,     0,    21,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,    23,     0,
-       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,     0,     0,     4,     0,     6,
-       0,     0,   593,   594,   595,   596,   597,   598,   599,   600,
-     601,     0,     0,     0,     0,   275,     0,     0,   797,   605,
-     606,   607,   608,   609,   610,   611,   612,     0,     0,    34,
-       0,     9,     0,    10,   613,   614,    36,    37,    38,    11,
-       0,     0,    39,    13,     0,    40,   276,     0,     0,   245,
-       0,     0,     0,     0,     0,     0,     0,     0,   246,     0,
-      43,     0,     0,     0,     0,    17,     0,     0,    44,    45,
-       0,   243,    19,     0,     0,     0,     0,    20,     0,     0,
-       0,     0,    21,     0,     0,    22,   815,     0,     0,     0,
-       0,     0,    23,     0,     0,     0,     0,    46,     0,     0,
-       4,     0,     6,    25,     0,    26,    27,    28,    29,     0,
-       0,     0,     0,     0,     0,    31,     0,     0,   602,     0,
-     603,   604,   605,   606,   607,   608,   609,   610,   611,   612,
-       0,     0,     0,     0,     9,     0,    10,   613,   614,     0,
-       0,     0,    11,     0,   658,     0,    13,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      36,    37,    38,     0,     0,     0,    39,     0,    17,    40,
-       0,     0,     0,   245,   243,    19,     0,     0,     0,     0,
-      20,     0,   246,     0,    43,    21,     0,     0,    22,     0,
-       0,     0,    44,    45,   602,    23,   603,   604,   605,   606,
-     607,   608,   609,   610,   611,   612,    25,     0,    26,    27,
-      28,    29,     0,   613,   614,     0,     0,     0,    31,     0,
-     723,    46,   593,   594,   595,   596,   597,   598,   599,   600,
-     601,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   593,   594,   595,   596,   597,   598,
-     599,   600,   601,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,    36,    37,    38,     0,     0,     0,    39,
-       0,     0,    40,     0,     0,     0,   245,     0,     0,     0,
-       0,     0,     0,     0,     0,   246,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,    44,    45,   593,   594,   595,
+       0,     0,    46,   595,   596,   597,   598,   599,   600,   601,
+     602,   603,     0,     0,     0,     0,     0,     0,     0,   595,
      596,   597,   598,   599,   600,   601,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    46,   593,   594,   595,   596,   597,
-     598,   599,   600,   601,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   593,   594,   595,   596,   597,   598,
-     599,   593,   594,   595,   596,   597,   598,   599,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   602,     0,   603,   604,   605,   606,
-     607,   608,   609,   610,   611,   612,     0,     0,     0,     0,
-       0,     0,     0,   613,   614,   697,   602,     0,   603,   604,
-     605,   606,   607,   608,   609,   610,   611,   612,     0,     0,
-       0,     0,     0,     0,     0,   613,   614,   825,     0,     0,
+       0,     0,   604,     0,   605,   606,   607,   608,   609,   610,
+     611,   612,   613,   614,     0,     0,     0,     0,     0,     0,
+       0,   615,   616,   699,   604,     0,   605,   606,   607,   608,
+     609,   610,   611,   612,   613,   614,     0,     0,     0,     0,
+       0,     0,     0,   615,   616,   827,     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,   602,
-     824,   603,   604,   605,   606,   607,   608,   609,   610,   611,
-     612,     0,     0,     0,     0,     0,     0,     0,   613,   614,
-       0,     0,     0,     0,     0,     0,     0,   602,     0,   603,
-     604,   605,   606,   607,   608,   609,   610,   611,   612,     0,
-       4,     0,     6,     0,     0,     0,   613,   614,   603,   604,
-     605,   606,   607,   608,   609,   610,   611,   612,   606,   607,
-     608,   609,   610,   611,   612,   613,   614,     0,     8,     0,
-       0,     0,   613,   614,     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,  -352,     0,     0,    17,     0,
-       0,     0,     0,     0,   243,    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,     0,    25,     0,    26,    27,
-      28,    29,    30,     0,     0,   244,     0,     0,    31,     0,
-       0,     0,     0,     0,     4,     0,     6,   455,     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,    34,     0,     9,     0,
-      10,     0,    35,    36,    37,    38,    11,     0,     0,    39,
-      13,     0,    40,     0,     0,     0,   245,     0,     0,     0,
-       0,     0,     0,     0,     0,   246,     0,    43,     0,     0,
-       0,     0,    17,     0,     0,    44,    45,     0,   243,    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,     4,     0,     6,
-      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,     4,     0,     6,     0,
+       0,     0,     0,     0,     0,     0,     0,   604,   826,   605,
+     606,   607,   608,   609,   610,   611,   612,   613,   614,     0,
+       0,     0,     0,     0,     0,     0,   615,   616,     0,     0,
+       0,     0,     0,     0,     0,   604,     0,   605,   606,   607,
+     608,   609,   610,   611,   612,   613,   614,     4,     0,     6,
+       0,     0,     0,     0,   615,   616,   608,   609,   610,   611,
+     612,   613,   614,     0,     0,     0,     0,     0,     0,     0,
+     615,   616,     0,     0,     0,     8,     0,     0,     0,     0,
        0,     9,     0,    10,     0,     0,     0,     0,     0,    11,
-       0,     0,     0,    13,     0,     0,     0,     0,     0,     0,
+      12,     0,     0,    13,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  -353,     0,     0,    17,     0,     0,     0,     0,
+       0,   243,    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,     0,    25,     0,    26,    27,    28,    29,    30,
+       0,     0,   244,     0,     0,    31,     0,     0,     0,     0,
+       0,     4,     0,     6,   457,     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,    34,     0,     9,     0,    10,     0,    35,
+      36,    37,    38,    11,     0,     0,    39,    13,     0,    40,
+       0,     0,     0,   245,     0,     0,     0,     0,     0,     0,
+       0,     0,   246,     0,    43,     0,     0,     0,     0,    17,
+       0,     0,    44,    45,     0,   243,    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,     4,     0,     6,    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,     4,     0,     6,     0,     0,     9,     0,
+      10,     0,     0,     0,     0,     0,    11,     0,     0,     0,
+      13,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    36,    37,    38,     9,     0,    10,
+      39,     0,    17,    40,     0,    11,     0,   245,   243,    19,
+       0,     0,     0,     0,    20,     0,   246,     0,    43,    21,
+       0,     0,    22,     0,     0,     0,    44,    45,     0,    23,
+       0,    17,     0,     0,     0,     0,     0,   243,    19,     0,
+      25,     0,    26,    27,    28,    29,     0,     0,    21,     0,
+       0,    22,    31,     0,     0,     0,     0,     0,    23,     0,
+       0,     0,     0,     0,     0,     0,     4,     0,    97,     0,
+       0,    26,    27,    28,    29,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
       34,     0,     0,     0,     0,     0,     0,    36,    37,    38,
-       9,     0,    10,    39,     0,    17,    40,     0,    11,     0,
-     245,   243,    19,     0,     0,     0,     0,    20,     0,   246,
-       0,    43,    21,     0,     0,    22,     0,     0,     0,    44,
-      45,     0,    23,     0,    17,     0,     0,     0,     0,     0,
-     243,    19,     0,    25,     0,    26,    27,    28,    29,     0,
-       0,    21,     0,     0,    22,    31,     0,     0,     0,     0,
-       0,    23,     0,     0,     0,     0,     0,     0,     0,     4,
-       0,    97,     0,     0,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      36,    37,    38,     9,     0,    10,    39,     0,     0,    40,
-       0,    11,     0,   245,     0,     0,   588,     0,     0,     0,
-       0,     0,   246,     0,    43,     0,     0,     0,     0,    36,
-      37,    38,    44,    45,     0,    39,     0,    17,     0,     0,
-       0,     0,   245,     0,    19,     0,     0,     0,     9,     0,
-      10,   246,     0,    43,    21,     0,    11,    22,     0,     0,
-      13,    44,    45,     0,    23,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    26,    27,    28,
-      29,     0,    17,     0,     0,     0,     0,    31,   243,    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,   588,
-      25,     0,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,    31,    37,    38,     0,     0,     0,    39,     0,
+       9,     0,    10,    39,     0,     0,    40,     0,    11,     0,
+     245,     0,     0,   590,     0,     0,     0,     0,     0,   246,
+       0,    43,     0,     0,     0,     0,    36,    37,    38,    44,
+      45,     0,    39,     0,    17,     0,     0,     0,     0,   245,
+       0,    19,     0,     0,     0,     9,     0,    10,   246,     0,
+      43,    21,     0,    11,    22,     0,     0,    13,    44,    45,
+       0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    26,    27,    28,    29,     0,    17,
+       0,     0,     0,     0,    31,   243,    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,   590,    25,     0,    26,
+      27,    28,    29,     0,     0,     0,     0,     0,     0,    31,
+      37,    38,     0,     0,     0,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     9,     0,
+      10,     0,     0,    43,     0,     0,    11,     0,     0,     0,
+       0,     0,    45,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    36,    37,    38,     0,     0,     0,
+      39,     0,    17,    40,     0,     0,     0,   245,   243,    19,
+       0,     0,     0,     0,     0,     0,   246,     0,    43,    21,
+       0,     0,    22,     0,     0,     0,    44,    45,     0,    23,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     9,     0,    10,     0,     0,    43,     0,     0,    11,
-       0,     0,     0,     0,     0,    45,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    36,    37,    38,
-       0,     0,     0,    39,     0,    17,    40,     0,     0,     0,
-     245,   243,    19,     0,     0,     0,     0,     0,     0,   246,
-       0,    43,    21,     0,     0,    22,     0,     0,     0,    44,
-      45,     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,    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,     0,     0,     0,     0,
-      36,    37,    38,     0,     0,     0,    39,     0,     0,     0,
-       0,     0,     0,   245,     0,     0,     0,     0,   122,   123,
-       0,     0,   246,   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,   198,     0,   199,
-       0,   200,     0,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,     0,   210,   211,     0,   212,   213,     0,     0,
-       0,     0,     0,   214,     0,     0,   215,     0,   216,     0,
-     217,   218,     0,     0,   219,   220,   221,   222,     0,     0,
-     223,     0,   224,     0,   225,   226,   227,   228,   229,   230,
-     231,     0,     0,   232
+       0,     0,     0,     0,     0,     0,     0,    36,    37,    38,
+       0,     0,     0,    39,     0,     0,     0,     0,     0,     0,
+     245,     0,     0,     0,     0,   122,   123,     0,     0,   246,
+     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,   198,     0,   199,     0,   200,     0,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,     0,
+     210,   211,     0,   212,   213,     0,     0,     0,     0,     0,
+     214,     0,     0,   215,     0,   216,     0,   217,   218,     0,
+       0,   219,   220,   221,   222,     0,     0,   223,     0,   224,
+       0,   225,   226,   227,   228,   229,   230,   231,     0,     0,
+     232
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,     2,     8,    55,   259,   321,    12,   241,   259,     2,
-      16,    84,    18,     2,    84,   259,     2,     2,     2,    81,
-      82,    83,   397,     2,    30,   283,    88,    82,    83,    35,
-     259,     2,     2,    88,   330,    41,    42,     2,   323,     2,
-       2,   326,     2,   328,   637,     2,   331,     2,     2,     2,
-     278,   279,     2,   338,   315,     3,    17,     5,    64,     6,
-     705,   372,    62,   638,   351,    58,   115,   301,     6,    58,
-     449,    27,    58,    58,    58,   125,   115,   636,    84,    58,
-     713,   640,   115,    28,   400,   422,   423,    58,    58,     3,
-      17,     3,   180,     5,    29,    44,    44,    43,   673,   180,
-      49,    49,   206,   722,    41,    42,   180,   206,   727,   154,
-      75,   206,   206,   158,    60,   206,    85,   115,     3,     0,
-       5,     3,   213,     5,    59,    70,   126,    68,   317,   233,
-     206,   724,    44,   226,   233,   229,    85,    85,   233,    74,
-     206,   229,   230,   206,   189,   114,    60,    82,   206,   230,
-     725,   149,    15,    16,    17,   212,   230,   233,   347,    44,
-       9,   212,    44,    12,    49,   228,   410,   233,   761,   397,
-     228,   206,   206,    85,   115,   232,   132,   227,   213,   213,
-     253,   410,   231,   253,    31,   232,   186,   421,   422,   423,
-      37,   766,   231,   230,   227,   814,   145,   145,   535,     9,
-      85,   760,   581,    85,   763,   278,   279,   111,   278,   279,
-     206,   227,   591,     3,   525,    17,   232,   213,   174,   852,
-     232,   866,   815,   510,   169,   287,    38,   176,   176,     6,
-       7,    43,   287,   145,   240,   237,   238,   243,   244,   245,
-     246,   229,   230,   313,   237,   238,   821,   253,   237,   238,
-     232,   237,   238,   237,   238,   216,   217,   218,   817,   204,
-     145,   127,   229,   145,   176,   226,   227,   216,   216,   828,
-     239,   526,   278,   279,    68,   560,   531,    44,   227,   227,
-     531,   212,   526,   232,   232,   231,   233,   531,   522,   523,
-     524,   176,   212,   521,   176,   233,   216,   526,   857,   226,
-     227,   535,   531,   373,   216,   621,   881,   313,   245,   246,
-       3,     3,     5,     5,   227,   227,   577,   310,    85,   232,
-     232,   227,   315,   230,   397,   559,   232,   397,   330,   322,
-     615,   216,   590,   229,   216,   201,   202,   203,   204,   205,
-     227,     3,   412,     5,   231,    49,   229,   232,   341,   229,
-     232,   214,   215,   216,   217,   218,   227,   227,   227,   115,
-     231,   231,   231,   226,   227,   676,     9,   373,   653,   680,
-     339,   227,   683,   230,   343,   231,   345,   346,   145,    83,
-     212,   350,   375,   229,   390,   760,   644,   449,   227,   229,
-     232,   397,   231,   233,   229,     3,   657,     5,   229,     3,
-     402,     5,     3,   699,     5,   109,   412,   229,     3,   176,
-       5,   417,   214,   215,   216,   217,   218,   396,     3,   230,
-       5,   423,   229,   230,   226,   227,     3,   227,     5,   229,
-      45,   229,   687,   229,   229,   232,   229,   229,   227,   814,
-     212,   232,   226,   687,   232,   232,   232,   232,   521,   216,
-     705,   521,   232,   828,   705,   159,   232,   232,   687,   232,
-     227,   705,   232,   774,   722,   232,   232,   232,   474,   727,
-     232,   175,   730,   232,   232,   232,   705,   232,   232,   232,
-     473,   232,   857,    98,   232,   232,   232,   715,   232,   232,
-     232,   232,   232,   232,   232,   232,   111,   112,   113,   114,
-     232,   232,   232,   232,   232,   232,   121,   232,   232,   230,
-     230,   229,   234,   230,   230,   521,   230,   590,   229,   581,
-     522,   522,   229,   232,   230,     5,   208,   838,   772,   522,
-     592,   533,   533,   522,   850,   233,   522,   592,   522,   208,
-     533,     9,   233,   772,   533,   232,     6,   533,   533,   533,
-     778,     9,   167,   782,   533,     9,   814,   172,     9,     9,
-       9,   872,   533,   533,     9,   638,     9,     9,   533,     9,
-     533,   533,   227,   533,   230,   568,   533,   570,   533,   533,
-     533,   570,   568,   533,   577,   232,   897,   229,   229,   229,
-     845,   230,   229,   229,   208,   230,   216,   231,   883,   230,
-     233,   845,   231,   206,   234,     6,   233,   206,   233,   233,
-     233,   866,   846,   232,   206,   866,   845,   318,   206,   671,
-     321,   233,   866,   233,   226,   206,   233,   233,   329,   226,
-     636,   332,   206,   233,   640,   233,   638,   866,     9,   340,
-     233,   342,   715,   233,   233,   715,   233,   717,   162,   722,
-     233,   233,   725,   233,   727,   233,   890,   233,   233,   893,
-     233,   233,   233,   233,   657,   233,   233,   233,   233,   731,
-     233,   673,   233,   233,   233,   233,   731,   208,   229,   233,
-     206,   186,   212,   206,   233,   229,   679,   229,     3,     3,
-     679,     9,   694,   679,     6,   679,     6,   699,   233,   400,
-     401,   694,   708,   206,   186,   778,   230,   713,   778,   715,
-     208,   717,   229,   231,   227,   231,   213,   229,   233,   229,
-     206,     5,   233,   725,   233,   233,   233,   233,   229,   229,
-     208,   230,   395,   212,   208,   789,   208,   233,   233,   233,
-     233,   814,   443,   444,   445,   446,   447,   448,   449,   233,
-     233,   232,   229,   229,   760,   419,   229,   763,   229,   316,
-     559,   340,   646,   893,   766,   694,   384,   531,   708,   776,
-     776,    94,   778,   775,   852,   781,   782,   581,   253,   704,
-     336,   702,   775,   700,   406,    -1,   775,    -1,    -1,   775,
-      -1,   775,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     793,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,   817,    -1,     6,     7,     8,     9,    10,    11,   821,
-      -1,    -1,   828,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   842,    -1,    -1,    -1,
-     541,    -1,    -1,    -1,   846,   846,   852,    -1,    -1,    -1,
-      -1,   857,    -1,   846,    -1,    -1,    -1,   846,    -1,    -1,
-     846,    -1,   846,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-      -1,    -1,     6,     7,     8,     9,    10,    11,    -1,   881,
-       3,    -1,     5,     6,     7,     8,     9,    10,    11,    -1,
-      -1,    84,   593,   594,    -1,   596,   597,   598,   599,   600,
-     601,   602,   603,   604,   605,   606,   607,   608,   609,   610,
-     611,   612,    -1,   614,    37,    -1,    39,    -1,    -1,    -1,
-     621,    -1,    45,    -1,    -1,    -1,    49,    -1,    -1,    -1,
-      -1,     3,    -1,    -1,     6,     7,     8,     9,    10,    11,
-      -1,    -1,    -1,   136,    -1,   646,    -1,    -1,    71,    -1,
-      84,    -1,    -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,   171,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,   112,
-     113,   114,   185,    -1,    -1,    -1,    -1,    -1,   121,    -1,
-      -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    84,   136,    -1,    -1,    -1,    -1,   211,    -1,
+       2,     2,     8,    55,    84,   259,    12,   259,     2,     2,
+      16,     2,    18,     2,   259,     2,     2,     2,     2,   399,
+      84,   241,     2,     2,    30,     2,    81,    82,    83,    35,
+       2,     2,     2,    88,   316,    41,    42,     2,     2,     2,
+      82,    83,   259,   284,   324,   331,    88,   327,     6,   329,
+       6,   322,   332,    43,   352,     3,   115,     5,    64,   339,
+      17,   707,   125,   715,    58,    58,    49,    58,   115,    58,
+      60,    58,    58,    58,    58,   115,    27,    85,    84,    28,
+     180,   640,   302,     3,   639,     5,     3,   279,   280,    41,
+      42,   180,   180,   424,   425,    75,    44,   318,   724,    68,
+      83,    49,    29,   729,   154,   206,   114,   373,   158,   206,
+     115,   206,    31,   206,     9,   206,   675,    12,    37,    62,
+     227,    70,   213,     0,    44,   232,   109,   348,   229,    49,
+     230,   402,    59,   212,   206,   228,   233,    85,   233,   189,
+     229,   230,   230,    60,   149,     3,   115,    74,     6,     7,
+       8,     9,    10,    11,   227,    82,   226,   206,   451,   232,
+       3,   233,     5,   206,   227,    85,   212,   412,   727,   206,
+     213,   726,   231,   253,   638,   206,   159,   230,   642,   228,
+     111,   132,   213,   126,   231,   206,   232,   227,    44,   253,
+     816,   206,   175,    49,   232,   412,   233,   145,   213,   279,
+     280,    44,   854,   423,   424,   425,   537,   399,   763,   768,
+     229,   230,   233,   227,   512,   279,   280,     3,   232,     5,
+     169,     9,   868,   174,     3,   145,    84,    68,   176,    85,
+     229,   239,    17,   288,   240,   237,   238,   243,   244,   245,
+     246,   231,    85,   186,   237,   238,   288,   253,   237,   238,
+     314,   237,   238,   237,   238,   204,   176,   232,    44,   226,
+     115,   527,   817,   230,   823,    15,    16,    17,   216,   226,
+     227,     6,     7,   279,   280,   233,   528,   233,   136,   533,
+      38,   533,   562,   528,   232,    43,   232,   227,   533,   145,
+     583,   231,   229,   245,   246,    17,   216,   579,   762,    85,
+     593,   765,   145,   229,   524,   525,   526,   227,   314,   212,
+     374,   528,   232,   171,   229,   230,   533,   537,   311,   399,
+     176,   226,   229,   316,   883,   230,    44,   185,   229,   331,
+     323,   523,   340,   176,     9,   399,   344,   617,   346,   347,
+     212,   561,   227,   351,   216,     3,   231,     5,   229,   342,
+     414,   592,   623,   211,   229,   819,   214,   215,   216,   145,
+     216,   219,   220,   229,   229,   227,   830,    85,   374,   231,
+     228,   227,   229,   216,   232,   655,   232,   659,     3,     3,
+       5,     5,   762,   376,   227,   391,   230,   227,   227,   232,
+     176,   231,   231,   399,   227,   859,   451,   229,   231,   229,
+     229,   233,   404,   229,   398,   646,   212,     3,   414,     5,
+     230,   232,   678,   419,   232,   701,   682,   232,     3,   685,
+       5,   232,     3,   425,     5,   127,     3,   145,     5,   232,
+     216,   216,   217,   218,   232,   232,   816,   689,     3,   232,
+       5,   226,   227,   523,   689,     3,   232,     5,   232,   227,
+     830,   229,   232,   707,   227,   707,   232,   232,   176,   523,
+     232,   232,   707,   232,   214,   215,   216,   217,   218,   232,
+     476,   232,   689,   232,   230,   232,   226,   227,   232,   859,
+     232,   232,   475,   724,   232,   232,   232,   232,   729,   232,
+     707,   732,   214,   215,   216,   217,   218,   230,   216,   201,
+     202,   203,   204,   205,   226,   227,   232,   232,   232,   227,
+     776,   232,   592,   232,   232,   232,   232,   523,   232,   232,
+     232,   232,   524,   524,   232,   717,   232,   232,   583,   774,
+     229,   524,   230,   535,   535,   524,   230,   230,   524,   594,
+     524,   535,   535,    45,   535,   229,   535,   229,   535,   535,
+     535,   535,   594,   226,     3,   535,   535,   774,   535,   212,
+     640,   230,   234,   535,   535,   535,   232,   784,     5,   233,
+     535,   535,   535,   208,   840,   816,   208,   570,   233,   572,
+     232,   852,     9,   572,   570,     6,   579,     9,   780,     9,
+       9,     9,   230,     9,     9,   847,    98,     9,    15,    16,
+      17,     9,   847,    20,    21,   885,     9,   227,   874,   111,
+     112,   113,   114,   232,   868,   229,   868,   229,   229,   121,
+     229,   673,   229,   868,   230,   208,   231,   216,   848,   233,
+     847,   230,   638,   899,   231,   206,   642,   717,   640,   234,
+       6,   233,   206,   233,   724,   233,   233,   727,   232,   729,
+     206,   868,   226,   717,   233,   719,   206,   233,   233,   226,
+     233,   233,   206,   233,   233,   167,   659,   233,   206,     9,
+     172,   233,   892,   675,   233,   895,   233,   162,   733,   233,
+     233,   233,   233,   186,   233,   233,   233,   233,   681,   208,
+     233,   733,   681,   233,   696,   681,   233,   681,   233,   701,
+     780,   233,   233,   696,   710,   233,   233,   233,   233,   715,
+     233,   717,   229,   719,   206,   212,   780,   206,   233,   229,
+     229,     3,     3,     6,     9,   727,     6,   233,   206,   186,
+     230,   208,   231,   229,   227,   233,   816,   231,   213,   319,
+     206,   229,   322,    15,    16,    17,    18,    19,    20,    21,
+     330,    23,   233,   333,   233,   229,   762,   233,     5,   765,
+     233,   341,   233,   343,   229,   229,   768,   208,   230,   212,
+     233,   229,   778,   233,   780,   777,   232,   783,   784,   233,
+     233,   229,   233,   208,   777,   229,   233,   229,   777,   397,
+     421,   777,   895,   777,   208,   212,   213,   214,   215,   216,
+     217,   218,   795,   791,   317,   341,   561,   696,   710,   226,
+     227,   648,   778,   819,   253,   583,   337,   385,   533,   854,
+      94,   823,   402,   403,   830,   704,   706,    -1,   702,    -1,
+     408,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   844,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   848,   848,   854,    -1,
+      -1,    -1,    -1,   859,    -1,   848,    -1,    -1,    -1,   848,
+      -1,    -1,   848,    -1,   848,   445,   446,   447,   448,   449,
+     450,   451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   883,    -1,    -1,     3,    -1,     5,     6,     7,     8,
+       9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,    -1,    -1,     6,     7,     8,
+       9,    10,    11,    -1,    -1,    -1,    -1,    -1,    37,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,    -1,    -1,    -1,
+      -1,    -1,    71,    -1,   226,   227,    -1,    -1,    77,    78,
+      -1,    -1,    -1,   543,    83,    84,    -1,    -1,    -1,    88,
+       3,    -1,    91,     6,     7,     8,     9,    10,    11,    98,
+      -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -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,   595,   596,   136,   598,   599,
+     600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
+     610,   611,   612,   613,   614,    -1,   616,   136,    -1,    -1,
+     159,    -1,    -1,   623,    -1,    -1,    -1,   166,   167,   168,
+      -1,    84,   171,   172,    -1,    -1,   175,    -1,    -1,    -1,
+     179,    -1,    -1,    -1,    -1,    -1,   185,    -1,   648,   188,
+      -1,   190,   171,    -1,    -1,    -1,    -1,    -1,    -1,   198,
+     199,    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,
+      -1,    -1,   211,    -1,    -1,   214,   215,   216,    -1,    -1,
+     219,   220,    -1,   136,    15,    16,    17,    18,    19,    20,
+      21,    -1,   211,   232,    -1,   214,   215,   216,    -1,    -1,
+     219,   220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   228,
+      -1,    -1,    -1,   232,    -1,    -1,    -1,    -1,   171,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   185,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     3,     4,     5,    -1,    -1,   211,    -1,
       -1,   214,   215,   216,    -1,    -1,   219,   220,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   228,   159,   171,    -1,   232,
-      -1,    -1,    -1,   166,   167,   168,    -1,    -1,   171,   172,
-      -1,   185,   175,    -1,    -1,    -1,   179,    -1,    -1,    -1,
-      -1,    -1,   185,    -1,   136,   188,    -1,   190,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   198,   199,   211,    -1,    -1,
-     214,   215,   216,    -1,    -1,   219,   220,    -1,   211,    -1,
-      -1,   214,   215,   216,   228,    -1,   219,   220,   232,   171,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   232,
-      -1,    -1,    -1,   185,    -1,    -1,    -1,    -1,    -1,   820,
-      -1,    -1,    -1,   824,    -1,     3,     4,     5,    -1,    -1,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,   211,
-      -1,    -1,   214,   215,   216,    -1,    -1,   219,   220,   850,
-      -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,    37,
-     232,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,
+      -1,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,
+      -1,    -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,   822,    -1,    -1,    -1,   826,    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,   852,    -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,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   226,   227,   147,    -1,     3,
+       4,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,
+      -1,    -1,    -1,    -1,    -1,   165,   166,   167,   168,    -1,
+      -1,    -1,   172,    -1,    -1,   175,    -1,    31,    -1,   179,
+      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,   188,    -1,
+     190,    45,    46,    -1,    -1,    49,    -1,    -1,   198,   199,
+      -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,    -1,   227,    -1,    83,
+      -1,   231,    -1,    -1,    88,    -1,    -1,    91,    -1,    -1,
+      -1,    -1,    -1,    -1,    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,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   147,    -1,     3,     4,     5,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,
+      -1,   165,   166,   167,   168,    -1,    -1,    -1,   172,    -1,
+      -1,   175,    -1,    31,    -1,   179,    -1,    -1,    -1,    37,
+      -1,    39,    -1,    -1,   188,    -1,   190,    45,    46,    -1,
+      -1,    49,    -1,    -1,   198,   199,    -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,    15,    16,    17,    -1,    83,    20,    21,    -1,    -1,
+      78,    -1,    -1,   227,    -1,    83,    -1,   231,    -1,    -1,
       88,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      98,    -1,    -1,    -1,    -1,    -1,    -1,   105,   106,    -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,     3,     4,     5,    -1,    -1,    -1,    -1,   147,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   159,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,
+     168,    -1,    -1,    -1,   172,    -1,    37,   175,    39,    -1,
+      -1,   179,    -1,    -1,    45,    -1,    -1,    -1,    49,    -1,
+     188,    -1,   190,    -1,    -1,    56,    -1,    -1,    -1,    -1,
+     198,   199,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,
+      -1,    -1,    83,    -1,    -1,    -1,    -1,    88,    -1,   227,
+      91,    -1,    -1,   231,    -1,    -1,    -1,    98,    -1,    -1,
+      -1,    -1,    -1,    -1,   105,    -1,    -1,    -1,   109,    -1,
+     111,   112,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
+     121,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
+      -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      -1,    -1,    -1,    -1,    -1,    -1,   147,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,
+      37,    -1,    39,    -1,    -1,   166,   167,   168,    45,    -1,
+      -1,   172,    49,    -1,   175,    -1,    -1,    -1,   179,    56,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,   190,
+      -1,    -1,    -1,    -1,    71,    -1,    -1,   198,   199,    -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,   227,    -1,   105,     3,
+     231,     5,   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,    -1,    -1,
+      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,    -1,    -1,
+     147,    45,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,   166,
+     167,   168,    -1,    -1,    -1,   172,    -1,    71,   175,    -1,
+      -1,    -1,   179,    77,    78,    -1,    -1,    -1,    -1,    83,
+      -1,   188,    -1,   190,    88,    -1,    -1,    91,    -1,    -1,
+      -1,   198,   199,   207,    98,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   109,    -1,   111,   112,   113,
+     114,    -1,   226,   227,    -1,    -1,    -1,   121,    -1,   233,
+     227,    -1,    -1,    -1,   231,    -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,    -1,    -1,    -1,    -1,   159,    14,    -1,    -1,    -1,
+      -1,    -1,   166,   167,   168,    -1,    -1,    -1,   172,    -1,
+      -1,   175,    -1,    31,    -1,   179,    -1,    -1,    -1,    37,
+      -1,    39,    -1,    -1,   188,    -1,   190,    45,    46,    -1,
+      -1,    49,    -1,    -1,   198,   199,    -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,    -1,   227,    -1,    83,    -1,   231,    -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,   147,
-      -1,     3,     4,     5,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   159,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,
-     168,    -1,    -1,    -1,   172,    -1,    -1,   175,    -1,    31,
-      -1,   179,    -1,    -1,    -1,    37,    -1,    39,    -1,    -1,
-     188,    -1,   190,    45,    46,    -1,    -1,    49,    -1,    -1,
-     198,   199,    -1,    -1,    56,    -1,    58,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,    68,    -1,    -1,    71,
-      -1,    -1,    -1,   226,   227,    77,    78,    -1,    -1,   227,
-      -1,    83,    -1,   231,    -1,    -1,    88,    -1,    -1,    91,
-      -1,    -1,    -1,    -1,    -1,    -1,    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,    -1,   212,   213,
-     214,   215,   216,   217,   218,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   226,   227,    -1,   147,    -1,     3,     4,     5,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,
-      -1,    -1,    -1,   165,   166,   167,   168,    -1,    -1,    -1,
-     172,    -1,    -1,   175,    -1,    31,    -1,   179,    -1,    -1,
-      -1,    37,    -1,    39,    -1,    -1,   188,    -1,   190,    45,
-      46,    -1,    -1,    49,    -1,    -1,   198,   199,    -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,    -1,   227,    -1,    83,    -1,   231,
-      -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,     3,     4,     5,    -1,    -1,    -1,
-      -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,   165,
-     166,   167,   168,    -1,    -1,    -1,   172,    -1,    37,   175,
-      39,    -1,    -1,   179,    -1,    -1,    45,    -1,    -1,    -1,
-      49,    -1,   188,    -1,   190,    -1,    -1,    56,    -1,    -1,
-      -1,    -1,   198,   199,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,    -1,    -1,    -1,    -1,    -1,
+      -1,   159,    13,    -1,    -1,    -1,    -1,   165,   166,   167,
+     168,    -1,    -1,    -1,   172,    -1,    -1,   175,    -1,    -1,
+      31,   179,    -1,    -1,    -1,    -1,    37,    -1,    39,    -1,
+     188,    -1,   190,    -1,    45,    46,    -1,    -1,    49,    -1,
+     198,   199,    -1,    -1,    -1,    56,    -1,    58,    -1,    15,
+      16,    17,    18,    19,    20,    21,    -1,    68,    -1,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   227,
+      -1,    -1,    83,    -1,    -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,    -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,     3,    -1,     5,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   147,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,
+      -1,    -1,    -1,    -1,   165,   166,   167,   168,    37,    -1,
+      39,   172,    -1,    -1,   175,    44,    45,    -1,   179,    -1,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,   190,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   198,   199,    -1,
       -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    77,    78,
-      -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    88,
-      -1,   227,    91,    -1,    -1,   231,    -1,    -1,    -1,    98,
-      -1,    -1,    -1,    -1,    -1,    -1,   105,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    88,
+      -1,    -1,    91,    -1,    -1,    -1,   227,    -1,    -1,    98,
+      -1,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
      109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,
-      -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,    -1,    -1,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    -1,    -1,    -1,    -1,    -1,    -1,   147,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     159,    -1,    37,    -1,    39,    -1,    -1,   166,   167,   168,
-      45,    -1,    -1,   172,    49,    -1,   175,    -1,    -1,    -1,
-     179,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,
-      -1,   190,    -1,    -1,    -1,    -1,    71,    -1,    -1,   198,
-     199,    -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,   227,    -1,
-     105,     3,   231,     5,   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,
-      -1,    -1,    -1,    -1,    -1,    37,    -1,    39,    -1,    -1,
-      -1,    -1,   147,    45,    -1,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,
-      -1,   166,   167,   168,    -1,    -1,    -1,   172,    -1,    71,
-     175,    -1,    -1,    -1,   179,    77,    78,    -1,    -1,    -1,
-      -1,    83,    -1,   188,    -1,   190,    88,    -1,    -1,    91,
-      -1,    -1,    -1,   198,   199,   207,    98,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   109,    -1,   111,
-     112,   113,   114,    -1,   226,   227,    -1,    -1,    -1,   121,
-      -1,   233,   227,    -1,    -1,    -1,   231,    -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,    -1,    -1,    -1,    -1,   159,    14,    -1,
-      -1,    -1,    -1,    -1,   166,   167,   168,    -1,    -1,    -1,
-     172,    -1,    -1,   175,    -1,    31,    -1,   179,    -1,    -1,
-      -1,    37,    -1,    39,    -1,    -1,   188,    -1,   190,    45,
-      46,    -1,    -1,    49,    -1,    -1,   198,   199,    -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,    -1,   227,    -1,    83,    -1,   231,
-      -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,   147,    -1,    -1,     3,     4,     5,    -1,    -1,    -1,
-      -1,    -1,    -1,   159,    13,    -1,    -1,    -1,    -1,   165,
-     166,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,   175,
-      -1,    -1,    31,   179,    -1,    -1,    -1,    -1,    37,    -1,
-      39,    -1,   188,    -1,   190,    -1,    45,    46,    -1,    -1,
-      49,    -1,   198,   199,    -1,    -1,    -1,    56,    -1,    58,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    68,
-      23,    -1,    71,    -1,    -1,    -1,    -1,    -1,    77,    78,
-      -1,   227,    -1,    -1,    83,    -1,    -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,    -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,     3,    -1,     5,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   147,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     159,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,   168,
-      37,    -1,    39,   172,    -1,    -1,   175,    44,    45,    -1,
-     179,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,   188,
-      -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   198,
-     199,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    -1,    -1,    -1,    -1,    83,    -1,    85,    -1,
-      -1,    88,    -1,    -1,    91,    -1,    -1,    -1,   227,    -1,
-      -1,    98,    -1,    15,    16,    17,    18,    19,    20,    21,
-      -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   226,   227,    -1,    -1,    -1,   145,    -1,
-      -1,    -1,    -1,     3,    -1,     5,    -1,    -1,    -1,    -1,
-      -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,   166,
-     167,   168,    -1,    -1,    -1,   172,    -1,    -1,   175,   176,
-      -1,    -1,   179,    -1,    -1,    -1,    -1,    37,    -1,    39,
-      -1,   188,    -1,   190,    44,    45,    -1,    -1,    -1,    49,
-      -1,   198,   199,    -1,    -1,    -1,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,   216,
-      -1,    71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,
-     227,    -1,    -1,    83,    -1,    85,    -1,    -1,    88,    -1,
-      -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,
-      -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,    -1,    -1,     3,    -1,     5,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,   145,    -1,    -1,    24,   211,
-     212,   213,   214,   215,   216,   217,   218,    -1,    -1,   159,
-      -1,    37,    -1,    39,   226,   227,   166,   167,   168,    45,
-      -1,    -1,   172,    49,    -1,   175,   176,    -1,    -1,   179,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
-     190,    -1,    -1,    -1,    -1,    71,    -1,    -1,   198,   199,
-      -1,    77,    78,    -1,    -1,    -1,    -1,    83,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    91,   216,    -1,    -1,    -1,
-      -1,    -1,    98,    -1,    -1,    -1,    -1,   227,    -1,    -1,
-       3,    -1,     5,   109,    -1,   111,   112,   113,   114,    -1,
-      -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,   207,    -1,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-      -1,    -1,    -1,    -1,    37,    -1,    39,   226,   227,    -1,
-      -1,    -1,    45,    -1,   233,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,
-     166,   167,   168,    -1,    -1,    -1,   172,    -1,    71,   175,
-      -1,    -1,    -1,   179,    77,    78,    -1,    -1,    -1,    -1,
-      83,    -1,   188,    -1,   190,    88,    -1,    -1,    91,    -1,
-      -1,    -1,   198,   199,   207,    98,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   109,    -1,   111,   112,
-     113,   114,    -1,   226,   227,    -1,    -1,    -1,   121,    -1,
-     233,   227,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    -1,    -1,    -1,   159,    -1,    -1,    -1,
-      -1,    -1,    -1,   166,   167,   168,    -1,    -1,    -1,   172,
-      -1,    -1,   175,    -1,    -1,    -1,   179,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   188,    -1,   190,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   198,   199,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   227,    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,    -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,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   207,    -1,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   226,   227,   228,   207,    -1,   209,   210,
+      -1,    -1,   121,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     226,   227,    -1,    -1,    -1,    -1,   145,    -1,    -1,    -1,
+      -1,     3,    -1,     5,    -1,    -1,    -1,    -1,    -1,    -1,
+     159,    -1,    -1,    -1,    -1,    -1,    -1,   166,   167,   168,
+      -1,    -1,    -1,   172,    -1,    -1,   175,   176,    -1,    -1,
+     179,    -1,    -1,    -1,    -1,    37,    -1,    39,    -1,   188,
+      -1,   190,    44,    45,    -1,    -1,    -1,    49,    -1,   198,
+     199,    -1,    -1,    -1,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    -1,   216,    -1,    71,
+      -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   227,    -1,
+      -1,    83,    -1,    85,    -1,    -1,    88,    -1,    -1,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,    -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,    -1,    -1,     3,    -1,     5,    -1,    -1,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    -1,   145,    -1,    -1,    24,   211,   212,   213,
+     214,   215,   216,   217,   218,    -1,    -1,   159,    -1,    37,
+      -1,    39,   226,   227,   166,   167,   168,    45,    -1,    -1,
+     172,    49,    -1,   175,   176,    -1,    -1,   179,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,   190,    -1,
+      -1,    -1,    -1,    71,    -1,    -1,   198,   199,    -1,    77,
+      78,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,
+      88,    -1,    -1,    91,   216,    -1,    -1,    -1,    -1,    -1,
+      98,    -1,    -1,    -1,    -1,   227,    -1,    -1,     3,    -1,
+       5,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
+      -1,    -1,    -1,   121,    -1,    -1,   207,    -1,   209,   210,
      211,   212,   213,   214,   215,   216,   217,   218,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   226,   227,   228,    -1,    -1,
+      -1,    -1,    37,    -1,    39,   226,   227,    -1,    -1,    -1,
+      45,    -1,   233,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+      -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,   166,   167,
+     168,    -1,    -1,    -1,   172,    -1,    71,   175,    -1,    -1,
+      -1,   179,    77,    78,    -1,    -1,    -1,    -1,    83,    -1,
+     188,    -1,   190,    88,    -1,    -1,    91,    -1,    -1,    -1,
+     198,   199,   207,    98,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   109,    -1,   111,   112,   113,   114,
+      -1,   226,   227,    -1,    -1,    -1,   121,    -1,   233,   227,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,
+      -1,   166,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,
+     175,    -1,    -1,    -1,   179,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   188,    -1,   190,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   198,   199,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   227,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    -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,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   226,   227,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   207,    -1,   209,
+      -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,   207,    -1,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   226,   227,   228,   207,    -1,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   226,   227,   228,    -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,   207,   208,   209,
      210,   211,   212,   213,   214,   215,   216,   217,   218,    -1,
-       3,    -1,     5,    -1,    -1,    -1,   226,   227,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   212,   213,
-     214,   215,   216,   217,   218,   226,   227,    -1,    31,    -1,
-      -1,    -1,   226,   227,    37,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    -1,    -1,    49,    -1,    -1,    -1,
-      -1,    -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,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
-      -1,    -1,    -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,   112,
-     113,   114,   115,    -1,    -1,   118,    -1,    -1,   121,    -1,
-      -1,    -1,    -1,    -1,     3,    -1,     5,     6,    -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,   159,    -1,    37,    -1,
-      39,    -1,   165,   166,   167,   168,    45,    -1,    -1,   172,
-      49,    -1,   175,    -1,    -1,    -1,   179,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   188,    -1,   190,    -1,    -1,
-      -1,    -1,    71,    -1,    -1,   198,   199,    -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,    -1,    -1,    -1,     3,    -1,     5,
-     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,     3,    -1,     5,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   226,   227,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   207,    -1,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,     3,    -1,     5,
+      -1,    -1,    -1,    -1,   226,   227,   212,   213,   214,   215,
+     216,   217,   218,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     226,   227,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,
       -1,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
-      -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+      46,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -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,    -1,
+      -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    -1,
+      -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,   112,   113,   114,   115,
+      -1,    -1,   118,    -1,    -1,   121,    -1,    -1,    -1,    -1,
+      -1,     3,    -1,     5,     6,    -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,   159,    -1,    37,    -1,    39,    -1,   165,
+     166,   167,   168,    45,    -1,    -1,   172,    49,    -1,   175,
+      -1,    -1,    -1,   179,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   188,    -1,   190,    -1,    -1,    -1,    -1,    71,
+      -1,    -1,   198,   199,    -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,    -1,    -1,    -1,     3,    -1,     5,   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,     3,    -1,     5,    -1,    -1,    37,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,
+      -1,    -1,    -1,    -1,   166,   167,   168,    37,    -1,    39,
+     172,    -1,    71,   175,    -1,    45,    -1,   179,    77,    78,
+      -1,    -1,    -1,    -1,    83,    -1,   188,    -1,   190,    88,
+      -1,    -1,    91,    -1,    -1,    -1,   198,   199,    -1,    98,
+      -1,    71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,
+     109,    -1,   111,   112,   113,   114,    -1,    -1,    88,    -1,
+      -1,    91,   121,    -1,    -1,    -1,    -1,    -1,    98,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,     5,    -1,
+      -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,    -1,
+      -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      159,    -1,    -1,    -1,    -1,    -1,    -1,   166,   167,   168,
-      37,    -1,    39,   172,    -1,    71,   175,    -1,    45,    -1,
-     179,    77,    78,    -1,    -1,    -1,    -1,    83,    -1,   188,
-      -1,   190,    88,    -1,    -1,    91,    -1,    -1,    -1,   198,
-     199,    -1,    98,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-      77,    78,    -1,   109,    -1,   111,   112,   113,   114,    -1,
-      -1,    88,    -1,    -1,    91,   121,    -1,    -1,    -1,    -1,
-      -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-      -1,     5,    -1,    -1,   111,   112,   113,   114,    -1,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,
-     166,   167,   168,    37,    -1,    39,   172,    -1,    -1,   175,
-      -1,    45,    -1,   179,    -1,    -1,     5,    -1,    -1,    -1,
-      -1,    -1,   188,    -1,   190,    -1,    -1,    -1,    -1,   166,
-     167,   168,   198,   199,    -1,   172,    -1,    71,    -1,    -1,
-      -1,    -1,   179,    -1,    78,    -1,    -1,    -1,    37,    -1,
-      39,   188,    -1,   190,    88,    -1,    45,    91,    -1,    -1,
-      49,   198,   199,    -1,    98,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,   113,
-     114,    -1,    71,    -1,    -1,    -1,    -1,   121,    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,     5,
-     109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,
-      -1,    -1,   121,   167,   168,    -1,    -1,    -1,   172,    -1,
+      37,    -1,    39,   172,    -1,    -1,   175,    -1,    45,    -1,
+     179,    -1,    -1,     5,    -1,    -1,    -1,    -1,    -1,   188,
+      -1,   190,    -1,    -1,    -1,    -1,   166,   167,   168,   198,
+     199,    -1,   172,    -1,    71,    -1,    -1,    -1,    -1,   179,
+      -1,    78,    -1,    -1,    -1,    37,    -1,    39,   188,    -1,
+     190,    88,    -1,    45,    91,    -1,    -1,    49,   198,   199,
+      -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,    71,
+      -1,    -1,    -1,    -1,   121,    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,     5,   109,    -1,   111,
+     112,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,   121,
+     167,   168,    -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,
+      39,    -1,    -1,   190,    -1,    -1,    45,    -1,    -1,    -1,
+      -1,    -1,   199,    -1,    -1,    -1,    -1,   159,    -1,    -1,
+      -1,    -1,    -1,    -1,   166,   167,   168,    -1,    -1,    -1,
+     172,    -1,    71,   175,    -1,    -1,    -1,   179,    77,    78,
+      -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,   190,    88,
+      -1,    -1,    91,    -1,    -1,    -1,   198,   199,    -1,    98,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    -1,    39,    -1,    -1,   190,    -1,    -1,    45,
-      -1,    -1,    -1,    -1,    -1,   199,    -1,    -1,    -1,    -1,
-     159,    -1,    -1,    -1,    -1,    -1,    -1,   166,   167,   168,
-      -1,    -1,    -1,   172,    -1,    71,   175,    -1,    -1,    -1,
-     179,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,   188,
-      -1,   190,    88,    -1,    -1,    91,    -1,    -1,    -1,   198,
-     199,    -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,   111,   112,   113,   114,    -1,    -1,    -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,    -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,
-     166,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,    -1,
-      -1,    -1,    -1,   179,    -1,    -1,    -1,    -1,    25,    26,
-      -1,    -1,   188,    30,   190,    32,    33,    34,    35,    36,
-      -1,    38,   198,   199,    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,   144,    -1,   146,
-      -1,   148,    -1,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,   160,   161,    -1,   163,   164,    -1,    -1,
-      -1,    -1,    -1,   170,    -1,    -1,   173,    -1,   175,    -1,
-     177,   178,    -1,    -1,   181,   182,   183,   184,    -1,    -1,
-     187,    -1,   189,    -1,   191,   192,   193,   194,   195,   196,
-     197,    -1,    -1,   200
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   166,   167,   168,
+      -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,
+     179,    -1,    -1,    -1,    -1,    25,    26,    -1,    -1,   188,
+      30,   190,    32,    33,    34,    35,    36,    -1,    38,   198,
+     199,    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,   144,    -1,   146,    -1,   148,    -1,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
+     160,   161,    -1,   163,   164,    -1,    -1,    -1,    -1,    -1,
+     170,    -1,    -1,   173,    -1,   175,    -1,   177,   178,    -1,
+      -1,   181,   182,   183,   184,    -1,    -1,   187,    -1,   189,
+      -1,   191,   192,   193,   194,   195,   196,   197,    -1,    -1,
+     200
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@@ -2513,71 +2523,71 @@
      196,   197,   200,   266,   273,   364,   229,   244,   244,    62,
      126,   186,   338,    77,   118,   179,   188,   256,   282,   309,
      311,   313,   326,   344,   365,   369,   229,     3,   299,   212,
-     229,   229,   229,   230,   229,   318,   229,   247,   229,   346,
-     347,   346,   346,    44,    85,   145,   176,   216,   232,   275,
-     299,   300,   348,   349,   362,   282,   365,   367,   369,   346,
-     229,    29,    59,    74,    82,   376,   377,   371,   115,     9,
-     238,   230,   229,   212,     3,    60,   367,   230,   180,   230,
+     229,   229,   229,   226,   230,   229,   318,   229,   247,   229,
+     346,   347,   346,   346,    44,    85,   145,   176,   216,   232,
+     275,   299,   300,   348,   349,   362,   282,   365,   367,   369,
+     346,   229,    29,    59,    74,    82,   376,   377,   371,   115,
+       9,   238,   230,   229,   212,     3,    60,   367,   230,   180,
+     230,   232,   232,   232,   232,   232,   232,   232,   232,   232,
      232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
      232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
      232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
-     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
-     232,   206,   228,    13,    58,   106,   241,   248,   255,   258,
-     309,   310,   311,   312,   313,   314,   315,   318,   326,   329,
-     334,   339,   231,   367,   299,   264,   265,   230,     3,   299,
-       3,     3,   230,   230,   230,   230,   335,   362,   226,   301,
-     304,   305,   306,   307,   308,   243,   230,   343,   348,   348,
-     234,   227,   232,   263,   346,   232,   206,   228,     5,   233,
-     115,   231,   264,   278,   279,   280,   281,   327,   208,   208,
-     233,   289,   232,   292,   270,   272,   344,     9,     9,    12,
-     274,   300,     3,     6,     7,     8,     9,    10,    11,    84,
-     136,   171,   185,   211,   214,   215,   216,   219,   220,   232,
-     285,   286,   287,   270,   344,     6,   269,   274,   285,   288,
-       9,     9,   267,   288,   344,   287,     9,     9,   287,     9,
-     287,   285,   262,   265,   344,   287,   283,   284,   285,    27,
-     132,   174,   268,     9,     9,   364,     9,   287,   367,   283,
-     271,   344,   285,   367,   127,   201,   202,   203,   204,   205,
-     363,   367,   367,   274,     6,     7,   370,     9,   367,   273,
-     227,   230,   232,   229,   229,   229,   230,   229,   229,   247,
-     300,   344,   246,   316,   316,   231,   208,   323,   299,   216,
-     216,   206,   213,   242,   149,   320,   326,   342,   348,   233,
-     288,   216,   228,   285,   259,   260,   261,   262,    28,    70,
-     169,   204,   378,   379,   377,   230,   305,   300,   231,   206,
-     234,   299,   324,   325,     6,   250,   250,   231,   264,   290,
-     264,   294,   231,   265,   291,   294,   233,   206,   233,   233,
-     233,   232,   285,   285,   285,   285,   285,   285,     5,   285,
-     345,   347,   366,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,   207,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   226,   227,   206,   233,   233,   206,   226,
-     233,   206,   233,   233,   206,   233,   233,   233,   233,   233,
-     233,   233,   233,   233,   233,   233,   344,   216,   232,   263,
-     275,   300,   354,   356,   357,   233,   206,   233,   233,   233,
-     233,   233,   233,   206,   233,   233,   233,   206,   233,   233,
-     233,   233,   233,   233,   226,   233,   233,   233,   273,   240,
-       9,   245,   212,   232,   348,   358,   231,   248,   264,   265,
-     231,   264,   317,   231,   247,   305,   306,   162,   333,   307,
-     231,   208,   125,   294,   321,   229,   228,   228,   233,   206,
-     206,   233,   186,   372,   373,   212,   281,   287,   206,   328,
-       6,   233,   233,   344,   369,   344,   365,   233,   229,   229,
-     269,   270,   345,   233,   216,   232,   263,   275,   350,   352,
-     353,   366,   346,   285,   285,     3,   285,   285,   285,   285,
+     232,   232,   206,   228,    13,    58,   106,   241,   248,   255,
+     258,   309,   310,   311,   312,   313,   314,   315,   318,   326,
+     329,   334,   339,   231,   367,   299,   264,   265,   230,     3,
+     299,     3,     3,   230,   230,   230,   230,   335,   362,   226,
+     301,   304,   305,   306,   307,   308,     3,   243,   230,   343,
+     348,   348,   234,   227,   232,   263,   346,   232,   206,   228,
+       5,   233,   115,   231,   264,   278,   279,   280,   281,   327,
+     208,   208,   233,   289,   232,   292,   270,   272,   344,     9,
+       9,    12,   274,   300,     3,     6,     7,     8,     9,    10,
+      11,    84,   136,   171,   185,   211,   214,   215,   216,   219,
+     220,   232,   285,   286,   287,   270,   344,     6,   269,   274,
+     285,   288,     9,     9,   267,   288,   344,   287,     9,     9,
+     287,     9,   287,   285,   262,   265,   344,   287,   283,   284,
+     285,    27,   132,   174,   268,     9,     9,   364,     9,   287,
+     367,   283,   271,   344,   285,   367,   127,   201,   202,   203,
+     204,   205,   363,   367,   367,   274,     6,     7,   370,     9,
+     367,   273,   227,   230,   232,   229,   229,   229,   230,   229,
+     229,   247,   300,   344,   246,   316,   316,   231,   208,   323,
+     299,   216,   216,   206,   213,   242,   149,   320,   326,   342,
+     348,   233,   288,   216,   228,   285,   259,   260,   261,   262,
+      28,    70,   169,   204,   378,   379,   377,   230,   305,   300,
+     231,   206,   234,   299,   324,   325,     6,   250,   250,   231,
+     264,   290,   264,   294,   231,   265,   291,   294,   233,   206,
+     233,   233,   233,   232,   285,   285,   285,   285,   285,   285,
+       5,   285,   345,   347,   366,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,   207,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   226,   227,   206,   233,   233,
+     206,   226,   233,   206,   233,   233,   206,   233,   233,   233,
+     233,   233,   233,   233,   233,   233,   233,   233,   344,   216,
+     232,   263,   275,   300,   354,   356,   357,   233,   206,   233,
+     233,   233,   233,   233,   233,   206,   233,   233,   233,   206,
+     233,   233,   233,   233,   233,   233,   226,   233,   233,   233,
+     273,   240,     9,   245,   212,   232,   348,   358,   231,   248,
+     264,   265,   231,   264,   317,   231,   247,   305,   306,   162,
+     333,   307,   231,   208,   125,   294,   321,   229,   228,   228,
+     233,   206,   206,   233,   186,   372,   373,   212,   281,   287,
+     206,   328,     6,   233,   233,   344,   369,   344,   365,   233,
+     229,   229,   269,   270,   345,   233,   216,   232,   263,   275,
+     350,   352,   353,   366,   346,   285,   285,     3,   285,   285,
      285,   285,   285,   285,   285,   285,   285,   285,   285,   285,
-     285,   285,   285,     3,   285,   287,     6,   288,     9,   356,
-     343,   216,   259,   275,   355,   356,   232,   263,   284,   287,
-     270,     6,   115,   231,   233,   244,   330,   259,   206,   247,
-     247,    68,   115,   336,   337,   247,   305,   306,   332,   230,
-     208,   229,   231,   265,   295,   296,   231,    24,   262,   379,
-     375,   231,   372,   308,   324,   213,   354,   360,   361,   229,
-     348,   297,   300,   352,   343,   216,   259,   275,   351,   352,
-     233,   232,   263,   346,   208,   228,   233,   356,   343,   233,
-     356,   233,   259,   233,   305,   247,   231,   325,   233,   348,
-     299,   299,   304,   229,   229,   206,   246,   229,     5,   213,
-     208,   359,   206,   229,   230,   233,   352,   343,   233,   356,
-     233,   285,   259,   285,   356,   233,   212,   213,   247,   299,
-     305,   306,   231,   229,   229,   288,   360,   276,   356,   233,
-     308,   232,   247,    43,    60,   231,   277,   213,   259,   287,
-     208,   229,   233,   208,   229,   293,   294,   331,   293,   229,
-     247
+     285,   285,   285,   285,   285,     3,   285,   287,     6,   288,
+       9,   356,   343,   216,   259,   275,   355,   356,   232,   263,
+     284,   287,   270,     6,   115,   231,   233,   244,   330,   259,
+     206,   247,   247,    68,   115,   336,   337,   247,   305,   306,
+     332,   230,   208,   229,   231,   265,   295,   296,   231,    24,
+     262,   379,   375,   231,   372,   308,   324,   213,   354,   360,
+     361,   229,   348,   297,   300,   352,   343,   216,   259,   275,
+     351,   352,   233,   232,   263,   346,   208,   228,   233,   356,
+     343,   233,   356,   233,   259,   233,   305,   247,   231,   325,
+     233,   348,   299,   299,   304,   229,   229,   206,   246,   229,
+       5,   213,   208,   359,   206,   229,   230,   233,   352,   343,
+     233,   356,   233,   285,   259,   285,   356,   233,   212,   213,
+     247,   299,   305,   306,   231,   229,   229,   288,   360,   276,
+     356,   233,   308,   232,   247,    43,    60,   231,   277,   213,
+     259,   287,   208,   229,   233,   208,   229,   293,   294,   331,
+     293,   229,   247
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
@@ -2617,22 +2627,22 @@
      301,   301,   301,   301,   301,   301,   301,   302,   302,   303,
      303,   303,   303,   303,   303,   303,   303,   303,   304,   304,
      305,   305,   306,   307,   307,   307,   307,   307,   308,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   316,   317,
-     317,   318,   319,   320,   320,   321,   321,   322,   322,   323,
-     323,   323,   324,   325,   325,   326,   327,   328,   326,   329,
-     330,   331,   329,   332,   332,   332,   332,   333,   333,   335,
-     334,   334,   336,   336,   337,   338,   339,   340,   340,   340,
-     341,   342,   343,   343,   344,   344,   345,   345,   346,   346,
-     347,   347,   347,   348,   348,   348,   349,   349,   349,   349,
-     350,   350,   350,   351,   351,   352,   352,   353,   353,   353,
-     353,   353,   354,   354,   354,   355,   355,   356,   356,   357,
-     357,   357,   357,   357,   357,   358,   358,   359,   359,   360,
-     361,   361,   362,   362,   363,   363,   363,   363,   363,   363,
-     364,   364,   364,   365,   366,   366,   366,   366,   366,   366,
-     366,   366,   366,   366,   367,   367,   367,   368,   369,   369,
-     370,   370,   370,   371,   371,   372,   372,   373,   374,   375,
-     375,   376,   376,   377,   377,   377,   377,   378,   378,   379,
-     379,   379,   379
+     309,   310,   311,   312,   313,   314,   315,   315,   316,   316,
+     317,   317,   318,   319,   320,   320,   321,   321,   322,   322,
+     323,   323,   323,   324,   325,   325,   326,   327,   328,   326,
+     329,   330,   331,   329,   332,   332,   332,   332,   333,   333,
+     335,   334,   334,   336,   336,   337,   338,   339,   340,   340,
+     340,   341,   342,   343,   343,   344,   344,   345,   345,   346,
+     346,   347,   347,   347,   348,   348,   348,   349,   349,   349,
+     349,   350,   350,   350,   351,   351,   352,   352,   353,   353,
+     353,   353,   353,   354,   354,   354,   355,   355,   356,   356,
+     357,   357,   357,   357,   357,   357,   358,   358,   359,   359,
+     360,   361,   361,   362,   362,   363,   363,   363,   363,   363,
+     363,   364,   364,   364,   365,   366,   366,   366,   366,   366,
+     366,   366,   366,   366,   366,   367,   367,   367,   368,   369,
+     369,   370,   370,   370,   371,   371,   372,   372,   373,   374,
+     375,   375,   376,   376,   377,   377,   377,   377,   378,   378,
+     379,   379,   379,   379
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -2672,22 +2682,22 @@
        2,     1,     1,     1,     1,     1,     1,     0,     1,     1,
        2,     1,     2,     2,     1,     1,     1,     1,     2,     3,
        1,     2,     4,     1,     1,     2,     1,     2,     1,     3,
-       2,     6,     2,     6,     2,     5,     2,     0,     2,     3,
-       3,     2,     1,     2,     3,     2,     3,     6,     6,     0,
-       2,     2,     1,     1,     3,     2,     0,     0,     7,     8,
-       0,     0,    13,     1,     1,     3,     3,     0,     2,     0,
-       9,     2,     2,     3,     2,     2,     6,     1,     1,     1,
-       1,     1,     0,     2,     2,     3,     2,     3,     0,     1,
-       2,     2,     2,     3,     2,     1,     1,     3,     2,     4,
-       3,     2,     1,     3,     2,     0,     1,     3,     2,     1,
-       3,     4,     3,     2,     1,     3,     2,     0,     1,     1,
-       3,     2,     1,     3,     4,     1,     3,     0,     2,     2,
-       1,     3,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     5,     1,     1,     1,     2,     1,     2,
-       1,     2,     4,     1,     1,     2,     1,     5,     5,    10,
-       1,     3,     1,     0,     2,     0,     2,     4,     6,     0,
-       3,     1,     3,     4,     1,     1,     1,     1,     3,     1,
-       1,     1,     1
+       2,     6,     2,     6,     2,     5,     2,     3,     0,     2,
+       3,     3,     2,     1,     2,     3,     2,     3,     6,     6,
+       0,     2,     2,     1,     1,     3,     2,     0,     0,     7,
+       8,     0,     0,    13,     1,     1,     3,     3,     0,     2,
+       0,     9,     2,     2,     3,     2,     2,     6,     1,     1,
+       1,     1,     1,     0,     2,     2,     3,     2,     3,     0,
+       1,     2,     2,     2,     3,     2,     1,     1,     3,     2,
+       4,     3,     2,     1,     3,     2,     0,     1,     3,     2,
+       1,     3,     4,     3,     2,     1,     3,     2,     0,     1,
+       1,     3,     2,     1,     3,     4,     1,     3,     0,     2,
+       2,     1,     3,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     5,     1,     1,     1,     2,     1,
+       2,     1,     2,     4,     1,     1,     2,     1,     5,     5,
+      10,     1,     3,     1,     0,     2,     0,     2,     4,     6,
+       0,     3,     1,     3,     4,     1,     1,     1,     1,     3,
+       1,     1,     1,     1
 };
 
 
@@ -3435,13 +3445,13 @@
 						  write_dlldata((yyvsp[-1].stmt_list));
 						  write_local_stubs((yyvsp[-1].stmt_list));
 						}
-#line 3439 "tools/widl/parser.tab.c"
+#line 3449 "tools/widl/parser.tab.c"
     break;
 
   case 5: /* decl_statements: %empty  */
 #line 371 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3445 "tools/widl/parser.tab.c"
+#line 3455 "tools/widl/parser.tab.c"
     break;
 
   case 6: /* decl_statements: decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';'  */
@@ -3449,73 +3459,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 3453 "tools/widl/parser.tab.c"
+#line 3463 "tools/widl/parser.tab.c"
     break;
 
   case 7: /* decl_block: tDECLARE '{' decl_statements '}'  */
 #line 378 "tools/widl/parser.y"
                                              { (yyval.stmt_list) = (yyvsp[-1].stmt_list); }
-#line 3459 "tools/widl/parser.tab.c"
+#line 3469 "tools/widl/parser.tab.c"
     break;
 
   case 8: /* imp_decl_statements: %empty  */
 #line 380 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3465 "tools/widl/parser.tab.c"
+#line 3475 "tools/widl/parser.tab.c"
     break;
 
   case 9: /* imp_decl_statements: imp_decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';'  */
 #line 382 "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 3471 "tools/widl/parser.tab.c"
+#line 3481 "tools/widl/parser.tab.c"
     break;
 
   case 10: /* imp_decl_block: tDECLARE '{' imp_decl_statements '}'  */
 #line 385 "tools/widl/parser.y"
                                                      { (yyval.stmt_list) = (yyvsp[-1].stmt_list); }
-#line 3477 "tools/widl/parser.tab.c"
+#line 3487 "tools/widl/parser.tab.c"
     break;
 
   case 11: /* gbl_statements: %empty  */
 #line 387 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3483 "tools/widl/parser.tab.c"
+#line 3493 "tools/widl/parser.tab.c"
     break;
 
   case 12: /* $@1: %empty  */
 #line 388 "tools/widl/parser.y"
-                                          { push_namespace((yyvsp[-1].str)); }
-#line 3489 "tools/widl/parser.tab.c"
+                                          { push_namespaces((yyvsp[-1].str_list)); }
+#line 3499 "tools/widl/parser.tab.c"
     break;
 
   case 13: /* gbl_statements: gbl_statements namespacedef '{' $@1 gbl_statements '}'  */
 #line 389 "tools/widl/parser.y"
-                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3495 "tools/widl/parser.tab.c"
+                                                { pop_namespaces((yyvsp[-4].str_list)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 3505 "tools/widl/parser.tab.c"
     break;
 
   case 14: /* gbl_statements: gbl_statements interface ';'  */
 #line 390 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3501 "tools/widl/parser.tab.c"
+#line 3511 "tools/widl/parser.tab.c"
     break;
 
   case 15: /* gbl_statements: gbl_statements dispinterface ';'  */
 #line 391 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3507 "tools/widl/parser.tab.c"
+#line 3517 "tools/widl/parser.tab.c"
     break;
 
   case 16: /* gbl_statements: gbl_statements interfacedef  */
 #line 392 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3513 "tools/widl/parser.tab.c"
+#line 3523 "tools/widl/parser.tab.c"
     break;
 
   case 17: /* gbl_statements: gbl_statements delegatedef  */
 #line 393 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3519 "tools/widl/parser.tab.c"
+#line 3529 "tools/widl/parser.tab.c"
     break;
 
   case 18: /* gbl_statements: gbl_statements coclass ';'  */
@@ -3523,7 +3533,7 @@
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
 						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
 						}
-#line 3527 "tools/widl/parser.tab.c"
+#line 3537 "tools/widl/parser.tab.c"
     break;
 
   case 19: /* gbl_statements: gbl_statements coclassdef  */
@@ -3531,105 +3541,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 3535 "tools/widl/parser.tab.c"
+#line 3545 "tools/widl/parser.tab.c"
     break;
 
   case 20: /* gbl_statements: gbl_statements apicontract ';'  */
 #line 400 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3541 "tools/widl/parser.tab.c"
+#line 3551 "tools/widl/parser.tab.c"
     break;
 
   case 21: /* gbl_statements: gbl_statements apicontract_def  */
 #line 401 "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 3548 "tools/widl/parser.tab.c"
+#line 3558 "tools/widl/parser.tab.c"
     break;
 
   case 22: /* gbl_statements: gbl_statements runtimeclass ';'  */
 #line 403 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3554 "tools/widl/parser.tab.c"
+#line 3564 "tools/widl/parser.tab.c"
     break;
 
   case 23: /* gbl_statements: gbl_statements runtimeclass_def  */
 #line 404 "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 3561 "tools/widl/parser.tab.c"
+#line 3571 "tools/widl/parser.tab.c"
     break;
 
   case 24: /* gbl_statements: gbl_statements moduledef  */
 #line 406 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3567 "tools/widl/parser.tab.c"
+#line 3577 "tools/widl/parser.tab.c"
     break;
 
   case 25: /* gbl_statements: gbl_statements librarydef  */
 #line 407 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3573 "tools/widl/parser.tab.c"
+#line 3583 "tools/widl/parser.tab.c"
     break;
 
   case 26: /* gbl_statements: gbl_statements statement  */
 #line 408 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3579 "tools/widl/parser.tab.c"
+#line 3589 "tools/widl/parser.tab.c"
     break;
 
   case 27: /* gbl_statements: gbl_statements decl_block  */
 #line 409 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
-#line 3585 "tools/widl/parser.tab.c"
+#line 3595 "tools/widl/parser.tab.c"
     break;
 
   case 28: /* imp_statements: %empty  */
 #line 412 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3591 "tools/widl/parser.tab.c"
+#line 3601 "tools/widl/parser.tab.c"
     break;
 
   case 29: /* imp_statements: imp_statements interface ';'  */
 #line 413 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3597 "tools/widl/parser.tab.c"
+#line 3607 "tools/widl/parser.tab.c"
     break;
 
   case 30: /* imp_statements: imp_statements dispinterface ';'  */
 #line 414 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3603 "tools/widl/parser.tab.c"
+#line 3613 "tools/widl/parser.tab.c"
     break;
 
   case 31: /* $@2: %empty  */
 #line 415 "tools/widl/parser.y"
-                                          { push_namespace((yyvsp[-1].str)); }
-#line 3609 "tools/widl/parser.tab.c"
+                                          { push_namespaces((yyvsp[-1].str_list)); }
+#line 3619 "tools/widl/parser.tab.c"
     break;
 
   case 32: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
 #line 416 "tools/widl/parser.y"
-                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3615 "tools/widl/parser.tab.c"
+                                                { pop_namespaces((yyvsp[-4].str_list)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 3625 "tools/widl/parser.tab.c"
     break;
 
   case 33: /* imp_statements: imp_statements interfacedef  */
 #line 417 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3621 "tools/widl/parser.tab.c"
+#line 3631 "tools/widl/parser.tab.c"
     break;
 
   case 34: /* imp_statements: imp_statements delegatedef  */
 #line 418 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3627 "tools/widl/parser.tab.c"
+#line 3637 "tools/widl/parser.tab.c"
     break;
 
   case 35: /* imp_statements: imp_statements coclass ';'  */
 #line 419 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3633 "tools/widl/parser.tab.c"
+#line 3643 "tools/widl/parser.tab.c"
     break;
 
   case 36: /* imp_statements: imp_statements coclassdef  */
@@ -3637,117 +3647,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 3641 "tools/widl/parser.tab.c"
+#line 3651 "tools/widl/parser.tab.c"
     break;
 
   case 37: /* imp_statements: imp_statements apicontract ';'  */
 #line 423 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3647 "tools/widl/parser.tab.c"
+#line 3657 "tools/widl/parser.tab.c"
     break;
 
   case 38: /* imp_statements: imp_statements apicontract_def  */
 #line 424 "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 3654 "tools/widl/parser.tab.c"
+#line 3664 "tools/widl/parser.tab.c"
     break;
 
   case 39: /* imp_statements: imp_statements runtimeclass ';'  */
 #line 426 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3660 "tools/widl/parser.tab.c"
+#line 3670 "tools/widl/parser.tab.c"
     break;
 
   case 40: /* imp_statements: imp_statements runtimeclass_def  */
 #line 427 "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 3667 "tools/widl/parser.tab.c"
+#line 3677 "tools/widl/parser.tab.c"
     break;
 
   case 41: /* imp_statements: imp_statements moduledef  */
 #line 429 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3673 "tools/widl/parser.tab.c"
+#line 3683 "tools/widl/parser.tab.c"
     break;
 
   case 42: /* imp_statements: imp_statements statement  */
 #line 430 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3679 "tools/widl/parser.tab.c"
+#line 3689 "tools/widl/parser.tab.c"
     break;
 
   case 43: /* imp_statements: imp_statements importlib  */
 #line 431 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
-#line 3685 "tools/widl/parser.tab.c"
+#line 3695 "tools/widl/parser.tab.c"
     break;
 
   case 44: /* imp_statements: imp_statements librarydef  */
 #line 432 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3691 "tools/widl/parser.tab.c"
+#line 3701 "tools/widl/parser.tab.c"
     break;
 
   case 45: /* imp_statements: imp_statements imp_decl_block  */
 #line 433 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
-#line 3697 "tools/widl/parser.tab.c"
+#line 3707 "tools/widl/parser.tab.c"
     break;
 
   case 46: /* int_statements: %empty  */
 #line 436 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3703 "tools/widl/parser.tab.c"
+#line 3713 "tools/widl/parser.tab.c"
     break;
 
   case 47: /* int_statements: int_statements statement  */
 #line 437 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3709 "tools/widl/parser.tab.c"
+#line 3719 "tools/widl/parser.tab.c"
     break;
 
   case 50: /* statement: cppquote  */
 #line 445 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
-#line 3715 "tools/widl/parser.tab.c"
+#line 3725 "tools/widl/parser.tab.c"
     break;
 
   case 51: /* statement: typedecl ';'  */
 #line 446 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
-#line 3721 "tools/widl/parser.tab.c"
+#line 3731 "tools/widl/parser.tab.c"
     break;
 
   case 52: /* statement: declaration ';'  */
 #line 447 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
-#line 3727 "tools/widl/parser.tab.c"
+#line 3737 "tools/widl/parser.tab.c"
     break;
 
   case 53: /* statement: import  */
 #line 448 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
-#line 3733 "tools/widl/parser.tab.c"
+#line 3743 "tools/widl/parser.tab.c"
     break;
 
   case 54: /* statement: typedef ';'  */
 #line 449 "tools/widl/parser.y"
                                                 { (yyval.statement) = (yyvsp[-1].statement); }
-#line 3739 "tools/widl/parser.tab.c"
+#line 3749 "tools/widl/parser.tab.c"
     break;
 
   case 55: /* statement: aPRAGMA  */
 #line 450 "tools/widl/parser.y"
                                                 { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
-#line 3745 "tools/widl/parser.tab.c"
+#line 3755 "tools/widl/parser.tab.c"
     break;
 
   case 56: /* statement: pragma_warning  */
 #line 451 "tools/widl/parser.y"
                          { (yyval.statement) = NULL; }
-#line 3751 "tools/widl/parser.tab.c"
+#line 3761 "tools/widl/parser.tab.c"
     break;
 
   case 57: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
@@ -3759,7 +3769,7 @@
                       if(!result)
                           error_loc("expected \"disable\", \"enable\" or \"default\"\n");
                   }
-#line 3763 "tools/widl/parser.tab.c"
+#line 3773 "tools/widl/parser.tab.c"
     break;
 
   case 58: /* pragma_warning: tPRAGMA_WARNING '(' tDEFAULT ':' warnings ')'  */
@@ -3768,61 +3778,61 @@
                       (yyval.statement) = NULL;
                       do_warning("default", (yyvsp[-1].warning_list));
                   }
-#line 3772 "tools/widl/parser.tab.c"
+#line 3782 "tools/widl/parser.tab.c"
     break;
 
   case 59: /* warnings: aNUM  */
 #line 470 "tools/widl/parser.y"
                { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
-#line 3778 "tools/widl/parser.tab.c"
+#line 3788 "tools/widl/parser.tab.c"
     break;
 
   case 60: /* warnings: warnings aNUM  */
 #line 471 "tools/widl/parser.y"
                         { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
-#line 3784 "tools/widl/parser.tab.c"
+#line 3794 "tools/widl/parser.tab.c"
     break;
 
   case 62: /* typedecl: tENUM aIDENTIFIER  */
 #line 476 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3790 "tools/widl/parser.tab.c"
+#line 3800 "tools/widl/parser.tab.c"
     break;
 
   case 64: /* typedecl: tSTRUCT aIDENTIFIER  */
 #line 478 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3796 "tools/widl/parser.tab.c"
+#line 3806 "tools/widl/parser.tab.c"
     break;
 
   case 66: /* typedecl: tUNION aIDENTIFIER  */
 #line 480 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 3802 "tools/widl/parser.tab.c"
+#line 3812 "tools/widl/parser.tab.c"
     break;
 
   case 67: /* typedecl: attributes enumdef  */
 #line 481 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
-#line 3808 "tools/widl/parser.tab.c"
+#line 3818 "tools/widl/parser.tab.c"
     break;
 
   case 68: /* typedecl: attributes structdef  */
 #line 482 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
-#line 3814 "tools/widl/parser.tab.c"
+#line 3824 "tools/widl/parser.tab.c"
     break;
 
   case 69: /* typedecl: attributes uniondef  */
 #line 483 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
-#line 3820 "tools/widl/parser.tab.c"
+#line 3830 "tools/widl/parser.tab.c"
     break;
 
   case 70: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
 #line 486 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-1].str); }
-#line 3826 "tools/widl/parser.tab.c"
+#line 3836 "tools/widl/parser.tab.c"
     break;
 
   case 71: /* import_start: tIMPORT aSTRING ';'  */
@@ -3832,7 +3842,7 @@
 						  (yyval.import)->import_performed = do_import((yyvsp[-1].str));
 						  if (!(yyval.import)->import_performed) yychar = aEOF;
 						}
-#line 3836 "tools/widl/parser.tab.c"
+#line 3846 "tools/widl/parser.tab.c"
     break;
 
   case 72: /* import: import_start imp_statements aEOF  */
@@ -3841,19 +3851,19 @@
 						  if ((yyvsp[-2].import)->import_performed) pop_import();
 						  free((yyvsp[-2].import));
 						}
-#line 3845 "tools/widl/parser.tab.c"
+#line 3855 "tools/widl/parser.tab.c"
     break;
 
   case 73: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
 #line 502 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
-#line 3851 "tools/widl/parser.tab.c"
+#line 3861 "tools/widl/parser.tab.c"
     break;
 
   case 74: /* libraryhdr: tLIBRARY typename  */
 #line 505 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 3857 "tools/widl/parser.tab.c"
+#line 3867 "tools/widl/parser.tab.c"
     break;
 
   case 75: /* library_start: attributes libraryhdr '{'  */
@@ -3861,37 +3871,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 3865 "tools/widl/parser.tab.c"
+#line 3875 "tools/widl/parser.tab.c"
     break;
 
   case 76: /* librarydef: library_start imp_statements '}' semicolon_opt  */
 #line 512 "tools/widl/parser.y"
                                                 { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
-#line 3871 "tools/widl/parser.tab.c"
+#line 3881 "tools/widl/parser.tab.c"
     break;
 
   case 77: /* m_args: %empty  */
 #line 515 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 3877 "tools/widl/parser.tab.c"
+#line 3887 "tools/widl/parser.tab.c"
     break;
 
   case 79: /* arg_list: arg  */
 #line 519 "tools/widl/parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
-#line 3883 "tools/widl/parser.tab.c"
+#line 3893 "tools/widl/parser.tab.c"
     break;
 
   case 80: /* arg_list: arg_list ',' arg  */
 #line 520 "tools/widl/parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
-#line 3889 "tools/widl/parser.tab.c"
+#line 3899 "tools/widl/parser.tab.c"
     break;
 
   case 82: /* args: arg_list ',' ELLIPSIS  */
 #line 524 "tools/widl/parser.y"
-                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
-#line 3895 "tools/widl/parser.tab.c"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(xstrdup("...")) ); }
+#line 3905 "tools/widl/parser.tab.c"
     break;
 
   case 83: /* arg: attributes decl_spec m_any_declarator  */
@@ -3901,7 +3911,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 3905 "tools/widl/parser.tab.c"
+#line 3915 "tools/widl/parser.tab.c"
     break;
 
   case 84: /* arg: decl_spec m_any_declarator  */
@@ -3911,7 +3921,7 @@
 						  (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3915 "tools/widl/parser.tab.c"
+#line 3925 "tools/widl/parser.tab.c"
     break;
 
   case 85: /* array: '[' expr ']'  */
@@ -3920,91 +3930,91 @@
 						  if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0)
 						      error_loc("array dimension is not a positive integer constant\n");
 						}
-#line 3924 "tools/widl/parser.tab.c"
+#line 3934 "tools/widl/parser.tab.c"
     break;
 
   case 86: /* array: '[' '*' ']'  */
 #line 544 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3930 "tools/widl/parser.tab.c"
+#line 3940 "tools/widl/parser.tab.c"
     break;
 
   case 87: /* array: '[' ']'  */
 #line 545 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3936 "tools/widl/parser.tab.c"
+#line 3946 "tools/widl/parser.tab.c"
     break;
 
   case 88: /* m_attributes: %empty  */
 #line 548 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 3942 "tools/widl/parser.tab.c"
+#line 3952 "tools/widl/parser.tab.c"
     break;
 
   case 90: /* attributes: '[' attrib_list ']'  */
 #line 553 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 3948 "tools/widl/parser.tab.c"
+#line 3958 "tools/widl/parser.tab.c"
     break;
 
   case 91: /* attrib_list: attribute  */
 #line 556 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
-#line 3954 "tools/widl/parser.tab.c"
+#line 3964 "tools/widl/parser.tab.c"
     break;
 
   case 92: /* attrib_list: attrib_list ',' attribute  */
 #line 557 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
-#line 3960 "tools/widl/parser.tab.c"
+#line 3970 "tools/widl/parser.tab.c"
     break;
 
   case 93: /* attrib_list: attrib_list ']' '[' attribute  */
 #line 558 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
-#line 3966 "tools/widl/parser.tab.c"
+#line 3976 "tools/widl/parser.tab.c"
     break;
 
   case 94: /* str_list: aSTRING  */
 #line 561 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
-#line 3972 "tools/widl/parser.tab.c"
+#line 3982 "tools/widl/parser.tab.c"
     break;
 
   case 95: /* str_list: str_list ',' aSTRING  */
 #line 562 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
-#line 3978 "tools/widl/parser.tab.c"
+#line 3988 "tools/widl/parser.tab.c"
     break;
 
   case 96: /* marshaling_behavior: tAGILE  */
 #line 566 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_AGILE; }
-#line 3984 "tools/widl/parser.tab.c"
+#line 3994 "tools/widl/parser.tab.c"
     break;
 
   case 97: /* marshaling_behavior: tNONE  */
 #line 567 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_NONE; }
-#line 3990 "tools/widl/parser.tab.c"
+#line 4000 "tools/widl/parser.tab.c"
     break;
 
   case 98: /* marshaling_behavior: tSTANDARD  */
 #line 568 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_STANDARD; }
-#line 3996 "tools/widl/parser.tab.c"
+#line 4006 "tools/widl/parser.tab.c"
     break;
 
   case 99: /* contract_ver: aNUM  */
 #line 572 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION(0, (yyvsp[0].num)); }
-#line 4002 "tools/widl/parser.tab.c"
+#line 4012 "tools/widl/parser.tab.c"
     break;
 
   case 100: /* contract_ver: aNUM '.' aNUM  */
 #line 573 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), (yyvsp[-2].num)); }
-#line 4008 "tools/widl/parser.tab.c"
+#line 4018 "tools/widl/parser.tab.c"
     break;
 
   case 101: /* contract_req: decl_spec ',' contract_ver  */
@@ -4014,7 +4024,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 4018 "tools/widl/parser.tab.c"
+#line 4028 "tools/widl/parser.tab.c"
     break;
 
   case 102: /* static_attr: decl_spec ',' contract_req  */
@@ -4023,7 +4033,7 @@
 						      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 4027 "tools/widl/parser.tab.c"
+#line 4037 "tools/widl/parser.tab.c"
     break;
 
   case 103: /* activatable_attr: decl_spec ',' contract_req  */
@@ -4032,229 +4042,229 @@
 						      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 4036 "tools/widl/parser.tab.c"
+#line 4046 "tools/widl/parser.tab.c"
     break;
 
   case 104: /* activatable_attr: contract_req  */
 #line 592 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr); }
-#line 4042 "tools/widl/parser.tab.c"
+#line 4052 "tools/widl/parser.tab.c"
     break;
 
   case 105: /* attribute: %empty  */
 #line 594 "tools/widl/parser.y"
                                                 { (yyval.attr) = NULL; }
-#line 4048 "tools/widl/parser.tab.c"
+#line 4058 "tools/widl/parser.tab.c"
     break;
 
   case 106: /* attribute: tACTIVATABLE '(' activatable_attr ')'  */
 #line 595 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ACTIVATABLE, (yyvsp[-1].expr)); }
-#line 4054 "tools/widl/parser.tab.c"
+#line 4064 "tools/widl/parser.tab.c"
     break;
 
   case 107: /* attribute: tAGGREGATABLE  */
 #line 596 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
-#line 4060 "tools/widl/parser.tab.c"
+#line 4070 "tools/widl/parser.tab.c"
     break;
 
   case 108: /* attribute: tANNOTATION '(' aSTRING ')'  */
 #line 597 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
-#line 4066 "tools/widl/parser.tab.c"
+#line 4076 "tools/widl/parser.tab.c"
     break;
 
   case 109: /* attribute: tAPPOBJECT  */
 #line 598 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
-#line 4072 "tools/widl/parser.tab.c"
+#line 4082 "tools/widl/parser.tab.c"
     break;
 
   case 110: /* attribute: tASYNC  */
 #line 599 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ASYNC); }
-#line 4078 "tools/widl/parser.tab.c"
+#line 4088 "tools/widl/parser.tab.c"
     break;
 
   case 111: /* attribute: tAUTOHANDLE  */
 #line 600 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
-#line 4084 "tools/widl/parser.tab.c"
+#line 4094 "tools/widl/parser.tab.c"
     break;
 
   case 112: /* attribute: tBINDABLE  */
 #line 601 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_BINDABLE); }
-#line 4090 "tools/widl/parser.tab.c"
+#line 4100 "tools/widl/parser.tab.c"
     break;
 
   case 113: /* attribute: tBROADCAST  */
 #line 602 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_BROADCAST); }
-#line 4096 "tools/widl/parser.tab.c"
+#line 4106 "tools/widl/parser.tab.c"
     break;
 
   case 114: /* attribute: tCALLAS '(' ident ')'  */
 #line 603 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
-#line 4102 "tools/widl/parser.tab.c"
+#line 4112 "tools/widl/parser.tab.c"
     break;
 
   case 115: /* attribute: tCASE '(' expr_list_int_const ')'  */
 #line 604 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
-#line 4108 "tools/widl/parser.tab.c"
+#line 4118 "tools/widl/parser.tab.c"
     break;
 
   case 116: /* attribute: tCODE  */
 #line 605 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_CODE); }
-#line 4114 "tools/widl/parser.tab.c"
+#line 4124 "tools/widl/parser.tab.c"
     break;
 
   case 117: /* attribute: tCOMMSTATUS  */
 #line 606 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
-#line 4120 "tools/widl/parser.tab.c"
+#line 4130 "tools/widl/parser.tab.c"
     break;
 
   case 118: /* attribute: tCONTEXTHANDLE  */
 #line 607 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-#line 4126 "tools/widl/parser.tab.c"
+#line 4136 "tools/widl/parser.tab.c"
     break;
 
   case 119: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
 #line 608 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-#line 4132 "tools/widl/parser.tab.c"
+#line 4142 "tools/widl/parser.tab.c"
     break;
 
   case 120: /* attribute: tCONTEXTHANDLESERIALIZE  */
 #line 609 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-#line 4138 "tools/widl/parser.tab.c"
+#line 4148 "tools/widl/parser.tab.c"
     break;
 
   case 121: /* attribute: tCONTRACT '(' contract_req ')'  */
 #line 610 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_CONTRACT, (yyvsp[-1].expr)); }
-#line 4144 "tools/widl/parser.tab.c"
+#line 4154 "tools/widl/parser.tab.c"
     break;
 
   case 122: /* attribute: tCONTRACTVERSION '(' contract_ver ')'  */
 #line 611 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_CONTRACTVERSION, (yyvsp[-1].num)); }
-#line 4150 "tools/widl/parser.tab.c"
+#line 4160 "tools/widl/parser.tab.c"
     break;
 
   case 123: /* attribute: tCONTROL  */
 #line 612 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_CONTROL); }
-#line 4156 "tools/widl/parser.tab.c"
+#line 4166 "tools/widl/parser.tab.c"
     break;
 
   case 124: /* attribute: tCUSTOM '(' uuid_string ',' expr_const ')'  */
 #line 613 "tools/widl/parser.y"
                                                      { (yyval.attr) = make_custom_attr((yyvsp[-3].uuid), (yyvsp[-1].expr)); }
-#line 4162 "tools/widl/parser.tab.c"
+#line 4172 "tools/widl/parser.tab.c"
     break;
 
   case 125: /* attribute: tDECODE  */
 #line 614 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 4168 "tools/widl/parser.tab.c"
+#line 4178 "tools/widl/parser.tab.c"
     break;
 
   case 126: /* attribute: tDEFAULT  */
 #line 615 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULT); }
-#line 4174 "tools/widl/parser.tab.c"
+#line 4184 "tools/widl/parser.tab.c"
     break;
 
   case 127: /* attribute: tDEFAULTBIND  */
 #line 616 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
-#line 4180 "tools/widl/parser.tab.c"
+#line 4190 "tools/widl/parser.tab.c"
     break;
 
   case 128: /* attribute: tDEFAULTCOLLELEM  */
 #line 617 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
-#line 4186 "tools/widl/parser.tab.c"
+#line 4196 "tools/widl/parser.tab.c"
     break;
 
   case 129: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
 #line 618 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
-#line 4192 "tools/widl/parser.tab.c"
+#line 4202 "tools/widl/parser.tab.c"
     break;
 
   case 130: /* attribute: tDEFAULTVTABLE  */
 #line 619 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
-#line 4198 "tools/widl/parser.tab.c"
+#line 4208 "tools/widl/parser.tab.c"
     break;
 
   case 131: /* attribute: tDISABLECONSISTENCYCHECK  */
 #line 620 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
-#line 4204 "tools/widl/parser.tab.c"
+#line 4214 "tools/widl/parser.tab.c"
     break;
 
   case 132: /* attribute: tDISPLAYBIND  */
 #line 621 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
-#line 4210 "tools/widl/parser.tab.c"
+#line 4220 "tools/widl/parser.tab.c"
     break;
 
   case 133: /* attribute: tDLLNAME '(' aSTRING ')'  */
 #line 622 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
-#line 4216 "tools/widl/parser.tab.c"
+#line 4226 "tools/widl/parser.tab.c"
     break;
 
   case 134: /* attribute: tDUAL  */
 #line 623 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DUAL); }
-#line 4222 "tools/widl/parser.tab.c"
+#line 4232 "tools/widl/parser.tab.c"
     break;
 
   case 135: /* attribute: tENABLEALLOCATE  */
 #line 624 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
-#line 4228 "tools/widl/parser.tab.c"
+#line 4238 "tools/widl/parser.tab.c"
     break;
 
   case 136: /* attribute: tENCODE  */
 #line 625 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 4234 "tools/widl/parser.tab.c"
+#line 4244 "tools/widl/parser.tab.c"
     break;
 
   case 137: /* attribute: tENDPOINT '(' str_list ')'  */
 #line 626 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
-#line 4240 "tools/widl/parser.tab.c"
+#line 4250 "tools/widl/parser.tab.c"
     break;
 
   case 138: /* attribute: tENTRY '(' expr_const ')'  */
 #line 627 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
-#line 4246 "tools/widl/parser.tab.c"
+#line 4256 "tools/widl/parser.tab.c"
     break;
 
   case 139: /* attribute: tEVENTADD  */
 #line 628 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EVENTADD); }
-#line 4252 "tools/widl/parser.tab.c"
+#line 4262 "tools/widl/parser.tab.c"
     break;
 
   case 140: /* attribute: tEVENTREMOVE  */
 #line 629 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EVENTREMOVE); }
-#line 4258 "tools/widl/parser.tab.c"
+#line 4268 "tools/widl/parser.tab.c"
     break;
 
   case 141: /* attribute: tEXCLUSIVETO '(' decl_spec ')'  */
@@ -4262,295 +4272,295 @@
                                                 { 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 4266 "tools/widl/parser.tab.c"
+#line 4276 "tools/widl/parser.tab.c"
     break;
 
   case 142: /* attribute: tEXPLICITHANDLE  */
 #line 633 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 4272 "tools/widl/parser.tab.c"
+#line 4282 "tools/widl/parser.tab.c"
     break;
 
   case 143: /* attribute: tFAULTSTATUS  */
 #line 634 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
-#line 4278 "tools/widl/parser.tab.c"
+#line 4288 "tools/widl/parser.tab.c"
     break;
 
   case 144: /* attribute: tFLAGS  */
 #line 635 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_FLAGS); }
-#line 4284 "tools/widl/parser.tab.c"
+#line 4294 "tools/widl/parser.tab.c"
     break;
 
   case 145: /* attribute: tFORCEALLOCATE  */
 #line 636 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
-#line 4290 "tools/widl/parser.tab.c"
+#line 4300 "tools/widl/parser.tab.c"
     break;
 
   case 146: /* attribute: tHANDLE  */
 #line 637 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_HANDLE); }
-#line 4296 "tools/widl/parser.tab.c"
+#line 4306 "tools/widl/parser.tab.c"
     break;
 
   case 147: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
 #line 638 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
-#line 4302 "tools/widl/parser.tab.c"
+#line 4312 "tools/widl/parser.tab.c"
     break;
 
   case 148: /* attribute: tHELPFILE '(' aSTRING ')'  */
 #line 639 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
-#line 4308 "tools/widl/parser.tab.c"
+#line 4318 "tools/widl/parser.tab.c"
     break;
 
   case 149: /* attribute: tHELPSTRING '(' aSTRING ')'  */
 #line 640 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
-#line 4314 "tools/widl/parser.tab.c"
+#line 4324 "tools/widl/parser.tab.c"
     break;
 
   case 150: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
 #line 641 "tools/widl/parser.y"
                                                         { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
-#line 4320 "tools/widl/parser.tab.c"
+#line 4330 "tools/widl/parser.tab.c"
     break;
 
   case 151: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
 #line 642 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
-#line 4326 "tools/widl/parser.tab.c"
+#line 4336 "tools/widl/parser.tab.c"
     break;
 
   case 152: /* attribute: tHIDDEN  */
 #line 643 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_HIDDEN); }
-#line 4332 "tools/widl/parser.tab.c"
+#line 4342 "tools/widl/parser.tab.c"
     break;
 
   case 153: /* attribute: tID '(' expr_int_const ')'  */
 #line 644 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
-#line 4338 "tools/widl/parser.tab.c"
+#line 4348 "tools/widl/parser.tab.c"
     break;
 
   case 154: /* attribute: tIDEMPOTENT  */
 #line 645 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
-#line 4344 "tools/widl/parser.tab.c"
+#line 4354 "tools/widl/parser.tab.c"
     break;
 
   case 155: /* attribute: tIGNORE  */
 #line 646 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IGNORE); }
-#line 4350 "tools/widl/parser.tab.c"
+#line 4360 "tools/widl/parser.tab.c"
     break;
 
   case 156: /* attribute: tIIDIS '(' expr ')'  */
 #line 647 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
-#line 4356 "tools/widl/parser.tab.c"
+#line 4366 "tools/widl/parser.tab.c"
     break;
 
   case 157: /* attribute: tIMMEDIATEBIND  */
 #line 648 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
-#line 4362 "tools/widl/parser.tab.c"
+#line 4372 "tools/widl/parser.tab.c"
     break;
 
   case 158: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
 #line 649 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
-#line 4368 "tools/widl/parser.tab.c"
+#line 4378 "tools/widl/parser.tab.c"
     break;
 
   case 159: /* attribute: tIN  */
 #line 650 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_IN); }
-#line 4374 "tools/widl/parser.tab.c"
+#line 4384 "tools/widl/parser.tab.c"
     break;
 
   case 160: /* attribute: tINPUTSYNC  */
 #line 651 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
-#line 4380 "tools/widl/parser.tab.c"
+#line 4390 "tools/widl/parser.tab.c"
     break;
 
   case 161: /* attribute: tLENGTHIS '(' m_exprs ')'  */
 #line 652 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
-#line 4386 "tools/widl/parser.tab.c"
+#line 4396 "tools/widl/parser.tab.c"
     break;
 
   case 162: /* attribute: tLCID '(' expr_int_const ')'  */
 #line 653 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
-#line 4392 "tools/widl/parser.tab.c"
+#line 4402 "tools/widl/parser.tab.c"
     break;
 
   case 163: /* attribute: tLCID  */
 #line 654 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
-#line 4398 "tools/widl/parser.tab.c"
+#line 4408 "tools/widl/parser.tab.c"
     break;
 
   case 164: /* attribute: tLICENSED  */
 #line 655 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_LICENSED); }
-#line 4404 "tools/widl/parser.tab.c"
+#line 4414 "tools/widl/parser.tab.c"
     break;
 
   case 165: /* attribute: tLOCAL  */
 #line 656 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_LOCAL); }
-#line 4410 "tools/widl/parser.tab.c"
+#line 4420 "tools/widl/parser.tab.c"
     break;
 
   case 166: /* attribute: tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'  */
 #line 658 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_MARSHALING_BEHAVIOR, (yyvsp[-1].num)); }
-#line 4416 "tools/widl/parser.tab.c"
+#line 4426 "tools/widl/parser.tab.c"
     break;
 
   case 167: /* attribute: tMAYBE  */
 #line 659 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_MAYBE); }
-#line 4422 "tools/widl/parser.tab.c"
+#line 4432 "tools/widl/parser.tab.c"
     break;
 
   case 168: /* attribute: tMESSAGE  */
 #line 660 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_MESSAGE); }
-#line 4428 "tools/widl/parser.tab.c"
+#line 4438 "tools/widl/parser.tab.c"
     break;
 
   case 169: /* attribute: tNOCODE  */
 #line 661 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NOCODE); }
-#line 4434 "tools/widl/parser.tab.c"
+#line 4444 "tools/widl/parser.tab.c"
     break;
 
   case 170: /* attribute: tNONBROWSABLE  */
 #line 662 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
-#line 4440 "tools/widl/parser.tab.c"
+#line 4450 "tools/widl/parser.tab.c"
     break;
 
   case 171: /* attribute: tNONCREATABLE  */
 #line 663 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
-#line 4446 "tools/widl/parser.tab.c"
+#line 4456 "tools/widl/parser.tab.c"
     break;
 
   case 172: /* attribute: tNONEXTENSIBLE  */
 #line 664 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
-#line 4452 "tools/widl/parser.tab.c"
+#line 4462 "tools/widl/parser.tab.c"
     break;
 
   case 173: /* attribute: tNOTIFY  */
 #line 665 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NOTIFY); }
-#line 4458 "tools/widl/parser.tab.c"
+#line 4468 "tools/widl/parser.tab.c"
     break;
 
   case 174: /* attribute: tNOTIFYFLAG  */
 #line 666 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
-#line 4464 "tools/widl/parser.tab.c"
+#line 4474 "tools/widl/parser.tab.c"
     break;
 
   case 175: /* attribute: tOBJECT  */
 #line 667 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OBJECT); }
-#line 4470 "tools/widl/parser.tab.c"
+#line 4480 "tools/widl/parser.tab.c"
     break;
 
   case 176: /* attribute: tODL  */
 #line 668 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ODL); }
-#line 4476 "tools/widl/parser.tab.c"
+#line 4486 "tools/widl/parser.tab.c"
     break;
 
   case 177: /* attribute: tOLEAUTOMATION  */
 #line 669 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
-#line 4482 "tools/widl/parser.tab.c"
+#line 4492 "tools/widl/parser.tab.c"
     break;
 
   case 178: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
 #line 670 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
-#line 4488 "tools/widl/parser.tab.c"
+#line 4498 "tools/widl/parser.tab.c"
     break;
 
   case 179: /* attribute: tOPTIONAL  */
 #line 671 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
-#line 4494 "tools/widl/parser.tab.c"
+#line 4504 "tools/widl/parser.tab.c"
     break;
 
   case 180: /* attribute: tOUT  */
 #line 672 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_OUT); }
-#line 4500 "tools/widl/parser.tab.c"
+#line 4510 "tools/widl/parser.tab.c"
     break;
 
   case 181: /* attribute: tOVERLOAD '(' aSTRING ')'  */
 #line 673 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_OVERLOAD, (yyvsp[-1].str)); }
-#line 4506 "tools/widl/parser.tab.c"
+#line 4516 "tools/widl/parser.tab.c"
     break;
 
   case 182: /* attribute: tPARTIALIGNORE  */
 #line 674 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
-#line 4512 "tools/widl/parser.tab.c"
+#line 4522 "tools/widl/parser.tab.c"
     break;
 
   case 183: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
 #line 675 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
-#line 4518 "tools/widl/parser.tab.c"
+#line 4528 "tools/widl/parser.tab.c"
     break;
 
   case 184: /* attribute: tPROGID '(' aSTRING ')'  */
 #line 676 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
-#line 4524 "tools/widl/parser.tab.c"
+#line 4534 "tools/widl/parser.tab.c"
     break;
 
   case 185: /* attribute: tPROPGET  */
 #line 677 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROPGET); }
-#line 4530 "tools/widl/parser.tab.c"
+#line 4540 "tools/widl/parser.tab.c"
     break;
 
   case 186: /* attribute: tPROPPUT  */
 #line 678 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROPPUT); }
-#line 4536 "tools/widl/parser.tab.c"
+#line 4546 "tools/widl/parser.tab.c"
     break;
 
   case 187: /* attribute: tPROPPUTREF  */
 #line 679 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
-#line 4542 "tools/widl/parser.tab.c"
+#line 4552 "tools/widl/parser.tab.c"
     break;
 
   case 188: /* attribute: tPROXY  */
 #line 680 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PROXY); }
-#line 4548 "tools/widl/parser.tab.c"
+#line 4558 "tools/widl/parser.tab.c"
     break;
 
   case 189: /* attribute: tPUBLIC  */
 #line 681 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_PUBLIC); }
-#line 4554 "tools/widl/parser.tab.c"
+#line 4564 "tools/widl/parser.tab.c"
     break;
 
   case 190: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
@@ -4558,157 +4568,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 4562 "tools/widl/parser.tab.c"
+#line 4572 "tools/widl/parser.tab.c"
     break;
 
   case 191: /* attribute: tREADONLY  */
 #line 686 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_READONLY); }
-#line 4568 "tools/widl/parser.tab.c"
+#line 4578 "tools/widl/parser.tab.c"
     break;
 
   case 192: /* attribute: tREPRESENTAS '(' type ')'  */
 #line 687 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
-#line 4574 "tools/widl/parser.tab.c"
+#line 4584 "tools/widl/parser.tab.c"
     break;
 
   case 193: /* attribute: tREQUESTEDIT  */
 #line 688 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
-#line 4580 "tools/widl/parser.tab.c"
+#line 4590 "tools/widl/parser.tab.c"
     break;
 
   case 194: /* attribute: tRESTRICTED  */
 #line 689 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
-#line 4586 "tools/widl/parser.tab.c"
+#line 4596 "tools/widl/parser.tab.c"
     break;
 
   case 195: /* attribute: tRETVAL  */
 #line 690 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_RETVAL); }
-#line 4592 "tools/widl/parser.tab.c"
+#line 4602 "tools/widl/parser.tab.c"
     break;
 
   case 196: /* attribute: tSIZEIS '(' m_exprs ')'  */
 #line 691 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
-#line 4598 "tools/widl/parser.tab.c"
+#line 4608 "tools/widl/parser.tab.c"
     break;
 
   case 197: /* attribute: tSOURCE  */
 #line 692 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_SOURCE); }
-#line 4604 "tools/widl/parser.tab.c"
+#line 4614 "tools/widl/parser.tab.c"
     break;
 
   case 198: /* attribute: tSTATIC '(' static_attr ')'  */
 #line 693 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_STATIC, (yyvsp[-1].expr)); }
-#line 4610 "tools/widl/parser.tab.c"
+#line 4620 "tools/widl/parser.tab.c"
     break;
 
   case 199: /* attribute: tSTRICTCONTEXTHANDLE  */
 #line 694 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
-#line 4616 "tools/widl/parser.tab.c"
+#line 4626 "tools/widl/parser.tab.c"
     break;
 
   case 200: /* attribute: tSTRING  */
 #line 695 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_STRING); }
-#line 4622 "tools/widl/parser.tab.c"
+#line 4632 "tools/widl/parser.tab.c"
     break;
 
   case 201: /* attribute: tSWITCHIS '(' expr ')'  */
 #line 696 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
-#line 4628 "tools/widl/parser.tab.c"
+#line 4638 "tools/widl/parser.tab.c"
     break;
 
   case 202: /* attribute: tSWITCHTYPE '(' type ')'  */
 #line 697 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
-#line 4634 "tools/widl/parser.tab.c"
+#line 4644 "tools/widl/parser.tab.c"
     break;
 
   case 203: /* attribute: tTRANSMITAS '(' type ')'  */
 #line 698 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
-#line 4640 "tools/widl/parser.tab.c"
+#line 4650 "tools/widl/parser.tab.c"
     break;
 
   case 204: /* attribute: tTHREADING '(' threading_type ')'  */
 #line 699 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
-#line 4646 "tools/widl/parser.tab.c"
+#line 4656 "tools/widl/parser.tab.c"
     break;
 
   case 205: /* attribute: tUIDEFAULT  */
 #line 700 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
-#line 4652 "tools/widl/parser.tab.c"
+#line 4662 "tools/widl/parser.tab.c"
     break;
 
   case 206: /* attribute: tUSESGETLASTERROR  */
 #line 701 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
-#line 4658 "tools/widl/parser.tab.c"
+#line 4668 "tools/widl/parser.tab.c"
     break;
 
   case 207: /* attribute: tUSERMARSHAL '(' type ')'  */
 #line 702 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
-#line 4664 "tools/widl/parser.tab.c"
+#line 4674 "tools/widl/parser.tab.c"
     break;
 
   case 208: /* attribute: tUUID '(' uuid_string ')'  */
 #line 703 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
-#line 4670 "tools/widl/parser.tab.c"
+#line 4680 "tools/widl/parser.tab.c"
     break;
 
   case 209: /* attribute: tASYNCUUID '(' uuid_string ')'  */
 #line 704 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
-#line 4676 "tools/widl/parser.tab.c"
+#line 4686 "tools/widl/parser.tab.c"
     break;
 
   case 210: /* attribute: tV1ENUM  */
 #line 705 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_V1ENUM); }
-#line 4682 "tools/widl/parser.tab.c"
+#line 4692 "tools/widl/parser.tab.c"
     break;
 
   case 211: /* attribute: tVARARG  */
 #line 706 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_VARARG); }
-#line 4688 "tools/widl/parser.tab.c"
+#line 4698 "tools/widl/parser.tab.c"
     break;
 
   case 212: /* attribute: tVERSION '(' version ')'  */
 #line 707 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
-#line 4694 "tools/widl/parser.tab.c"
+#line 4704 "tools/widl/parser.tab.c"
     break;
 
   case 213: /* attribute: tVIPROGID '(' aSTRING ')'  */
 #line 708 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
-#line 4700 "tools/widl/parser.tab.c"
+#line 4710 "tools/widl/parser.tab.c"
     break;
 
   case 214: /* attribute: tWIREMARSHAL '(' type ')'  */
 #line 709 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
-#line 4706 "tools/widl/parser.tab.c"
+#line 4716 "tools/widl/parser.tab.c"
     break;
 
   case 215: /* attribute: pointer_type  */
 #line 710 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
-#line 4712 "tools/widl/parser.tab.c"
+#line 4722 "tools/widl/parser.tab.c"
     break;
 
   case 217: /* uuid_string: aSTRING  */
@@ -4716,43 +4726,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 4720 "tools/widl/parser.tab.c"
+#line 4730 "tools/widl/parser.tab.c"
     break;
 
   case 218: /* callconv: tCDECL  */
 #line 720 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__cdecl"); }
-#line 4726 "tools/widl/parser.tab.c"
+#line 4736 "tools/widl/parser.tab.c"
     break;
 
   case 219: /* callconv: tFASTCALL  */
 #line 721 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__fastcall"); }
-#line 4732 "tools/widl/parser.tab.c"
+#line 4742 "tools/widl/parser.tab.c"
     break;
 
   case 220: /* callconv: tPASCAL  */
 #line 722 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__pascal"); }
-#line 4738 "tools/widl/parser.tab.c"
+#line 4748 "tools/widl/parser.tab.c"
     break;
 
   case 221: /* callconv: tSTDCALL  */
 #line 723 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__stdcall"); }
-#line 4744 "tools/widl/parser.tab.c"
+#line 4754 "tools/widl/parser.tab.c"
     break;
 
   case 222: /* cases: %empty  */
 #line 726 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4750 "tools/widl/parser.tab.c"
+#line 4760 "tools/widl/parser.tab.c"
     break;
 
   case 223: /* cases: cases case  */
 #line 727 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4756 "tools/widl/parser.tab.c"
+#line 4766 "tools/widl/parser.tab.c"
     break;
 
   case 224: /* case: tCASE expr_int_const ':' union_field  */
@@ -4761,7 +4771,7 @@
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4765 "tools/widl/parser.tab.c"
+#line 4775 "tools/widl/parser.tab.c"
     break;
 
   case 225: /* case: tDEFAULT ':' union_field  */
@@ -4770,19 +4780,19 @@
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4774 "tools/widl/parser.tab.c"
+#line 4784 "tools/widl/parser.tab.c"
     break;
 
   case 226: /* enums: %empty  */
 #line 740 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4780 "tools/widl/parser.tab.c"
+#line 4790 "tools/widl/parser.tab.c"
     break;
 
   case 227: /* enums: enum_list ','  */
 #line 741 "tools/widl/parser.y"
                                                 { (yyval.var_list) = (yyvsp[-1].var_list); }
-#line 4786 "tools/widl/parser.tab.c"
+#line 4796 "tools/widl/parser.tab.c"
     break;
 
   case 229: /* enum_list: enum  */
@@ -4791,7 +4801,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 4795 "tools/widl/parser.tab.c"
+#line 4805 "tools/widl/parser.tab.c"
     break;
 
   case 230: /* enum_list: enum_list ',' enum  */
@@ -4806,7 +4816,7 @@
                                                   }
                                                   (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
 						}
-#line 4810 "tools/widl/parser.tab.c"
+#line 4820 "tools/widl/parser.tab.c"
     break;
 
   case 231: /* enum_member: m_attributes ident  */
@@ -4814,7 +4824,7 @@
                                                 { (yyval.var) = (yyvsp[0].var);
 						  (yyval.var)->attrs = check_enum_member_attrs((yyvsp[-1].attr_list));
 						}
-#line 4818 "tools/widl/parser.tab.c"
+#line 4828 "tools/widl/parser.tab.c"
     break;
 
   case 232: /* enum: enum_member '=' expr_int_const  */
@@ -4823,7 +4833,7 @@
 						  (yyval.var)->eval = (yyvsp[0].expr);
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4827 "tools/widl/parser.tab.c"
+#line 4837 "tools/widl/parser.tab.c"
     break;
 
   case 233: /* enum: enum_member  */
@@ -4831,289 +4841,289 @@
                                                 { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4835 "tools/widl/parser.tab.c"
+#line 4845 "tools/widl/parser.tab.c"
     break;
 
   case 234: /* enumdef: tENUM m_typename '{' enums '}'  */
 #line 775 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 4841 "tools/widl/parser.tab.c"
+#line 4851 "tools/widl/parser.tab.c"
     break;
 
   case 235: /* m_exprs: m_expr  */
 #line 778 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4847 "tools/widl/parser.tab.c"
+#line 4857 "tools/widl/parser.tab.c"
     break;
 
   case 236: /* m_exprs: m_exprs ',' m_expr  */
 #line 779 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4853 "tools/widl/parser.tab.c"
+#line 4863 "tools/widl/parser.tab.c"
     break;
 
   case 237: /* m_expr: %empty  */
 #line 782 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 4859 "tools/widl/parser.tab.c"
+#line 4869 "tools/widl/parser.tab.c"
     break;
 
   case 239: /* expr: aNUM  */
 #line 786 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
-#line 4865 "tools/widl/parser.tab.c"
+#line 4875 "tools/widl/parser.tab.c"
     break;
 
   case 240: /* expr: aHEXNUM  */
 #line 787 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
-#line 4871 "tools/widl/parser.tab.c"
+#line 4881 "tools/widl/parser.tab.c"
     break;
 
   case 241: /* expr: aDOUBLE  */
 #line 788 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
-#line 4877 "tools/widl/parser.tab.c"
+#line 4887 "tools/widl/parser.tab.c"
     break;
 
   case 242: /* expr: tFALSE  */
 #line 789 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
-#line 4883 "tools/widl/parser.tab.c"
+#line 4893 "tools/widl/parser.tab.c"
     break;
 
   case 243: /* expr: tNULL  */
 #line 790 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
-#line 4889 "tools/widl/parser.tab.c"
+#line 4899 "tools/widl/parser.tab.c"
     break;
 
   case 244: /* expr: tTRUE  */
 #line 791 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
-#line 4895 "tools/widl/parser.tab.c"
+#line 4905 "tools/widl/parser.tab.c"
     break;
 
   case 245: /* expr: aSTRING  */
 #line 792 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
-#line 4901 "tools/widl/parser.tab.c"
+#line 4911 "tools/widl/parser.tab.c"
     break;
 
   case 246: /* expr: aWSTRING  */
 #line 793 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
-#line 4907 "tools/widl/parser.tab.c"
+#line 4917 "tools/widl/parser.tab.c"
     break;
 
   case 247: /* expr: aSQSTRING  */
 #line 794 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
-#line 4913 "tools/widl/parser.tab.c"
+#line 4923 "tools/widl/parser.tab.c"
     break;
 
   case 248: /* expr: aIDENTIFIER  */
 #line 795 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
-#line 4919 "tools/widl/parser.tab.c"
+#line 4929 "tools/widl/parser.tab.c"
     break;
 
   case 249: /* expr: expr '?' expr ':' expr  */
 #line 796 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4925 "tools/widl/parser.tab.c"
+#line 4935 "tools/widl/parser.tab.c"
     break;
 
   case 250: /* expr: expr LOGICALOR expr  */
 #line 797 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4931 "tools/widl/parser.tab.c"
+#line 4941 "tools/widl/parser.tab.c"
     break;
 
   case 251: /* expr: expr LOGICALAND expr  */
 #line 798 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4937 "tools/widl/parser.tab.c"
+#line 4947 "tools/widl/parser.tab.c"
     break;
 
   case 252: /* expr: expr '|' expr  */
 #line 799 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4943 "tools/widl/parser.tab.c"
+#line 4953 "tools/widl/parser.tab.c"
     break;
 
   case 253: /* expr: expr '^' expr  */
 #line 800 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4949 "tools/widl/parser.tab.c"
+#line 4959 "tools/widl/parser.tab.c"
     break;
 
   case 254: /* expr: expr '&' expr  */
 #line 801 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4955 "tools/widl/parser.tab.c"
+#line 4965 "tools/widl/parser.tab.c"
     break;
 
   case 255: /* expr: expr EQUALITY expr  */
 #line 802 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4961 "tools/widl/parser.tab.c"
+#line 4971 "tools/widl/parser.tab.c"
     break;
 
   case 256: /* expr: expr INEQUALITY expr  */
 #line 803 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4967 "tools/widl/parser.tab.c"
+#line 4977 "tools/widl/parser.tab.c"
     break;
 
   case 257: /* expr: expr '>' expr  */
 #line 804 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4973 "tools/widl/parser.tab.c"
+#line 4983 "tools/widl/parser.tab.c"
     break;
 
   case 258: /* expr: expr '<' expr  */
 #line 805 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4979 "tools/widl/parser.tab.c"
+#line 4989 "tools/widl/parser.tab.c"
     break;
 
   case 259: /* expr: expr GREATEREQUAL expr  */
 #line 806 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4985 "tools/widl/parser.tab.c"
+#line 4995 "tools/widl/parser.tab.c"
     break;
 
   case 260: /* expr: expr LESSEQUAL expr  */
 #line 807 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4991 "tools/widl/parser.tab.c"
+#line 5001 "tools/widl/parser.tab.c"
     break;
 
   case 261: /* expr: expr SHL expr  */
 #line 808 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4997 "tools/widl/parser.tab.c"
+#line 5007 "tools/widl/parser.tab.c"
     break;
 
   case 262: /* expr: expr SHR expr  */
 #line 809 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 5003 "tools/widl/parser.tab.c"
+#line 5013 "tools/widl/parser.tab.c"
     break;
 
   case 263: /* expr: expr '+' expr  */
 #line 810 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 5009 "tools/widl/parser.tab.c"
+#line 5019 "tools/widl/parser.tab.c"
     break;
 
   case 264: /* expr: expr '-' expr  */
 #line 811 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 5015 "tools/widl/parser.tab.c"
+#line 5025 "tools/widl/parser.tab.c"
     break;
 
   case 265: /* expr: expr '%' expr  */
 #line 812 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 5021 "tools/widl/parser.tab.c"
+#line 5031 "tools/widl/parser.tab.c"
     break;
 
   case 266: /* expr: expr '*' expr  */
 #line 813 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 5027 "tools/widl/parser.tab.c"
+#line 5037 "tools/widl/parser.tab.c"
     break;
 
   case 267: /* expr: expr '/' expr  */
 #line 814 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 5033 "tools/widl/parser.tab.c"
+#line 5043 "tools/widl/parser.tab.c"
     break;
 
   case 268: /* expr: '!' expr  */
 #line 815 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
-#line 5039 "tools/widl/parser.tab.c"
+#line 5049 "tools/widl/parser.tab.c"
     break;
 
   case 269: /* expr: '~' expr  */
 #line 816 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
-#line 5045 "tools/widl/parser.tab.c"
+#line 5055 "tools/widl/parser.tab.c"
     break;
 
   case 270: /* expr: '+' expr  */
 #line 817 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
-#line 5051 "tools/widl/parser.tab.c"
+#line 5061 "tools/widl/parser.tab.c"
     break;
 
   case 271: /* expr: '-' expr  */
 #line 818 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
-#line 5057 "tools/widl/parser.tab.c"
+#line 5067 "tools/widl/parser.tab.c"
     break;
 
   case 272: /* expr: '&' expr  */
 #line 819 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
-#line 5063 "tools/widl/parser.tab.c"
+#line 5073 "tools/widl/parser.tab.c"
     break;
 
   case 273: /* expr: '*' expr  */
 #line 820 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
-#line 5069 "tools/widl/parser.tab.c"
+#line 5079 "tools/widl/parser.tab.c"
     break;
 
   case 274: /* expr: expr MEMBERPTR aIDENTIFIER  */
 #line 821 "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 5075 "tools/widl/parser.tab.c"
+#line 5085 "tools/widl/parser.tab.c"
     break;
 
   case 275: /* expr: expr '.' aIDENTIFIER  */
 #line 822 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 5081 "tools/widl/parser.tab.c"
+#line 5091 "tools/widl/parser.tab.c"
     break;
 
   case 276: /* expr: '(' unqualified_decl_spec m_abstract_declarator ')' expr  */
 #line 824 "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 5087 "tools/widl/parser.tab.c"
+#line 5097 "tools/widl/parser.tab.c"
     break;
 
   case 277: /* expr: tSIZEOF '(' unqualified_decl_spec m_abstract_declarator ')'  */
 #line 826 "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 5093 "tools/widl/parser.tab.c"
+#line 5103 "tools/widl/parser.tab.c"
     break;
 
   case 278: /* expr: expr '[' expr ']'  */
 #line 827 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 5099 "tools/widl/parser.tab.c"
+#line 5109 "tools/widl/parser.tab.c"
     break;
 
   case 279: /* expr: '(' expr ')'  */
 #line 828 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[-1].expr); }
-#line 5105 "tools/widl/parser.tab.c"
+#line 5115 "tools/widl/parser.tab.c"
     break;
 
   case 280: /* expr_list_int_const: expr_int_const  */
 #line 831 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 5111 "tools/widl/parser.tab.c"
+#line 5121 "tools/widl/parser.tab.c"
     break;
 
   case 281: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
 #line 832 "tools/widl/parser.y"
                                                         { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 5117 "tools/widl/parser.tab.c"
+#line 5127 "tools/widl/parser.tab.c"
     break;
 
   case 282: /* expr_int_const: expr  */
@@ -5122,7 +5132,7 @@
 						  if (!(yyval.expr)->is_const)
 						      error_loc("expression is not an integer constant\n");
 						}
-#line 5126 "tools/widl/parser.tab.c"
+#line 5136 "tools/widl/parser.tab.c"
     break;
 
   case 283: /* expr_const: expr  */
@@ -5131,19 +5141,19 @@
 						  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
 						      error_loc("expression is not constant\n");
 						}
-#line 5135 "tools/widl/parser.tab.c"
+#line 5145 "tools/widl/parser.tab.c"
     break;
 
   case 284: /* fields: %empty  */
 #line 847 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5141 "tools/widl/parser.tab.c"
+#line 5151 "tools/widl/parser.tab.c"
     break;
 
   case 285: /* fields: fields field  */
 #line 848 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
-#line 5147 "tools/widl/parser.tab.c"
+#line 5157 "tools/widl/parser.tab.c"
     break;
 
   case 286: /* field: m_attributes decl_spec struct_declarator_list ';'  */
@@ -5152,7 +5162,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 5156 "tools/widl/parser.tab.c"
+#line 5166 "tools/widl/parser.tab.c"
     break;
 
   case 287: /* field: m_attributes uniondef ';'  */
@@ -5161,43 +5171,43 @@
 						  v->declspec.type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list);
 						  (yyval.var_list) = append_var(NULL, v);
 						}
-#line 5165 "tools/widl/parser.tab.c"
+#line 5175 "tools/widl/parser.tab.c"
     break;
 
   case 288: /* ne_union_field: s_field ';'  */
 #line 863 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 5171 "tools/widl/parser.tab.c"
+#line 5181 "tools/widl/parser.tab.c"
     break;
 
   case 289: /* ne_union_field: attributes ';'  */
 #line 864 "tools/widl/parser.y"
                                                 { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
-#line 5177 "tools/widl/parser.tab.c"
+#line 5187 "tools/widl/parser.tab.c"
     break;
 
   case 290: /* ne_union_fields: %empty  */
 #line 867 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5183 "tools/widl/parser.tab.c"
+#line 5193 "tools/widl/parser.tab.c"
     break;
 
   case 291: /* ne_union_fields: ne_union_fields ne_union_field  */
 #line 868 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 5189 "tools/widl/parser.tab.c"
+#line 5199 "tools/widl/parser.tab.c"
     break;
 
   case 292: /* union_field: s_field ';'  */
 #line 872 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 5195 "tools/widl/parser.tab.c"
+#line 5205 "tools/widl/parser.tab.c"
     break;
 
   case 293: /* union_field: ';'  */
 #line 873 "tools/widl/parser.y"
                                                 { (yyval.var) = NULL; }
-#line 5201 "tools/widl/parser.tab.c"
+#line 5211 "tools/widl/parser.tab.c"
     break;
 
   case 294: /* s_field: m_attributes decl_spec declarator  */
@@ -5206,7 +5216,7 @@
 						                (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5210 "tools/widl/parser.tab.c"
+#line 5220 "tools/widl/parser.tab.c"
     break;
 
   case 295: /* s_field: m_attributes structdef  */
@@ -5215,7 +5225,7 @@
 						  v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
 						  (yyval.var) = v;
 						}
-#line 5219 "tools/widl/parser.tab.c"
+#line 5229 "tools/widl/parser.tab.c"
     break;
 
   case 296: /* funcdef: declaration  */
@@ -5225,7 +5235,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 5229 "tools/widl/parser.tab.c"
+#line 5239 "tools/widl/parser.tab.c"
     break;
 
   case 297: /* declaration: attributes decl_spec init_declarator  */
@@ -5233,7 +5243,7 @@
                                                 { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5237 "tools/widl/parser.tab.c"
+#line 5247 "tools/widl/parser.tab.c"
     break;
 
   case 298: /* declaration: decl_spec init_declarator  */
@@ -5241,459 +5251,465 @@
                                                 { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5245 "tools/widl/parser.tab.c"
+#line 5255 "tools/widl/parser.tab.c"
     break;
 
   case 299: /* m_ident: %empty  */
 #line 903 "tools/widl/parser.y"
                                                 { (yyval.var) = NULL; }
-#line 5251 "tools/widl/parser.tab.c"
+#line 5261 "tools/widl/parser.tab.c"
     break;
 
   case 301: /* m_typename: %empty  */
 #line 907 "tools/widl/parser.y"
                                                 { (yyval.str) = NULL; }
-#line 5257 "tools/widl/parser.tab.c"
+#line 5267 "tools/widl/parser.tab.c"
     break;
 
   case 305: /* ident: typename  */
 #line 915 "tools/widl/parser.y"
                                                 { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 5263 "tools/widl/parser.tab.c"
+#line 5273 "tools/widl/parser.tab.c"
     break;
 
   case 306: /* base_type: tBYTE  */
 #line 918 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5269 "tools/widl/parser.tab.c"
+#line 5279 "tools/widl/parser.tab.c"
     break;
 
   case 307: /* base_type: tWCHAR  */
 #line 919 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5275 "tools/widl/parser.tab.c"
+#line 5285 "tools/widl/parser.tab.c"
     break;
 
   case 309: /* base_type: tSIGNED int_std  */
 #line 921 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
-#line 5281 "tools/widl/parser.tab.c"
+#line 5291 "tools/widl/parser.tab.c"
     break;
 
   case 310: /* base_type: tUNSIGNED int_std  */
 #line 922 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
-#line 5287 "tools/widl/parser.tab.c"
+#line 5297 "tools/widl/parser.tab.c"
     break;
 
   case 311: /* base_type: tUNSIGNED  */
 #line 923 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
-#line 5293 "tools/widl/parser.tab.c"
+#line 5303 "tools/widl/parser.tab.c"
     break;
 
   case 312: /* base_type: tFLOAT  */
 #line 924 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5299 "tools/widl/parser.tab.c"
+#line 5309 "tools/widl/parser.tab.c"
     break;
 
   case 313: /* base_type: tDOUBLE  */
 #line 925 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5305 "tools/widl/parser.tab.c"
+#line 5315 "tools/widl/parser.tab.c"
     break;
 
   case 314: /* base_type: tBOOLEAN  */
 #line 926 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5311 "tools/widl/parser.tab.c"
+#line 5321 "tools/widl/parser.tab.c"
     break;
 
   case 315: /* base_type: tERRORSTATUST  */
 #line 927 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5317 "tools/widl/parser.tab.c"
+#line 5327 "tools/widl/parser.tab.c"
     break;
 
   case 316: /* base_type: tHANDLET  */
 #line 928 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5323 "tools/widl/parser.tab.c"
+#line 5333 "tools/widl/parser.tab.c"
     break;
 
   case 319: /* int_std: tINT  */
 #line 935 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
-#line 5329 "tools/widl/parser.tab.c"
+#line 5339 "tools/widl/parser.tab.c"
     break;
 
   case 320: /* int_std: tSHORT m_int  */
 #line 936 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
-#line 5335 "tools/widl/parser.tab.c"
+#line 5345 "tools/widl/parser.tab.c"
     break;
 
   case 321: /* int_std: tSMALL  */
 #line 937 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
-#line 5341 "tools/widl/parser.tab.c"
+#line 5351 "tools/widl/parser.tab.c"
     break;
 
   case 322: /* int_std: tLONG m_int  */
 #line 938 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
-#line 5347 "tools/widl/parser.tab.c"
+#line 5357 "tools/widl/parser.tab.c"
     break;
 
   case 323: /* int_std: tHYPER m_int  */
 #line 939 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
-#line 5353 "tools/widl/parser.tab.c"
+#line 5363 "tools/widl/parser.tab.c"
     break;
 
   case 324: /* int_std: tINT64  */
 #line 940 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
-#line 5359 "tools/widl/parser.tab.c"
+#line 5369 "tools/widl/parser.tab.c"
     break;
 
   case 325: /* int_std: tCHAR  */
 #line 941 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
-#line 5365 "tools/widl/parser.tab.c"
+#line 5375 "tools/widl/parser.tab.c"
     break;
 
   case 326: /* int_std: tINT32  */
 #line 942 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
-#line 5371 "tools/widl/parser.tab.c"
+#line 5381 "tools/widl/parser.tab.c"
     break;
 
   case 327: /* int_std: tINT3264  */
 #line 943 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
-#line 5377 "tools/widl/parser.tab.c"
+#line 5387 "tools/widl/parser.tab.c"
     break;
 
   case 328: /* namespace_pfx: aIDENTIFIER '.'  */
 #line 947 "tools/widl/parser.y"
                                                 { (yyval.namespace) = find_namespace_or_error(&global_namespace, (yyvsp[-1].str)); }
-#line 5383 "tools/widl/parser.tab.c"
+#line 5393 "tools/widl/parser.tab.c"
     break;
 
   case 329: /* namespace_pfx: namespace_pfx aIDENTIFIER '.'  */
 #line 948 "tools/widl/parser.y"
                                                 { (yyval.namespace) = find_namespace_or_error((yyvsp[-2].namespace), (yyvsp[-1].str)); }
-#line 5389 "tools/widl/parser.tab.c"
+#line 5399 "tools/widl/parser.tab.c"
     break;
 
   case 330: /* qualified_type: typename  */
 #line 952 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
-#line 5395 "tools/widl/parser.tab.c"
+#line 5405 "tools/widl/parser.tab.c"
     break;
 
   case 331: /* qualified_type: namespace_pfx typename  */
 #line 953 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
-#line 5401 "tools/widl/parser.tab.c"
+#line 5411 "tools/widl/parser.tab.c"
     break;
 
   case 332: /* parameterized_type: qualified_type '<' parameterized_type_args '>'  */
 #line 957 "tools/widl/parser.y"
                                                 { (yyval.type) = find_parameterized_type((yyvsp[-3].type), (yyvsp[-1].typeref_list)); }
-#line 5407 "tools/widl/parser.tab.c"
+#line 5417 "tools/widl/parser.tab.c"
     break;
 
   case 333: /* parameterized_type_arg: base_type  */
 #line 961 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5413 "tools/widl/parser.tab.c"
+#line 5423 "tools/widl/parser.tab.c"
     break;
 
   case 334: /* parameterized_type_arg: qualified_type  */
 #line 962 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5419 "tools/widl/parser.tab.c"
+#line 5429 "tools/widl/parser.tab.c"
     break;
 
   case 335: /* parameterized_type_arg: qualified_type '*'  */
 #line 963 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
-#line 5425 "tools/widl/parser.tab.c"
+#line 5435 "tools/widl/parser.tab.c"
     break;
 
   case 336: /* parameterized_type_arg: parameterized_type  */
 #line 964 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5431 "tools/widl/parser.tab.c"
+#line 5441 "tools/widl/parser.tab.c"
     break;
 
   case 337: /* parameterized_type_arg: parameterized_type '*'  */
 #line 965 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
-#line 5437 "tools/widl/parser.tab.c"
+#line 5447 "tools/widl/parser.tab.c"
     break;
 
   case 338: /* parameterized_type_args: parameterized_type_arg  */
 #line 969 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5443 "tools/widl/parser.tab.c"
+#line 5453 "tools/widl/parser.tab.c"
     break;
 
   case 339: /* parameterized_type_args: parameterized_type_args ',' parameterized_type_arg  */
 #line 971 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5449 "tools/widl/parser.tab.c"
+#line 5459 "tools/widl/parser.tab.c"
     break;
 
   case 340: /* coclass: tCOCLASS typename  */
 #line 974 "tools/widl/parser.y"
                                                 { (yyval.type) = type_coclass_declare((yyvsp[0].str)); }
-#line 5455 "tools/widl/parser.tab.c"
+#line 5465 "tools/widl/parser.tab.c"
     break;
 
   case 341: /* coclassdef: attributes coclass '{' class_interfaces '}' semicolon_opt  */
 #line 978 "tools/widl/parser.y"
                                                 { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
-#line 5461 "tools/widl/parser.tab.c"
+#line 5471 "tools/widl/parser.tab.c"
     break;
 
   case 342: /* runtimeclass: tRUNTIMECLASS typename  */
 #line 981 "tools/widl/parser.y"
                                                 { (yyval.type) = type_runtimeclass_declare((yyvsp[0].str), current_namespace); }
-#line 5467 "tools/widl/parser.tab.c"
+#line 5477 "tools/widl/parser.tab.c"
     break;
 
   case 343: /* runtimeclass_def: attributes runtimeclass '{' class_interfaces '}' semicolon_opt  */
 #line 985 "tools/widl/parser.y"
                                                 { (yyval.type) = type_runtimeclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
-#line 5473 "tools/widl/parser.tab.c"
+#line 5483 "tools/widl/parser.tab.c"
     break;
 
   case 344: /* apicontract: tAPICONTRACT typename  */
 #line 988 "tools/widl/parser.y"
                                                 { (yyval.type) = type_apicontract_declare((yyvsp[0].str), current_namespace); }
-#line 5479 "tools/widl/parser.tab.c"
+#line 5489 "tools/widl/parser.tab.c"
     break;
 
   case 345: /* apicontract_def: attributes apicontract '{' '}' semicolon_opt  */
 #line 992 "tools/widl/parser.y"
                                                 { (yyval.type) = type_apicontract_define((yyvsp[-3].type), (yyvsp[-4].attr_list)); }
-#line 5485 "tools/widl/parser.tab.c"
+#line 5495 "tools/widl/parser.tab.c"
     break;
 
   case 346: /* namespacedef: tNAMESPACE aIDENTIFIER  */
 #line 995 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 5491 "tools/widl/parser.tab.c"
+                                                { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
+#line 5501 "tools/widl/parser.tab.c"
     break;
 
-  case 347: /* class_interfaces: %empty  */
-#line 998 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = NULL; }
-#line 5497 "tools/widl/parser.tab.c"
+  case 347: /* namespacedef: namespacedef '.' aIDENTIFIER  */
+#line 996 "tools/widl/parser.y"
+                                                { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
+#line 5507 "tools/widl/parser.tab.c"
     break;
 
-  case 348: /* class_interfaces: class_interfaces class_interface  */
+  case 348: /* class_interfaces: %empty  */
 #line 999 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = NULL; }
+#line 5513 "tools/widl/parser.tab.c"
+    break;
+
+  case 349: /* class_interfaces: class_interfaces class_interface  */
+#line 1000 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref( (yyvsp[-1].typeref_list), (yyvsp[0].typeref) ); }
-#line 5503 "tools/widl/parser.tab.c"
+#line 5519 "tools/widl/parser.tab.c"
     break;
 
-  case 349: /* class_interface: m_attributes interfaceref ';'  */
-#line 1003 "tools/widl/parser.y"
-                                                { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
-#line 5509 "tools/widl/parser.tab.c"
-    break;
-
-  case 350: /* class_interface: m_attributes dispinterfaceref ';'  */
+  case 350: /* class_interface: m_attributes interfaceref ';'  */
 #line 1004 "tools/widl/parser.y"
                                                 { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
-#line 5515 "tools/widl/parser.tab.c"
+#line 5525 "tools/widl/parser.tab.c"
     break;
 
-  case 351: /* dispinterface: tDISPINTERFACE typename  */
-#line 1007 "tools/widl/parser.y"
+  case 351: /* class_interface: m_attributes dispinterfaceref ';'  */
+#line 1005 "tools/widl/parser.y"
+                                                { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
+#line 5531 "tools/widl/parser.tab.c"
+    break;
+
+  case 352: /* dispinterface: tDISPINTERFACE typename  */
+#line 1008 "tools/widl/parser.y"
                                                 { (yyval.type) = type_dispinterface_declare((yyvsp[0].str)); }
-#line 5521 "tools/widl/parser.tab.c"
+#line 5537 "tools/widl/parser.tab.c"
     break;
 
-  case 352: /* dispattributes: attributes  */
-#line 1010 "tools/widl/parser.y"
+  case 353: /* dispattributes: attributes  */
+#line 1011 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr((yyvsp[0].attr_list), make_attr(ATTR_DISPINTERFACE)); }
-#line 5527 "tools/widl/parser.tab.c"
+#line 5543 "tools/widl/parser.tab.c"
     break;
 
-  case 353: /* dispint_props: tPROPERTIES ':'  */
-#line 1013 "tools/widl/parser.y"
-                                                { (yyval.var_list) = NULL; }
-#line 5533 "tools/widl/parser.tab.c"
-    break;
-
-  case 354: /* dispint_props: dispint_props s_field ';'  */
+  case 354: /* dispint_props: tPROPERTIES ':'  */
 #line 1014 "tools/widl/parser.y"
-                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5539 "tools/widl/parser.tab.c"
-    break;
-
-  case 355: /* dispint_meths: tMETHODS ':'  */
-#line 1017 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5545 "tools/widl/parser.tab.c"
+#line 5549 "tools/widl/parser.tab.c"
     break;
 
-  case 356: /* dispint_meths: dispint_meths funcdef ';'  */
-#line 1018 "tools/widl/parser.y"
+  case 355: /* dispint_props: dispint_props s_field ';'  */
+#line 1015 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5551 "tools/widl/parser.tab.c"
+#line 5555 "tools/widl/parser.tab.c"
     break;
 
-  case 357: /* dispinterfacedef: dispattributes dispinterface '{' dispint_props dispint_meths '}'  */
-#line 1023 "tools/widl/parser.y"
+  case 356: /* dispint_meths: tMETHODS ':'  */
+#line 1018 "tools/widl/parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 5561 "tools/widl/parser.tab.c"
+    break;
+
+  case 357: /* dispint_meths: dispint_meths funcdef ';'  */
+#line 1019 "tools/widl/parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
+#line 5567 "tools/widl/parser.tab.c"
+    break;
+
+  case 358: /* dispinterfacedef: dispattributes dispinterface '{' dispint_props dispint_meths '}'  */
+#line 1024 "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 5557 "tools/widl/parser.tab.c"
+#line 5573 "tools/widl/parser.tab.c"
     break;
 
-  case 358: /* dispinterfacedef: dispattributes dispinterface '{' interface ';' '}'  */
-#line 1025 "tools/widl/parser.y"
+  case 359: /* dispinterfacedef: dispattributes dispinterface '{' interface ';' '}'  */
+#line 1026 "tools/widl/parser.y"
                                                 { (yyval.type) = type_dispinterface_define_from_iface((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].type)); }
-#line 5563 "tools/widl/parser.tab.c"
+#line 5579 "tools/widl/parser.tab.c"
     break;
 
-  case 359: /* inherit: %empty  */
-#line 1028 "tools/widl/parser.y"
-                                                { (yyval.type) = NULL; }
-#line 5569 "tools/widl/parser.tab.c"
-    break;
-
-  case 360: /* inherit: ':' qualified_type  */
+  case 360: /* inherit: %empty  */
 #line 1029 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5575 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = NULL; }
+#line 5585 "tools/widl/parser.tab.c"
     break;
 
-  case 361: /* inherit: ':' parameterized_type  */
+  case 361: /* inherit: ':' qualified_type  */
 #line 1030 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5581 "tools/widl/parser.tab.c"
+#line 5591 "tools/widl/parser.tab.c"
     break;
 
-  case 362: /* type_parameter: typename  */
-#line 1033 "tools/widl/parser.y"
+  case 362: /* inherit: ':' parameterized_type  */
+#line 1031 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5597 "tools/widl/parser.tab.c"
+    break;
+
+  case 363: /* type_parameter: typename  */
+#line 1034 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_PARAMETER, (yyvsp[0].str), parameters_namespace, 0); }
-#line 5587 "tools/widl/parser.tab.c"
+#line 5603 "tools/widl/parser.tab.c"
     break;
 
-  case 363: /* type_parameters: type_parameter  */
-#line 1037 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5593 "tools/widl/parser.tab.c"
-    break;
-
-  case 364: /* type_parameters: type_parameters ',' type_parameter  */
+  case 364: /* type_parameters: type_parameter  */
 #line 1038 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
+#line 5609 "tools/widl/parser.tab.c"
+    break;
+
+  case 365: /* type_parameters: type_parameters ',' type_parameter  */
+#line 1039 "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 5615 "tools/widl/parser.tab.c"
     break;
 
-  case 365: /* interface: tINTERFACE typename  */
-#line 1042 "tools/widl/parser.y"
+  case 366: /* interface: tINTERFACE typename  */
+#line 1043 "tools/widl/parser.y"
                                                 { (yyval.type) = type_interface_declare((yyvsp[0].str), current_namespace); }
-#line 5605 "tools/widl/parser.tab.c"
+#line 5621 "tools/widl/parser.tab.c"
     break;
 
-  case 366: /* $@3: %empty  */
-#line 1043 "tools/widl/parser.y"
-                                  { push_parameters_namespace((yyvsp[-1].str)); }
-#line 5611 "tools/widl/parser.tab.c"
-    break;
-
-  case 367: /* $@4: %empty  */
-#line 1043 "tools/widl/parser.y"
-                                                                                     { pop_parameters_namespace((yyvsp[-3].str)); }
-#line 5617 "tools/widl/parser.tab.c"
-    break;
-
-  case 368: /* interface: tINTERFACE typename '<' $@3 type_parameters $@4 '>'  */
+  case 367: /* $@3: %empty  */
 #line 1044 "tools/widl/parser.y"
-                                                { (yyval.type) = type_parameterized_interface_declare((yyvsp[-5].str), current_namespace, (yyvsp[-2].typeref_list)); }
-#line 5623 "tools/widl/parser.tab.c"
+                                  { push_parameters_namespace((yyvsp[-1].str)); }
+#line 5627 "tools/widl/parser.tab.c"
     break;
 
-  case 369: /* delegatedef: m_attributes tDELEGATE type ident '(' m_args ')' semicolon_opt  */
-#line 1048 "tools/widl/parser.y"
+  case 368: /* $@4: %empty  */
+#line 1044 "tools/widl/parser.y"
+                                                                                     { pop_parameters_namespace((yyvsp[-3].str)); }
+#line 5633 "tools/widl/parser.tab.c"
+    break;
+
+  case 369: /* interface: tINTERFACE typename '<' $@3 type_parameters $@4 '>'  */
+#line 1045 "tools/widl/parser.y"
+                                                { (yyval.type) = type_parameterized_interface_declare((yyvsp[-5].str), current_namespace, (yyvsp[-2].typeref_list)); }
+#line 5639 "tools/widl/parser.tab.c"
+    break;
+
+  case 370: /* delegatedef: m_attributes tDELEGATE type ident '(' m_args ')' semicolon_opt  */
+#line 1049 "tools/widl/parser.y"
                                                 { (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 5631 "tools/widl/parser.tab.c"
+#line 5647 "tools/widl/parser.tab.c"
     break;
 
-  case 370: /* $@5: %empty  */
-#line 1052 "tools/widl/parser.y"
-              { push_parameters_namespace((yyvsp[-1].var)->name); }
-#line 5637 "tools/widl/parser.tab.c"
-    break;
-
-  case 371: /* $@6: %empty  */
+  case 371: /* $@5: %empty  */
 #line 1053 "tools/widl/parser.y"
-                         { pop_parameters_namespace((yyvsp[-7].var)->name); }
-#line 5643 "tools/widl/parser.tab.c"
+              { push_parameters_namespace((yyvsp[-1].var)->name); }
+#line 5653 "tools/widl/parser.tab.c"
     break;
 
-  case 372: /* delegatedef: m_attributes tDELEGATE type ident '<' $@5 type_parameters '>' '(' m_args ')' $@6 semicolon_opt  */
+  case 372: /* $@6: %empty  */
 #line 1054 "tools/widl/parser.y"
+                         { pop_parameters_namespace((yyvsp[-7].var)->name); }
+#line 5659 "tools/widl/parser.tab.c"
+    break;
+
+  case 373: /* delegatedef: m_attributes tDELEGATE type ident '<' $@5 type_parameters '>' '(' m_args ')' $@6 semicolon_opt  */
+#line 1055 "tools/widl/parser.y"
                                                 { (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 5651 "tools/widl/parser.tab.c"
+#line 5667 "tools/widl/parser.tab.c"
     break;
 
-  case 373: /* required_types: qualified_type  */
-#line 1060 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5657 "tools/widl/parser.tab.c"
-    break;
-
-  case 374: /* required_types: parameterized_type  */
+  case 374: /* required_types: qualified_type  */
 #line 1061 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5663 "tools/widl/parser.tab.c"
+#line 5673 "tools/widl/parser.tab.c"
     break;
 
-  case 375: /* required_types: required_types ',' qualified_type  */
+  case 375: /* required_types: parameterized_type  */
 #line 1062 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5669 "tools/widl/parser.tab.c"
+                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
+#line 5679 "tools/widl/parser.tab.c"
     break;
 
-  case 376: /* required_types: required_types ',' parameterized_type  */
+  case 376: /* required_types: required_types ',' qualified_type  */
 #line 1063 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5675 "tools/widl/parser.tab.c"
+#line 5685 "tools/widl/parser.tab.c"
     break;
 
-  case 377: /* requires: %empty  */
-#line 1065 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = NULL; }
-#line 5681 "tools/widl/parser.tab.c"
+  case 377: /* required_types: required_types ',' parameterized_type  */
+#line 1064 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
+#line 5691 "tools/widl/parser.tab.c"
     break;
 
-  case 378: /* requires: tREQUIRES required_types  */
+  case 378: /* requires: %empty  */
 #line 1066 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = NULL; }
+#line 5697 "tools/widl/parser.tab.c"
+    break;
+
+  case 379: /* requires: tREQUIRES required_types  */
+#line 1067 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = (yyvsp[0].typeref_list); }
-#line 5687 "tools/widl/parser.tab.c"
+#line 5703 "tools/widl/parser.tab.c"
     break;
 
-  case 379: /* $@7: %empty  */
-#line 1069 "tools/widl/parser.y"
+  case 380: /* $@7: %empty  */
+#line 1070 "tools/widl/parser.y"
                                                 { if ((yyvsp[0].type)->type_type == TYPE_PARAMETERIZED_TYPE) push_parameters_namespace((yyvsp[0].type)->name); }
-#line 5693 "tools/widl/parser.tab.c"
+#line 5709 "tools/widl/parser.tab.c"
     break;
 
-  case 380: /* interfacedef: attributes interface $@7 inherit requires '{' int_statements '}' semicolon_opt  */
-#line 1071 "tools/widl/parser.y"
+  case 381: /* interfacedef: attributes interface $@7 inherit requires '{' int_statements '}' semicolon_opt  */
+#line 1072 "tools/widl/parser.y"
                                                 { if ((yyvsp[-7].type)->type_type == TYPE_PARAMETERIZED_TYPE)
 						  {
 						      (yyval.type) = type_parameterized_interface_define((yyvsp[-7].type), (yyvsp[-8].attr_list), (yyvsp[-5].type), (yyvsp[-2].stmt_list), (yyvsp[-4].typeref_list));
@@ -5705,637 +5721,637 @@
 						      check_async_uuid((yyval.type));
 						  }
 						}
-#line 5709 "tools/widl/parser.tab.c"
+#line 5725 "tools/widl/parser.tab.c"
     break;
 
-  case 381: /* interfacedef: dispinterfacedef semicolon_opt  */
-#line 1082 "tools/widl/parser.y"
+  case 382: /* interfacedef: dispinterfacedef semicolon_opt  */
+#line 1083 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 5715 "tools/widl/parser.tab.c"
+#line 5731 "tools/widl/parser.tab.c"
     break;
 
-  case 382: /* interfaceref: tINTERFACE typename  */
-#line 1086 "tools/widl/parser.y"
-                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5721 "tools/widl/parser.tab.c"
-    break;
-
-  case 383: /* interfaceref: tINTERFACE namespace_pfx typename  */
+  case 383: /* interfaceref: tINTERFACE typename  */
 #line 1087 "tools/widl/parser.y"
-                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), (yyvsp[-1].namespace), 0); }
-#line 5727 "tools/widl/parser.tab.c"
-    break;
-
-  case 384: /* dispinterfaceref: tDISPINTERFACE typename  */
-#line 1091 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5733 "tools/widl/parser.tab.c"
+#line 5737 "tools/widl/parser.tab.c"
     break;
 
-  case 385: /* module: tMODULE typename  */
-#line 1094 "tools/widl/parser.y"
+  case 384: /* interfaceref: tINTERFACE namespace_pfx typename  */
+#line 1088 "tools/widl/parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), (yyvsp[-1].namespace), 0); }
+#line 5743 "tools/widl/parser.tab.c"
+    break;
+
+  case 385: /* dispinterfaceref: tDISPINTERFACE typename  */
+#line 1092 "tools/widl/parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
+#line 5749 "tools/widl/parser.tab.c"
+    break;
+
+  case 386: /* module: tMODULE typename  */
+#line 1095 "tools/widl/parser.y"
                                                 { (yyval.type) = type_module_declare((yyvsp[0].str)); }
-#line 5739 "tools/widl/parser.tab.c"
+#line 5755 "tools/widl/parser.tab.c"
     break;
 
-  case 386: /* moduledef: m_attributes module '{' int_statements '}' semicolon_opt  */
-#line 1098 "tools/widl/parser.y"
+  case 387: /* moduledef: m_attributes module '{' int_statements '}' semicolon_opt  */
+#line 1099 "tools/widl/parser.y"
                                                 { (yyval.type) = type_module_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].stmt_list)); }
-#line 5745 "tools/widl/parser.tab.c"
+#line 5761 "tools/widl/parser.tab.c"
     break;
 
-  case 387: /* storage_cls_spec: tEXTERN  */
-#line 1102 "tools/widl/parser.y"
-                                                { (yyval.stgclass) = STG_EXTERN; }
-#line 5751 "tools/widl/parser.tab.c"
-    break;
-
-  case 388: /* storage_cls_spec: tSTATIC  */
+  case 388: /* storage_cls_spec: tEXTERN  */
 #line 1103 "tools/widl/parser.y"
-                                                { (yyval.stgclass) = STG_STATIC; }
-#line 5757 "tools/widl/parser.tab.c"
+                                                { (yyval.stgclass) = STG_EXTERN; }
+#line 5767 "tools/widl/parser.tab.c"
     break;
 
-  case 389: /* storage_cls_spec: tREGISTER  */
+  case 389: /* storage_cls_spec: tSTATIC  */
 #line 1104 "tools/widl/parser.y"
+                                                { (yyval.stgclass) = STG_STATIC; }
+#line 5773 "tools/widl/parser.tab.c"
+    break;
+
+  case 390: /* storage_cls_spec: tREGISTER  */
+#line 1105 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_REGISTER; }
-#line 5763 "tools/widl/parser.tab.c"
+#line 5779 "tools/widl/parser.tab.c"
     break;
 
-  case 390: /* function_specifier: tINLINE  */
-#line 1108 "tools/widl/parser.y"
+  case 391: /* function_specifier: tINLINE  */
+#line 1109 "tools/widl/parser.y"
                                                 { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
-#line 5769 "tools/widl/parser.tab.c"
+#line 5785 "tools/widl/parser.tab.c"
     break;
 
-  case 391: /* type_qualifier: tCONST  */
-#line 1112 "tools/widl/parser.y"
+  case 392: /* type_qualifier: tCONST  */
+#line 1113 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
-#line 5775 "tools/widl/parser.tab.c"
+#line 5791 "tools/widl/parser.tab.c"
     break;
 
-  case 392: /* m_type_qual_list: %empty  */
-#line 1115 "tools/widl/parser.y"
-                                                { (yyval.type_qualifier) = 0; }
-#line 5781 "tools/widl/parser.tab.c"
-    break;
-
-  case 393: /* m_type_qual_list: m_type_qual_list type_qualifier  */
+  case 393: /* m_type_qual_list: %empty  */
 #line 1116 "tools/widl/parser.y"
+                                                { (yyval.type_qualifier) = 0; }
+#line 5797 "tools/widl/parser.tab.c"
+    break;
+
+  case 394: /* m_type_qual_list: m_type_qual_list type_qualifier  */
+#line 1117 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
-#line 5787 "tools/widl/parser.tab.c"
+#line 5803 "tools/widl/parser.tab.c"
     break;
 
-  case 394: /* decl_spec: type m_decl_spec_no_type  */
-#line 1119 "tools/widl/parser.y"
+  case 395: /* decl_spec: type m_decl_spec_no_type  */
+#line 1120 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5793 "tools/widl/parser.tab.c"
+#line 5809 "tools/widl/parser.tab.c"
     break;
 
-  case 395: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
-#line 1121 "tools/widl/parser.y"
+  case 396: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
+#line 1122 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5799 "tools/widl/parser.tab.c"
+#line 5815 "tools/widl/parser.tab.c"
     break;
 
-  case 396: /* unqualified_decl_spec: unqualified_type m_decl_spec_no_type  */
-#line 1125 "tools/widl/parser.y"
+  case 397: /* unqualified_decl_spec: unqualified_type m_decl_spec_no_type  */
+#line 1126 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5805 "tools/widl/parser.tab.c"
+#line 5821 "tools/widl/parser.tab.c"
     break;
 
-  case 397: /* unqualified_decl_spec: decl_spec_no_type unqualified_type m_decl_spec_no_type  */
-#line 1127 "tools/widl/parser.y"
+  case 398: /* unqualified_decl_spec: decl_spec_no_type unqualified_type m_decl_spec_no_type  */
+#line 1128 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5811 "tools/widl/parser.tab.c"
+#line 5827 "tools/widl/parser.tab.c"
     break;
 
-  case 398: /* m_decl_spec_no_type: %empty  */
-#line 1130 "tools/widl/parser.y"
+  case 399: /* m_decl_spec_no_type: %empty  */
+#line 1131 "tools/widl/parser.y"
                                                 { (yyval.declspec) = NULL; }
-#line 5817 "tools/widl/parser.tab.c"
+#line 5833 "tools/widl/parser.tab.c"
     break;
 
-  case 400: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
-#line 1135 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
-#line 5823 "tools/widl/parser.tab.c"
-    break;
-
-  case 401: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
+  case 401: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
 #line 1136 "tools/widl/parser.y"
-                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
-#line 5829 "tools/widl/parser.tab.c"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
+#line 5839 "tools/widl/parser.tab.c"
     break;
 
-  case 402: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
+  case 402: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
 #line 1137 "tools/widl/parser.y"
+                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
+#line 5845 "tools/widl/parser.tab.c"
+    break;
+
+  case 403: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
+#line 1138 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
-#line 5835 "tools/widl/parser.tab.c"
+#line 5851 "tools/widl/parser.tab.c"
     break;
 
-  case 403: /* declarator: '*' m_type_qual_list declarator  */
-#line 1142 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5841 "tools/widl/parser.tab.c"
-    break;
-
-  case 404: /* declarator: callconv declarator  */
+  case 404: /* declarator: '*' m_type_qual_list declarator  */
 #line 1143 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5857 "tools/widl/parser.tab.c"
+    break;
+
+  case 405: /* declarator: callconv declarator  */
+#line 1144 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5847 "tools/widl/parser.tab.c"
+#line 5863 "tools/widl/parser.tab.c"
     break;
 
-  case 406: /* direct_declarator: ident  */
-#line 1148 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5853 "tools/widl/parser.tab.c"
-    break;
-
-  case 407: /* direct_declarator: '(' declarator ')'  */
+  case 407: /* direct_declarator: ident  */
 #line 1149 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5859 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 5869 "tools/widl/parser.tab.c"
     break;
 
-  case 408: /* direct_declarator: direct_declarator array  */
+  case 408: /* direct_declarator: '(' declarator ')'  */
 #line 1150 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5865 "tools/widl/parser.tab.c"
-    break;
-
-  case 409: /* direct_declarator: direct_declarator '(' m_args ')'  */
-#line 1151 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
-#line 5871 "tools/widl/parser.tab.c"
-    break;
-
-  case 410: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
-#line 1157 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5877 "tools/widl/parser.tab.c"
-    break;
-
-  case 411: /* abstract_declarator: callconv m_abstract_declarator  */
-#line 1158 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5883 "tools/widl/parser.tab.c"
-    break;
-
-  case 413: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
-#line 1165 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5889 "tools/widl/parser.tab.c"
-    break;
-
-  case 414: /* abstract_declarator_no_direct: callconv m_any_declarator  */
-#line 1166 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5895 "tools/widl/parser.tab.c"
-    break;
-
-  case 415: /* m_abstract_declarator: %empty  */
-#line 1170 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5901 "tools/widl/parser.tab.c"
-    break;
-
-  case 417: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
-#line 1176 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5907 "tools/widl/parser.tab.c"
+#line 5875 "tools/widl/parser.tab.c"
     break;
 
-  case 418: /* abstract_direct_declarator: abstract_direct_declarator array  */
-#line 1177 "tools/widl/parser.y"
+  case 409: /* direct_declarator: direct_declarator array  */
+#line 1151 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5913 "tools/widl/parser.tab.c"
+#line 5881 "tools/widl/parser.tab.c"
     break;
 
-  case 419: /* abstract_direct_declarator: array  */
+  case 410: /* direct_declarator: direct_declarator '(' m_args ')'  */
+#line 1152 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
+#line 5887 "tools/widl/parser.tab.c"
+    break;
+
+  case 411: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
+#line 1158 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5893 "tools/widl/parser.tab.c"
+    break;
+
+  case 412: /* abstract_declarator: callconv m_abstract_declarator  */
+#line 1159 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5899 "tools/widl/parser.tab.c"
+    break;
+
+  case 414: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1166 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5905 "tools/widl/parser.tab.c"
+    break;
+
+  case 415: /* abstract_declarator_no_direct: callconv m_any_declarator  */
+#line 1167 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5911 "tools/widl/parser.tab.c"
+    break;
+
+  case 416: /* m_abstract_declarator: %empty  */
+#line 1171 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5917 "tools/widl/parser.tab.c"
+    break;
+
+  case 418: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
+#line 1177 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5923 "tools/widl/parser.tab.c"
+    break;
+
+  case 419: /* abstract_direct_declarator: abstract_direct_declarator array  */
 #line 1178 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5929 "tools/widl/parser.tab.c"
+    break;
+
+  case 420: /* abstract_direct_declarator: array  */
+#line 1179 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5919 "tools/widl/parser.tab.c"
-    break;
-
-  case 420: /* abstract_direct_declarator: '(' m_args ')'  */
-#line 1180 "tools/widl/parser.y"
-                                                { (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"
-    break;
-
-  case 421: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
-#line 1184 "tools/widl/parser.y"
-                                                { (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"
     break;
 
-  case 422: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
-#line 1192 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5941 "tools/widl/parser.tab.c"
-    break;
-
-  case 423: /* any_declarator: callconv m_any_declarator  */
-#line 1193 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5947 "tools/widl/parser.tab.c"
-    break;
-
-  case 425: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
-#line 1200 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5953 "tools/widl/parser.tab.c"
-    break;
-
-  case 426: /* any_declarator_no_direct: callconv m_any_declarator  */
-#line 1201 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5959 "tools/widl/parser.tab.c"
-    break;
-
-  case 427: /* m_any_declarator: %empty  */
-#line 1205 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5965 "tools/widl/parser.tab.c"
-    break;
-
-  case 429: /* any_direct_declarator: ident  */
-#line 1213 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5971 "tools/widl/parser.tab.c"
-    break;
-
-  case 430: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
-#line 1214 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5977 "tools/widl/parser.tab.c"
-    break;
-
-  case 431: /* any_direct_declarator: any_direct_declarator array  */
-#line 1215 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5983 "tools/widl/parser.tab.c"
-    break;
-
-  case 432: /* any_direct_declarator: array  */
-#line 1216 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5989 "tools/widl/parser.tab.c"
-    break;
-
-  case 433: /* any_direct_declarator: '(' m_args ')'  */
-#line 1218 "tools/widl/parser.y"
+  case 421: /* abstract_direct_declarator: '(' m_args ')'  */
+#line 1181 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5997 "tools/widl/parser.tab.c"
+#line 5943 "tools/widl/parser.tab.c"
     break;
 
-  case 434: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
-#line 1222 "tools/widl/parser.y"
+  case 422: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
+#line 1185 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
+#line 5951 "tools/widl/parser.tab.c"
+    break;
+
+  case 423: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
+#line 1193 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5957 "tools/widl/parser.tab.c"
+    break;
+
+  case 424: /* any_declarator: callconv m_any_declarator  */
+#line 1194 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5963 "tools/widl/parser.tab.c"
+    break;
+
+  case 426: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1201 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5969 "tools/widl/parser.tab.c"
+    break;
+
+  case 427: /* any_declarator_no_direct: callconv m_any_declarator  */
+#line 1202 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5975 "tools/widl/parser.tab.c"
+    break;
+
+  case 428: /* m_any_declarator: %empty  */
+#line 1206 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5981 "tools/widl/parser.tab.c"
+    break;
+
+  case 430: /* any_direct_declarator: ident  */
+#line 1214 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 5987 "tools/widl/parser.tab.c"
+    break;
+
+  case 431: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
+#line 1215 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5993 "tools/widl/parser.tab.c"
+    break;
+
+  case 432: /* any_direct_declarator: any_direct_declarator array  */
+#line 1216 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5999 "tools/widl/parser.tab.c"
+    break;
+
+  case 433: /* any_direct_declarator: array  */
+#line 1217 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
 #line 6005 "tools/widl/parser.tab.c"
     break;
 
-  case 435: /* declarator_list: declarator  */
-#line 1228 "tools/widl/parser.y"
-                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 6011 "tools/widl/parser.tab.c"
+  case 434: /* any_direct_declarator: '(' m_args ')'  */
+#line 1219 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 6013 "tools/widl/parser.tab.c"
     break;
 
-  case 436: /* declarator_list: declarator_list ',' declarator  */
+  case 435: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
+#line 1223 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 6021 "tools/widl/parser.tab.c"
+    break;
+
+  case 436: /* declarator_list: declarator  */
 #line 1229 "tools/widl/parser.y"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 6027 "tools/widl/parser.tab.c"
+    break;
+
+  case 437: /* declarator_list: declarator_list ',' declarator  */
+#line 1230 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 6017 "tools/widl/parser.tab.c"
+#line 6033 "tools/widl/parser.tab.c"
     break;
 
-  case 437: /* m_bitfield: %empty  */
-#line 1232 "tools/widl/parser.y"
-                                                { (yyval.expr) = NULL; }
-#line 6023 "tools/widl/parser.tab.c"
-    break;
-
-  case 438: /* m_bitfield: ':' expr_const  */
+  case 438: /* m_bitfield: %empty  */
 #line 1233 "tools/widl/parser.y"
-                                                { (yyval.expr) = (yyvsp[0].expr); }
-#line 6029 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = NULL; }
+#line 6039 "tools/widl/parser.tab.c"
     break;
 
-  case 439: /* struct_declarator: any_declarator m_bitfield  */
-#line 1236 "tools/widl/parser.y"
+  case 439: /* m_bitfield: ':' expr_const  */
+#line 1234 "tools/widl/parser.y"
+                                                { (yyval.expr) = (yyvsp[0].expr); }
+#line 6045 "tools/widl/parser.tab.c"
+    break;
+
+  case 440: /* struct_declarator: any_declarator m_bitfield  */
+#line 1237 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr);
 						  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
 						    error_loc("unnamed fields are not allowed\n");
 						}
-#line 6038 "tools/widl/parser.tab.c"
+#line 6054 "tools/widl/parser.tab.c"
     break;
 
-  case 440: /* struct_declarator_list: struct_declarator  */
-#line 1243 "tools/widl/parser.y"
+  case 441: /* struct_declarator_list: struct_declarator  */
+#line 1244 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 6044 "tools/widl/parser.tab.c"
+#line 6060 "tools/widl/parser.tab.c"
     break;
 
-  case 441: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
-#line 1245 "tools/widl/parser.y"
+  case 442: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
+#line 1246 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 6050 "tools/widl/parser.tab.c"
+#line 6066 "tools/widl/parser.tab.c"
     break;
 
-  case 442: /* init_declarator: declarator  */
-#line 1249 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); }
-#line 6056 "tools/widl/parser.tab.c"
-    break;
-
-  case 443: /* init_declarator: declarator '=' expr_const  */
+  case 443: /* init_declarator: declarator  */
 #line 1250 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); }
+#line 6072 "tools/widl/parser.tab.c"
+    break;
+
+  case 444: /* init_declarator: declarator '=' expr_const  */
+#line 1251 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
-#line 6062 "tools/widl/parser.tab.c"
+#line 6078 "tools/widl/parser.tab.c"
     break;
 
-  case 444: /* threading_type: tAPARTMENT  */
-#line 1254 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_APARTMENT; }
-#line 6068 "tools/widl/parser.tab.c"
-    break;
-
-  case 445: /* threading_type: tNEUTRAL  */
+  case 445: /* threading_type: tAPARTMENT  */
 #line 1255 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_NEUTRAL; }
-#line 6074 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = THREADING_APARTMENT; }
+#line 6084 "tools/widl/parser.tab.c"
     break;
 
-  case 446: /* threading_type: tSINGLE  */
+  case 446: /* threading_type: tNEUTRAL  */
 #line 1256 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_SINGLE; }
-#line 6080 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = THREADING_NEUTRAL; }
+#line 6090 "tools/widl/parser.tab.c"
     break;
 
-  case 447: /* threading_type: tFREE  */
+  case 447: /* threading_type: tSINGLE  */
 #line 1257 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_FREE; }
-#line 6086 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = THREADING_SINGLE; }
+#line 6096 "tools/widl/parser.tab.c"
     break;
 
-  case 448: /* threading_type: tBOTH  */
+  case 448: /* threading_type: tFREE  */
 #line 1258 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_BOTH; }
-#line 6092 "tools/widl/parser.tab.c"
-    break;
-
-  case 449: /* threading_type: tMTA  */
-#line 1259 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_FREE; }
-#line 6098 "tools/widl/parser.tab.c"
+#line 6102 "tools/widl/parser.tab.c"
     break;
 
-  case 450: /* pointer_type: tREF  */
-#line 1263 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_RP; }
-#line 6104 "tools/widl/parser.tab.c"
+  case 449: /* threading_type: tBOTH  */
+#line 1259 "tools/widl/parser.y"
+                                                { (yyval.num) = THREADING_BOTH; }
+#line 6108 "tools/widl/parser.tab.c"
     break;
 
-  case 451: /* pointer_type: tUNIQUE  */
+  case 450: /* threading_type: tMTA  */
+#line 1260 "tools/widl/parser.y"
+                                                { (yyval.num) = THREADING_FREE; }
+#line 6114 "tools/widl/parser.tab.c"
+    break;
+
+  case 451: /* pointer_type: tREF  */
 #line 1264 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_UP; }
-#line 6110 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = FC_RP; }
+#line 6120 "tools/widl/parser.tab.c"
     break;
 
-  case 452: /* pointer_type: tPTR  */
+  case 452: /* pointer_type: tUNIQUE  */
 #line 1265 "tools/widl/parser.y"
+                                                { (yyval.num) = FC_UP; }
+#line 6126 "tools/widl/parser.tab.c"
+    break;
+
+  case 453: /* pointer_type: tPTR  */
+#line 1266 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_FP; }
-#line 6116 "tools/widl/parser.tab.c"
+#line 6132 "tools/widl/parser.tab.c"
     break;
 
-  case 453: /* structdef: tSTRUCT m_typename '{' fields '}'  */
-#line 1268 "tools/widl/parser.y"
+  case 454: /* structdef: tSTRUCT m_typename '{' fields '}'  */
+#line 1269 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 6122 "tools/widl/parser.tab.c"
+#line 6138 "tools/widl/parser.tab.c"
     break;
 
-  case 454: /* unqualified_type: tVOID  */
-#line 1272 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_void(); }
-#line 6128 "tools/widl/parser.tab.c"
-    break;
-
-  case 455: /* unqualified_type: base_type  */
+  case 455: /* unqualified_type: tVOID  */
 #line 1273 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6134 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_void(); }
+#line 6144 "tools/widl/parser.tab.c"
     break;
 
-  case 456: /* unqualified_type: enumdef  */
+  case 456: /* unqualified_type: base_type  */
 #line 1274 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6140 "tools/widl/parser.tab.c"
+#line 6150 "tools/widl/parser.tab.c"
     break;
 
-  case 457: /* unqualified_type: tENUM aIDENTIFIER  */
+  case 457: /* unqualified_type: enumdef  */
 #line 1275 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 6146 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6156 "tools/widl/parser.tab.c"
     break;
 
-  case 458: /* unqualified_type: structdef  */
+  case 458: /* unqualified_type: tENUM aIDENTIFIER  */
 #line 1276 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6152 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 6162 "tools/widl/parser.tab.c"
     break;
 
-  case 459: /* unqualified_type: tSTRUCT aIDENTIFIER  */
+  case 459: /* unqualified_type: structdef  */
 #line 1277 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 6158 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6168 "tools/widl/parser.tab.c"
     break;
 
-  case 460: /* unqualified_type: uniondef  */
+  case 460: /* unqualified_type: tSTRUCT aIDENTIFIER  */
 #line 1278 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6164 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 6174 "tools/widl/parser.tab.c"
     break;
 
-  case 461: /* unqualified_type: tUNION aIDENTIFIER  */
+  case 461: /* unqualified_type: uniondef  */
 #line 1279 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 6170 "tools/widl/parser.tab.c"
-    break;
-
-  case 462: /* unqualified_type: tSAFEARRAY '(' type ')'  */
-#line 1280 "tools/widl/parser.y"
-                                                { (yyval.type) = make_safearray((yyvsp[-1].type)); }
-#line 6176 "tools/widl/parser.tab.c"
-    break;
-
-  case 463: /* unqualified_type: aKNOWNTYPE  */
-#line 1281 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
-#line 6182 "tools/widl/parser.tab.c"
-    break;
-
-  case 465: /* type: namespace_pfx typename  */
-#line 1286 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
-#line 6188 "tools/widl/parser.tab.c"
-    break;
-
-  case 466: /* type: parameterized_type  */
-#line 1287 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 6194 "tools/widl/parser.tab.c"
+#line 6180 "tools/widl/parser.tab.c"
     break;
 
-  case 467: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
-#line 1291 "tools/widl/parser.y"
+  case 462: /* unqualified_type: tUNION aIDENTIFIER  */
+#line 1280 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 6186 "tools/widl/parser.tab.c"
+    break;
+
+  case 463: /* unqualified_type: tSAFEARRAY '(' type ')'  */
+#line 1281 "tools/widl/parser.y"
+                                                { (yyval.type) = make_safearray((yyvsp[-1].type)); }
+#line 6192 "tools/widl/parser.tab.c"
+    break;
+
+  case 464: /* unqualified_type: aKNOWNTYPE  */
+#line 1282 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
+#line 6198 "tools/widl/parser.tab.c"
+    break;
+
+  case 466: /* type: namespace_pfx typename  */
+#line 1287 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
+#line 6204 "tools/widl/parser.tab.c"
+    break;
+
+  case 467: /* type: parameterized_type  */
+#line 1288 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6210 "tools/widl/parser.tab.c"
+    break;
+
+  case 468: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
+#line 1292 "tools/widl/parser.y"
                                                 { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list));
 						  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 6203 "tools/widl/parser.tab.c"
+#line 6219 "tools/widl/parser.tab.c"
     break;
 
-  case 468: /* uniondef: tUNION m_typename '{' ne_union_fields '}'  */
-#line 1298 "tools/widl/parser.y"
+  case 469: /* uniondef: tUNION m_typename '{' ne_union_fields '}'  */
+#line 1299 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
-#line 6209 "tools/widl/parser.tab.c"
+#line 6225 "tools/widl/parser.tab.c"
     break;
 
-  case 469: /* uniondef: tUNION m_typename tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
-#line 1301 "tools/widl/parser.y"
+  case 470: /* uniondef: tUNION m_typename tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
+#line 1302 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
-#line 6215 "tools/widl/parser.tab.c"
+#line 6231 "tools/widl/parser.tab.c"
     break;
 
-  case 470: /* version: aNUM  */
-#line 1305 "tools/widl/parser.y"
-                                                { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
-#line 6221 "tools/widl/parser.tab.c"
-    break;
-
-  case 471: /* version: aNUM '.' aNUM  */
+  case 471: /* version: aNUM  */
 #line 1306 "tools/widl/parser.y"
-                                                { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
-#line 6227 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
+#line 6237 "tools/widl/parser.tab.c"
     break;
 
-  case 472: /* version: aHEXNUM  */
+  case 472: /* version: aNUM '.' aNUM  */
 #line 1307 "tools/widl/parser.y"
-                                                { (yyval.num) = (yyvsp[0].num); }
-#line 6233 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
+#line 6243 "tools/widl/parser.tab.c"
     break;
 
-  case 477: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
-#line 1322 "tools/widl/parser.y"
+  case 473: /* version: aHEXNUM  */
+#line 1308 "tools/widl/parser.y"
+                                                { (yyval.num) = (yyvsp[0].num); }
+#line 6249 "tools/widl/parser.tab.c"
+    break;
+
+  case 478: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
+#line 1323 "tools/widl/parser.y"
                                                 { type_t *type = find_type_or_error(current_namespace, (yyvsp[-1].str));
                                                   type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                 }
-#line 6241 "tools/widl/parser.tab.c"
+#line 6257 "tools/widl/parser.tab.c"
     break;
 
-  case 478: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
-#line 1329 "tools/widl/parser.y"
+  case 479: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
+#line 1330 "tools/widl/parser.y"
                                                 {  type_t *iface = find_type_or_error(current_namespace, (yyvsp[-3].str));
                                                    if (type_get_type(iface) != TYPE_INTERFACE)
                                                        error_loc("%s is not an interface\n", iface->name);
                                                    iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list));
                                                 }
-#line 6251 "tools/widl/parser.tab.c"
+#line 6267 "tools/widl/parser.tab.c"
     break;
 
-  case 479: /* acf_attributes: %empty  */
-#line 1337 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = NULL; }
-#line 6257 "tools/widl/parser.tab.c"
-    break;
-
-  case 480: /* acf_attributes: '[' acf_attribute_list ']'  */
+  case 480: /* acf_attributes: %empty  */
 #line 1338 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = NULL; }
+#line 6273 "tools/widl/parser.tab.c"
+    break;
+
+  case 481: /* acf_attributes: '[' acf_attribute_list ']'  */
+#line 1339 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 6263 "tools/widl/parser.tab.c"
+#line 6279 "tools/widl/parser.tab.c"
     break;
 
-  case 481: /* acf_attribute_list: acf_attribute  */
-#line 1342 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
-#line 6269 "tools/widl/parser.tab.c"
-    break;
-
-  case 482: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
+  case 482: /* acf_attribute_list: acf_attribute  */
 #line 1343 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
+#line 6285 "tools/widl/parser.tab.c"
+    break;
+
+  case 483: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
+#line 1344 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
-#line 6275 "tools/widl/parser.tab.c"
+#line 6291 "tools/widl/parser.tab.c"
     break;
 
-  case 483: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
-#line 1348 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_ALLOCATE, (yyvsp[-1].num)); }
-#line 6281 "tools/widl/parser.tab.c"
-    break;
-
-  case 484: /* acf_attribute: tENCODE  */
+  case 484: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
 #line 1349 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 6287 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_ALLOCATE, (yyvsp[-1].num)); }
+#line 6297 "tools/widl/parser.tab.c"
     break;
 
-  case 485: /* acf_attribute: tDECODE  */
+  case 485: /* acf_attribute: tENCODE  */
 #line 1350 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 6293 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 6303 "tools/widl/parser.tab.c"
     break;
 
-  case 486: /* acf_attribute: tEXPLICITHANDLE  */
+  case 486: /* acf_attribute: tDECODE  */
 #line 1351 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 6309 "tools/widl/parser.tab.c"
+    break;
+
+  case 487: /* acf_attribute: tEXPLICITHANDLE  */
+#line 1352 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 6299 "tools/widl/parser.tab.c"
+#line 6315 "tools/widl/parser.tab.c"
     break;
 
-  case 487: /* allocate_option_list: allocate_option  */
-#line 1355 "tools/widl/parser.y"
+  case 488: /* allocate_option_list: allocate_option  */
+#line 1356 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[0].num); }
-#line 6305 "tools/widl/parser.tab.c"
+#line 6321 "tools/widl/parser.tab.c"
     break;
 
-  case 488: /* allocate_option_list: allocate_option_list ',' allocate_option  */
-#line 1357 "tools/widl/parser.y"
+  case 489: /* allocate_option_list: allocate_option_list ',' allocate_option  */
+#line 1358 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); }
-#line 6311 "tools/widl/parser.tab.c"
+#line 6327 "tools/widl/parser.tab.c"
     break;
 
-  case 489: /* allocate_option: tDONTFREE  */
-#line 1361 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_DONT_FREE; }
-#line 6317 "tools/widl/parser.tab.c"
-    break;
-
-  case 490: /* allocate_option: tFREE  */
+  case 490: /* allocate_option: tDONTFREE  */
 #line 1362 "tools/widl/parser.y"
-                                                { (yyval.num) = 0; }
-#line 6323 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = FC_DONT_FREE; }
+#line 6333 "tools/widl/parser.tab.c"
     break;
 
-  case 491: /* allocate_option: tALLNODES  */
+  case 491: /* allocate_option: tFREE  */
 #line 1363 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_ALLOCATE_ALL_NODES; }
-#line 6329 "tools/widl/parser.tab.c"
-    break;
-
-  case 492: /* allocate_option: tSINGLENODE  */
-#line 1364 "tools/widl/parser.y"
                                                 { (yyval.num) = 0; }
-#line 6335 "tools/widl/parser.tab.c"
+#line 6339 "tools/widl/parser.tab.c"
+    break;
+
+  case 492: /* allocate_option: tALLNODES  */
+#line 1364 "tools/widl/parser.y"
+                                                { (yyval.num) = FC_ALLOCATE_ALL_NODES; }
+#line 6345 "tools/widl/parser.tab.c"
+    break;
+
+  case 493: /* allocate_option: tSINGLENODE  */
+#line 1365 "tools/widl/parser.y"
+                                                { (yyval.num) = 0; }
+#line 6351 "tools/widl/parser.tab.c"
     break;
 
 
-#line 6339 "tools/widl/parser.tab.c"
+#line 6355 "tools/widl/parser.tab.c"
 
       default: break;
     }
@@ -6559,7 +6575,7 @@
   return yyresult;
 }
 
-#line 1367 "tools/widl/parser.y"
+#line 1368 "tools/widl/parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -7237,6 +7253,20 @@
   current_namespace = current_namespace->parent;
 }
 
+static void push_namespaces(str_list_t *names)
+{
+  const struct str_list_entry_t *name;
+  LIST_FOR_EACH_ENTRY(name, names, const struct str_list_entry_t, entry)
+    push_namespace(name->str);
+}
+
+static void pop_namespaces(str_list_t *names)
+{
+  const struct str_list_entry_t *name;
+  LIST_FOR_EACH_ENTRY_REV(name, names, const struct str_list_entry_t, entry)
+    pop_namespace(name->str);
+}
+
 static void push_parameters_namespace(const char *name)
 {
     struct namespace *namespace;
@@ -7507,7 +7537,7 @@
 struct allowed_attr allowed_attr[] =
 {
     /* attr                        { D ACF M   I Fn ARG T En Enm St Un Fi L  DI M  C AC  R  <display name> } */
-    /* ATTR_ACTIVATABLE */         { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "activatable" },
+    /* ATTR_ACTIVATABLE */         { 0, 0, 1,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "activatable" },
     /* ATTR_AGGREGATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "aggregatable" },
     /* ATTR_ALLOCATE */            { 0, 1, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
     /* ATTR_ANNOTATION */          { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
@@ -8303,9 +8333,9 @@
         if (args) LIST_FOR_EACH_ENTRY(arg, args, var_t, entry)
         {
             if (is_attr(arg->attrs, ATTR_IN) || !is_attr(arg->attrs, ATTR_OUT))
-                begin_args = append_var(begin_args, copy_var(arg, strdup(arg->name), arg_in_attrs));
+                begin_args = append_var(begin_args, copy_var(arg, xstrdup(arg->name), arg_in_attrs));
             if (is_attr(arg->attrs, ATTR_OUT))
-                finish_args = append_var(finish_args, copy_var(arg, strdup(arg->name), arg_out_attrs));
+                finish_args = append_var(finish_args, copy_var(arg, xstrdup(arg->name), arg_out_attrs));
         }
 
         begin_func = copy_var(func, strmake("Begin_%s", func->name), NULL);
diff --git a/mingw-w64-tools/widl/src/parser.y b/mingw-w64-tools/widl/src/parser.y
index d6ac73c..02db99a 100644
--- a/mingw-w64-tools/widl/src/parser.y
+++ b/mingw-w64-tools/widl/src/parser.y
@@ -70,8 +70,8 @@
 
 static var_t *reg_const(var_t *var);
 
-static void push_namespace(const char *name);
-static void pop_namespace(const char *name);
+static void push_namespaces(str_list_t *names);
+static void pop_namespaces(str_list_t *names);
 static void push_parameters_namespace(const char *name);
 static void pop_parameters_namespace(const char *name);
 
@@ -293,7 +293,7 @@
 %type <type> dispinterfaceref
 %type <type> dispinterface dispinterfacedef
 %type <type> module moduledef
-%type <str> namespacedef
+%type <str_list> namespacedef
 %type <type> base_type int_std
 %type <type> enumdef structdef uniondef typedecl
 %type <type> type unqualified_type qualified_type
@@ -385,8 +385,8 @@
 imp_decl_block: tDECLARE '{' imp_decl_statements '}' { $$ = $3; }
 
 gbl_statements:					{ $$ = NULL; }
-	| gbl_statements namespacedef '{' { push_namespace($2); } gbl_statements '}'
-						{ pop_namespace($2); $$ = append_statements($1, $5); }
+	| gbl_statements namespacedef '{' { push_namespaces($2); } gbl_statements '}'
+						{ pop_namespaces($2); $$ = append_statements($1, $5); }
 	| gbl_statements interface ';'		{ $$ = append_statement($1, make_statement_reference($2)); }
 	| gbl_statements dispinterface ';'	{ $$ = append_statement($1, make_statement_reference($2)); }
 	| gbl_statements interfacedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
@@ -412,8 +412,8 @@
 imp_statements:					{ $$ = NULL; }
 	| imp_statements interface ';'		{ $$ = append_statement($1, make_statement_reference($2)); }
 	| imp_statements dispinterface ';'	{ $$ = append_statement($1, make_statement_reference($2)); }
-	| imp_statements namespacedef '{' { push_namespace($2); } imp_statements '}'
-						{ pop_namespace($2); $$ = append_statements($1, $5); }
+	| imp_statements namespacedef '{' { push_namespaces($2); } imp_statements '}'
+						{ pop_namespaces($2); $$ = append_statements($1, $5); }
 	| imp_statements interfacedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
 	| imp_statements delegatedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
 	| imp_statements coclass ';'		{ $$ = $1; reg_type($2, $2->name, current_namespace, 0); }
@@ -521,7 +521,7 @@
 	;
 
 args:	  arg_list
-	| arg_list ',' ELLIPSIS			{ $$ = append_var( $1, make_var(strdup("...")) ); }
+	| arg_list ',' ELLIPSIS			{ $$ = append_var( $1, make_var(xstrdup("...")) ); }
 	;
 
 /* split into two rules to get bison to resolve a tVOID conflict */
@@ -992,7 +992,8 @@
 						{ $$ = type_apicontract_define($2, $1); }
 	;
 
-namespacedef: tNAMESPACE aIDENTIFIER		{ $$ = $2; }
+namespacedef: tNAMESPACE aIDENTIFIER		{ $$ = append_str( NULL, $2 ); }
+	| namespacedef '.' aIDENTIFIER		{ $$ = append_str( $1, $3 ); }
 	;
 
 class_interfaces:				{ $$ = NULL; }
@@ -2041,6 +2042,20 @@
   current_namespace = current_namespace->parent;
 }
 
+static void push_namespaces(str_list_t *names)
+{
+  const struct str_list_entry_t *name;
+  LIST_FOR_EACH_ENTRY(name, names, const struct str_list_entry_t, entry)
+    push_namespace(name->str);
+}
+
+static void pop_namespaces(str_list_t *names)
+{
+  const struct str_list_entry_t *name;
+  LIST_FOR_EACH_ENTRY_REV(name, names, const struct str_list_entry_t, entry)
+    pop_namespace(name->str);
+}
+
 static void push_parameters_namespace(const char *name)
 {
     struct namespace *namespace;
@@ -2311,7 +2326,7 @@
 struct allowed_attr allowed_attr[] =
 {
     /* attr                        { D ACF M   I Fn ARG T En Enm St Un Fi L  DI M  C AC  R  <display name> } */
-    /* ATTR_ACTIVATABLE */         { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "activatable" },
+    /* ATTR_ACTIVATABLE */         { 0, 0, 1,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "activatable" },
     /* ATTR_AGGREGATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "aggregatable" },
     /* ATTR_ALLOCATE */            { 0, 1, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
     /* ATTR_ANNOTATION */          { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
@@ -3107,9 +3122,9 @@
         if (args) LIST_FOR_EACH_ENTRY(arg, args, var_t, entry)
         {
             if (is_attr(arg->attrs, ATTR_IN) || !is_attr(arg->attrs, ATTR_OUT))
-                begin_args = append_var(begin_args, copy_var(arg, strdup(arg->name), arg_in_attrs));
+                begin_args = append_var(begin_args, copy_var(arg, xstrdup(arg->name), arg_in_attrs));
             if (is_attr(arg->attrs, ATTR_OUT))
-                finish_args = append_var(finish_args, copy_var(arg, strdup(arg->name), arg_out_attrs));
+                finish_args = append_var(finish_args, copy_var(arg, xstrdup(arg->name), arg_out_attrs));
         }
 
         begin_func = copy_var(func, strmake("Begin_%s", func->name), NULL);
diff --git a/mingw-w64-tools/widl/src/typetree.c b/mingw-w64-tools/widl/src/typetree.c
index dc4db35..800ddf7 100644
--- a/mingw-w64-tools/widl/src/typetree.c
+++ b/mingw-w64-tools/widl/src/typetree.c
@@ -226,12 +226,14 @@
         case TYPE_BASIC_DOUBLE:
             n += strappend(buf, len, pos + n, "f8");
             return n;
+        case TYPE_BASIC_BYTE:
+            n += strappend(buf, len, pos + n, "u1");
+            return n;
         case TYPE_BASIC_INT16:
         case TYPE_BASIC_INT3264:
         case TYPE_BASIC_LONG:
         case TYPE_BASIC_CHAR:
         case TYPE_BASIC_HYPER:
-        case TYPE_BASIC_BYTE:
         case TYPE_BASIC_WCHAR:
         case TYPE_BASIC_ERROR_STATUS_T:
         case TYPE_BASIC_HANDLE:
diff --git a/mingw-w64-tools/widl/src/widl.c b/mingw-w64-tools/widl/src/widl.c
index 4ae380b..995e957 100644
--- a/mingw-w64-tools/widl/src/widl.c
+++ b/mingw-w64-tools/widl/src/widl.c
@@ -490,8 +490,8 @@
 #elif defined (__FreeBSD__) || defined(__DragonFly__)
     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 ))
+    char *path = xmalloc( path_size );
+    if (!sysctl( pathname, sizeof(pathname)/sizeof(pathname[0]), path, &path_size, NULL, 0 ))
         dir = realpath( path, NULL );
     free( path );
 #else
@@ -710,7 +710,7 @@
             TRYOPEN( strmake( "%s%s/%s", default_dirs[i], pe_dir, name ));
         }
     }
-    return -1;
+    error( "cannot find %s\n", name );
 #undef TRYOPEN
 }