diff --git a/mingw-w64-headers/include/activdbg.h b/mingw-w64-headers/include/activdbg.h
index e6c0e2a..5fe0cd7 100644
--- a/mingw-w64-headers/include/activdbg.h
+++ b/mingw-w64-headers/include/activdbg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from include/activdbg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 3.20 from include/activdbg.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -20,301 +20,481 @@
 #ifndef __IActiveScriptDebug32_FWD_DEFINED__
 #define __IActiveScriptDebug32_FWD_DEFINED__
 typedef interface IActiveScriptDebug32 IActiveScriptDebug32;
+#ifdef __cplusplus
+interface IActiveScriptDebug32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptDebug64_FWD_DEFINED__
 #define __IActiveScriptDebug64_FWD_DEFINED__
 typedef interface IActiveScriptDebug64 IActiveScriptDebug64;
+#ifdef __cplusplus
+interface IActiveScriptDebug64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebug32_FWD_DEFINED__
 #define __IActiveScriptSiteDebug32_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebug32 IActiveScriptSiteDebug32;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebug32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebug64_FWD_DEFINED__
 #define __IActiveScriptSiteDebug64_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebug64 IActiveScriptSiteDebug64;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebug64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebugEx_FWD_DEFINED__
 #define __IActiveScriptSiteDebugEx_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebugEx IActiveScriptSiteDebugEx;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebugEx;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptErrorDebug_FWD_DEFINED__
 #define __IActiveScriptErrorDebug_FWD_DEFINED__
 typedef interface IActiveScriptErrorDebug IActiveScriptErrorDebug;
+#ifdef __cplusplus
+interface IActiveScriptErrorDebug;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugCodeContext_FWD_DEFINED__
 #define __IDebugCodeContext_FWD_DEFINED__
 typedef interface IDebugCodeContext IDebugCodeContext;
+#ifdef __cplusplus
+interface IDebugCodeContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpression_FWD_DEFINED__
 #define __IDebugExpression_FWD_DEFINED__
 typedef interface IDebugExpression IDebugExpression;
+#ifdef __cplusplus
+interface IDebugExpression;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpressionContext_FWD_DEFINED__
 #define __IDebugExpressionContext_FWD_DEFINED__
 typedef interface IDebugExpressionContext IDebugExpressionContext;
+#ifdef __cplusplus
+interface IDebugExpressionContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpressionCallBack_FWD_DEFINED__
 #define __IDebugExpressionCallBack_FWD_DEFINED__
 typedef interface IDebugExpressionCallBack IDebugExpressionCallBack;
+#ifdef __cplusplus
+interface IDebugExpressionCallBack;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrame_FWD_DEFINED__
 #define __IDebugStackFrame_FWD_DEFINED__
 typedef interface IDebugStackFrame IDebugStackFrame;
+#ifdef __cplusplus
+interface IDebugStackFrame;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSniffer_FWD_DEFINED__
 #define __IDebugStackFrameSniffer_FWD_DEFINED__
 typedef interface IDebugStackFrameSniffer IDebugStackFrameSniffer;
+#ifdef __cplusplus
+interface IDebugStackFrameSniffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSnifferEx32_FWD_DEFINED__
 #define __IDebugStackFrameSnifferEx32_FWD_DEFINED__
 typedef interface IDebugStackFrameSnifferEx32 IDebugStackFrameSnifferEx32;
+#ifdef __cplusplus
+interface IDebugStackFrameSnifferEx32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSnifferEx64_FWD_DEFINED__
 #define __IDebugStackFrameSnifferEx64_FWD_DEFINED__
 typedef interface IDebugStackFrameSnifferEx64 IDebugStackFrameSnifferEx64;
+#ifdef __cplusplus
+interface IDebugStackFrameSnifferEx64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugSyncOperation_FWD_DEFINED__
 #define __IDebugSyncOperation_FWD_DEFINED__
 typedef interface IDebugSyncOperation IDebugSyncOperation;
+#ifdef __cplusplus
+interface IDebugSyncOperation;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugAsyncOperation_FWD_DEFINED__
 #define __IDebugAsyncOperation_FWD_DEFINED__
 typedef interface IDebugAsyncOperation IDebugAsyncOperation;
+#ifdef __cplusplus
+interface IDebugAsyncOperation;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugAsyncOperationCallBack_FWD_DEFINED__
 #define __IDebugAsyncOperationCallBack_FWD_DEFINED__
 typedef interface IDebugAsyncOperationCallBack IDebugAsyncOperationCallBack;
+#ifdef __cplusplus
+interface IDebugAsyncOperationCallBack;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugCodeContexts_FWD_DEFINED__
 #define __IEnumDebugCodeContexts_FWD_DEFINED__
 typedef interface IEnumDebugCodeContexts IEnumDebugCodeContexts;
+#ifdef __cplusplus
+interface IEnumDebugCodeContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugStackFrames_FWD_DEFINED__
 #define __IEnumDebugStackFrames_FWD_DEFINED__
 typedef interface IEnumDebugStackFrames IEnumDebugStackFrames;
+#ifdef __cplusplus
+interface IEnumDebugStackFrames;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugStackFrames64_FWD_DEFINED__
 #define __IEnumDebugStackFrames64_FWD_DEFINED__
 typedef interface IEnumDebugStackFrames64 IEnumDebugStackFrames64;
+#ifdef __cplusplus
+interface IEnumDebugStackFrames64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentInfo_FWD_DEFINED__
 #define __IDebugDocumentInfo_FWD_DEFINED__
 typedef interface IDebugDocumentInfo IDebugDocumentInfo;
+#ifdef __cplusplus
+interface IDebugDocumentInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentProvider_FWD_DEFINED__
 #define __IDebugDocumentProvider_FWD_DEFINED__
 typedef interface IDebugDocumentProvider IDebugDocumentProvider;
+#ifdef __cplusplus
+interface IDebugDocumentProvider;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocument_FWD_DEFINED__
 #define __IDebugDocument_FWD_DEFINED__
 typedef interface IDebugDocument IDebugDocument;
+#ifdef __cplusplus
+interface IDebugDocument;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentText_FWD_DEFINED__
 #define __IDebugDocumentText_FWD_DEFINED__
 typedef interface IDebugDocumentText IDebugDocumentText;
+#ifdef __cplusplus
+interface IDebugDocumentText;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextEvents_FWD_DEFINED__
 #define __IDebugDocumentTextEvents_FWD_DEFINED__
 typedef interface IDebugDocumentTextEvents IDebugDocumentTextEvents;
+#ifdef __cplusplus
+interface IDebugDocumentTextEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextAuthor_FWD_DEFINED__
 #define __IDebugDocumentTextAuthor_FWD_DEFINED__
 typedef interface IDebugDocumentTextAuthor IDebugDocumentTextAuthor;
+#ifdef __cplusplus
+interface IDebugDocumentTextAuthor;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextExternalAuthor_FWD_DEFINED__
 #define __IDebugDocumentTextExternalAuthor_FWD_DEFINED__
 typedef interface IDebugDocumentTextExternalAuthor IDebugDocumentTextExternalAuthor;
+#ifdef __cplusplus
+interface IDebugDocumentTextExternalAuthor;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHelper32_FWD_DEFINED__
 #define __IDebugDocumentHelper32_FWD_DEFINED__
 typedef interface IDebugDocumentHelper32 IDebugDocumentHelper32;
+#ifdef __cplusplus
+interface IDebugDocumentHelper32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHelper64_FWD_DEFINED__
 #define __IDebugDocumentHelper64_FWD_DEFINED__
 typedef interface IDebugDocumentHelper64 IDebugDocumentHelper64;
+#ifdef __cplusplus
+interface IDebugDocumentHelper64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHost_FWD_DEFINED__
 #define __IDebugDocumentHost_FWD_DEFINED__
 typedef interface IDebugDocumentHost IDebugDocumentHost;
+#ifdef __cplusplus
+interface IDebugDocumentHost;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentContext_FWD_DEFINED__
 #define __IDebugDocumentContext_FWD_DEFINED__
 typedef interface IDebugDocumentContext IDebugDocumentContext;
+#ifdef __cplusplus
+interface IDebugDocumentContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugSessionProvider_FWD_DEFINED__
 #define __IDebugSessionProvider_FWD_DEFINED__
 typedef interface IDebugSessionProvider IDebugSessionProvider;
+#ifdef __cplusplus
+interface IDebugSessionProvider;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IApplicationDebugger_FWD_DEFINED__
 #define __IApplicationDebugger_FWD_DEFINED__
 typedef interface IApplicationDebugger IApplicationDebugger;
+#ifdef __cplusplus
+interface IApplicationDebugger;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IApplicationDebuggerUI_FWD_DEFINED__
 #define __IApplicationDebuggerUI_FWD_DEFINED__
 typedef interface IApplicationDebuggerUI IApplicationDebuggerUI;
+#ifdef __cplusplus
+interface IApplicationDebuggerUI;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManager_FWD_DEFINED__
 #define __IMachineDebugManager_FWD_DEFINED__
 typedef interface IMachineDebugManager IMachineDebugManager;
+#ifdef __cplusplus
+interface IMachineDebugManager;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManagerCookie_FWD_DEFINED__
 #define __IMachineDebugManagerCookie_FWD_DEFINED__
 typedef interface IMachineDebugManagerCookie IMachineDebugManagerCookie;
+#ifdef __cplusplus
+interface IMachineDebugManagerCookie;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManagerEvents_FWD_DEFINED__
 #define __IMachineDebugManagerEvents_FWD_DEFINED__
 typedef interface IMachineDebugManagerEvents IMachineDebugManagerEvents;
+#ifdef __cplusplus
+interface IMachineDebugManagerEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProcessDebugManager32_FWD_DEFINED__
 #define __IProcessDebugManager32_FWD_DEFINED__
 typedef interface IProcessDebugManager32 IProcessDebugManager32;
+#ifdef __cplusplus
+interface IProcessDebugManager32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProcessDebugManager64_FWD_DEFINED__
 #define __IProcessDebugManager64_FWD_DEFINED__
 typedef interface IProcessDebugManager64 IProcessDebugManager64;
+#ifdef __cplusplus
+interface IProcessDebugManager64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplication_FWD_DEFINED__
 #define __IRemoteDebugApplication_FWD_DEFINED__
 typedef interface IRemoteDebugApplication IRemoteDebugApplication;
+#ifdef __cplusplus
+interface IRemoteDebugApplication;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplication32_FWD_DEFINED__
 #define __IDebugApplication32_FWD_DEFINED__
 typedef interface IDebugApplication32 IDebugApplication32;
+#ifdef __cplusplus
+interface IDebugApplication32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplication64_FWD_DEFINED__
 #define __IDebugApplication64_FWD_DEFINED__
 typedef interface IDebugApplication64 IDebugApplication64;
+#ifdef __cplusplus
+interface IDebugApplication64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplicationEvents_FWD_DEFINED__
 #define __IRemoteDebugApplicationEvents_FWD_DEFINED__
 typedef interface IRemoteDebugApplicationEvents IRemoteDebugApplicationEvents;
+#ifdef __cplusplus
+interface IRemoteDebugApplicationEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationNode_FWD_DEFINED__
 #define __IDebugApplicationNode_FWD_DEFINED__
 typedef interface IDebugApplicationNode IDebugApplicationNode;
+#ifdef __cplusplus
+interface IDebugApplicationNode;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationNodeEvents_FWD_DEFINED__
 #define __IDebugApplicationNodeEvents_FWD_DEFINED__
 typedef interface IDebugApplicationNodeEvents IDebugApplicationNodeEvents;
+#ifdef __cplusplus
+interface IDebugApplicationNodeEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __AsyncIDebugApplicationNodeEvents_FWD_DEFINED__
 #define __AsyncIDebugApplicationNodeEvents_FWD_DEFINED__
 typedef interface AsyncIDebugApplicationNodeEvents AsyncIDebugApplicationNodeEvents;
+#ifdef __cplusplus
+interface AsyncIDebugApplicationNodeEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugThreadCall32_FWD_DEFINED__
 #define __IDebugThreadCall32_FWD_DEFINED__
 typedef interface IDebugThreadCall32 IDebugThreadCall32;
+#ifdef __cplusplus
+interface IDebugThreadCall32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugThreadCall64_FWD_DEFINED__
 #define __IDebugThreadCall64_FWD_DEFINED__
 typedef interface IDebugThreadCall64 IDebugThreadCall64;
+#ifdef __cplusplus
+interface IDebugThreadCall64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplicationThread_FWD_DEFINED__
 #define __IRemoteDebugApplicationThread_FWD_DEFINED__
 typedef interface IRemoteDebugApplicationThread IRemoteDebugApplicationThread;
+#ifdef __cplusplus
+interface IRemoteDebugApplicationThread;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationThread_FWD_DEFINED__
 #define __IDebugApplicationThread_FWD_DEFINED__
 typedef interface IDebugApplicationThread IDebugApplicationThread;
+#ifdef __cplusplus
+interface IDebugApplicationThread;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationThread64_FWD_DEFINED__
 #define __IDebugApplicationThread64_FWD_DEFINED__
 typedef interface IDebugApplicationThread64 IDebugApplicationThread64;
+#ifdef __cplusplus
+interface IDebugApplicationThread64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugCookie_FWD_DEFINED__
 #define __IDebugCookie_FWD_DEFINED__
 typedef interface IDebugCookie IDebugCookie;
+#ifdef __cplusplus
+interface IDebugCookie;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugApplicationNodes_FWD_DEFINED__
 #define __IEnumDebugApplicationNodes_FWD_DEFINED__
 typedef interface IEnumDebugApplicationNodes IEnumDebugApplicationNodes;
+#ifdef __cplusplus
+interface IEnumDebugApplicationNodes;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumRemoteDebugApplications_FWD_DEFINED__
 #define __IEnumRemoteDebugApplications_FWD_DEFINED__
 typedef interface IEnumRemoteDebugApplications IEnumRemoteDebugApplications;
+#ifdef __cplusplus
+interface IEnumRemoteDebugApplications;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumRemoteDebugApplicationThreads_FWD_DEFINED__
 #define __IEnumRemoteDebugApplicationThreads_FWD_DEFINED__
 typedef interface IEnumRemoteDebugApplicationThreads IEnumRemoteDebugApplicationThreads;
+#ifdef __cplusplus
+interface IEnumRemoteDebugApplicationThreads;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugFormatter_FWD_DEFINED__
 #define __IDebugFormatter_FWD_DEFINED__
 typedef interface IDebugFormatter IDebugFormatter;
+#ifdef __cplusplus
+interface IDebugFormatter;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISimpleConnectionPoint_FWD_DEFINED__
 #define __ISimpleConnectionPoint_FWD_DEFINED__
 typedef interface ISimpleConnectionPoint ISimpleConnectionPoint;
+#ifdef __cplusplus
+interface ISimpleConnectionPoint;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugHelper_FWD_DEFINED__
 #define __IDebugHelper_FWD_DEFINED__
 typedef interface IDebugHelper IDebugHelper;
+#ifdef __cplusplus
+interface IDebugHelper;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugExpressionContexts_FWD_DEFINED__
 #define __IEnumDebugExpressionContexts_FWD_DEFINED__
 typedef interface IEnumDebugExpressionContexts IEnumDebugExpressionContexts;
+#ifdef __cplusplus
+interface IEnumDebugExpressionContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProvideExpressionContexts_FWD_DEFINED__
 #define __IProvideExpressionContexts_FWD_DEFINED__
 typedef interface IProvideExpressionContexts IProvideExpressionContexts;
+#ifdef __cplusplus
+interface IProvideExpressionContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ProcessDebugManager_FWD_DEFINED__
@@ -392,271 +572,425 @@
 #ifndef __IActiveScriptDebug32_FWD_DEFINED__
 #define __IActiveScriptDebug32_FWD_DEFINED__
 typedef interface IActiveScriptDebug32 IActiveScriptDebug32;
+#ifdef __cplusplus
+interface IActiveScriptDebug32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptDebug64_FWD_DEFINED__
 #define __IActiveScriptDebug64_FWD_DEFINED__
 typedef interface IActiveScriptDebug64 IActiveScriptDebug64;
+#ifdef __cplusplus
+interface IActiveScriptDebug64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptErrorDebug_FWD_DEFINED__
 #define __IActiveScriptErrorDebug_FWD_DEFINED__
 typedef interface IActiveScriptErrorDebug IActiveScriptErrorDebug;
+#ifdef __cplusplus
+interface IActiveScriptErrorDebug;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebug32_FWD_DEFINED__
 #define __IActiveScriptSiteDebug32_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebug32 IActiveScriptSiteDebug32;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebug32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebug64_FWD_DEFINED__
 #define __IActiveScriptSiteDebug64_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebug64 IActiveScriptSiteDebug64;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebug64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebugEx_FWD_DEFINED__
 #define __IActiveScriptSiteDebugEx_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebugEx IActiveScriptSiteDebugEx;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebugEx;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptTextInfo_FWD_DEFINED__
 #define __IActiveScriptTextInfo_FWD_DEFINED__
 typedef interface IActiveScriptTextInfo IActiveScriptTextInfo;
+#ifdef __cplusplus
+interface IActiveScriptTextInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IApplicationDebugger_FWD_DEFINED__
 #define __IApplicationDebugger_FWD_DEFINED__
 typedef interface IApplicationDebugger IApplicationDebugger;
+#ifdef __cplusplus
+interface IApplicationDebugger;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplication32_FWD_DEFINED__
 #define __IDebugApplication32_FWD_DEFINED__
 typedef interface IDebugApplication32 IDebugApplication32;
+#ifdef __cplusplus
+interface IDebugApplication32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplication64_FWD_DEFINED__
 #define __IDebugApplication64_FWD_DEFINED__
 typedef interface IDebugApplication64 IDebugApplication64;
+#ifdef __cplusplus
+interface IDebugApplication64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationNode_FWD_DEFINED__
 #define __IDebugApplicationNode_FWD_DEFINED__
 typedef interface IDebugApplicationNode IDebugApplicationNode;
+#ifdef __cplusplus
+interface IDebugApplicationNode;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationNodeEvents_FWD_DEFINED__
 #define __IDebugApplicationNodeEvents_FWD_DEFINED__
 typedef interface IDebugApplicationNodeEvents IDebugApplicationNodeEvents;
-#endif
-
-#ifndef __AsyncIDebugApplicationNodeEvents_FWD_DEFINED__
-#define __AsyncIDebugApplicationNodeEvents_FWD_DEFINED__
-typedef interface AsyncIDebugApplicationNodeEvents AsyncIDebugApplicationNodeEvents;
+#ifdef __cplusplus
+interface IDebugApplicationNodeEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationThread_FWD_DEFINED__
 #define __IDebugApplicationThread_FWD_DEFINED__
 typedef interface IDebugApplicationThread IDebugApplicationThread;
+#ifdef __cplusplus
+interface IDebugApplicationThread;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugAsyncOperation_FWD_DEFINED__
 #define __IDebugAsyncOperation_FWD_DEFINED__
 typedef interface IDebugAsyncOperation IDebugAsyncOperation;
+#ifdef __cplusplus
+interface IDebugAsyncOperation;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugAsyncOperationCallBack_FWD_DEFINED__
 #define __IDebugAsyncOperationCallBack_FWD_DEFINED__
 typedef interface IDebugAsyncOperationCallBack IDebugAsyncOperationCallBack;
+#ifdef __cplusplus
+interface IDebugAsyncOperationCallBack;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugCodeContext_FWD_DEFINED__
 #define __IDebugCodeContext_FWD_DEFINED__
 typedef interface IDebugCodeContext IDebugCodeContext;
+#ifdef __cplusplus
+interface IDebugCodeContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocument_FWD_DEFINED__
 #define __IDebugDocument_FWD_DEFINED__
 typedef interface IDebugDocument IDebugDocument;
+#ifdef __cplusplus
+interface IDebugDocument;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentContext_FWD_DEFINED__
 #define __IDebugDocumentContext_FWD_DEFINED__
 typedef interface IDebugDocumentContext IDebugDocumentContext;
+#ifdef __cplusplus
+interface IDebugDocumentContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHelper32_FWD_DEFINED__
 #define __IDebugDocumentHelper32_FWD_DEFINED__
 typedef interface IDebugDocumentHelper32 IDebugDocumentHelper32;
+#ifdef __cplusplus
+interface IDebugDocumentHelper32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHelper64_FWD_DEFINED__
 #define __IDebugDocumentHelper64_FWD_DEFINED__
 typedef interface IDebugDocumentHelper64 IDebugDocumentHelper64;
+#ifdef __cplusplus
+interface IDebugDocumentHelper64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHost_FWD_DEFINED__
 #define __IDebugDocumentHost_FWD_DEFINED__
 typedef interface IDebugDocumentHost IDebugDocumentHost;
+#ifdef __cplusplus
+interface IDebugDocumentHost;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentInfo_FWD_DEFINED__
 #define __IDebugDocumentInfo_FWD_DEFINED__
 typedef interface IDebugDocumentInfo IDebugDocumentInfo;
+#ifdef __cplusplus
+interface IDebugDocumentInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentProvider_FWD_DEFINED__
 #define __IDebugDocumentProvider_FWD_DEFINED__
 typedef interface IDebugDocumentProvider IDebugDocumentProvider;
+#ifdef __cplusplus
+interface IDebugDocumentProvider;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentText_FWD_DEFINED__
 #define __IDebugDocumentText_FWD_DEFINED__
 typedef interface IDebugDocumentText IDebugDocumentText;
+#ifdef __cplusplus
+interface IDebugDocumentText;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextAuthor_FWD_DEFINED__
 #define __IDebugDocumentTextAuthor_FWD_DEFINED__
 typedef interface IDebugDocumentTextAuthor IDebugDocumentTextAuthor;
+#ifdef __cplusplus
+interface IDebugDocumentTextAuthor;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextEvents_FWD_DEFINED__
 #define __IDebugDocumentTextEvents_FWD_DEFINED__
 typedef interface IDebugDocumentTextEvents IDebugDocumentTextEvents;
+#ifdef __cplusplus
+interface IDebugDocumentTextEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpression_FWD_DEFINED__
 #define __IDebugExpression_FWD_DEFINED__
 typedef interface IDebugExpression IDebugExpression;
+#ifdef __cplusplus
+interface IDebugExpression;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpressionCallBack_FWD_DEFINED__
 #define __IDebugExpressionCallBack_FWD_DEFINED__
 typedef interface IDebugExpressionCallBack IDebugExpressionCallBack;
+#ifdef __cplusplus
+interface IDebugExpressionCallBack;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpressionContext_FWD_DEFINED__
 #define __IDebugExpressionContext_FWD_DEFINED__
 typedef interface IDebugExpressionContext IDebugExpressionContext;
+#ifdef __cplusplus
+interface IDebugExpressionContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugFormatter_FWD_DEFINED__
 #define __IDebugFormatter_FWD_DEFINED__
 typedef interface IDebugFormatter IDebugFormatter;
+#ifdef __cplusplus
+interface IDebugFormatter;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugSessionProvider_FWD_DEFINED__
 #define __IDebugSessionProvider_FWD_DEFINED__
 typedef interface IDebugSessionProvider IDebugSessionProvider;
+#ifdef __cplusplus
+interface IDebugSessionProvider;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrame_FWD_DEFINED__
 #define __IDebugStackFrame_FWD_DEFINED__
 typedef interface IDebugStackFrame IDebugStackFrame;
+#ifdef __cplusplus
+interface IDebugStackFrame;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSniffer_FWD_DEFINED__
 #define __IDebugStackFrameSniffer_FWD_DEFINED__
 typedef interface IDebugStackFrameSniffer IDebugStackFrameSniffer;
+#ifdef __cplusplus
+interface IDebugStackFrameSniffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugSyncOperation_FWD_DEFINED__
 #define __IDebugSyncOperation_FWD_DEFINED__
 typedef interface IDebugSyncOperation IDebugSyncOperation;
+#ifdef __cplusplus
+interface IDebugSyncOperation;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugThreadCall32_FWD_DEFINED__
 #define __IDebugThreadCall32_FWD_DEFINED__
 typedef interface IDebugThreadCall32 IDebugThreadCall32;
+#ifdef __cplusplus
+interface IDebugThreadCall32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugThreadCall64_FWD_DEFINED__
 #define __IDebugThreadCall64_FWD_DEFINED__
 typedef interface IDebugThreadCall64 IDebugThreadCall64;
+#ifdef __cplusplus
+interface IDebugThreadCall64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumActiveScriptDebugs_FWD_DEFINED__
 #define __IEnumActiveScriptDebugs_FWD_DEFINED__
 typedef interface IEnumActiveScriptDebugs IEnumActiveScriptDebugs;
+#ifdef __cplusplus
+interface IEnumActiveScriptDebugs;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugApplicationNodes_FWD_DEFINED__
 #define __IEnumDebugApplicationNodes_FWD_DEFINED__
 typedef interface IEnumDebugApplicationNodes IEnumDebugApplicationNodes;
+#ifdef __cplusplus
+interface IEnumDebugApplicationNodes;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugCodeContexts_FWD_DEFINED__
 #define __IEnumDebugCodeContexts_FWD_DEFINED__
 typedef interface IEnumDebugCodeContexts IEnumDebugCodeContexts;
+#ifdef __cplusplus
+interface IEnumDebugCodeContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugDocumentContexts_FWD_DEFINED__
 #define __IEnumDebugDocumentContexts_FWD_DEFINED__
 typedef interface IEnumDebugDocumentContexts IEnumDebugDocumentContexts;
+#ifdef __cplusplus
+interface IEnumDebugDocumentContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugExpressionContexts_FWD_DEFINED__
 #define __IEnumDebugExpressionContexts_FWD_DEFINED__
 typedef interface IEnumDebugExpressionContexts IEnumDebugExpressionContexts;
+#ifdef __cplusplus
+interface IEnumDebugExpressionContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugObjectBrowsers_FWD_DEFINED__
 #define __IEnumDebugObjectBrowsers_FWD_DEFINED__
 typedef interface IEnumDebugObjectBrowsers IEnumDebugObjectBrowsers;
+#ifdef __cplusplus
+interface IEnumDebugObjectBrowsers;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugStackFrames_FWD_DEFINED__
 #define __IEnumDebugStackFrames_FWD_DEFINED__
 typedef interface IEnumDebugStackFrames IEnumDebugStackFrames;
+#ifdef __cplusplus
+interface IEnumDebugStackFrames;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugStackFrames64_FWD_DEFINED__
 #define __IEnumDebugStackFrames64_FWD_DEFINED__
 typedef interface IEnumDebugStackFrames64 IEnumDebugStackFrames64;
+#ifdef __cplusplus
+interface IEnumDebugStackFrames64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumRemoteDebugApplications_FWD_DEFINED__
 #define __IEnumRemoteDebugApplications_FWD_DEFINED__
 typedef interface IEnumRemoteDebugApplications IEnumRemoteDebugApplications;
+#ifdef __cplusplus
+interface IEnumRemoteDebugApplications;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumRemoteDebugApplicationThreads_FWD_DEFINED__
 #define __IEnumRemoteDebugApplicationThreads_FWD_DEFINED__
 typedef interface IEnumRemoteDebugApplicationThreads IEnumRemoteDebugApplicationThreads;
+#ifdef __cplusplus
+interface IEnumRemoteDebugApplicationThreads;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManager_FWD_DEFINED__
 #define __IMachineDebugManager_FWD_DEFINED__
 typedef interface IMachineDebugManager IMachineDebugManager;
+#ifdef __cplusplus
+interface IMachineDebugManager;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManagerCookie_FWD_DEFINED__
 #define __IMachineDebugManagerCookie_FWD_DEFINED__
 typedef interface IMachineDebugManagerCookie IMachineDebugManagerCookie;
+#ifdef __cplusplus
+interface IMachineDebugManagerCookie;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManagerEvents_FWD_DEFINED__
 #define __IMachineDebugManagerEvents_FWD_DEFINED__
 typedef interface IMachineDebugManagerEvents IMachineDebugManagerEvents;
+#ifdef __cplusplus
+interface IMachineDebugManagerEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProcessDebugManager_FWD_DEFINED__
 #define __IProcessDebugManager_FWD_DEFINED__
 typedef interface IProcessDebugManager IProcessDebugManager;
+#ifdef __cplusplus
+interface IProcessDebugManager;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProvideExpressionContexts_FWD_DEFINED__
 #define __IProvideExpressionContexts_FWD_DEFINED__
 typedef interface IProvideExpressionContexts IProvideExpressionContexts;
+#ifdef __cplusplus
+interface IProvideExpressionContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplication_FWD_DEFINED__
 #define __IRemoteDebugApplication_FWD_DEFINED__
 typedef interface IRemoteDebugApplication IRemoteDebugApplication;
+#ifdef __cplusplus
+interface IRemoteDebugApplication;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplicationThread_FWD_DEFINED__
 #define __IRemoteDebugApplicationThread_FWD_DEFINED__
 typedef interface IRemoteDebugApplicationThread IRemoteDebugApplicationThread;
+#ifdef __cplusplus
+interface IRemoteDebugApplicationThread;
+#endif /* __cplusplus */
 #endif
 
 typedef DWORD APPBREAKFLAGS;
@@ -845,19 +1179,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IActiveScriptDebug32* This,
+        IActiveScriptDebug32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IActiveScriptDebug32* This);
+        IActiveScriptDebug32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IActiveScriptDebug32* This);
+        IActiveScriptDebug32 *This);
 
     /*** IActiveScriptDebug32 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetScriptTextAttributes)(
-        IActiveScriptDebug32* This,
+        IActiveScriptDebug32 *This,
         LPCOLESTR pstrCode,
         ULONG uNumCodeChars,
         LPCOLESTR pstrDelimiter,
@@ -865,7 +1199,7 @@
         SOURCE_TEXT_ATTR *pattr);
 
     HRESULT (STDMETHODCALLTYPE *GetScriptletTextAttributes)(
-        IActiveScriptDebug32* This,
+        IActiveScriptDebug32 *This,
         LPCOLESTR pstrCode,
         ULONG uNumCodeChars,
         LPCOLESTR pstrDelimiter,
@@ -873,7 +1207,7 @@
         SOURCE_TEXT_ATTR *pattr);
 
     HRESULT (STDMETHODCALLTYPE *EnumCodeContextsOfPosition)(
-        IActiveScriptDebug32* This,
+        IActiveScriptDebug32 *This,
         DWORD dwSourceContext,
         ULONG uCharacterOffset,
         ULONG uNumChars,
@@ -881,6 +1215,7 @@
 
     END_INTERFACE
 } IActiveScriptDebug32Vtbl;
+
 interface IActiveScriptDebug32 {
     CONST_VTBL IActiveScriptDebug32Vtbl* lpVtbl;
 };
@@ -921,41 +1256,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IActiveScriptDebug32_GetScriptTextAttributes_Proxy(
-    IActiveScriptDebug32* This,
-    LPCOLESTR pstrCode,
-    ULONG uNumCodeChars,
-    LPCOLESTR pstrDelimiter,
-    DWORD dwFlags,
-    SOURCE_TEXT_ATTR *pattr);
-void __RPC_STUB IActiveScriptDebug32_GetScriptTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptDebug32_GetScriptletTextAttributes_Proxy(
-    IActiveScriptDebug32* This,
-    LPCOLESTR pstrCode,
-    ULONG uNumCodeChars,
-    LPCOLESTR pstrDelimiter,
-    DWORD dwFlags,
-    SOURCE_TEXT_ATTR *pattr);
-void __RPC_STUB IActiveScriptDebug32_GetScriptletTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptDebug32_EnumCodeContextsOfPosition_Proxy(
-    IActiveScriptDebug32* This,
-    DWORD dwSourceContext,
-    ULONG uCharacterOffset,
-    ULONG uNumChars,
-    IEnumDebugCodeContexts **ppescc);
-void __RPC_STUB IActiveScriptDebug32_EnumCodeContextsOfPosition_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IActiveScriptDebug32_INTERFACE_DEFINED__ */
 
@@ -1000,19 +1300,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IActiveScriptDebug64* This,
+        IActiveScriptDebug64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IActiveScriptDebug64* This);
+        IActiveScriptDebug64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IActiveScriptDebug64* This);
+        IActiveScriptDebug64 *This);
 
     /*** IActiveScriptDebug64 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetScriptTextAttributes)(
-        IActiveScriptDebug64* This,
+        IActiveScriptDebug64 *This,
         LPCOLESTR pstrCode,
         ULONG uNumCodeChars,
         LPCOLESTR pstrDelimiter,
@@ -1020,7 +1320,7 @@
         SOURCE_TEXT_ATTR *pattr);
 
     HRESULT (STDMETHODCALLTYPE *GetScriptletTextAttributes)(
-        IActiveScriptDebug64* This,
+        IActiveScriptDebug64 *This,
         LPCOLESTR pstrCode,
         ULONG uNumCodeChars,
         LPCOLESTR pstrDelimiter,
@@ -1028,7 +1328,7 @@
         SOURCE_TEXT_ATTR *pattr);
 
     HRESULT (STDMETHODCALLTYPE *EnumCodeContextsOfPosition)(
-        IActiveScriptDebug64* This,
+        IActiveScriptDebug64 *This,
         DWORDLONG dwSourceContext,
         ULONG uCharacterOffset,
         ULONG uNumChars,
@@ -1036,6 +1336,7 @@
 
     END_INTERFACE
 } IActiveScriptDebug64Vtbl;
+
 interface IActiveScriptDebug64 {
     CONST_VTBL IActiveScriptDebug64Vtbl* lpVtbl;
 };
@@ -1076,41 +1377,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IActiveScriptDebug64_GetScriptTextAttributes_Proxy(
-    IActiveScriptDebug64* This,
-    LPCOLESTR pstrCode,
-    ULONG uNumCodeChars,
-    LPCOLESTR pstrDelimiter,
-    DWORD dwFlags,
-    SOURCE_TEXT_ATTR *pattr);
-void __RPC_STUB IActiveScriptDebug64_GetScriptTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptDebug64_GetScriptletTextAttributes_Proxy(
-    IActiveScriptDebug64* This,
-    LPCOLESTR pstrCode,
-    ULONG uNumCodeChars,
-    LPCOLESTR pstrDelimiter,
-    DWORD dwFlags,
-    SOURCE_TEXT_ATTR *pattr);
-void __RPC_STUB IActiveScriptDebug64_GetScriptletTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptDebug64_EnumCodeContextsOfPosition_Proxy(
-    IActiveScriptDebug64* This,
-    DWORDLONG dwSourceContext,
-    ULONG uCharacterOffset,
-    ULONG uNumChars,
-    IEnumDebugCodeContexts **ppescc);
-void __RPC_STUB IActiveScriptDebug64_EnumCodeContextsOfPosition_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IActiveScriptDebug64_INTERFACE_DEFINED__ */
 
@@ -1152,40 +1418,41 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IActiveScriptSiteDebug32* This,
+        IActiveScriptSiteDebug32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IActiveScriptSiteDebug32* This);
+        IActiveScriptSiteDebug32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IActiveScriptSiteDebug32* This);
+        IActiveScriptSiteDebug32 *This);
 
     /*** IActiveScriptSiteDebug32 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocumentContextFromPosition)(
-        IActiveScriptSiteDebug32* This,
+        IActiveScriptSiteDebug32 *This,
         DWORD dwSourceContext,
         ULONG uCharacterOffset,
         ULONG uNumChars,
         IDebugDocumentContext **ppsc);
 
     HRESULT (STDMETHODCALLTYPE *GetApplication)(
-        IActiveScriptSiteDebug32* This,
+        IActiveScriptSiteDebug32 *This,
         IDebugApplication32 **ppda);
 
     HRESULT (STDMETHODCALLTYPE *GetRootApplicationNode)(
-        IActiveScriptSiteDebug32* This,
+        IActiveScriptSiteDebug32 *This,
         IDebugApplicationNode **ppdanRoot);
 
     HRESULT (STDMETHODCALLTYPE *OnScriptErrorDebug)(
-        IActiveScriptSiteDebug32* This,
+        IActiveScriptSiteDebug32 *This,
         IActiveScriptErrorDebug *pErrorDebug,
         WINBOOL *pfEnterDebugger,
         WINBOOL *pfCallOnScriptErrorWhenContinuing);
 
     END_INTERFACE
 } IActiveScriptSiteDebug32Vtbl;
+
 interface IActiveScriptSiteDebug32 {
     CONST_VTBL IActiveScriptSiteDebug32Vtbl* lpVtbl;
 };
@@ -1230,43 +1497,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug32_GetDocumentContextFromPosition_Proxy(
-    IActiveScriptSiteDebug32* This,
-    DWORD dwSourceContext,
-    ULONG uCharacterOffset,
-    ULONG uNumChars,
-    IDebugDocumentContext **ppsc);
-void __RPC_STUB IActiveScriptSiteDebug32_GetDocumentContextFromPosition_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug32_GetApplication_Proxy(
-    IActiveScriptSiteDebug32* This,
-    IDebugApplication32 **ppda);
-void __RPC_STUB IActiveScriptSiteDebug32_GetApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug32_GetRootApplicationNode_Proxy(
-    IActiveScriptSiteDebug32* This,
-    IDebugApplicationNode **ppdanRoot);
-void __RPC_STUB IActiveScriptSiteDebug32_GetRootApplicationNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug32_OnScriptErrorDebug_Proxy(
-    IActiveScriptSiteDebug32* This,
-    IActiveScriptErrorDebug *pErrorDebug,
-    WINBOOL *pfEnterDebugger,
-    WINBOOL *pfCallOnScriptErrorWhenContinuing);
-void __RPC_STUB IActiveScriptSiteDebug32_OnScriptErrorDebug_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IActiveScriptSiteDebug32_INTERFACE_DEFINED__ */
 
@@ -1308,40 +1538,41 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IActiveScriptSiteDebug64* This,
+        IActiveScriptSiteDebug64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IActiveScriptSiteDebug64* This);
+        IActiveScriptSiteDebug64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IActiveScriptSiteDebug64* This);
+        IActiveScriptSiteDebug64 *This);
 
     /*** IActiveScriptSiteDebug64 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocumentContextFromPosition)(
-        IActiveScriptSiteDebug64* This,
+        IActiveScriptSiteDebug64 *This,
         DWORDLONG dwSourceContext,
         ULONG uCharacterOffset,
         ULONG uNumChars,
         IDebugDocumentContext **ppsc);
 
     HRESULT (STDMETHODCALLTYPE *GetApplication)(
-        IActiveScriptSiteDebug64* This,
+        IActiveScriptSiteDebug64 *This,
         IDebugApplication64 **ppda);
 
     HRESULT (STDMETHODCALLTYPE *GetRootApplicationNode)(
-        IActiveScriptSiteDebug64* This,
+        IActiveScriptSiteDebug64 *This,
         IDebugApplicationNode **ppdanRoot);
 
     HRESULT (STDMETHODCALLTYPE *OnScriptErrorDebug)(
-        IActiveScriptSiteDebug64* This,
+        IActiveScriptSiteDebug64 *This,
         IActiveScriptErrorDebug *pErrorDebug,
         WINBOOL *pfEnterDebugger,
         WINBOOL *pfCallOnScriptErrorWhenContinuing);
 
     END_INTERFACE
 } IActiveScriptSiteDebug64Vtbl;
+
 interface IActiveScriptSiteDebug64 {
     CONST_VTBL IActiveScriptSiteDebug64Vtbl* lpVtbl;
 };
@@ -1386,43 +1617,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug64_GetDocumentContextFromPosition_Proxy(
-    IActiveScriptSiteDebug64* This,
-    DWORDLONG dwSourceContext,
-    ULONG uCharacterOffset,
-    ULONG uNumChars,
-    IDebugDocumentContext **ppsc);
-void __RPC_STUB IActiveScriptSiteDebug64_GetDocumentContextFromPosition_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug64_GetApplication_Proxy(
-    IActiveScriptSiteDebug64* This,
-    IDebugApplication64 **ppda);
-void __RPC_STUB IActiveScriptSiteDebug64_GetApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug64_GetRootApplicationNode_Proxy(
-    IActiveScriptSiteDebug64* This,
-    IDebugApplicationNode **ppdanRoot);
-void __RPC_STUB IActiveScriptSiteDebug64_GetRootApplicationNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebug64_OnScriptErrorDebug_Proxy(
-    IActiveScriptSiteDebug64* This,
-    IActiveScriptErrorDebug *pErrorDebug,
-    WINBOOL *pfEnterDebugger,
-    WINBOOL *pfCallOnScriptErrorWhenContinuing);
-void __RPC_STUB IActiveScriptSiteDebug64_OnScriptErrorDebug_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IActiveScriptSiteDebug64_INTERFACE_DEFINED__ */
 
@@ -1451,24 +1645,25 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IActiveScriptSiteDebugEx* This,
+        IActiveScriptSiteDebugEx *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IActiveScriptSiteDebugEx* This);
+        IActiveScriptSiteDebugEx *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IActiveScriptSiteDebugEx* This);
+        IActiveScriptSiteDebugEx *This);
 
     /*** IActiveScriptSiteDebugEx methods ***/
     HRESULT (STDMETHODCALLTYPE *OnCanNotJITScriptErrorDebug)(
-        IActiveScriptSiteDebugEx* This,
+        IActiveScriptSiteDebugEx *This,
         IActiveScriptErrorDebug *pErrorDebug,
         WINBOOL *pfCallOnScriptErrorWhenContinuing);
 
     END_INTERFACE
 } IActiveScriptSiteDebugExVtbl;
+
 interface IActiveScriptSiteDebugEx {
     CONST_VTBL IActiveScriptSiteDebugExVtbl* lpVtbl;
 };
@@ -1501,15 +1696,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IActiveScriptSiteDebugEx_OnCanNotJITScriptErrorDebug_Proxy(
-    IActiveScriptSiteDebugEx* This,
-    IActiveScriptErrorDebug *pErrorDebug,
-    WINBOOL *pfCallOnScriptErrorWhenContinuing);
-void __RPC_STUB IActiveScriptSiteDebugEx_OnCanNotJITScriptErrorDebug_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IActiveScriptSiteDebugEx_INTERFACE_DEFINED__ */
 
@@ -1540,42 +1726,43 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IActiveScriptErrorDebug* This,
+        IActiveScriptErrorDebug *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IActiveScriptErrorDebug* This);
+        IActiveScriptErrorDebug *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IActiveScriptErrorDebug* This);
+        IActiveScriptErrorDebug *This);
 
     /*** IActiveScriptError methods ***/
     HRESULT (STDMETHODCALLTYPE *GetExceptionInfo)(
-        IActiveScriptErrorDebug* This,
+        IActiveScriptErrorDebug *This,
         EXCEPINFO *pexcepinfo);
 
     HRESULT (STDMETHODCALLTYPE *GetSourcePosition)(
-        IActiveScriptErrorDebug* This,
+        IActiveScriptErrorDebug *This,
         DWORD *pdwSourceContext,
         ULONG *pulLineNumber,
         LONG *plCharacterPosition);
 
     HRESULT (STDMETHODCALLTYPE *GetSourceLineText)(
-        IActiveScriptErrorDebug* This,
+        IActiveScriptErrorDebug *This,
         BSTR *pbstrSourceLine);
 
     /*** IActiveScriptErrorDebug methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocumentContext)(
-        IActiveScriptErrorDebug* This,
+        IActiveScriptErrorDebug *This,
         IDebugDocumentContext **ppssc);
 
     HRESULT (STDMETHODCALLTYPE *GetStackFrame)(
-        IActiveScriptErrorDebug* This,
+        IActiveScriptErrorDebug *This,
         IDebugStackFrame **ppdsf);
 
     END_INTERFACE
 } IActiveScriptErrorDebugVtbl;
+
 interface IActiveScriptErrorDebug {
     CONST_VTBL IActiveScriptErrorDebugVtbl* lpVtbl;
 };
@@ -1626,22 +1813,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IActiveScriptErrorDebug_GetDocumentContext_Proxy(
-    IActiveScriptErrorDebug* This,
-    IDebugDocumentContext **ppssc);
-void __RPC_STUB IActiveScriptErrorDebug_GetDocumentContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IActiveScriptErrorDebug_GetStackFrame_Proxy(
-    IActiveScriptErrorDebug* This,
-    IDebugStackFrame **ppdsf);
-void __RPC_STUB IActiveScriptErrorDebug_GetStackFrame_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IActiveScriptErrorDebug_INTERFACE_DEFINED__ */
 
@@ -1672,27 +1843,28 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugCodeContext* This,
+        IDebugCodeContext *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugCodeContext* This);
+        IDebugCodeContext *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugCodeContext* This);
+        IDebugCodeContext *This);
 
     /*** IDebugCodeContext methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocumentContext)(
-        IDebugCodeContext* This,
+        IDebugCodeContext *This,
         IDebugDocumentContext **ppsc);
 
     HRESULT (STDMETHODCALLTYPE *SetBreakPoint)(
-        IDebugCodeContext* This,
+        IDebugCodeContext *This,
         BREAKPOINT_STATE bps);
 
     END_INTERFACE
 } IDebugCodeContextVtbl;
+
 interface IDebugCodeContext {
     CONST_VTBL IDebugCodeContextVtbl* lpVtbl;
 };
@@ -1729,22 +1901,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugCodeContext_GetDocumentContext_Proxy(
-    IDebugCodeContext* This,
-    IDebugDocumentContext **ppsc);
-void __RPC_STUB IDebugCodeContext_GetDocumentContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugCodeContext_SetBreakPoint_Proxy(
-    IDebugCodeContext* This,
-    BREAKPOINT_STATE bps);
-void __RPC_STUB IDebugCodeContext_SetBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugCodeContext_INTERFACE_DEFINED__ */
 
@@ -1786,39 +1942,40 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugExpression* This,
+        IDebugExpression *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugExpression* This);
+        IDebugExpression *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugExpression* This);
+        IDebugExpression *This);
 
     /*** IDebugExpression methods ***/
     HRESULT (STDMETHODCALLTYPE *Start)(
-        IDebugExpression* This,
+        IDebugExpression *This,
         IDebugExpressionCallBack *pdecb);
 
     HRESULT (STDMETHODCALLTYPE *Abort)(
-        IDebugExpression* This);
+        IDebugExpression *This);
 
     HRESULT (STDMETHODCALLTYPE *QueryIsComplete)(
-        IDebugExpression* This);
+        IDebugExpression *This);
 
     HRESULT (STDMETHODCALLTYPE *GetResultAsString)(
-        IDebugExpression* This,
+        IDebugExpression *This,
         HRESULT *phrResult,
         BSTR *pbstrResult);
 
     HRESULT (STDMETHODCALLTYPE *GetResultAsDebugProperty)(
-        IDebugExpression* This,
+        IDebugExpression *This,
         HRESULT *phrResult,
         IDebugProperty **ppdp);
 
     END_INTERFACE
 } IDebugExpressionVtbl;
+
 interface IDebugExpression {
     CONST_VTBL IDebugExpressionVtbl* lpVtbl;
 };
@@ -1867,46 +2024,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugExpression_Start_Proxy(
-    IDebugExpression* This,
-    IDebugExpressionCallBack *pdecb);
-void __RPC_STUB IDebugExpression_Start_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugExpression_Abort_Proxy(
-    IDebugExpression* This);
-void __RPC_STUB IDebugExpression_Abort_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugExpression_QueryIsComplete_Proxy(
-    IDebugExpression* This);
-void __RPC_STUB IDebugExpression_QueryIsComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugExpression_GetResultAsString_Proxy(
-    IDebugExpression* This,
-    HRESULT *phrResult,
-    BSTR *pbstrResult);
-void __RPC_STUB IDebugExpression_GetResultAsString_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugExpression_GetResultAsDebugProperty_Proxy(
-    IDebugExpression* This,
-    HRESULT *phrResult,
-    IDebugProperty **ppdp);
-void __RPC_STUB IDebugExpression_GetResultAsDebugProperty_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugExpression_INTERFACE_DEFINED__ */
 
@@ -1942,19 +2059,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugExpressionContext* This,
+        IDebugExpressionContext *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugExpressionContext* This);
+        IDebugExpressionContext *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugExpressionContext* This);
+        IDebugExpressionContext *This);
 
     /*** IDebugExpressionContext methods ***/
     HRESULT (STDMETHODCALLTYPE *ParseLanguageText)(
-        IDebugExpressionContext* This,
+        IDebugExpressionContext *This,
         LPCOLESTR pstrCode,
         UINT nRadix,
         LPCOLESTR pstrDelimiter,
@@ -1962,12 +2079,13 @@
         IDebugExpression **ppe);
 
     HRESULT (STDMETHODCALLTYPE *GetLanguageInfo)(
-        IDebugExpressionContext* This,
+        IDebugExpressionContext *This,
         BSTR *pbstrLanguageName,
         GUID *pLanguageID);
 
     END_INTERFACE
 } IDebugExpressionContextVtbl;
+
 interface IDebugExpressionContext {
     CONST_VTBL IDebugExpressionContextVtbl* lpVtbl;
 };
@@ -2004,27 +2122,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugExpressionContext_ParseLanguageText_Proxy(
-    IDebugExpressionContext* This,
-    LPCOLESTR pstrCode,
-    UINT nRadix,
-    LPCOLESTR pstrDelimiter,
-    DWORD dwFlags,
-    IDebugExpression **ppe);
-void __RPC_STUB IDebugExpressionContext_ParseLanguageText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugExpressionContext_GetLanguageInfo_Proxy(
-    IDebugExpressionContext* This,
-    BSTR *pbstrLanguageName,
-    GUID *pLanguageID);
-void __RPC_STUB IDebugExpressionContext_GetLanguageInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugExpressionContext_INTERFACE_DEFINED__ */
 
@@ -2052,22 +2149,23 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugExpressionCallBack* This,
+        IDebugExpressionCallBack *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugExpressionCallBack* This);
+        IDebugExpressionCallBack *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugExpressionCallBack* This);
+        IDebugExpressionCallBack *This);
 
     /*** IDebugExpressionCallBack methods ***/
     HRESULT (STDMETHODCALLTYPE *onComplete)(
-        IDebugExpressionCallBack* This);
+        IDebugExpressionCallBack *This);
 
     END_INTERFACE
 } IDebugExpressionCallBackVtbl;
+
 interface IDebugExpressionCallBack {
     CONST_VTBL IDebugExpressionCallBackVtbl* lpVtbl;
 };
@@ -2100,13 +2198,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugExpressionCallBack_onComplete_Proxy(
-    IDebugExpressionCallBack* This);
-void __RPC_STUB IDebugExpressionCallBack_onComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugExpressionCallBack_INTERFACE_DEFINED__ */
 
@@ -2148,41 +2239,42 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugStackFrame* This,
+        IDebugStackFrame *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugStackFrame* This);
+        IDebugStackFrame *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugStackFrame* This);
+        IDebugStackFrame *This);
 
     /*** IDebugStackFrame methods ***/
     HRESULT (STDMETHODCALLTYPE *GetCodeContext)(
-        IDebugStackFrame* This,
+        IDebugStackFrame *This,
         IDebugCodeContext **ppcc);
 
     HRESULT (STDMETHODCALLTYPE *GetDescriptionString)(
-        IDebugStackFrame* This,
+        IDebugStackFrame *This,
         WINBOOL fLong,
         BSTR *pbstrDescription);
 
     HRESULT (STDMETHODCALLTYPE *GetLanguageString)(
-        IDebugStackFrame* This,
+        IDebugStackFrame *This,
         WINBOOL fLong,
         BSTR *pbstrLanguage);
 
     HRESULT (STDMETHODCALLTYPE *GetThread)(
-        IDebugStackFrame* This,
+        IDebugStackFrame *This,
         IDebugApplicationThread **ppat);
 
     HRESULT (STDMETHODCALLTYPE *GetDebugProperty)(
-        IDebugStackFrame* This,
+        IDebugStackFrame *This,
         IDebugProperty **ppDebugProp);
 
     END_INTERFACE
 } IDebugStackFrameVtbl;
+
 interface IDebugStackFrame {
     CONST_VTBL IDebugStackFrameVtbl* lpVtbl;
 };
@@ -2231,48 +2323,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugStackFrame_GetCodeContext_Proxy(
-    IDebugStackFrame* This,
-    IDebugCodeContext **ppcc);
-void __RPC_STUB IDebugStackFrame_GetCodeContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugStackFrame_GetDescriptionString_Proxy(
-    IDebugStackFrame* This,
-    WINBOOL fLong,
-    BSTR *pbstrDescription);
-void __RPC_STUB IDebugStackFrame_GetDescriptionString_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugStackFrame_GetLanguageString_Proxy(
-    IDebugStackFrame* This,
-    WINBOOL fLong,
-    BSTR *pbstrLanguage);
-void __RPC_STUB IDebugStackFrame_GetLanguageString_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugStackFrame_GetThread_Proxy(
-    IDebugStackFrame* This,
-    IDebugApplicationThread **ppat);
-void __RPC_STUB IDebugStackFrame_GetThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugStackFrame_GetDebugProperty_Proxy(
-    IDebugStackFrame* This,
-    IDebugProperty **ppDebugProp);
-void __RPC_STUB IDebugStackFrame_GetDebugProperty_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugStackFrame_INTERFACE_DEFINED__ */
 
@@ -2300,23 +2350,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugStackFrameSniffer* This,
+        IDebugStackFrameSniffer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugStackFrameSniffer* This);
+        IDebugStackFrameSniffer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugStackFrameSniffer* This);
+        IDebugStackFrameSniffer *This);
 
     /*** IDebugStackFrameSniffer methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumStackFrames)(
-        IDebugStackFrameSniffer* This,
+        IDebugStackFrameSniffer *This,
         IEnumDebugStackFrames **ppedsf);
 
     END_INTERFACE
 } IDebugStackFrameSnifferVtbl;
+
 interface IDebugStackFrameSniffer {
     CONST_VTBL IDebugStackFrameSnifferVtbl* lpVtbl;
 };
@@ -2349,14 +2400,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugStackFrameSniffer_EnumStackFrames_Proxy(
-    IDebugStackFrameSniffer* This,
-    IEnumDebugStackFrames **ppedsf);
-void __RPC_STUB IDebugStackFrameSniffer_EnumStackFrames_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugStackFrameSniffer_INTERFACE_DEFINED__ */
 
@@ -2385,29 +2428,30 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugStackFrameSnifferEx32* This,
+        IDebugStackFrameSnifferEx32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugStackFrameSnifferEx32* This);
+        IDebugStackFrameSnifferEx32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugStackFrameSnifferEx32* This);
+        IDebugStackFrameSnifferEx32 *This);
 
     /*** IDebugStackFrameSniffer methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumStackFrames)(
-        IDebugStackFrameSnifferEx32* This,
+        IDebugStackFrameSnifferEx32 *This,
         IEnumDebugStackFrames **ppedsf);
 
     /*** IDebugStackFrameSnifferEx32 methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumStackFramesEx32)(
-        IDebugStackFrameSnifferEx32* This,
+        IDebugStackFrameSnifferEx32 *This,
         DWORD dwSpMin,
         IEnumDebugStackFrames **ppedsf);
 
     END_INTERFACE
 } IDebugStackFrameSnifferEx32Vtbl;
+
 interface IDebugStackFrameSnifferEx32 {
     CONST_VTBL IDebugStackFrameSnifferEx32Vtbl* lpVtbl;
 };
@@ -2446,15 +2490,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugStackFrameSnifferEx32_EnumStackFramesEx32_Proxy(
-    IDebugStackFrameSnifferEx32* This,
-    DWORD dwSpMin,
-    IEnumDebugStackFrames **ppedsf);
-void __RPC_STUB IDebugStackFrameSnifferEx32_EnumStackFramesEx32_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugStackFrameSnifferEx32_INTERFACE_DEFINED__ */
 
@@ -2483,29 +2518,30 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugStackFrameSnifferEx64* This,
+        IDebugStackFrameSnifferEx64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugStackFrameSnifferEx64* This);
+        IDebugStackFrameSnifferEx64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugStackFrameSnifferEx64* This);
+        IDebugStackFrameSnifferEx64 *This);
 
     /*** IDebugStackFrameSniffer methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumStackFrames)(
-        IDebugStackFrameSnifferEx64* This,
+        IDebugStackFrameSnifferEx64 *This,
         IEnumDebugStackFrames **ppedsf);
 
     /*** IDebugStackFrameSnifferEx64 methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumStackFramesEx64)(
-        IDebugStackFrameSnifferEx64* This,
+        IDebugStackFrameSnifferEx64 *This,
         DWORDLONG dwSpMin,
         IEnumDebugStackFrames64 **ppedsf);
 
     END_INTERFACE
 } IDebugStackFrameSnifferEx64Vtbl;
+
 interface IDebugStackFrameSnifferEx64 {
     CONST_VTBL IDebugStackFrameSnifferEx64Vtbl* lpVtbl;
 };
@@ -2544,15 +2580,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugStackFrameSnifferEx64_EnumStackFramesEx64_Proxy(
-    IDebugStackFrameSnifferEx64* This,
-    DWORDLONG dwSpMin,
-    IEnumDebugStackFrames64 **ppedsf);
-void __RPC_STUB IDebugStackFrameSnifferEx64_EnumStackFramesEx64_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugStackFrameSnifferEx64_INTERFACE_DEFINED__ */
 
@@ -2586,30 +2613,31 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugSyncOperation* This,
+        IDebugSyncOperation *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugSyncOperation* This);
+        IDebugSyncOperation *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugSyncOperation* This);
+        IDebugSyncOperation *This);
 
     /*** IDebugSyncOperation methods ***/
     HRESULT (STDMETHODCALLTYPE *GetTargetThread)(
-        IDebugSyncOperation* This,
+        IDebugSyncOperation *This,
         IDebugApplicationThread **ppatTarget);
 
     HRESULT (STDMETHODCALLTYPE *Execute)(
-        IDebugSyncOperation* This,
+        IDebugSyncOperation *This,
         IUnknown **ppunkResult);
 
     HRESULT (STDMETHODCALLTYPE *InProgressAbort)(
-        IDebugSyncOperation* This);
+        IDebugSyncOperation *This);
 
     END_INTERFACE
 } IDebugSyncOperationVtbl;
+
 interface IDebugSyncOperation {
     CONST_VTBL IDebugSyncOperationVtbl* lpVtbl;
 };
@@ -2650,29 +2678,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugSyncOperation_GetTargetThread_Proxy(
-    IDebugSyncOperation* This,
-    IDebugApplicationThread **ppatTarget);
-void __RPC_STUB IDebugSyncOperation_GetTargetThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugSyncOperation_Execute_Proxy(
-    IDebugSyncOperation* This,
-    IUnknown **ppunkResult);
-void __RPC_STUB IDebugSyncOperation_Execute_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugSyncOperation_InProgressAbort_Proxy(
-    IDebugSyncOperation* This);
-void __RPC_STUB IDebugSyncOperation_InProgressAbort_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugSyncOperation_INTERFACE_DEFINED__ */
 
@@ -2713,38 +2718,39 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugAsyncOperation* This,
+        IDebugAsyncOperation *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugAsyncOperation* This);
+        IDebugAsyncOperation *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugAsyncOperation* This);
+        IDebugAsyncOperation *This);
 
     /*** IDebugAsyncOperation methods ***/
     HRESULT (STDMETHODCALLTYPE *GetSyncDebugOperation)(
-        IDebugAsyncOperation* This,
+        IDebugAsyncOperation *This,
         IDebugSyncOperation **ppsdo);
 
     HRESULT (STDMETHODCALLTYPE *Start)(
-        IDebugAsyncOperation* This,
+        IDebugAsyncOperation *This,
         IDebugAsyncOperationCallBack *padocb);
 
     HRESULT (STDMETHODCALLTYPE *Abort)(
-        IDebugAsyncOperation* This);
+        IDebugAsyncOperation *This);
 
     HRESULT (STDMETHODCALLTYPE *QueryIsComplete)(
-        IDebugAsyncOperation* This);
+        IDebugAsyncOperation *This);
 
     HRESULT (STDMETHODCALLTYPE *GetResult)(
-        IDebugAsyncOperation* This,
+        IDebugAsyncOperation *This,
         HRESULT *phrResult,
         IUnknown **ppunkResult);
 
     END_INTERFACE
 } IDebugAsyncOperationVtbl;
+
 interface IDebugAsyncOperation {
     CONST_VTBL IDebugAsyncOperationVtbl* lpVtbl;
 };
@@ -2793,45 +2799,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugAsyncOperation_GetSyncDebugOperation_Proxy(
-    IDebugAsyncOperation* This,
-    IDebugSyncOperation **ppsdo);
-void __RPC_STUB IDebugAsyncOperation_GetSyncDebugOperation_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugAsyncOperation_Start_Proxy(
-    IDebugAsyncOperation* This,
-    IDebugAsyncOperationCallBack *padocb);
-void __RPC_STUB IDebugAsyncOperation_Start_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugAsyncOperation_Abort_Proxy(
-    IDebugAsyncOperation* This);
-void __RPC_STUB IDebugAsyncOperation_Abort_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugAsyncOperation_QueryIsComplete_Proxy(
-    IDebugAsyncOperation* This);
-void __RPC_STUB IDebugAsyncOperation_QueryIsComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugAsyncOperation_GetResult_Proxy(
-    IDebugAsyncOperation* This,
-    HRESULT *phrResult,
-    IUnknown **ppunkResult);
-void __RPC_STUB IDebugAsyncOperation_GetResult_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugAsyncOperation_INTERFACE_DEFINED__ */
 
@@ -2859,22 +2826,23 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugAsyncOperationCallBack* This,
+        IDebugAsyncOperationCallBack *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugAsyncOperationCallBack* This);
+        IDebugAsyncOperationCallBack *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugAsyncOperationCallBack* This);
+        IDebugAsyncOperationCallBack *This);
 
     /*** IDebugAsyncOperationCallBack methods ***/
     HRESULT (STDMETHODCALLTYPE *onComplete)(
-        IDebugAsyncOperationCallBack* This);
+        IDebugAsyncOperationCallBack *This);
 
     END_INTERFACE
 } IDebugAsyncOperationCallBackVtbl;
+
 interface IDebugAsyncOperationCallBack {
     CONST_VTBL IDebugAsyncOperationCallBackVtbl* lpVtbl;
 };
@@ -2907,13 +2875,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugAsyncOperationCallBack_onComplete_Proxy(
-    IDebugAsyncOperationCallBack* This);
-void __RPC_STUB IDebugAsyncOperationCallBack_onComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugAsyncOperationCallBack_INTERFACE_DEFINED__ */
 
@@ -2952,36 +2913,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumDebugCodeContexts* This,
+        IEnumDebugCodeContexts *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumDebugCodeContexts* This);
+        IEnumDebugCodeContexts *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumDebugCodeContexts* This);
+        IEnumDebugCodeContexts *This);
 
     /*** IEnumDebugCodeContexts methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumDebugCodeContexts* This,
+        IEnumDebugCodeContexts *This,
         ULONG celt,
         IDebugCodeContext **pscc,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumDebugCodeContexts* This,
+        IEnumDebugCodeContexts *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumDebugCodeContexts* This);
+        IEnumDebugCodeContexts *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumDebugCodeContexts* This,
+        IEnumDebugCodeContexts *This,
         IEnumDebugCodeContexts **ppescc);
 
     END_INTERFACE
 } IEnumDebugCodeContextsVtbl;
+
 interface IEnumDebugCodeContexts {
     CONST_VTBL IEnumDebugCodeContextsVtbl* lpVtbl;
 };
@@ -3036,29 +2998,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugCodeContexts_Skip_Proxy(
-    IEnumDebugCodeContexts* This,
-    ULONG celt);
-void __RPC_STUB IEnumDebugCodeContexts_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugCodeContexts_Reset_Proxy(
-    IEnumDebugCodeContexts* This);
-void __RPC_STUB IEnumDebugCodeContexts_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugCodeContexts_Clone_Proxy(
-    IEnumDebugCodeContexts* This,
-    IEnumDebugCodeContexts **ppescc);
-void __RPC_STUB IEnumDebugCodeContexts_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumDebugCodeContexts_Next_Proxy(
     IEnumDebugCodeContexts* This,
     ULONG celt,
@@ -3107,36 +3046,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumDebugStackFrames* This,
+        IEnumDebugStackFrames *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumDebugStackFrames* This);
+        IEnumDebugStackFrames *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumDebugStackFrames* This);
+        IEnumDebugStackFrames *This);
 
     /*** IEnumDebugStackFrames methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumDebugStackFrames* This,
+        IEnumDebugStackFrames *This,
         ULONG celt,
         DebugStackFrameDescriptor *prgdsfd,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumDebugStackFrames* This,
+        IEnumDebugStackFrames *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumDebugStackFrames* This);
+        IEnumDebugStackFrames *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumDebugStackFrames* This,
+        IEnumDebugStackFrames *This,
         IEnumDebugStackFrames **ppedsf);
 
     END_INTERFACE
 } IEnumDebugStackFramesVtbl;
+
 interface IEnumDebugStackFrames {
     CONST_VTBL IEnumDebugStackFramesVtbl* lpVtbl;
 };
@@ -3191,29 +3131,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugStackFrames_Skip_Proxy(
-    IEnumDebugStackFrames* This,
-    ULONG celt);
-void __RPC_STUB IEnumDebugStackFrames_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugStackFrames_Reset_Proxy(
-    IEnumDebugStackFrames* This);
-void __RPC_STUB IEnumDebugStackFrames_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugStackFrames_Clone_Proxy(
-    IEnumDebugStackFrames* This,
-    IEnumDebugStackFrames **ppedsf);
-void __RPC_STUB IEnumDebugStackFrames_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumDebugStackFrames_Next_Proxy(
     IEnumDebugStackFrames* This,
     ULONG celt,
@@ -3253,43 +3170,44 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumDebugStackFrames64* This,
+        IEnumDebugStackFrames64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumDebugStackFrames64* This);
+        IEnumDebugStackFrames64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumDebugStackFrames64* This);
+        IEnumDebugStackFrames64 *This);
 
     /*** IEnumDebugStackFrames methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumDebugStackFrames64* This,
+        IEnumDebugStackFrames64 *This,
         ULONG celt,
         DebugStackFrameDescriptor *prgdsfd,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumDebugStackFrames64* This,
+        IEnumDebugStackFrames64 *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumDebugStackFrames64* This);
+        IEnumDebugStackFrames64 *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumDebugStackFrames64* This,
+        IEnumDebugStackFrames64 *This,
         IEnumDebugStackFrames **ppedsf);
 
     /*** IEnumDebugStackFrames64 methods ***/
     HRESULT (__stdcall *Next64)(
-        IEnumDebugStackFrames64* This,
+        IEnumDebugStackFrames64 *This,
         ULONG celt,
         DebugStackFrameDescriptor64 *prgdsfd,
         ULONG *pceltFetched);
 
     END_INTERFACE
 } IEnumDebugStackFrames64Vtbl;
+
 interface IEnumDebugStackFrames64 {
     CONST_VTBL IEnumDebugStackFrames64Vtbl* lpVtbl;
 };
@@ -3391,28 +3309,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentInfo* This,
+        IDebugDocumentInfo *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentInfo* This);
+        IDebugDocumentInfo *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentInfo* This);
+        IDebugDocumentInfo *This);
 
     /*** IDebugDocumentInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugDocumentInfo* This,
+        IDebugDocumentInfo *This,
         DOCUMENTNAMETYPE dnt,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetDocumentClassId)(
-        IDebugDocumentInfo* This,
+        IDebugDocumentInfo *This,
         CLSID *pclsidDocument);
 
     END_INTERFACE
 } IDebugDocumentInfoVtbl;
+
 interface IDebugDocumentInfo {
     CONST_VTBL IDebugDocumentInfoVtbl* lpVtbl;
 };
@@ -3449,23 +3368,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentInfo_GetName_Proxy(
-    IDebugDocumentInfo* This,
-    DOCUMENTNAMETYPE dnt,
-    BSTR *pbstrName);
-void __RPC_STUB IDebugDocumentInfo_GetName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentInfo_GetDocumentClassId_Proxy(
-    IDebugDocumentInfo* This,
-    CLSID *pclsidDocument);
-void __RPC_STUB IDebugDocumentInfo_GetDocumentClassId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentInfo_INTERFACE_DEFINED__ */
 
@@ -3493,33 +3395,34 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentProvider* This,
+        IDebugDocumentProvider *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentProvider* This);
+        IDebugDocumentProvider *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentProvider* This);
+        IDebugDocumentProvider *This);
 
     /*** IDebugDocumentInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugDocumentProvider* This,
+        IDebugDocumentProvider *This,
         DOCUMENTNAMETYPE dnt,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetDocumentClassId)(
-        IDebugDocumentProvider* This,
+        IDebugDocumentProvider *This,
         CLSID *pclsidDocument);
 
     /*** IDebugDocumentProvider methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocument)(
-        IDebugDocumentProvider* This,
+        IDebugDocumentProvider *This,
         IDebugDocument **ppssd);
 
     END_INTERFACE
 } IDebugDocumentProviderVtbl;
+
 interface IDebugDocumentProvider {
     CONST_VTBL IDebugDocumentProviderVtbl* lpVtbl;
 };
@@ -3562,14 +3465,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentProvider_GetDocument_Proxy(
-    IDebugDocumentProvider* This,
-    IDebugDocument **ppssd);
-void __RPC_STUB IDebugDocumentProvider_GetDocument_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentProvider_INTERFACE_DEFINED__ */
 
@@ -3594,28 +3489,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocument* This,
+        IDebugDocument *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocument* This);
+        IDebugDocument *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocument* This);
+        IDebugDocument *This);
 
     /*** IDebugDocumentInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugDocument* This,
+        IDebugDocument *This,
         DOCUMENTNAMETYPE dnt,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetDocumentClassId)(
-        IDebugDocument* This,
+        IDebugDocument *This,
         CLSID *pclsidDocument);
 
     END_INTERFACE
 } IDebugDocumentVtbl;
+
 interface IDebugDocument {
     CONST_VTBL IDebugDocumentVtbl* lpVtbl;
 };
@@ -3709,49 +3605,49 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentText* This);
+        IDebugDocumentText *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentText* This);
+        IDebugDocumentText *This);
 
     /*** IDebugDocumentInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         DOCUMENTNAMETYPE dnt,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetDocumentClassId)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         CLSID *pclsidDocument);
 
     /*** IDebugDocumentText methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocumentAttributes)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         TEXT_DOC_ATTR *ptextdocattr);
 
     HRESULT (STDMETHODCALLTYPE *GetSize)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         ULONG *pcNumLines,
         ULONG *pcNumChars);
 
     HRESULT (STDMETHODCALLTYPE *GetPositionOfLine)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         ULONG cLineNumber,
         ULONG *pcCharacterPosition);
 
     HRESULT (STDMETHODCALLTYPE *GetLineOfPosition)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         ULONG cCharacterPosition,
         ULONG *pcLineNumber,
         ULONG *pcCharacterOffsetInLine);
 
     HRESULT (STDMETHODCALLTYPE *GetText)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         ULONG cCharacterPosition,
         WCHAR *pcharText,
         SOURCE_TEXT_ATTR *pstaTextAttr,
@@ -3759,19 +3655,20 @@
         ULONG cMaxChars);
 
     HRESULT (STDMETHODCALLTYPE *GetPositionOfContext)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         IDebugDocumentContext *psc,
         ULONG *pcCharacterPosition,
         ULONG *cNumChars);
 
     HRESULT (STDMETHODCALLTYPE *GetContextOfPosition)(
-        IDebugDocumentText* This,
+        IDebugDocumentText *This,
         ULONG cCharacterPosition,
         ULONG cNumChars,
         IDebugDocumentContext **ppsc);
 
     END_INTERFACE
 } IDebugDocumentTextVtbl;
+
 interface IDebugDocumentText {
     CONST_VTBL IDebugDocumentTextVtbl* lpVtbl;
 };
@@ -3838,74 +3735,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetDocumentAttributes_Proxy(
-    IDebugDocumentText* This,
-    TEXT_DOC_ATTR *ptextdocattr);
-void __RPC_STUB IDebugDocumentText_GetDocumentAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetSize_Proxy(
-    IDebugDocumentText* This,
-    ULONG *pcNumLines,
-    ULONG *pcNumChars);
-void __RPC_STUB IDebugDocumentText_GetSize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetPositionOfLine_Proxy(
-    IDebugDocumentText* This,
-    ULONG cLineNumber,
-    ULONG *pcCharacterPosition);
-void __RPC_STUB IDebugDocumentText_GetPositionOfLine_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetLineOfPosition_Proxy(
-    IDebugDocumentText* This,
-    ULONG cCharacterPosition,
-    ULONG *pcLineNumber,
-    ULONG *pcCharacterOffsetInLine);
-void __RPC_STUB IDebugDocumentText_GetLineOfPosition_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetText_Proxy(
-    IDebugDocumentText* This,
-    ULONG cCharacterPosition,
-    WCHAR *pcharText,
-    SOURCE_TEXT_ATTR *pstaTextAttr,
-    ULONG *pcNumChars,
-    ULONG cMaxChars);
-void __RPC_STUB IDebugDocumentText_GetText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetPositionOfContext_Proxy(
-    IDebugDocumentText* This,
-    IDebugDocumentContext *psc,
-    ULONG *pcCharacterPosition,
-    ULONG *cNumChars);
-void __RPC_STUB IDebugDocumentText_GetPositionOfContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentText_GetContextOfPosition_Proxy(
-    IDebugDocumentText* This,
-    ULONG cCharacterPosition,
-    ULONG cNumChars,
-    IDebugDocumentContext **ppsc);
-void __RPC_STUB IDebugDocumentText_GetContextOfPosition_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentText_INTERFACE_DEFINED__ */
 
@@ -3952,46 +3781,47 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentTextEvents* This,
+        IDebugDocumentTextEvents *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentTextEvents* This);
+        IDebugDocumentTextEvents *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentTextEvents* This);
+        IDebugDocumentTextEvents *This);
 
     /*** IDebugDocumentTextEvents methods ***/
     HRESULT (STDMETHODCALLTYPE *onDestroy)(
-        IDebugDocumentTextEvents* This);
+        IDebugDocumentTextEvents *This);
 
     HRESULT (STDMETHODCALLTYPE *onInsertText)(
-        IDebugDocumentTextEvents* This,
+        IDebugDocumentTextEvents *This,
         ULONG cCharacterPosition,
         ULONG cNumToInsert);
 
     HRESULT (STDMETHODCALLTYPE *onRemoveText)(
-        IDebugDocumentTextEvents* This,
+        IDebugDocumentTextEvents *This,
         ULONG cCharacterPosition,
         ULONG cNumToRemove);
 
     HRESULT (STDMETHODCALLTYPE *onReplaceText)(
-        IDebugDocumentTextEvents* This,
+        IDebugDocumentTextEvents *This,
         ULONG cCharacterPosition,
         ULONG cNumToReplace);
 
     HRESULT (STDMETHODCALLTYPE *onUpdateTextAttributes)(
-        IDebugDocumentTextEvents* This,
+        IDebugDocumentTextEvents *This,
         ULONG cCharacterPosition,
         ULONG cNumToUpdate);
 
     HRESULT (STDMETHODCALLTYPE *onUpdateDocumentAttributes)(
-        IDebugDocumentTextEvents* This,
+        IDebugDocumentTextEvents *This,
         TEXT_DOC_ATTR textdocattr);
 
     END_INTERFACE
 } IDebugDocumentTextEventsVtbl;
+
 interface IDebugDocumentTextEvents {
     CONST_VTBL IDebugDocumentTextEventsVtbl* lpVtbl;
 };
@@ -4044,57 +3874,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextEvents_onDestroy_Proxy(
-    IDebugDocumentTextEvents* This);
-void __RPC_STUB IDebugDocumentTextEvents_onDestroy_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextEvents_onInsertText_Proxy(
-    IDebugDocumentTextEvents* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToInsert);
-void __RPC_STUB IDebugDocumentTextEvents_onInsertText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextEvents_onRemoveText_Proxy(
-    IDebugDocumentTextEvents* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToRemove);
-void __RPC_STUB IDebugDocumentTextEvents_onRemoveText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextEvents_onReplaceText_Proxy(
-    IDebugDocumentTextEvents* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToReplace);
-void __RPC_STUB IDebugDocumentTextEvents_onReplaceText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextEvents_onUpdateTextAttributes_Proxy(
-    IDebugDocumentTextEvents* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToUpdate);
-void __RPC_STUB IDebugDocumentTextEvents_onUpdateTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextEvents_onUpdateDocumentAttributes_Proxy(
-    IDebugDocumentTextEvents* This,
-    TEXT_DOC_ATTR textdocattr);
-void __RPC_STUB IDebugDocumentTextEvents_onUpdateDocumentAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentTextEvents_INTERFACE_DEFINED__ */
 
@@ -4133,49 +3912,49 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentTextAuthor* This);
+        IDebugDocumentTextAuthor *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentTextAuthor* This);
+        IDebugDocumentTextAuthor *This);
 
     /*** IDebugDocumentInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         DOCUMENTNAMETYPE dnt,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetDocumentClassId)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         CLSID *pclsidDocument);
 
     /*** IDebugDocumentText methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocumentAttributes)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         TEXT_DOC_ATTR *ptextdocattr);
 
     HRESULT (STDMETHODCALLTYPE *GetSize)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG *pcNumLines,
         ULONG *pcNumChars);
 
     HRESULT (STDMETHODCALLTYPE *GetPositionOfLine)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cLineNumber,
         ULONG *pcCharacterPosition);
 
     HRESULT (STDMETHODCALLTYPE *GetLineOfPosition)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cCharacterPosition,
         ULONG *pcLineNumber,
         ULONG *pcCharacterOffsetInLine);
 
     HRESULT (STDMETHODCALLTYPE *GetText)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cCharacterPosition,
         WCHAR *pcharText,
         SOURCE_TEXT_ATTR *pstaTextAttr,
@@ -4183,37 +3962,38 @@
         ULONG cMaxChars);
 
     HRESULT (STDMETHODCALLTYPE *GetPositionOfContext)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         IDebugDocumentContext *psc,
         ULONG *pcCharacterPosition,
         ULONG *cNumChars);
 
     HRESULT (STDMETHODCALLTYPE *GetContextOfPosition)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cCharacterPosition,
         ULONG cNumChars,
         IDebugDocumentContext **ppsc);
 
     /*** IDebugDocumentTextAuthor methods ***/
     HRESULT (STDMETHODCALLTYPE *InsertText)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cCharacterPosition,
         ULONG cNumToInsert,
         OLECHAR pcharText[]);
 
     HRESULT (STDMETHODCALLTYPE *RemoveText)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cCharacterPosition,
         ULONG cNumToRemove);
 
     HRESULT (STDMETHODCALLTYPE *ReplaceText)(
-        IDebugDocumentTextAuthor* This,
+        IDebugDocumentTextAuthor *This,
         ULONG cCharacterPosition,
         ULONG cNumToReplace,
         OLECHAR pcharText[]);
 
     END_INTERFACE
 } IDebugDocumentTextAuthorVtbl;
+
 interface IDebugDocumentTextAuthor {
     CONST_VTBL IDebugDocumentTextAuthorVtbl* lpVtbl;
 };
@@ -4294,35 +4074,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextAuthor_InsertText_Proxy(
-    IDebugDocumentTextAuthor* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToInsert,
-    OLECHAR pcharText[]);
-void __RPC_STUB IDebugDocumentTextAuthor_InsertText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextAuthor_RemoveText_Proxy(
-    IDebugDocumentTextAuthor* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToRemove);
-void __RPC_STUB IDebugDocumentTextAuthor_RemoveText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextAuthor_ReplaceText_Proxy(
-    IDebugDocumentTextAuthor* This,
-    ULONG cCharacterPosition,
-    ULONG cNumToReplace,
-    OLECHAR pcharText[]);
-void __RPC_STUB IDebugDocumentTextAuthor_ReplaceText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentTextAuthor_INTERFACE_DEFINED__ */
 
@@ -4357,31 +4108,32 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentTextExternalAuthor* This,
+        IDebugDocumentTextExternalAuthor *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentTextExternalAuthor* This);
+        IDebugDocumentTextExternalAuthor *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentTextExternalAuthor* This);
+        IDebugDocumentTextExternalAuthor *This);
 
     /*** IDebugDocumentTextExternalAuthor methods ***/
     HRESULT (STDMETHODCALLTYPE *GetPathName)(
-        IDebugDocumentTextExternalAuthor* This,
+        IDebugDocumentTextExternalAuthor *This,
         BSTR *pbstrLongName,
         WINBOOL *pfIsOriginalFile);
 
     HRESULT (STDMETHODCALLTYPE *GetFileName)(
-        IDebugDocumentTextExternalAuthor* This,
+        IDebugDocumentTextExternalAuthor *This,
         BSTR *pbstrShortName);
 
     HRESULT (STDMETHODCALLTYPE *NotifyChanged)(
-        IDebugDocumentTextExternalAuthor* This);
+        IDebugDocumentTextExternalAuthor *This);
 
     END_INTERFACE
 } IDebugDocumentTextExternalAuthorVtbl;
+
 interface IDebugDocumentTextExternalAuthor {
     CONST_VTBL IDebugDocumentTextExternalAuthorVtbl* lpVtbl;
 };
@@ -4422,30 +4174,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextExternalAuthor_GetPathName_Proxy(
-    IDebugDocumentTextExternalAuthor* This,
-    BSTR *pbstrLongName,
-    WINBOOL *pfIsOriginalFile);
-void __RPC_STUB IDebugDocumentTextExternalAuthor_GetPathName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextExternalAuthor_GetFileName_Proxy(
-    IDebugDocumentTextExternalAuthor* This,
-    BSTR *pbstrShortName);
-void __RPC_STUB IDebugDocumentTextExternalAuthor_GetFileName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentTextExternalAuthor_NotifyChanged_Proxy(
-    IDebugDocumentTextExternalAuthor* This);
-void __RPC_STUB IDebugDocumentTextExternalAuthor_NotifyChanged_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentTextExternalAuthor_INTERFACE_DEFINED__ */
 
@@ -4539,50 +4267,50 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentHelper32* This);
+        IDebugDocumentHelper32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentHelper32* This);
+        IDebugDocumentHelper32 *This);
 
     /*** IDebugDocumentHelper32 methods ***/
     HRESULT (STDMETHODCALLTYPE *Init)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         IDebugApplication32 *pda,
         LPCOLESTR pszShortName,
         LPCOLESTR pszLongName,
         TEXT_DOC_ATTR docAttr);
 
     HRESULT (STDMETHODCALLTYPE *Attach)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         IDebugDocumentHelper32 *pddhParent);
 
     HRESULT (STDMETHODCALLTYPE *Detach)(
-        IDebugDocumentHelper32* This);
+        IDebugDocumentHelper32 *This);
 
     HRESULT (STDMETHODCALLTYPE *AddUnicodeText)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         LPCOLESTR pszText);
 
     HRESULT (STDMETHODCALLTYPE *AddDBCSText)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         LPCSTR pszText);
 
     HRESULT (STDMETHODCALLTYPE *SetDebugDocumentHost)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         IDebugDocumentHost *pddh);
 
     HRESULT (STDMETHODCALLTYPE *AddDeferredText)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         ULONG cChars,
         DWORD dwTextStartCookie);
 
     HRESULT (STDMETHODCALLTYPE *DefineScriptBlock)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         ULONG ulCharOffset,
         ULONG cChars,
         IActiveScript *pas,
@@ -4590,53 +4318,54 @@
         DWORD *pdwSourceContext);
 
     HRESULT (STDMETHODCALLTYPE *SetDefaultTextAttr)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         SOURCE_TEXT_ATTR staTextAttr);
 
     HRESULT (STDMETHODCALLTYPE *SetTextAttributes)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         ULONG ulCharOffset,
         ULONG cChars,
         SOURCE_TEXT_ATTR *pstaTextAttr);
 
     HRESULT (STDMETHODCALLTYPE *SetLongName)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         LPCOLESTR pszLongName);
 
     HRESULT (STDMETHODCALLTYPE *SetShortName)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         LPCOLESTR pszShortName);
 
     HRESULT (STDMETHODCALLTYPE *SetDocumentAttr)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         TEXT_DOC_ATTR pszAttributes);
 
     HRESULT (STDMETHODCALLTYPE *GetDebugApplicationNode)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         IDebugApplicationNode **ppdan);
 
     HRESULT (STDMETHODCALLTYPE *GetScriptBlockInfo)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         DWORD dwSourceContext,
         IActiveScript **ppasd,
         ULONG *piCharPos,
         ULONG *pcChars);
 
     HRESULT (STDMETHODCALLTYPE *CreateDebugDocumentContext)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         ULONG iCharPos,
         ULONG cChars,
         IDebugDocumentContext **ppddc);
 
     HRESULT (STDMETHODCALLTYPE *BringDocumentToTop)(
-        IDebugDocumentHelper32* This);
+        IDebugDocumentHelper32 *This);
 
     HRESULT (STDMETHODCALLTYPE *BringDocumentContextToTop)(
-        IDebugDocumentHelper32* This,
+        IDebugDocumentHelper32 *This,
         IDebugDocumentContext *pddc);
 
     END_INTERFACE
 } IDebugDocumentHelper32Vtbl;
+
 interface IDebugDocumentHelper32 {
     CONST_VTBL IDebugDocumentHelper32Vtbl* lpVtbl;
 };
@@ -4737,163 +4466,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_Init_Proxy(
-    IDebugDocumentHelper32* This,
-    IDebugApplication32 *pda,
-    LPCOLESTR pszShortName,
-    LPCOLESTR pszLongName,
-    TEXT_DOC_ATTR docAttr);
-void __RPC_STUB IDebugDocumentHelper32_Init_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_Attach_Proxy(
-    IDebugDocumentHelper32* This,
-    IDebugDocumentHelper32 *pddhParent);
-void __RPC_STUB IDebugDocumentHelper32_Attach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_Detach_Proxy(
-    IDebugDocumentHelper32* This);
-void __RPC_STUB IDebugDocumentHelper32_Detach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_AddUnicodeText_Proxy(
-    IDebugDocumentHelper32* This,
-    LPCOLESTR pszText);
-void __RPC_STUB IDebugDocumentHelper32_AddUnicodeText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_AddDBCSText_Proxy(
-    IDebugDocumentHelper32* This,
-    LPCSTR pszText);
-void __RPC_STUB IDebugDocumentHelper32_AddDBCSText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_SetDebugDocumentHost_Proxy(
-    IDebugDocumentHelper32* This,
-    IDebugDocumentHost *pddh);
-void __RPC_STUB IDebugDocumentHelper32_SetDebugDocumentHost_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_AddDeferredText_Proxy(
-    IDebugDocumentHelper32* This,
-    ULONG cChars,
-    DWORD dwTextStartCookie);
-void __RPC_STUB IDebugDocumentHelper32_AddDeferredText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_DefineScriptBlock_Proxy(
-    IDebugDocumentHelper32* This,
-    ULONG ulCharOffset,
-    ULONG cChars,
-    IActiveScript *pas,
-    WINBOOL fScriptlet,
-    DWORD *pdwSourceContext);
-void __RPC_STUB IDebugDocumentHelper32_DefineScriptBlock_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_SetDefaultTextAttr_Proxy(
-    IDebugDocumentHelper32* This,
-    SOURCE_TEXT_ATTR staTextAttr);
-void __RPC_STUB IDebugDocumentHelper32_SetDefaultTextAttr_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_SetTextAttributes_Proxy(
-    IDebugDocumentHelper32* This,
-    ULONG ulCharOffset,
-    ULONG cChars,
-    SOURCE_TEXT_ATTR *pstaTextAttr);
-void __RPC_STUB IDebugDocumentHelper32_SetTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_SetLongName_Proxy(
-    IDebugDocumentHelper32* This,
-    LPCOLESTR pszLongName);
-void __RPC_STUB IDebugDocumentHelper32_SetLongName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_SetShortName_Proxy(
-    IDebugDocumentHelper32* This,
-    LPCOLESTR pszShortName);
-void __RPC_STUB IDebugDocumentHelper32_SetShortName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_SetDocumentAttr_Proxy(
-    IDebugDocumentHelper32* This,
-    TEXT_DOC_ATTR pszAttributes);
-void __RPC_STUB IDebugDocumentHelper32_SetDocumentAttr_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_GetDebugApplicationNode_Proxy(
-    IDebugDocumentHelper32* This,
-    IDebugApplicationNode **ppdan);
-void __RPC_STUB IDebugDocumentHelper32_GetDebugApplicationNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_GetScriptBlockInfo_Proxy(
-    IDebugDocumentHelper32* This,
-    DWORD dwSourceContext,
-    IActiveScript **ppasd,
-    ULONG *piCharPos,
-    ULONG *pcChars);
-void __RPC_STUB IDebugDocumentHelper32_GetScriptBlockInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_CreateDebugDocumentContext_Proxy(
-    IDebugDocumentHelper32* This,
-    ULONG iCharPos,
-    ULONG cChars,
-    IDebugDocumentContext **ppddc);
-void __RPC_STUB IDebugDocumentHelper32_CreateDebugDocumentContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_BringDocumentToTop_Proxy(
-    IDebugDocumentHelper32* This);
-void __RPC_STUB IDebugDocumentHelper32_BringDocumentToTop_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper32_BringDocumentContextToTop_Proxy(
-    IDebugDocumentHelper32* This,
-    IDebugDocumentContext *pddc);
-void __RPC_STUB IDebugDocumentHelper32_BringDocumentContextToTop_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentHelper32_INTERFACE_DEFINED__ */
 
@@ -4987,50 +4559,50 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentHelper64* This);
+        IDebugDocumentHelper64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentHelper64* This);
+        IDebugDocumentHelper64 *This);
 
     /*** IDebugDocumentHelper64 methods ***/
     HRESULT (STDMETHODCALLTYPE *Init)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         IDebugApplication64 *pda,
         LPCOLESTR pszShortName,
         LPCOLESTR pszLongName,
         TEXT_DOC_ATTR docAttr);
 
     HRESULT (STDMETHODCALLTYPE *Attach)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         IDebugDocumentHelper64 *pddhParent);
 
     HRESULT (STDMETHODCALLTYPE *Detach)(
-        IDebugDocumentHelper64* This);
+        IDebugDocumentHelper64 *This);
 
     HRESULT (STDMETHODCALLTYPE *AddUnicodeText)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         LPCOLESTR pszText);
 
     HRESULT (STDMETHODCALLTYPE *AddDBCSText)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         LPCSTR pszText);
 
     HRESULT (STDMETHODCALLTYPE *SetDebugDocumentHost)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         IDebugDocumentHost *pddh);
 
     HRESULT (STDMETHODCALLTYPE *AddDeferredText)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         ULONG cChars,
         DWORD dwTextStartCookie);
 
     HRESULT (STDMETHODCALLTYPE *DefineScriptBlock)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         ULONG ulCharOffset,
         ULONG cChars,
         IActiveScript *pas,
@@ -5038,53 +4610,54 @@
         DWORDLONG *pdwSourceContext);
 
     HRESULT (STDMETHODCALLTYPE *SetDefaultTextAttr)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         SOURCE_TEXT_ATTR staTextAttr);
 
     HRESULT (STDMETHODCALLTYPE *SetTextAttributes)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         ULONG ulCharOffset,
         ULONG cChars,
         SOURCE_TEXT_ATTR *pstaTextAttr);
 
     HRESULT (STDMETHODCALLTYPE *SetLongName)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         LPCOLESTR pszLongName);
 
     HRESULT (STDMETHODCALLTYPE *SetShortName)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         LPCOLESTR pszShortName);
 
     HRESULT (STDMETHODCALLTYPE *SetDocumentAttr)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         TEXT_DOC_ATTR pszAttributes);
 
     HRESULT (STDMETHODCALLTYPE *GetDebugApplicationNode)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         IDebugApplicationNode **ppdan);
 
     HRESULT (STDMETHODCALLTYPE *GetScriptBlockInfo)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         DWORDLONG dwSourceContext,
         IActiveScript **ppasd,
         ULONG *piCharPos,
         ULONG *pcChars);
 
     HRESULT (STDMETHODCALLTYPE *CreateDebugDocumentContext)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         ULONG iCharPos,
         ULONG cChars,
         IDebugDocumentContext **ppddc);
 
     HRESULT (STDMETHODCALLTYPE *BringDocumentToTop)(
-        IDebugDocumentHelper64* This);
+        IDebugDocumentHelper64 *This);
 
     HRESULT (STDMETHODCALLTYPE *BringDocumentContextToTop)(
-        IDebugDocumentHelper64* This,
+        IDebugDocumentHelper64 *This,
         IDebugDocumentContext *pddc);
 
     END_INTERFACE
 } IDebugDocumentHelper64Vtbl;
+
 interface IDebugDocumentHelper64 {
     CONST_VTBL IDebugDocumentHelper64Vtbl* lpVtbl;
 };
@@ -5185,163 +4758,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_Init_Proxy(
-    IDebugDocumentHelper64* This,
-    IDebugApplication64 *pda,
-    LPCOLESTR pszShortName,
-    LPCOLESTR pszLongName,
-    TEXT_DOC_ATTR docAttr);
-void __RPC_STUB IDebugDocumentHelper64_Init_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_Attach_Proxy(
-    IDebugDocumentHelper64* This,
-    IDebugDocumentHelper64 *pddhParent);
-void __RPC_STUB IDebugDocumentHelper64_Attach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_Detach_Proxy(
-    IDebugDocumentHelper64* This);
-void __RPC_STUB IDebugDocumentHelper64_Detach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_AddUnicodeText_Proxy(
-    IDebugDocumentHelper64* This,
-    LPCOLESTR pszText);
-void __RPC_STUB IDebugDocumentHelper64_AddUnicodeText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_AddDBCSText_Proxy(
-    IDebugDocumentHelper64* This,
-    LPCSTR pszText);
-void __RPC_STUB IDebugDocumentHelper64_AddDBCSText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_SetDebugDocumentHost_Proxy(
-    IDebugDocumentHelper64* This,
-    IDebugDocumentHost *pddh);
-void __RPC_STUB IDebugDocumentHelper64_SetDebugDocumentHost_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_AddDeferredText_Proxy(
-    IDebugDocumentHelper64* This,
-    ULONG cChars,
-    DWORD dwTextStartCookie);
-void __RPC_STUB IDebugDocumentHelper64_AddDeferredText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_DefineScriptBlock_Proxy(
-    IDebugDocumentHelper64* This,
-    ULONG ulCharOffset,
-    ULONG cChars,
-    IActiveScript *pas,
-    WINBOOL fScriptlet,
-    DWORDLONG *pdwSourceContext);
-void __RPC_STUB IDebugDocumentHelper64_DefineScriptBlock_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_SetDefaultTextAttr_Proxy(
-    IDebugDocumentHelper64* This,
-    SOURCE_TEXT_ATTR staTextAttr);
-void __RPC_STUB IDebugDocumentHelper64_SetDefaultTextAttr_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_SetTextAttributes_Proxy(
-    IDebugDocumentHelper64* This,
-    ULONG ulCharOffset,
-    ULONG cChars,
-    SOURCE_TEXT_ATTR *pstaTextAttr);
-void __RPC_STUB IDebugDocumentHelper64_SetTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_SetLongName_Proxy(
-    IDebugDocumentHelper64* This,
-    LPCOLESTR pszLongName);
-void __RPC_STUB IDebugDocumentHelper64_SetLongName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_SetShortName_Proxy(
-    IDebugDocumentHelper64* This,
-    LPCOLESTR pszShortName);
-void __RPC_STUB IDebugDocumentHelper64_SetShortName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_SetDocumentAttr_Proxy(
-    IDebugDocumentHelper64* This,
-    TEXT_DOC_ATTR pszAttributes);
-void __RPC_STUB IDebugDocumentHelper64_SetDocumentAttr_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_GetDebugApplicationNode_Proxy(
-    IDebugDocumentHelper64* This,
-    IDebugApplicationNode **ppdan);
-void __RPC_STUB IDebugDocumentHelper64_GetDebugApplicationNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_GetScriptBlockInfo_Proxy(
-    IDebugDocumentHelper64* This,
-    DWORDLONG dwSourceContext,
-    IActiveScript **ppasd,
-    ULONG *piCharPos,
-    ULONG *pcChars);
-void __RPC_STUB IDebugDocumentHelper64_GetScriptBlockInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_CreateDebugDocumentContext_Proxy(
-    IDebugDocumentHelper64* This,
-    ULONG iCharPos,
-    ULONG cChars,
-    IDebugDocumentContext **ppddc);
-void __RPC_STUB IDebugDocumentHelper64_CreateDebugDocumentContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_BringDocumentToTop_Proxy(
-    IDebugDocumentHelper64* This);
-void __RPC_STUB IDebugDocumentHelper64_BringDocumentToTop_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHelper64_BringDocumentContextToTop_Proxy(
-    IDebugDocumentHelper64* This,
-    IDebugDocumentContext *pddc);
-void __RPC_STUB IDebugDocumentHelper64_BringDocumentContextToTop_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentHelper64_INTERFACE_DEFINED__ */
 
@@ -5393,19 +4809,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentHost* This,
+        IDebugDocumentHost *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentHost* This);
+        IDebugDocumentHost *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentHost* This);
+        IDebugDocumentHost *This);
 
     /*** IDebugDocumentHost methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDeferredText)(
-        IDebugDocumentHost* This,
+        IDebugDocumentHost *This,
         DWORD dwTextStartCookie,
         WCHAR *pcharText,
         SOURCE_TEXT_ATTR *pstaTextAttr,
@@ -5413,7 +4829,7 @@
         ULONG cMaxChars);
 
     HRESULT (STDMETHODCALLTYPE *GetScriptTextAttributes)(
-        IDebugDocumentHost* This,
+        IDebugDocumentHost *This,
         LPCOLESTR pstrCode,
         ULONG uNumCodeChars,
         LPCOLESTR pstrDelimiter,
@@ -5421,23 +4837,24 @@
         SOURCE_TEXT_ATTR *pattr);
 
     HRESULT (STDMETHODCALLTYPE *OnCreateDocumentContext)(
-        IDebugDocumentHost* This,
+        IDebugDocumentHost *This,
         IUnknown **ppunkOuter);
 
     HRESULT (STDMETHODCALLTYPE *GetPathName)(
-        IDebugDocumentHost* This,
+        IDebugDocumentHost *This,
         BSTR *pbstrLongName,
         WINBOOL *pfIsOriginalFile);
 
     HRESULT (STDMETHODCALLTYPE *GetFileName)(
-        IDebugDocumentHost* This,
+        IDebugDocumentHost *This,
         BSTR *pbstrShortName);
 
     HRESULT (STDMETHODCALLTYPE *NotifyChanged)(
-        IDebugDocumentHost* This);
+        IDebugDocumentHost *This);
 
     END_INTERFACE
 } IDebugDocumentHostVtbl;
+
 interface IDebugDocumentHost {
     CONST_VTBL IDebugDocumentHostVtbl* lpVtbl;
 };
@@ -5490,62 +4907,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentHost_GetDeferredText_Proxy(
-    IDebugDocumentHost* This,
-    DWORD dwTextStartCookie,
-    WCHAR *pcharText,
-    SOURCE_TEXT_ATTR *pstaTextAttr,
-    ULONG *pcNumChars,
-    ULONG cMaxChars);
-void __RPC_STUB IDebugDocumentHost_GetDeferredText_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHost_GetScriptTextAttributes_Proxy(
-    IDebugDocumentHost* This,
-    LPCOLESTR pstrCode,
-    ULONG uNumCodeChars,
-    LPCOLESTR pstrDelimiter,
-    DWORD dwFlags,
-    SOURCE_TEXT_ATTR *pattr);
-void __RPC_STUB IDebugDocumentHost_GetScriptTextAttributes_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHost_OnCreateDocumentContext_Proxy(
-    IDebugDocumentHost* This,
-    IUnknown **ppunkOuter);
-void __RPC_STUB IDebugDocumentHost_OnCreateDocumentContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHost_GetPathName_Proxy(
-    IDebugDocumentHost* This,
-    BSTR *pbstrLongName,
-    WINBOOL *pfIsOriginalFile);
-void __RPC_STUB IDebugDocumentHost_GetPathName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHost_GetFileName_Proxy(
-    IDebugDocumentHost* This,
-    BSTR *pbstrShortName);
-void __RPC_STUB IDebugDocumentHost_GetFileName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentHost_NotifyChanged_Proxy(
-    IDebugDocumentHost* This);
-void __RPC_STUB IDebugDocumentHost_NotifyChanged_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentHost_INTERFACE_DEFINED__ */
 
@@ -5576,27 +4937,28 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugDocumentContext* This,
+        IDebugDocumentContext *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugDocumentContext* This);
+        IDebugDocumentContext *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugDocumentContext* This);
+        IDebugDocumentContext *This);
 
     /*** IDebugDocumentContext methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocument)(
-        IDebugDocumentContext* This,
+        IDebugDocumentContext *This,
         IDebugDocument **ppsd);
 
     HRESULT (STDMETHODCALLTYPE *EnumCodeContexts)(
-        IDebugDocumentContext* This,
+        IDebugDocumentContext *This,
         IEnumDebugCodeContexts **ppescc);
 
     END_INTERFACE
 } IDebugDocumentContextVtbl;
+
 interface IDebugDocumentContext {
     CONST_VTBL IDebugDocumentContextVtbl* lpVtbl;
 };
@@ -5633,22 +4995,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugDocumentContext_GetDocument_Proxy(
-    IDebugDocumentContext* This,
-    IDebugDocument **ppsd);
-void __RPC_STUB IDebugDocumentContext_GetDocument_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugDocumentContext_EnumCodeContexts_Proxy(
-    IDebugDocumentContext* This,
-    IEnumDebugCodeContexts **ppescc);
-void __RPC_STUB IDebugDocumentContext_EnumCodeContexts_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugDocumentContext_INTERFACE_DEFINED__ */
 
@@ -5676,23 +5022,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugSessionProvider* This,
+        IDebugSessionProvider *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugSessionProvider* This);
+        IDebugSessionProvider *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugSessionProvider* This);
+        IDebugSessionProvider *This);
 
     /*** IDebugSessionProvider methods ***/
     HRESULT (STDMETHODCALLTYPE *StartDebugSession)(
-        IDebugSessionProvider* This,
+        IDebugSessionProvider *This,
         IRemoteDebugApplication *pda);
 
     END_INTERFACE
 } IDebugSessionProviderVtbl;
+
 interface IDebugSessionProvider {
     CONST_VTBL IDebugSessionProviderVtbl* lpVtbl;
 };
@@ -5725,14 +5072,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugSessionProvider_StartDebugSession_Proxy(
-    IDebugSessionProvider* This,
-    IRemoteDebugApplication *pda);
-void __RPC_STUB IDebugSessionProvider_StartDebugSession_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugSessionProvider_INTERFACE_DEFINED__ */
 
@@ -5782,22 +5121,22 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IApplicationDebugger* This,
+        IApplicationDebugger *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IApplicationDebugger* This);
+        IApplicationDebugger *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IApplicationDebugger* This);
+        IApplicationDebugger *This);
 
     /*** IApplicationDebugger methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryAlive)(
-        IApplicationDebugger* This);
+        IApplicationDebugger *This);
 
     HRESULT (STDMETHODCALLTYPE *CreateInstanceAtDebugger)(
-        IApplicationDebugger* This,
+        IApplicationDebugger *This,
         REFCLSID rclsid,
         IUnknown *pUnkOuter,
         DWORD dwClsContext,
@@ -5805,25 +5144,26 @@
         IUnknown **ppvObject);
 
     HRESULT (STDMETHODCALLTYPE *onDebugOutput)(
-        IApplicationDebugger* This,
+        IApplicationDebugger *This,
         LPCOLESTR pstr);
 
     HRESULT (STDMETHODCALLTYPE *onHandleBreakPoint)(
-        IApplicationDebugger* This,
+        IApplicationDebugger *This,
         IRemoteDebugApplicationThread *prpt,
         BREAKREASON br,
         IActiveScriptErrorDebug *pError);
 
     HRESULT (STDMETHODCALLTYPE *onClose)(
-        IApplicationDebugger* This);
+        IApplicationDebugger *This);
 
     HRESULT (STDMETHODCALLTYPE *onDebuggerEvent)(
-        IApplicationDebugger* This,
+        IApplicationDebugger *This,
         REFIID riid,
         IUnknown *punk);
 
     END_INTERFACE
 } IApplicationDebuggerVtbl;
+
 interface IApplicationDebugger {
     CONST_VTBL IApplicationDebuggerVtbl* lpVtbl;
 };
@@ -5876,59 +5216,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IApplicationDebugger_QueryAlive_Proxy(
-    IApplicationDebugger* This);
-void __RPC_STUB IApplicationDebugger_QueryAlive_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IApplicationDebugger_CreateInstanceAtDebugger_Proxy(
-    IApplicationDebugger* This,
-    REFCLSID rclsid,
-    IUnknown *pUnkOuter,
-    DWORD dwClsContext,
-    REFIID riid,
-    IUnknown **ppvObject);
-void __RPC_STUB IApplicationDebugger_CreateInstanceAtDebugger_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IApplicationDebugger_onDebugOutput_Proxy(
-    IApplicationDebugger* This,
-    LPCOLESTR pstr);
-void __RPC_STUB IApplicationDebugger_onDebugOutput_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IApplicationDebugger_onHandleBreakPoint_Proxy(
-    IApplicationDebugger* This,
-    IRemoteDebugApplicationThread *prpt,
-    BREAKREASON br,
-    IActiveScriptErrorDebug *pError);
-void __RPC_STUB IApplicationDebugger_onHandleBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IApplicationDebugger_onClose_Proxy(
-    IApplicationDebugger* This);
-void __RPC_STUB IApplicationDebugger_onClose_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IApplicationDebugger_onDebuggerEvent_Proxy(
-    IApplicationDebugger* This,
-    REFIID riid,
-    IUnknown *punk);
-void __RPC_STUB IApplicationDebugger_onDebuggerEvent_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IApplicationDebugger_INTERFACE_DEFINED__ */
 
@@ -5959,27 +5246,28 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IApplicationDebuggerUI* This,
+        IApplicationDebuggerUI *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IApplicationDebuggerUI* This);
+        IApplicationDebuggerUI *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IApplicationDebuggerUI* This);
+        IApplicationDebuggerUI *This);
 
     /*** IApplicationDebuggerUI methods ***/
     HRESULT (STDMETHODCALLTYPE *BringDocumentToTop)(
-        IApplicationDebuggerUI* This,
+        IApplicationDebuggerUI *This,
         IDebugDocumentText *pddt);
 
     HRESULT (STDMETHODCALLTYPE *BringDocumentContextToTop)(
-        IApplicationDebuggerUI* This,
+        IApplicationDebuggerUI *This,
         IDebugDocumentContext *pddc);
 
     END_INTERFACE
 } IApplicationDebuggerUIVtbl;
+
 interface IApplicationDebuggerUI {
     CONST_VTBL IApplicationDebuggerUIVtbl* lpVtbl;
 };
@@ -6016,22 +5304,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IApplicationDebuggerUI_BringDocumentToTop_Proxy(
-    IApplicationDebuggerUI* This,
-    IDebugDocumentText *pddt);
-void __RPC_STUB IApplicationDebuggerUI_BringDocumentToTop_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IApplicationDebuggerUI_BringDocumentContextToTop_Proxy(
-    IApplicationDebuggerUI* This,
-    IDebugDocumentContext *pddc);
-void __RPC_STUB IApplicationDebuggerUI_BringDocumentContextToTop_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IApplicationDebuggerUI_INTERFACE_DEFINED__ */
 
@@ -6066,32 +5338,33 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMachineDebugManager* This,
+        IMachineDebugManager *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMachineDebugManager* This);
+        IMachineDebugManager *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMachineDebugManager* This);
+        IMachineDebugManager *This);
 
     /*** IMachineDebugManager methods ***/
     HRESULT (STDMETHODCALLTYPE *AddApplication)(
-        IMachineDebugManager* This,
+        IMachineDebugManager *This,
         IRemoteDebugApplication *pda,
         DWORD *pdwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveApplication)(
-        IMachineDebugManager* This,
+        IMachineDebugManager *This,
         DWORD dwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *EnumApplications)(
-        IMachineDebugManager* This,
+        IMachineDebugManager *This,
         IEnumRemoteDebugApplications **ppeda);
 
     END_INTERFACE
 } IMachineDebugManagerVtbl;
+
 interface IMachineDebugManager {
     CONST_VTBL IMachineDebugManagerVtbl* lpVtbl;
 };
@@ -6132,31 +5405,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IMachineDebugManager_AddApplication_Proxy(
-    IMachineDebugManager* This,
-    IRemoteDebugApplication *pda,
-    DWORD *pdwAppCookie);
-void __RPC_STUB IMachineDebugManager_AddApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMachineDebugManager_RemoveApplication_Proxy(
-    IMachineDebugManager* This,
-    DWORD dwAppCookie);
-void __RPC_STUB IMachineDebugManager_RemoveApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMachineDebugManager_EnumApplications_Proxy(
-    IMachineDebugManager* This,
-    IEnumRemoteDebugApplications **ppeda);
-void __RPC_STUB IMachineDebugManager_EnumApplications_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMachineDebugManager_INTERFACE_DEFINED__ */
 
@@ -6193,34 +5441,35 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMachineDebugManagerCookie* This,
+        IMachineDebugManagerCookie *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMachineDebugManagerCookie* This);
+        IMachineDebugManagerCookie *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMachineDebugManagerCookie* This);
+        IMachineDebugManagerCookie *This);
 
     /*** IMachineDebugManagerCookie methods ***/
     HRESULT (STDMETHODCALLTYPE *AddApplication)(
-        IMachineDebugManagerCookie* This,
+        IMachineDebugManagerCookie *This,
         IRemoteDebugApplication *pda,
         DWORD dwDebugAppCookie,
         DWORD *pdwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveApplication)(
-        IMachineDebugManagerCookie* This,
+        IMachineDebugManagerCookie *This,
         DWORD dwDebugAppCookie,
         DWORD dwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *EnumApplications)(
-        IMachineDebugManagerCookie* This,
+        IMachineDebugManagerCookie *This,
         IEnumRemoteDebugApplications **ppeda);
 
     END_INTERFACE
 } IMachineDebugManagerCookieVtbl;
+
 interface IMachineDebugManagerCookie {
     CONST_VTBL IMachineDebugManagerCookieVtbl* lpVtbl;
 };
@@ -6261,33 +5510,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IMachineDebugManagerCookie_AddApplication_Proxy(
-    IMachineDebugManagerCookie* This,
-    IRemoteDebugApplication *pda,
-    DWORD dwDebugAppCookie,
-    DWORD *pdwAppCookie);
-void __RPC_STUB IMachineDebugManagerCookie_AddApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMachineDebugManagerCookie_RemoveApplication_Proxy(
-    IMachineDebugManagerCookie* This,
-    DWORD dwDebugAppCookie,
-    DWORD dwAppCookie);
-void __RPC_STUB IMachineDebugManagerCookie_RemoveApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMachineDebugManagerCookie_EnumApplications_Proxy(
-    IMachineDebugManagerCookie* This,
-    IEnumRemoteDebugApplications **ppeda);
-void __RPC_STUB IMachineDebugManagerCookie_EnumApplications_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMachineDebugManagerCookie_INTERFACE_DEFINED__ */
 
@@ -6320,29 +5542,30 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMachineDebugManagerEvents* This,
+        IMachineDebugManagerEvents *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMachineDebugManagerEvents* This);
+        IMachineDebugManagerEvents *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMachineDebugManagerEvents* This);
+        IMachineDebugManagerEvents *This);
 
     /*** IMachineDebugManagerEvents methods ***/
     HRESULT (STDMETHODCALLTYPE *onAddApplication)(
-        IMachineDebugManagerEvents* This,
+        IMachineDebugManagerEvents *This,
         IRemoteDebugApplication *pda,
         DWORD dwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *onRemoveApplication)(
-        IMachineDebugManagerEvents* This,
+        IMachineDebugManagerEvents *This,
         IRemoteDebugApplication *pda,
         DWORD dwAppCookie);
 
     END_INTERFACE
 } IMachineDebugManagerEventsVtbl;
+
 interface IMachineDebugManagerEvents {
     CONST_VTBL IMachineDebugManagerEventsVtbl* lpVtbl;
 };
@@ -6379,24 +5602,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IMachineDebugManagerEvents_onAddApplication_Proxy(
-    IMachineDebugManagerEvents* This,
-    IRemoteDebugApplication *pda,
-    DWORD dwAppCookie);
-void __RPC_STUB IMachineDebugManagerEvents_onAddApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMachineDebugManagerEvents_onRemoveApplication_Proxy(
-    IMachineDebugManagerEvents* This,
-    IRemoteDebugApplication *pda,
-    DWORD dwAppCookie);
-void __RPC_STUB IMachineDebugManagerEvents_onRemoveApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMachineDebugManagerEvents_INTERFACE_DEFINED__ */
 
@@ -6438,41 +5643,42 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IProcessDebugManager32* This,
+        IProcessDebugManager32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IProcessDebugManager32* This);
+        IProcessDebugManager32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IProcessDebugManager32* This);
+        IProcessDebugManager32 *This);
 
     /*** IProcessDebugManager32 methods ***/
     HRESULT (STDMETHODCALLTYPE *CreateApplication)(
-        IProcessDebugManager32* This,
+        IProcessDebugManager32 *This,
         IDebugApplication32 **ppda);
 
     HRESULT (STDMETHODCALLTYPE *GetDefaultApplication)(
-        IProcessDebugManager32* This,
+        IProcessDebugManager32 *This,
         IDebugApplication32 **ppda);
 
     HRESULT (STDMETHODCALLTYPE *AddApplication)(
-        IProcessDebugManager32* This,
+        IProcessDebugManager32 *This,
         IDebugApplication32 *pda,
         DWORD *pdwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveApplication)(
-        IProcessDebugManager32* This,
+        IProcessDebugManager32 *This,
         DWORD dwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *CreateDebugDocumentHelper)(
-        IProcessDebugManager32* This,
+        IProcessDebugManager32 *This,
         IUnknown *punkOuter,
         IDebugDocumentHelper32 **pddh);
 
     END_INTERFACE
 } IProcessDebugManager32Vtbl;
+
 interface IProcessDebugManager32 {
     CONST_VTBL IProcessDebugManager32Vtbl* lpVtbl;
 };
@@ -6521,48 +5727,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IProcessDebugManager32_CreateApplication_Proxy(
-    IProcessDebugManager32* This,
-    IDebugApplication32 **ppda);
-void __RPC_STUB IProcessDebugManager32_CreateApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager32_GetDefaultApplication_Proxy(
-    IProcessDebugManager32* This,
-    IDebugApplication32 **ppda);
-void __RPC_STUB IProcessDebugManager32_GetDefaultApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager32_AddApplication_Proxy(
-    IProcessDebugManager32* This,
-    IDebugApplication32 *pda,
-    DWORD *pdwAppCookie);
-void __RPC_STUB IProcessDebugManager32_AddApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager32_RemoveApplication_Proxy(
-    IProcessDebugManager32* This,
-    DWORD dwAppCookie);
-void __RPC_STUB IProcessDebugManager32_RemoveApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager32_CreateDebugDocumentHelper_Proxy(
-    IProcessDebugManager32* This,
-    IUnknown *punkOuter,
-    IDebugDocumentHelper32 **pddh);
-void __RPC_STUB IProcessDebugManager32_CreateDebugDocumentHelper_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IProcessDebugManager32_INTERFACE_DEFINED__ */
 
@@ -6604,41 +5768,42 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IProcessDebugManager64* This,
+        IProcessDebugManager64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IProcessDebugManager64* This);
+        IProcessDebugManager64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IProcessDebugManager64* This);
+        IProcessDebugManager64 *This);
 
     /*** IProcessDebugManager64 methods ***/
     HRESULT (STDMETHODCALLTYPE *CreateApplication)(
-        IProcessDebugManager64* This,
+        IProcessDebugManager64 *This,
         IDebugApplication64 **ppda);
 
     HRESULT (STDMETHODCALLTYPE *GetDefaultApplication)(
-        IProcessDebugManager64* This,
+        IProcessDebugManager64 *This,
         IDebugApplication64 **ppda);
 
     HRESULT (STDMETHODCALLTYPE *AddApplication)(
-        IProcessDebugManager64* This,
+        IProcessDebugManager64 *This,
         IDebugApplication64 *pda,
         DWORD *pdwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveApplication)(
-        IProcessDebugManager64* This,
+        IProcessDebugManager64 *This,
         DWORD dwAppCookie);
 
     HRESULT (STDMETHODCALLTYPE *CreateDebugDocumentHelper)(
-        IProcessDebugManager64* This,
+        IProcessDebugManager64 *This,
         IUnknown *punkOuter,
         IDebugDocumentHelper64 **pddh);
 
     END_INTERFACE
 } IProcessDebugManager64Vtbl;
+
 interface IProcessDebugManager64 {
     CONST_VTBL IProcessDebugManager64Vtbl* lpVtbl;
 };
@@ -6687,48 +5852,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IProcessDebugManager64_CreateApplication_Proxy(
-    IProcessDebugManager64* This,
-    IDebugApplication64 **ppda);
-void __RPC_STUB IProcessDebugManager64_CreateApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager64_GetDefaultApplication_Proxy(
-    IProcessDebugManager64* This,
-    IDebugApplication64 **ppda);
-void __RPC_STUB IProcessDebugManager64_GetDefaultApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager64_AddApplication_Proxy(
-    IProcessDebugManager64* This,
-    IDebugApplication64 *pda,
-    DWORD *pdwAppCookie);
-void __RPC_STUB IProcessDebugManager64_AddApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager64_RemoveApplication_Proxy(
-    IProcessDebugManager64* This,
-    DWORD dwAppCookie);
-void __RPC_STUB IProcessDebugManager64_RemoveApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IProcessDebugManager64_CreateDebugDocumentHelper_Proxy(
-    IProcessDebugManager64* This,
-    IUnknown *punkOuter,
-    IDebugDocumentHelper64 **pddh);
-void __RPC_STUB IProcessDebugManager64_CreateDebugDocumentHelper_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IProcessDebugManager64_INTERFACE_DEFINED__ */
 
@@ -6792,39 +5915,39 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRemoteDebugApplication* This);
+        IRemoteDebugApplication *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRemoteDebugApplication* This);
+        IRemoteDebugApplication *This);
 
     /*** IRemoteDebugApplication methods ***/
     HRESULT (STDMETHODCALLTYPE *ResumeFromBreakPoint)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         IRemoteDebugApplicationThread *prptFocus,
         BREAKRESUMEACTION bra,
         ERRORRESUMEACTION era);
 
     HRESULT (STDMETHODCALLTYPE *CauseBreak)(
-        IRemoteDebugApplication* This);
+        IRemoteDebugApplication *This);
 
     HRESULT (STDMETHODCALLTYPE *ConnectDebugger)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         IApplicationDebugger *pad);
 
     HRESULT (STDMETHODCALLTYPE *DisconnectDebugger)(
-        IRemoteDebugApplication* This);
+        IRemoteDebugApplication *This);
 
     HRESULT (STDMETHODCALLTYPE *GetDebugger)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         IApplicationDebugger **pad);
 
     HRESULT (STDMETHODCALLTYPE *CreateInstanceAtApplication)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         REFCLSID rclsid,
         IUnknown *pUnkOuter,
         DWORD dwClsContext,
@@ -6832,26 +5955,27 @@
         IUnknown **ppvObject);
 
     HRESULT (STDMETHODCALLTYPE *QueryAlive)(
-        IRemoteDebugApplication* This);
+        IRemoteDebugApplication *This);
 
     HRESULT (STDMETHODCALLTYPE *EnumThreads)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         IEnumRemoteDebugApplicationThreads **pperdat);
 
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetRootNode)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         IDebugApplicationNode **ppdanRoot);
 
     HRESULT (STDMETHODCALLTYPE *EnumGlobalExpressionContexts)(
-        IRemoteDebugApplication* This,
+        IRemoteDebugApplication *This,
         IEnumDebugExpressionContexts **ppedec);
 
     END_INTERFACE
 } IRemoteDebugApplicationVtbl;
+
 interface IRemoteDebugApplication {
     CONST_VTBL IRemoteDebugApplicationVtbl* lpVtbl;
 };
@@ -6924,97 +6048,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_ResumeFromBreakPoint_Proxy(
-    IRemoteDebugApplication* This,
-    IRemoteDebugApplicationThread *prptFocus,
-    BREAKRESUMEACTION bra,
-    ERRORRESUMEACTION era);
-void __RPC_STUB IRemoteDebugApplication_ResumeFromBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_CauseBreak_Proxy(
-    IRemoteDebugApplication* This);
-void __RPC_STUB IRemoteDebugApplication_CauseBreak_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_ConnectDebugger_Proxy(
-    IRemoteDebugApplication* This,
-    IApplicationDebugger *pad);
-void __RPC_STUB IRemoteDebugApplication_ConnectDebugger_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_DisconnectDebugger_Proxy(
-    IRemoteDebugApplication* This);
-void __RPC_STUB IRemoteDebugApplication_DisconnectDebugger_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_GetDebugger_Proxy(
-    IRemoteDebugApplication* This,
-    IApplicationDebugger **pad);
-void __RPC_STUB IRemoteDebugApplication_GetDebugger_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_CreateInstanceAtApplication_Proxy(
-    IRemoteDebugApplication* This,
-    REFCLSID rclsid,
-    IUnknown *pUnkOuter,
-    DWORD dwClsContext,
-    REFIID riid,
-    IUnknown **ppvObject);
-void __RPC_STUB IRemoteDebugApplication_CreateInstanceAtApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_QueryAlive_Proxy(
-    IRemoteDebugApplication* This);
-void __RPC_STUB IRemoteDebugApplication_QueryAlive_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_EnumThreads_Proxy(
-    IRemoteDebugApplication* This,
-    IEnumRemoteDebugApplicationThreads **pperdat);
-void __RPC_STUB IRemoteDebugApplication_EnumThreads_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_GetName_Proxy(
-    IRemoteDebugApplication* This,
-    BSTR *pbstrName);
-void __RPC_STUB IRemoteDebugApplication_GetName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_GetRootNode_Proxy(
-    IRemoteDebugApplication* This,
-    IDebugApplicationNode **ppdanRoot);
-void __RPC_STUB IRemoteDebugApplication_GetRootNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplication_EnumGlobalExpressionContexts_Proxy(
-    IRemoteDebugApplication* This,
-    IEnumDebugExpressionContexts **ppedec);
-void __RPC_STUB IRemoteDebugApplication_EnumGlobalExpressionContexts_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRemoteDebugApplication_INTERFACE_DEFINED__ */
 
@@ -7112,39 +6145,39 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     /*** IRemoteDebugApplication methods ***/
     HRESULT (STDMETHODCALLTYPE *ResumeFromBreakPoint)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IRemoteDebugApplicationThread *prptFocus,
         BREAKRESUMEACTION bra,
         ERRORRESUMEACTION era);
 
     HRESULT (STDMETHODCALLTYPE *CauseBreak)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *ConnectDebugger)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IApplicationDebugger *pad);
 
     HRESULT (STDMETHODCALLTYPE *DisconnectDebugger)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *GetDebugger)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IApplicationDebugger **pad);
 
     HRESULT (STDMETHODCALLTYPE *CreateInstanceAtApplication)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         REFCLSID rclsid,
         IUnknown *pUnkOuter,
         DWORD dwClsContext,
@@ -7152,91 +6185,91 @@
         IUnknown **ppvObject);
 
     HRESULT (STDMETHODCALLTYPE *QueryAlive)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *EnumThreads)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IEnumRemoteDebugApplicationThreads **pperdat);
 
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetRootNode)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IDebugApplicationNode **ppdanRoot);
 
     HRESULT (STDMETHODCALLTYPE *EnumGlobalExpressionContexts)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IEnumDebugExpressionContexts **ppedec);
 
     /*** IDebugApplication32 methods ***/
     HRESULT (STDMETHODCALLTYPE *SetName)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         LPCOLESTR pstrName);
 
     HRESULT (STDMETHODCALLTYPE *StepOutComplete)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *DebugOutput)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         LPCOLESTR pstr);
 
     HRESULT (STDMETHODCALLTYPE *StartDebugSession)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *HandleBreakPoint)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         BREAKREASON br,
         BREAKRESUMEACTION *pbra);
 
     HRESULT (STDMETHODCALLTYPE *Close)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *GetBreakFlags)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         APPBREAKFLAGS *pabf,
         IRemoteDebugApplicationThread **pprdatSteppingThread);
 
     HRESULT (STDMETHODCALLTYPE *GetCurrentThread)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IDebugApplicationThread **pat);
 
     HRESULT (STDMETHODCALLTYPE *CreateAsyncDebugOperation)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IDebugSyncOperation *psdo,
         IDebugAsyncOperation **ppado);
 
     HRESULT (STDMETHODCALLTYPE *AddStackFrameSniffer)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IDebugStackFrameSniffer *pdsfs,
         DWORD *pdwCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveStackFrameSniffer)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         DWORD dwCookie);
 
     HRESULT (STDMETHODCALLTYPE *QueryCurrentThreadIsDebuggerThread)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *SynchronousCallInDebuggerThread)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IDebugThreadCall32 *pptc,
         DWORD dwParam1,
         DWORD dwParam2,
         DWORD dwParam3);
 
     HRESULT (STDMETHODCALLTYPE *CreateApplicationNode)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IDebugApplicationNode **ppdanNew);
 
     HRESULT (STDMETHODCALLTYPE *FireDebuggerEvent)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         REFGUID riid,
         IUnknown *punk);
 
     HRESULT (STDMETHODCALLTYPE *HandleRuntimeError)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IActiveScriptErrorDebug *pErrorDebug,
         IActiveScriptSite *pScriptSite,
         BREAKRESUMEACTION *pbra,
@@ -7244,22 +6277,23 @@
         WINBOOL *pfCallOnScriptError);
 
     WINBOOL (STDMETHODCALLTYPE *FCanJitDebug)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     WINBOOL (STDMETHODCALLTYPE *FIsAutoJitDebugEnabled)(
-        IDebugApplication32* This);
+        IDebugApplication32 *This);
 
     HRESULT (STDMETHODCALLTYPE *AddGlobalExpressionContextProvider)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         IProvideExpressionContexts *pdsfs,
         DWORD *pdwCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveGlobalExpressionContextProvider)(
-        IDebugApplication32* This,
+        IDebugApplication32 *This,
         DWORD dwCookie);
 
     END_INTERFACE
 } IDebugApplication32Vtbl;
+
 interface IDebugApplication32 {
     CONST_VTBL IDebugApplication32Vtbl* lpVtbl;
 };
@@ -7414,173 +6448,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugApplication32_SetName_Proxy(
-    IDebugApplication32* This,
-    LPCOLESTR pstrName);
-void __RPC_STUB IDebugApplication32_SetName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_StepOutComplete_Proxy(
-    IDebugApplication32* This);
-void __RPC_STUB IDebugApplication32_StepOutComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_DebugOutput_Proxy(
-    IDebugApplication32* This,
-    LPCOLESTR pstr);
-void __RPC_STUB IDebugApplication32_DebugOutput_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_StartDebugSession_Proxy(
-    IDebugApplication32* This);
-void __RPC_STUB IDebugApplication32_StartDebugSession_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_HandleBreakPoint_Proxy(
-    IDebugApplication32* This,
-    BREAKREASON br,
-    BREAKRESUMEACTION *pbra);
-void __RPC_STUB IDebugApplication32_HandleBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_Close_Proxy(
-    IDebugApplication32* This);
-void __RPC_STUB IDebugApplication32_Close_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_GetBreakFlags_Proxy(
-    IDebugApplication32* This,
-    APPBREAKFLAGS *pabf,
-    IRemoteDebugApplicationThread **pprdatSteppingThread);
-void __RPC_STUB IDebugApplication32_GetBreakFlags_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_GetCurrentThread_Proxy(
-    IDebugApplication32* This,
-    IDebugApplicationThread **pat);
-void __RPC_STUB IDebugApplication32_GetCurrentThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_CreateAsyncDebugOperation_Proxy(
-    IDebugApplication32* This,
-    IDebugSyncOperation *psdo,
-    IDebugAsyncOperation **ppado);
-void __RPC_STUB IDebugApplication32_CreateAsyncDebugOperation_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_AddStackFrameSniffer_Proxy(
-    IDebugApplication32* This,
-    IDebugStackFrameSniffer *pdsfs,
-    DWORD *pdwCookie);
-void __RPC_STUB IDebugApplication32_AddStackFrameSniffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_RemoveStackFrameSniffer_Proxy(
-    IDebugApplication32* This,
-    DWORD dwCookie);
-void __RPC_STUB IDebugApplication32_RemoveStackFrameSniffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_QueryCurrentThreadIsDebuggerThread_Proxy(
-    IDebugApplication32* This);
-void __RPC_STUB IDebugApplication32_QueryCurrentThreadIsDebuggerThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_SynchronousCallInDebuggerThread_Proxy(
-    IDebugApplication32* This,
-    IDebugThreadCall32 *pptc,
-    DWORD dwParam1,
-    DWORD dwParam2,
-    DWORD dwParam3);
-void __RPC_STUB IDebugApplication32_SynchronousCallInDebuggerThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_CreateApplicationNode_Proxy(
-    IDebugApplication32* This,
-    IDebugApplicationNode **ppdanNew);
-void __RPC_STUB IDebugApplication32_CreateApplicationNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_FireDebuggerEvent_Proxy(
-    IDebugApplication32* This,
-    REFGUID riid,
-    IUnknown *punk);
-void __RPC_STUB IDebugApplication32_FireDebuggerEvent_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_HandleRuntimeError_Proxy(
-    IDebugApplication32* This,
-    IActiveScriptErrorDebug *pErrorDebug,
-    IActiveScriptSite *pScriptSite,
-    BREAKRESUMEACTION *pbra,
-    ERRORRESUMEACTION *perra,
-    WINBOOL *pfCallOnScriptError);
-void __RPC_STUB IDebugApplication32_HandleRuntimeError_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-WINBOOL STDMETHODCALLTYPE IDebugApplication32_FCanJitDebug_Proxy(
-    IDebugApplication32* This);
-void __RPC_STUB IDebugApplication32_FCanJitDebug_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-WINBOOL STDMETHODCALLTYPE IDebugApplication32_FIsAutoJitDebugEnabled_Proxy(
-    IDebugApplication32* This);
-void __RPC_STUB IDebugApplication32_FIsAutoJitDebugEnabled_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_AddGlobalExpressionContextProvider_Proxy(
-    IDebugApplication32* This,
-    IProvideExpressionContexts *pdsfs,
-    DWORD *pdwCookie);
-void __RPC_STUB IDebugApplication32_AddGlobalExpressionContextProvider_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication32_RemoveGlobalExpressionContextProvider_Proxy(
-    IDebugApplication32* This,
-    DWORD dwCookie);
-void __RPC_STUB IDebugApplication32_RemoveGlobalExpressionContextProvider_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugApplication32_INTERFACE_DEFINED__ */
 
@@ -7678,39 +6545,39 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     /*** IRemoteDebugApplication methods ***/
     HRESULT (STDMETHODCALLTYPE *ResumeFromBreakPoint)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IRemoteDebugApplicationThread *prptFocus,
         BREAKRESUMEACTION bra,
         ERRORRESUMEACTION era);
 
     HRESULT (STDMETHODCALLTYPE *CauseBreak)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *ConnectDebugger)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IApplicationDebugger *pad);
 
     HRESULT (STDMETHODCALLTYPE *DisconnectDebugger)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *GetDebugger)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IApplicationDebugger **pad);
 
     HRESULT (STDMETHODCALLTYPE *CreateInstanceAtApplication)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         REFCLSID rclsid,
         IUnknown *pUnkOuter,
         DWORD dwClsContext,
@@ -7718,91 +6585,91 @@
         IUnknown **ppvObject);
 
     HRESULT (STDMETHODCALLTYPE *QueryAlive)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *EnumThreads)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IEnumRemoteDebugApplicationThreads **pperdat);
 
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetRootNode)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IDebugApplicationNode **ppdanRoot);
 
     HRESULT (STDMETHODCALLTYPE *EnumGlobalExpressionContexts)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IEnumDebugExpressionContexts **ppedec);
 
     /*** IDebugApplication64 methods ***/
     HRESULT (STDMETHODCALLTYPE *SetName)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         LPCOLESTR pstrName);
 
     HRESULT (STDMETHODCALLTYPE *StepOutComplete)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *DebugOutput)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         LPCOLESTR pstr);
 
     HRESULT (STDMETHODCALLTYPE *StartDebugSession)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *HandleBreakPoint)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         BREAKREASON br,
         BREAKRESUMEACTION *pbra);
 
     HRESULT (STDMETHODCALLTYPE *Close)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *GetBreakFlags)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         APPBREAKFLAGS *pabf,
         IRemoteDebugApplicationThread **pprdatSteppingThread);
 
     HRESULT (STDMETHODCALLTYPE *GetCurrentThread)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IDebugApplicationThread **pat);
 
     HRESULT (STDMETHODCALLTYPE *CreateAsyncDebugOperation)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IDebugSyncOperation *psdo,
         IDebugAsyncOperation **ppado);
 
     HRESULT (STDMETHODCALLTYPE *AddStackFrameSniffer)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IDebugStackFrameSniffer *pdsfs,
         DWORD *pdwCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveStackFrameSniffer)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         DWORD dwCookie);
 
     HRESULT (STDMETHODCALLTYPE *QueryCurrentThreadIsDebuggerThread)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *SynchronousCallInDebuggerThread)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IDebugThreadCall64 *pptc,
         DWORDLONG dwParam1,
         DWORDLONG dwParam2,
         DWORDLONG dwParam3);
 
     HRESULT (STDMETHODCALLTYPE *CreateApplicationNode)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IDebugApplicationNode **ppdanNew);
 
     HRESULT (STDMETHODCALLTYPE *FireDebuggerEvent)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         REFGUID riid,
         IUnknown *punk);
 
     HRESULT (STDMETHODCALLTYPE *HandleRuntimeError)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IActiveScriptErrorDebug *pErrorDebug,
         IActiveScriptSite *pScriptSite,
         BREAKRESUMEACTION *pbra,
@@ -7810,22 +6677,23 @@
         WINBOOL *pfCallOnScriptError);
 
     WINBOOL (STDMETHODCALLTYPE *FCanJitDebug)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     WINBOOL (STDMETHODCALLTYPE *FIsAutoJitDebugEnabled)(
-        IDebugApplication64* This);
+        IDebugApplication64 *This);
 
     HRESULT (STDMETHODCALLTYPE *AddGlobalExpressionContextProvider)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         IProvideExpressionContexts *pdsfs,
         DWORDLONG *pdwCookie);
 
     HRESULT (STDMETHODCALLTYPE *RemoveGlobalExpressionContextProvider)(
-        IDebugApplication64* This,
+        IDebugApplication64 *This,
         DWORDLONG dwCookie);
 
     END_INTERFACE
 } IDebugApplication64Vtbl;
+
 interface IDebugApplication64 {
     CONST_VTBL IDebugApplication64Vtbl* lpVtbl;
 };
@@ -7980,173 +6848,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugApplication64_SetName_Proxy(
-    IDebugApplication64* This,
-    LPCOLESTR pstrName);
-void __RPC_STUB IDebugApplication64_SetName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_StepOutComplete_Proxy(
-    IDebugApplication64* This);
-void __RPC_STUB IDebugApplication64_StepOutComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_DebugOutput_Proxy(
-    IDebugApplication64* This,
-    LPCOLESTR pstr);
-void __RPC_STUB IDebugApplication64_DebugOutput_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_StartDebugSession_Proxy(
-    IDebugApplication64* This);
-void __RPC_STUB IDebugApplication64_StartDebugSession_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_HandleBreakPoint_Proxy(
-    IDebugApplication64* This,
-    BREAKREASON br,
-    BREAKRESUMEACTION *pbra);
-void __RPC_STUB IDebugApplication64_HandleBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_Close_Proxy(
-    IDebugApplication64* This);
-void __RPC_STUB IDebugApplication64_Close_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_GetBreakFlags_Proxy(
-    IDebugApplication64* This,
-    APPBREAKFLAGS *pabf,
-    IRemoteDebugApplicationThread **pprdatSteppingThread);
-void __RPC_STUB IDebugApplication64_GetBreakFlags_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_GetCurrentThread_Proxy(
-    IDebugApplication64* This,
-    IDebugApplicationThread **pat);
-void __RPC_STUB IDebugApplication64_GetCurrentThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_CreateAsyncDebugOperation_Proxy(
-    IDebugApplication64* This,
-    IDebugSyncOperation *psdo,
-    IDebugAsyncOperation **ppado);
-void __RPC_STUB IDebugApplication64_CreateAsyncDebugOperation_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_AddStackFrameSniffer_Proxy(
-    IDebugApplication64* This,
-    IDebugStackFrameSniffer *pdsfs,
-    DWORD *pdwCookie);
-void __RPC_STUB IDebugApplication64_AddStackFrameSniffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_RemoveStackFrameSniffer_Proxy(
-    IDebugApplication64* This,
-    DWORD dwCookie);
-void __RPC_STUB IDebugApplication64_RemoveStackFrameSniffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_QueryCurrentThreadIsDebuggerThread_Proxy(
-    IDebugApplication64* This);
-void __RPC_STUB IDebugApplication64_QueryCurrentThreadIsDebuggerThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_SynchronousCallInDebuggerThread_Proxy(
-    IDebugApplication64* This,
-    IDebugThreadCall64 *pptc,
-    DWORDLONG dwParam1,
-    DWORDLONG dwParam2,
-    DWORDLONG dwParam3);
-void __RPC_STUB IDebugApplication64_SynchronousCallInDebuggerThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_CreateApplicationNode_Proxy(
-    IDebugApplication64* This,
-    IDebugApplicationNode **ppdanNew);
-void __RPC_STUB IDebugApplication64_CreateApplicationNode_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_FireDebuggerEvent_Proxy(
-    IDebugApplication64* This,
-    REFGUID riid,
-    IUnknown *punk);
-void __RPC_STUB IDebugApplication64_FireDebuggerEvent_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_HandleRuntimeError_Proxy(
-    IDebugApplication64* This,
-    IActiveScriptErrorDebug *pErrorDebug,
-    IActiveScriptSite *pScriptSite,
-    BREAKRESUMEACTION *pbra,
-    ERRORRESUMEACTION *perra,
-    WINBOOL *pfCallOnScriptError);
-void __RPC_STUB IDebugApplication64_HandleRuntimeError_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-WINBOOL STDMETHODCALLTYPE IDebugApplication64_FCanJitDebug_Proxy(
-    IDebugApplication64* This);
-void __RPC_STUB IDebugApplication64_FCanJitDebug_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-WINBOOL STDMETHODCALLTYPE IDebugApplication64_FIsAutoJitDebugEnabled_Proxy(
-    IDebugApplication64* This);
-void __RPC_STUB IDebugApplication64_FIsAutoJitDebugEnabled_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_AddGlobalExpressionContextProvider_Proxy(
-    IDebugApplication64* This,
-    IProvideExpressionContexts *pdsfs,
-    DWORDLONG *pdwCookie);
-void __RPC_STUB IDebugApplication64_AddGlobalExpressionContextProvider_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplication64_RemoveGlobalExpressionContextProvider_Proxy(
-    IDebugApplication64* This,
-    DWORDLONG dwCookie);
-void __RPC_STUB IDebugApplication64_RemoveGlobalExpressionContextProvider_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugApplication64_INTERFACE_DEFINED__ */
 
@@ -8202,58 +6903,59 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRemoteDebugApplicationEvents* This);
+        IRemoteDebugApplicationEvents *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRemoteDebugApplicationEvents* This);
+        IRemoteDebugApplicationEvents *This);
 
     /*** IRemoteDebugApplicationEvents methods ***/
     HRESULT (STDMETHODCALLTYPE *OnConnectDebugger)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         IApplicationDebugger *pad);
 
     HRESULT (STDMETHODCALLTYPE *OnDisconnectDebugger)(
-        IRemoteDebugApplicationEvents* This);
+        IRemoteDebugApplicationEvents *This);
 
     HRESULT (STDMETHODCALLTYPE *OnSetName)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         LPCOLESTR pstrName);
 
     HRESULT (STDMETHODCALLTYPE *OnDebugOutput)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         LPCOLESTR pstr);
 
     HRESULT (STDMETHODCALLTYPE *OnClose)(
-        IRemoteDebugApplicationEvents* This);
+        IRemoteDebugApplicationEvents *This);
 
     HRESULT (STDMETHODCALLTYPE *OnEnterBreakPoint)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         IRemoteDebugApplicationThread *prdat);
 
     HRESULT (STDMETHODCALLTYPE *OnLeaveBreakPoint)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         IRemoteDebugApplicationThread *prdat);
 
     HRESULT (STDMETHODCALLTYPE *OnCreateThread)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         IRemoteDebugApplicationThread *prdat);
 
     HRESULT (STDMETHODCALLTYPE *OnDestroyThread)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         IRemoteDebugApplicationThread *prdat);
 
     HRESULT (STDMETHODCALLTYPE *OnBreakFlagChange)(
-        IRemoteDebugApplicationEvents* This,
+        IRemoteDebugApplicationEvents *This,
         APPBREAKFLAGS abf,
         IRemoteDebugApplicationThread *prdatSteppingThread);
 
     END_INTERFACE
 } IRemoteDebugApplicationEventsVtbl;
+
 interface IRemoteDebugApplicationEvents {
     CONST_VTBL IRemoteDebugApplicationEventsVtbl* lpVtbl;
 };
@@ -8322,85 +7024,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnConnectDebugger_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    IApplicationDebugger *pad);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnConnectDebugger_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnDisconnectDebugger_Proxy(
-    IRemoteDebugApplicationEvents* This);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnDisconnectDebugger_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnSetName_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    LPCOLESTR pstrName);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnSetName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnDebugOutput_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    LPCOLESTR pstr);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnDebugOutput_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnClose_Proxy(
-    IRemoteDebugApplicationEvents* This);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnClose_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnEnterBreakPoint_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    IRemoteDebugApplicationThread *prdat);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnEnterBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnLeaveBreakPoint_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    IRemoteDebugApplicationThread *prdat);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnLeaveBreakPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnCreateThread_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    IRemoteDebugApplicationThread *prdat);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnCreateThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnDestroyThread_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    IRemoteDebugApplicationThread *prdat);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnDestroyThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationEvents_OnBreakFlagChange_Proxy(
-    IRemoteDebugApplicationEvents* This,
-    APPBREAKFLAGS abf,
-    IRemoteDebugApplicationThread *prdatSteppingThread);
-void __RPC_STUB IRemoteDebugApplicationEvents_OnBreakFlagChange_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRemoteDebugApplicationEvents_INTERFACE_DEFINED__ */
 
@@ -8443,56 +7066,57 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugApplicationNode* This);
+        IDebugApplicationNode *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugApplicationNode* This);
+        IDebugApplicationNode *This);
 
     /*** IDebugDocumentInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetName)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         DOCUMENTNAMETYPE dnt,
         BSTR *pbstrName);
 
     HRESULT (STDMETHODCALLTYPE *GetDocumentClassId)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         CLSID *pclsidDocument);
 
     /*** IDebugDocumentProvider methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDocument)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         IDebugDocument **ppssd);
 
     /*** IDebugApplicationNode methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumChildren)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         IEnumDebugApplicationNodes **pperddp);
 
     HRESULT (STDMETHODCALLTYPE *GetParent)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         IDebugApplicationNode **pprddp);
 
     HRESULT (STDMETHODCALLTYPE *SetDocumentProvider)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         IDebugDocumentProvider *pddp);
 
     HRESULT (STDMETHODCALLTYPE *Close)(
-        IDebugApplicationNode* This);
+        IDebugApplicationNode *This);
 
     HRESULT (STDMETHODCALLTYPE *Attach)(
-        IDebugApplicationNode* This,
+        IDebugApplicationNode *This,
         IDebugApplicationNode *pdanParent);
 
     HRESULT (STDMETHODCALLTYPE *Detach)(
-        IDebugApplicationNode* This);
+        IDebugApplicationNode *This);
 
     END_INTERFACE
 } IDebugApplicationNodeVtbl;
+
 interface IDebugApplicationNode {
     CONST_VTBL IDebugApplicationNodeVtbl* lpVtbl;
 };
@@ -8561,52 +7185,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugApplicationNode_EnumChildren_Proxy(
-    IDebugApplicationNode* This,
-    IEnumDebugApplicationNodes **pperddp);
-void __RPC_STUB IDebugApplicationNode_EnumChildren_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNode_GetParent_Proxy(
-    IDebugApplicationNode* This,
-    IDebugApplicationNode **pprddp);
-void __RPC_STUB IDebugApplicationNode_GetParent_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNode_SetDocumentProvider_Proxy(
-    IDebugApplicationNode* This,
-    IDebugDocumentProvider *pddp);
-void __RPC_STUB IDebugApplicationNode_SetDocumentProvider_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNode_Close_Proxy(
-    IDebugApplicationNode* This);
-void __RPC_STUB IDebugApplicationNode_Close_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNode_Attach_Proxy(
-    IDebugApplicationNode* This,
-    IDebugApplicationNode *pdanParent);
-void __RPC_STUB IDebugApplicationNode_Attach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNode_Detach_Proxy(
-    IDebugApplicationNode* This);
-void __RPC_STUB IDebugApplicationNode_Detach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugApplicationNode_INTERFACE_DEFINED__ */
 
@@ -8643,34 +7221,35 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugApplicationNodeEvents* This,
+        IDebugApplicationNodeEvents *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugApplicationNodeEvents* This);
+        IDebugApplicationNodeEvents *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugApplicationNodeEvents* This);
+        IDebugApplicationNodeEvents *This);
 
     /*** IDebugApplicationNodeEvents methods ***/
     HRESULT (STDMETHODCALLTYPE *onAddChild)(
-        IDebugApplicationNodeEvents* This,
+        IDebugApplicationNodeEvents *This,
         IDebugApplicationNode *prddpChild);
 
     HRESULT (STDMETHODCALLTYPE *onRemoveChild)(
-        IDebugApplicationNodeEvents* This,
+        IDebugApplicationNodeEvents *This,
         IDebugApplicationNode *prddpChild);
 
     HRESULT (STDMETHODCALLTYPE *onDetach)(
-        IDebugApplicationNodeEvents* This);
+        IDebugApplicationNodeEvents *This);
 
     HRESULT (STDMETHODCALLTYPE *onAttach)(
-        IDebugApplicationNodeEvents* This,
+        IDebugApplicationNodeEvents *This,
         IDebugApplicationNode *prddpParent);
 
     END_INTERFACE
 } IDebugApplicationNodeEventsVtbl;
+
 interface IDebugApplicationNodeEvents {
     CONST_VTBL IDebugApplicationNodeEventsVtbl* lpVtbl;
 };
@@ -8715,37 +7294,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugApplicationNodeEvents_onAddChild_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpChild);
-void __RPC_STUB IDebugApplicationNodeEvents_onAddChild_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNodeEvents_onRemoveChild_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpChild);
-void __RPC_STUB IDebugApplicationNodeEvents_onRemoveChild_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNodeEvents_onDetach_Proxy(
-    IDebugApplicationNodeEvents* This);
-void __RPC_STUB IDebugApplicationNodeEvents_onDetach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationNodeEvents_onAttach_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpParent);
-void __RPC_STUB IDebugApplicationNodeEvents_onAttach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugApplicationNodeEvents_INTERFACE_DEFINED__ */
 
@@ -8760,25 +7308,25 @@
 MIDL_INTERFACE("a2e3aa3b-aa8d-4ebf-84cd-648b737b8c13")
 AsyncIDebugApplicationNodeEvents : public IUnknown
 {
-    virtual void STDMETHODCALLTYPE Begin_onAddChild(
+    virtual HRESULT STDMETHODCALLTYPE Begin_onAddChild(
         IDebugApplicationNode *prddpChild) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_onAddChild(
         ) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_onRemoveChild(
+    virtual HRESULT STDMETHODCALLTYPE Begin_onRemoveChild(
         IDebugApplicationNode *prddpChild) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_onRemoveChild(
         ) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_onDetach(
+    virtual HRESULT STDMETHODCALLTYPE Begin_onDetach(
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_onDetach(
         ) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_onAttach(
+    virtual HRESULT STDMETHODCALLTYPE Begin_onAttach(
         IDebugApplicationNode *prddpParent) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_onAttach(
@@ -8794,46 +7342,47 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        AsyncIDebugApplicationNodeEvents* This,
+        AsyncIDebugApplicationNodeEvents *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        AsyncIDebugApplicationNodeEvents* This);
+        AsyncIDebugApplicationNodeEvents *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        AsyncIDebugApplicationNodeEvents* This);
+        AsyncIDebugApplicationNodeEvents *This);
 
-    /*** IDebugApplicationNodeEvents methods ***/
-    void (STDMETHODCALLTYPE *Begin_onAddChild)(
-        AsyncIDebugApplicationNodeEvents* This,
+    /*** AsyncIDebugApplicationNodeEvents methods ***/
+    HRESULT (STDMETHODCALLTYPE *Begin_onAddChild)(
+        AsyncIDebugApplicationNodeEvents *This,
         IDebugApplicationNode *prddpChild);
 
     HRESULT (STDMETHODCALLTYPE *Finish_onAddChild)(
-        AsyncIDebugApplicationNodeEvents* This);
+        AsyncIDebugApplicationNodeEvents *This);
 
-    void (STDMETHODCALLTYPE *Begin_onRemoveChild)(
-        AsyncIDebugApplicationNodeEvents* This,
+    HRESULT (STDMETHODCALLTYPE *Begin_onRemoveChild)(
+        AsyncIDebugApplicationNodeEvents *This,
         IDebugApplicationNode *prddpChild);
 
     HRESULT (STDMETHODCALLTYPE *Finish_onRemoveChild)(
-        AsyncIDebugApplicationNodeEvents* This);
+        AsyncIDebugApplicationNodeEvents *This);
 
-    void (STDMETHODCALLTYPE *Begin_onDetach)(
-        AsyncIDebugApplicationNodeEvents* This);
+    HRESULT (STDMETHODCALLTYPE *Begin_onDetach)(
+        AsyncIDebugApplicationNodeEvents *This);
 
     HRESULT (STDMETHODCALLTYPE *Finish_onDetach)(
-        AsyncIDebugApplicationNodeEvents* This);
+        AsyncIDebugApplicationNodeEvents *This);
 
-    void (STDMETHODCALLTYPE *Begin_onAttach)(
-        AsyncIDebugApplicationNodeEvents* This,
+    HRESULT (STDMETHODCALLTYPE *Begin_onAttach)(
+        AsyncIDebugApplicationNodeEvents *This,
         IDebugApplicationNode *prddpParent);
 
     HRESULT (STDMETHODCALLTYPE *Finish_onAttach)(
-        AsyncIDebugApplicationNodeEvents* This);
+        AsyncIDebugApplicationNodeEvents *This);
 
     END_INTERFACE
 } AsyncIDebugApplicationNodeEventsVtbl;
+
 interface AsyncIDebugApplicationNodeEvents {
     CONST_VTBL AsyncIDebugApplicationNodeEventsVtbl* lpVtbl;
 };
@@ -8844,7 +7393,7 @@
 #define AsyncIDebugApplicationNodeEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define AsyncIDebugApplicationNodeEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define AsyncIDebugApplicationNodeEvents_Release(This) (This)->lpVtbl->Release(This)
-/*** IDebugApplicationNodeEvents methods ***/
+/*** AsyncIDebugApplicationNodeEvents methods ***/
 #define AsyncIDebugApplicationNodeEvents_Begin_onAddChild(This,prddpChild) (This)->lpVtbl->Begin_onAddChild(This,prddpChild)
 #define AsyncIDebugApplicationNodeEvents_Finish_onAddChild(This) (This)->lpVtbl->Finish_onAddChild(This)
 #define AsyncIDebugApplicationNodeEvents_Begin_onRemoveChild(This,prddpChild) (This)->lpVtbl->Begin_onRemoveChild(This,prddpChild)
@@ -8864,29 +7413,29 @@
 static FORCEINLINE ULONG AsyncIDebugApplicationNodeEvents_Release(AsyncIDebugApplicationNodeEvents* This) {
     return This->lpVtbl->Release(This);
 }
-/*** IDebugApplicationNodeEvents methods ***/
-static FORCEINLINE void Begin_AsyncIDebugApplicationNodeEvents_onAddChild(AsyncIDebugApplicationNodeEvents* This,IDebugApplicationNode *prddpChild) {
-    This->lpVtbl->Begin_onAddChild(This,prddpChild);
+/*** AsyncIDebugApplicationNodeEvents methods ***/
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Begin_onAddChild(AsyncIDebugApplicationNodeEvents* This,IDebugApplicationNode *prddpChild) {
+    return This->lpVtbl->Begin_onAddChild(This,prddpChild);
 }
-static FORCEINLINE HRESULT Finish_AsyncIDebugApplicationNodeEvents_onAddChild(AsyncIDebugApplicationNodeEvents* This) {
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Finish_onAddChild(AsyncIDebugApplicationNodeEvents* This) {
     return This->lpVtbl->Finish_onAddChild(This);
 }
-static FORCEINLINE void Begin_AsyncIDebugApplicationNodeEvents_onRemoveChild(AsyncIDebugApplicationNodeEvents* This,IDebugApplicationNode *prddpChild) {
-    This->lpVtbl->Begin_onRemoveChild(This,prddpChild);
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Begin_onRemoveChild(AsyncIDebugApplicationNodeEvents* This,IDebugApplicationNode *prddpChild) {
+    return This->lpVtbl->Begin_onRemoveChild(This,prddpChild);
 }
-static FORCEINLINE HRESULT Finish_AsyncIDebugApplicationNodeEvents_onRemoveChild(AsyncIDebugApplicationNodeEvents* This) {
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Finish_onRemoveChild(AsyncIDebugApplicationNodeEvents* This) {
     return This->lpVtbl->Finish_onRemoveChild(This);
 }
-static FORCEINLINE void Begin_AsyncIDebugApplicationNodeEvents_onDetach(AsyncIDebugApplicationNodeEvents* This) {
-    This->lpVtbl->Begin_onDetach(This);
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Begin_onDetach(AsyncIDebugApplicationNodeEvents* This) {
+    return This->lpVtbl->Begin_onDetach(This);
 }
-static FORCEINLINE HRESULT Finish_AsyncIDebugApplicationNodeEvents_onDetach(AsyncIDebugApplicationNodeEvents* This) {
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Finish_onDetach(AsyncIDebugApplicationNodeEvents* This) {
     return This->lpVtbl->Finish_onDetach(This);
 }
-static FORCEINLINE void Begin_AsyncIDebugApplicationNodeEvents_onAttach(AsyncIDebugApplicationNodeEvents* This,IDebugApplicationNode *prddpParent) {
-    This->lpVtbl->Begin_onAttach(This,prddpParent);
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Begin_onAttach(AsyncIDebugApplicationNodeEvents* This,IDebugApplicationNode *prddpParent) {
+    return This->lpVtbl->Begin_onAttach(This,prddpParent);
 }
-static FORCEINLINE HRESULT Finish_AsyncIDebugApplicationNodeEvents_onAttach(AsyncIDebugApplicationNodeEvents* This) {
+static FORCEINLINE HRESULT AsyncIDebugApplicationNodeEvents_Finish_onAttach(AsyncIDebugApplicationNodeEvents* This) {
     return This->lpVtbl->Finish_onAttach(This);
 }
 #endif
@@ -8894,68 +7443,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Begin_onAddChild_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpChild);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Begin_onAddChild_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Finish_onAddChild_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpChild);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Finish_onAddChild_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Begin_onRemoveChild_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpChild);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Begin_onRemoveChild_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Finish_onRemoveChild_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpChild);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Finish_onRemoveChild_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Begin_onDetach_Proxy(
-    IDebugApplicationNodeEvents* This);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Begin_onDetach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Finish_onDetach_Proxy(
-    IDebugApplicationNodeEvents* This);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Finish_onDetach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Begin_onAttach_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpParent);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Begin_onAttach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIDebugApplicationNodeEvents_Finish_onAttach_Proxy(
-    IDebugApplicationNodeEvents* This,
-    IDebugApplicationNode *prddpParent);
-void __RPC_STUB AsyncIDebugApplicationNodeEvents_Finish_onAttach_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __AsyncIDebugApplicationNodeEvents_INTERFACE_DEFINED__ */
 
@@ -8985,25 +7472,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugThreadCall32* This,
+        IDebugThreadCall32 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugThreadCall32* This);
+        IDebugThreadCall32 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugThreadCall32* This);
+        IDebugThreadCall32 *This);
 
     /*** IDebugThreadCall32 methods ***/
     HRESULT (STDMETHODCALLTYPE *ThreadCallHandler)(
-        IDebugThreadCall32* This,
+        IDebugThreadCall32 *This,
         DWORD dwParam1,
         DWORD dwParam2,
         DWORD dwParam3);
 
     END_INTERFACE
 } IDebugThreadCall32Vtbl;
+
 interface IDebugThreadCall32 {
     CONST_VTBL IDebugThreadCall32Vtbl* lpVtbl;
 };
@@ -9036,16 +7524,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugThreadCall32_ThreadCallHandler_Proxy(
-    IDebugThreadCall32* This,
-    DWORD dwParam1,
-    DWORD dwParam2,
-    DWORD dwParam3);
-void __RPC_STUB IDebugThreadCall32_ThreadCallHandler_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugThreadCall32_INTERFACE_DEFINED__ */
 
@@ -9075,25 +7553,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugThreadCall64* This,
+        IDebugThreadCall64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugThreadCall64* This);
+        IDebugThreadCall64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugThreadCall64* This);
+        IDebugThreadCall64 *This);
 
     /*** IDebugThreadCall64 methods ***/
     HRESULT (STDMETHODCALLTYPE *ThreadCallHandler)(
-        IDebugThreadCall64* This,
+        IDebugThreadCall64 *This,
         DWORDLONG dwParam1,
         DWORDLONG dwParam2,
         DWORDLONG dwParam3);
 
     END_INTERFACE
 } IDebugThreadCall64Vtbl;
+
 interface IDebugThreadCall64 {
     CONST_VTBL IDebugThreadCall64Vtbl* lpVtbl;
 };
@@ -9126,16 +7605,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugThreadCall64_ThreadCallHandler_Proxy(
-    IDebugThreadCall64* This,
-    DWORDLONG dwParam1,
-    DWORDLONG dwParam2,
-    DWORDLONG dwParam3);
-void __RPC_STUB IDebugThreadCall64_ThreadCallHandler_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugThreadCall64_INTERFACE_DEFINED__ */
 
@@ -9198,57 +7667,58 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRemoteDebugApplicationThread* This);
+        IRemoteDebugApplicationThread *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRemoteDebugApplicationThread* This);
+        IRemoteDebugApplicationThread *This);
 
     /*** IRemoteDebugApplicationThread methods ***/
     HRESULT (STDMETHODCALLTYPE *GetSystemThreadId)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         DWORD *dwThreadId);
 
     HRESULT (STDMETHODCALLTYPE *GetApplication)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         IRemoteDebugApplication **pprda);
 
     HRESULT (STDMETHODCALLTYPE *EnumStackFrames)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         IEnumDebugStackFrames **ppedsf);
 
     HRESULT (STDMETHODCALLTYPE *GetDescription)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         BSTR *pbstrDescription,
         BSTR *pbstrState);
 
     HRESULT (STDMETHODCALLTYPE *SetNextStatement)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         IDebugStackFrame *pStackFrame,
         IDebugCodeContext *pCodeContext);
 
     HRESULT (STDMETHODCALLTYPE *GetState)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         DWORD *pState);
 
     HRESULT (STDMETHODCALLTYPE *Suspend)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         DWORD *pdwCount);
 
     HRESULT (STDMETHODCALLTYPE *Resume)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         DWORD *pdwCount);
 
     HRESULT (STDMETHODCALLTYPE *GetSuspendCount)(
-        IRemoteDebugApplicationThread* This,
+        IRemoteDebugApplicationThread *This,
         DWORD *pdwCount);
 
     END_INTERFACE
 } IRemoteDebugApplicationThreadVtbl;
+
 interface IRemoteDebugApplicationThread {
     CONST_VTBL IRemoteDebugApplicationThreadVtbl* lpVtbl;
 };
@@ -9313,80 +7783,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_GetSystemThreadId_Proxy(
-    IRemoteDebugApplicationThread* This,
-    DWORD *dwThreadId);
-void __RPC_STUB IRemoteDebugApplicationThread_GetSystemThreadId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_GetApplication_Proxy(
-    IRemoteDebugApplicationThread* This,
-    IRemoteDebugApplication **pprda);
-void __RPC_STUB IRemoteDebugApplicationThread_GetApplication_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_EnumStackFrames_Proxy(
-    IRemoteDebugApplicationThread* This,
-    IEnumDebugStackFrames **ppedsf);
-void __RPC_STUB IRemoteDebugApplicationThread_EnumStackFrames_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_GetDescription_Proxy(
-    IRemoteDebugApplicationThread* This,
-    BSTR *pbstrDescription,
-    BSTR *pbstrState);
-void __RPC_STUB IRemoteDebugApplicationThread_GetDescription_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_SetNextStatement_Proxy(
-    IRemoteDebugApplicationThread* This,
-    IDebugStackFrame *pStackFrame,
-    IDebugCodeContext *pCodeContext);
-void __RPC_STUB IRemoteDebugApplicationThread_SetNextStatement_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_GetState_Proxy(
-    IRemoteDebugApplicationThread* This,
-    DWORD *pState);
-void __RPC_STUB IRemoteDebugApplicationThread_GetState_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_Suspend_Proxy(
-    IRemoteDebugApplicationThread* This,
-    DWORD *pdwCount);
-void __RPC_STUB IRemoteDebugApplicationThread_Suspend_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_Resume_Proxy(
-    IRemoteDebugApplicationThread* This,
-    DWORD *pdwCount);
-void __RPC_STUB IRemoteDebugApplicationThread_Resume_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRemoteDebugApplicationThread_GetSuspendCount_Proxy(
-    IRemoteDebugApplicationThread* This,
-    DWORD *pdwCount);
-void __RPC_STUB IRemoteDebugApplicationThread_GetSuspendCount_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRemoteDebugApplicationThread_INTERFACE_DEFINED__ */
 
@@ -9429,79 +7825,80 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugApplicationThread* This);
+        IDebugApplicationThread *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugApplicationThread* This);
+        IDebugApplicationThread *This);
 
     /*** IRemoteDebugApplicationThread methods ***/
     HRESULT (STDMETHODCALLTYPE *GetSystemThreadId)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         DWORD *dwThreadId);
 
     HRESULT (STDMETHODCALLTYPE *GetApplication)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         IRemoteDebugApplication **pprda);
 
     HRESULT (STDMETHODCALLTYPE *EnumStackFrames)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         IEnumDebugStackFrames **ppedsf);
 
     HRESULT (STDMETHODCALLTYPE *GetDescription)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         BSTR *pbstrDescription,
         BSTR *pbstrState);
 
     HRESULT (STDMETHODCALLTYPE *SetNextStatement)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         IDebugStackFrame *pStackFrame,
         IDebugCodeContext *pCodeContext);
 
     HRESULT (STDMETHODCALLTYPE *GetState)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         DWORD *pState);
 
     HRESULT (STDMETHODCALLTYPE *Suspend)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         DWORD *pdwCount);
 
     HRESULT (STDMETHODCALLTYPE *Resume)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         DWORD *pdwCount);
 
     HRESULT (STDMETHODCALLTYPE *GetSuspendCount)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         DWORD *pdwCount);
 
     /*** IDebugApplicationThread methods ***/
     HRESULT (STDMETHODCALLTYPE *SynchronousCallIntoThread32)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         IDebugThreadCall32 *pstcb,
         DWORD dwParam1,
         DWORD dwParam2,
         DWORD dwParam3);
 
     HRESULT (STDMETHODCALLTYPE *QueryIsCurrentThread)(
-        IDebugApplicationThread* This);
+        IDebugApplicationThread *This);
 
     HRESULT (STDMETHODCALLTYPE *QueryIsDebuggerThread)(
-        IDebugApplicationThread* This);
+        IDebugApplicationThread *This);
 
     HRESULT (STDMETHODCALLTYPE *SetDescription)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         LPCOLESTR pstrDescription);
 
     HRESULT (STDMETHODCALLTYPE *SetStateString)(
-        IDebugApplicationThread* This,
+        IDebugApplicationThread *This,
         LPCOLESTR pstrState);
 
     END_INTERFACE
 } IDebugApplicationThreadVtbl;
+
 interface IDebugApplicationThread {
     CONST_VTBL IDebugApplicationThreadVtbl* lpVtbl;
 };
@@ -9588,47 +7985,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugApplicationThread_SynchronousCallIntoThread32_Proxy(
-    IDebugApplicationThread* This,
-    IDebugThreadCall32 *pstcb,
-    DWORD dwParam1,
-    DWORD dwParam2,
-    DWORD dwParam3);
-void __RPC_STUB IDebugApplicationThread_SynchronousCallIntoThread32_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationThread_QueryIsCurrentThread_Proxy(
-    IDebugApplicationThread* This);
-void __RPC_STUB IDebugApplicationThread_QueryIsCurrentThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationThread_QueryIsDebuggerThread_Proxy(
-    IDebugApplicationThread* This);
-void __RPC_STUB IDebugApplicationThread_QueryIsDebuggerThread_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationThread_SetDescription_Proxy(
-    IDebugApplicationThread* This,
-    LPCOLESTR pstrDescription);
-void __RPC_STUB IDebugApplicationThread_SetDescription_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugApplicationThread_SetStateString_Proxy(
-    IDebugApplicationThread* This,
-    LPCOLESTR pstrState);
-void __RPC_STUB IDebugApplicationThread_SetStateString_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugApplicationThread_INTERFACE_DEFINED__ */
 
@@ -9659,80 +8015,80 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugApplicationThread64* This);
+        IDebugApplicationThread64 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugApplicationThread64* This);
+        IDebugApplicationThread64 *This);
 
     /*** IRemoteDebugApplicationThread methods ***/
     HRESULT (STDMETHODCALLTYPE *GetSystemThreadId)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         DWORD *dwThreadId);
 
     HRESULT (STDMETHODCALLTYPE *GetApplication)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         IRemoteDebugApplication **pprda);
 
     HRESULT (STDMETHODCALLTYPE *EnumStackFrames)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         IEnumDebugStackFrames **ppedsf);
 
     HRESULT (STDMETHODCALLTYPE *GetDescription)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         BSTR *pbstrDescription,
         BSTR *pbstrState);
 
     HRESULT (STDMETHODCALLTYPE *SetNextStatement)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         IDebugStackFrame *pStackFrame,
         IDebugCodeContext *pCodeContext);
 
     HRESULT (STDMETHODCALLTYPE *GetState)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         DWORD *pState);
 
     HRESULT (STDMETHODCALLTYPE *Suspend)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         DWORD *pdwCount);
 
     HRESULT (STDMETHODCALLTYPE *Resume)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         DWORD *pdwCount);
 
     HRESULT (STDMETHODCALLTYPE *GetSuspendCount)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         DWORD *pdwCount);
 
     /*** IDebugApplicationThread methods ***/
     HRESULT (STDMETHODCALLTYPE *SynchronousCallIntoThread32)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         IDebugThreadCall32 *pstcb,
         DWORD dwParam1,
         DWORD dwParam2,
         DWORD dwParam3);
 
     HRESULT (STDMETHODCALLTYPE *QueryIsCurrentThread)(
-        IDebugApplicationThread64* This);
+        IDebugApplicationThread64 *This);
 
     HRESULT (STDMETHODCALLTYPE *QueryIsDebuggerThread)(
-        IDebugApplicationThread64* This);
+        IDebugApplicationThread64 *This);
 
     HRESULT (STDMETHODCALLTYPE *SetDescription)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         LPCOLESTR pstrDescription);
 
     HRESULT (STDMETHODCALLTYPE *SetStateString)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         LPCOLESTR pstrState);
 
     /*** IDebugApplicationThread64 methods ***/
     HRESULT (STDMETHODCALLTYPE *SynchronousCallIntoThread64)(
-        IDebugApplicationThread64* This,
+        IDebugApplicationThread64 *This,
         IDebugThreadCall64 *pstcb,
         DWORDLONG dwParam1,
         DWORDLONG dwParam2,
@@ -9740,6 +8096,7 @@
 
     END_INTERFACE
 } IDebugApplicationThread64Vtbl;
+
 interface IDebugApplicationThread64 {
     CONST_VTBL IDebugApplicationThread64Vtbl* lpVtbl;
 };
@@ -9832,17 +8189,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugApplicationThread64_SynchronousCallIntoThread64_Proxy(
-    IDebugApplicationThread64* This,
-    IDebugThreadCall64 *pstcb,
-    DWORDLONG dwParam1,
-    DWORDLONG dwParam2,
-    DWORDLONG dwParam3);
-void __RPC_STUB IDebugApplicationThread64_SynchronousCallIntoThread64_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugApplicationThread64_INTERFACE_DEFINED__ */
 
@@ -9870,23 +8216,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugCookie* This,
+        IDebugCookie *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugCookie* This);
+        IDebugCookie *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugCookie* This);
+        IDebugCookie *This);
 
     /*** IDebugCookie methods ***/
     HRESULT (STDMETHODCALLTYPE *SetDebugCookie)(
-        IDebugCookie* This,
+        IDebugCookie *This,
         DWORD dwDebugAppCookie);
 
     END_INTERFACE
 } IDebugCookieVtbl;
+
 interface IDebugCookie {
     CONST_VTBL IDebugCookieVtbl* lpVtbl;
 };
@@ -9919,14 +8266,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugCookie_SetDebugCookie_Proxy(
-    IDebugCookie* This,
-    DWORD dwDebugAppCookie);
-void __RPC_STUB IDebugCookie_SetDebugCookie_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugCookie_INTERFACE_DEFINED__ */
 
@@ -9965,36 +8304,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumDebugApplicationNodes* This,
+        IEnumDebugApplicationNodes *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumDebugApplicationNodes* This);
+        IEnumDebugApplicationNodes *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumDebugApplicationNodes* This);
+        IEnumDebugApplicationNodes *This);
 
     /*** IEnumDebugApplicationNodes methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumDebugApplicationNodes* This,
+        IEnumDebugApplicationNodes *This,
         ULONG celt,
         IDebugApplicationNode **pprddp,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumDebugApplicationNodes* This,
+        IEnumDebugApplicationNodes *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumDebugApplicationNodes* This);
+        IEnumDebugApplicationNodes *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumDebugApplicationNodes* This,
+        IEnumDebugApplicationNodes *This,
         IEnumDebugApplicationNodes **pperddp);
 
     END_INTERFACE
 } IEnumDebugApplicationNodesVtbl;
+
 interface IEnumDebugApplicationNodes {
     CONST_VTBL IEnumDebugApplicationNodesVtbl* lpVtbl;
 };
@@ -10049,29 +8389,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugApplicationNodes_Skip_Proxy(
-    IEnumDebugApplicationNodes* This,
-    ULONG celt);
-void __RPC_STUB IEnumDebugApplicationNodes_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugApplicationNodes_Reset_Proxy(
-    IEnumDebugApplicationNodes* This);
-void __RPC_STUB IEnumDebugApplicationNodes_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugApplicationNodes_Clone_Proxy(
-    IEnumDebugApplicationNodes* This,
-    IEnumDebugApplicationNodes **pperddp);
-void __RPC_STUB IEnumDebugApplicationNodes_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumDebugApplicationNodes_Next_Proxy(
     IEnumDebugApplicationNodes* This,
     ULONG celt,
@@ -10120,36 +8437,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumRemoteDebugApplications* This,
+        IEnumRemoteDebugApplications *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumRemoteDebugApplications* This);
+        IEnumRemoteDebugApplications *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumRemoteDebugApplications* This);
+        IEnumRemoteDebugApplications *This);
 
     /*** IEnumRemoteDebugApplications methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumRemoteDebugApplications* This,
+        IEnumRemoteDebugApplications *This,
         ULONG celt,
         IRemoteDebugApplication **ppda,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumRemoteDebugApplications* This,
+        IEnumRemoteDebugApplications *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumRemoteDebugApplications* This);
+        IEnumRemoteDebugApplications *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumRemoteDebugApplications* This,
+        IEnumRemoteDebugApplications *This,
         IEnumRemoteDebugApplications **ppessd);
 
     END_INTERFACE
 } IEnumRemoteDebugApplicationsVtbl;
+
 interface IEnumRemoteDebugApplications {
     CONST_VTBL IEnumRemoteDebugApplicationsVtbl* lpVtbl;
 };
@@ -10204,29 +8522,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumRemoteDebugApplications_Skip_Proxy(
-    IEnumRemoteDebugApplications* This,
-    ULONG celt);
-void __RPC_STUB IEnumRemoteDebugApplications_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumRemoteDebugApplications_Reset_Proxy(
-    IEnumRemoteDebugApplications* This);
-void __RPC_STUB IEnumRemoteDebugApplications_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumRemoteDebugApplications_Clone_Proxy(
-    IEnumRemoteDebugApplications* This,
-    IEnumRemoteDebugApplications **ppessd);
-void __RPC_STUB IEnumRemoteDebugApplications_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumRemoteDebugApplications_Next_Proxy(
     IEnumRemoteDebugApplications* This,
     ULONG celt,
@@ -10275,36 +8570,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumRemoteDebugApplicationThreads* This,
+        IEnumRemoteDebugApplicationThreads *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumRemoteDebugApplicationThreads* This);
+        IEnumRemoteDebugApplicationThreads *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumRemoteDebugApplicationThreads* This);
+        IEnumRemoteDebugApplicationThreads *This);
 
     /*** IEnumRemoteDebugApplicationThreads methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumRemoteDebugApplicationThreads* This,
+        IEnumRemoteDebugApplicationThreads *This,
         ULONG celt,
         IRemoteDebugApplicationThread **pprdat,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumRemoteDebugApplicationThreads* This,
+        IEnumRemoteDebugApplicationThreads *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumRemoteDebugApplicationThreads* This);
+        IEnumRemoteDebugApplicationThreads *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumRemoteDebugApplicationThreads* This,
+        IEnumRemoteDebugApplicationThreads *This,
         IEnumRemoteDebugApplicationThreads **pperdat);
 
     END_INTERFACE
 } IEnumRemoteDebugApplicationThreadsVtbl;
+
 interface IEnumRemoteDebugApplicationThreads {
     CONST_VTBL IEnumRemoteDebugApplicationThreadsVtbl* lpVtbl;
 };
@@ -10359,29 +8655,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumRemoteDebugApplicationThreads_Skip_Proxy(
-    IEnumRemoteDebugApplicationThreads* This,
-    ULONG celt);
-void __RPC_STUB IEnumRemoteDebugApplicationThreads_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumRemoteDebugApplicationThreads_Reset_Proxy(
-    IEnumRemoteDebugApplicationThreads* This);
-void __RPC_STUB IEnumRemoteDebugApplicationThreads_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumRemoteDebugApplicationThreads_Clone_Proxy(
-    IEnumRemoteDebugApplicationThreads* This,
-    IEnumRemoteDebugApplicationThreads **pperdat);
-void __RPC_STUB IEnumRemoteDebugApplicationThreads_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumRemoteDebugApplicationThreads_Next_Proxy(
     IEnumRemoteDebugApplicationThreads* This,
     ULONG celt,
@@ -10430,36 +8703,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugFormatter* This,
+        IDebugFormatter *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugFormatter* This);
+        IDebugFormatter *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugFormatter* This);
+        IDebugFormatter *This);
 
     /*** IDebugFormatter methods ***/
     HRESULT (STDMETHODCALLTYPE *GetStringForVariant)(
-        IDebugFormatter* This,
+        IDebugFormatter *This,
         VARIANT *pvar,
         ULONG nRadix,
         BSTR *pbstrValue);
 
     HRESULT (STDMETHODCALLTYPE *GetVariantForString)(
-        IDebugFormatter* This,
+        IDebugFormatter *This,
         LPCOLESTR pwstrValue,
         VARIANT *pvar);
 
     HRESULT (STDMETHODCALLTYPE *GetStringForVarType)(
-        IDebugFormatter* This,
+        IDebugFormatter *This,
         VARTYPE vt,
         TYPEDESC *ptdescArrayType,
         BSTR *pbstr);
 
     END_INTERFACE
 } IDebugFormatterVtbl;
+
 interface IDebugFormatter {
     CONST_VTBL IDebugFormatterVtbl* lpVtbl;
 };
@@ -10500,35 +8774,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugFormatter_GetStringForVariant_Proxy(
-    IDebugFormatter* This,
-    VARIANT *pvar,
-    ULONG nRadix,
-    BSTR *pbstrValue);
-void __RPC_STUB IDebugFormatter_GetStringForVariant_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugFormatter_GetVariantForString_Proxy(
-    IDebugFormatter* This,
-    LPCOLESTR pwstrValue,
-    VARIANT *pvar);
-void __RPC_STUB IDebugFormatter_GetVariantForString_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugFormatter_GetStringForVarType_Proxy(
-    IDebugFormatter* This,
-    VARTYPE vt,
-    TYPEDESC *ptdescArrayType,
-    BSTR *pbstr);
-void __RPC_STUB IDebugFormatter_GetStringForVarType_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugFormatter_INTERFACE_DEFINED__ */
 
@@ -10570,23 +8815,23 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISimpleConnectionPoint* This,
+        ISimpleConnectionPoint *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISimpleConnectionPoint* This);
+        ISimpleConnectionPoint *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISimpleConnectionPoint* This);
+        ISimpleConnectionPoint *This);
 
     /*** ISimpleConnectionPoint methods ***/
     HRESULT (STDMETHODCALLTYPE *GetEventCount)(
-        ISimpleConnectionPoint* This,
+        ISimpleConnectionPoint *This,
         ULONG *pulCount);
 
     HRESULT (STDMETHODCALLTYPE *DescribeEvents)(
-        ISimpleConnectionPoint* This,
+        ISimpleConnectionPoint *This,
         ULONG iEvent,
         ULONG cEvents,
         DISPID *prgid,
@@ -10594,16 +8839,17 @@
         ULONG *pcEventsFetched);
 
     HRESULT (STDMETHODCALLTYPE *Advise)(
-        ISimpleConnectionPoint* This,
+        ISimpleConnectionPoint *This,
         IDispatch *pdisp,
         DWORD *pdwCookie);
 
     HRESULT (STDMETHODCALLTYPE *Unadvise)(
-        ISimpleConnectionPoint* This,
+        ISimpleConnectionPoint *This,
         DWORD dwCookie);
 
     END_INTERFACE
 } ISimpleConnectionPointVtbl;
+
 interface ISimpleConnectionPoint {
     CONST_VTBL ISimpleConnectionPointVtbl* lpVtbl;
 };
@@ -10648,43 +8894,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISimpleConnectionPoint_GetEventCount_Proxy(
-    ISimpleConnectionPoint* This,
-    ULONG *pulCount);
-void __RPC_STUB ISimpleConnectionPoint_GetEventCount_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISimpleConnectionPoint_DescribeEvents_Proxy(
-    ISimpleConnectionPoint* This,
-    ULONG iEvent,
-    ULONG cEvents,
-    DISPID *prgid,
-    BSTR *prgbstr,
-    ULONG *pcEventsFetched);
-void __RPC_STUB ISimpleConnectionPoint_DescribeEvents_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISimpleConnectionPoint_Advise_Proxy(
-    ISimpleConnectionPoint* This,
-    IDispatch *pdisp,
-    DWORD *pdwCookie);
-void __RPC_STUB ISimpleConnectionPoint_Advise_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISimpleConnectionPoint_Unadvise_Proxy(
-    ISimpleConnectionPoint* This,
-    DWORD dwCookie);
-void __RPC_STUB ISimpleConnectionPoint_Unadvise_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISimpleConnectionPoint_INTERFACE_DEFINED__ */
 
@@ -10726,26 +8935,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IDebugHelper* This,
+        IDebugHelper *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IDebugHelper* This);
+        IDebugHelper *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IDebugHelper* This);
+        IDebugHelper *This);
 
     /*** IDebugHelper methods ***/
     HRESULT (STDMETHODCALLTYPE *CreatePropertyBrowser)(
-        IDebugHelper* This,
+        IDebugHelper *This,
         VARIANT *pvar,
         LPCOLESTR bstrName,
         IDebugApplicationThread *pdat,
         IDebugProperty **ppdob);
 
     HRESULT (STDMETHODCALLTYPE *CreatePropertyBrowserEx)(
-        IDebugHelper* This,
+        IDebugHelper *This,
         VARIANT *pvar,
         LPCOLESTR bstrName,
         IDebugApplicationThread *pdat,
@@ -10753,12 +8962,13 @@
         IDebugProperty **ppdob);
 
     HRESULT (STDMETHODCALLTYPE *CreateSimpleConnectionPoint)(
-        IDebugHelper* This,
+        IDebugHelper *This,
         IDispatch *pdisp,
         ISimpleConnectionPoint **ppscp);
 
     END_INTERFACE
 } IDebugHelperVtbl;
+
 interface IDebugHelper {
     CONST_VTBL IDebugHelperVtbl* lpVtbl;
 };
@@ -10799,38 +9009,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IDebugHelper_CreatePropertyBrowser_Proxy(
-    IDebugHelper* This,
-    VARIANT *pvar,
-    LPCOLESTR bstrName,
-    IDebugApplicationThread *pdat,
-    IDebugProperty **ppdob);
-void __RPC_STUB IDebugHelper_CreatePropertyBrowser_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugHelper_CreatePropertyBrowserEx_Proxy(
-    IDebugHelper* This,
-    VARIANT *pvar,
-    LPCOLESTR bstrName,
-    IDebugApplicationThread *pdat,
-    IDebugFormatter *pdf,
-    IDebugProperty **ppdob);
-void __RPC_STUB IDebugHelper_CreatePropertyBrowserEx_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IDebugHelper_CreateSimpleConnectionPoint_Proxy(
-    IDebugHelper* This,
-    IDispatch *pdisp,
-    ISimpleConnectionPoint **ppscp);
-void __RPC_STUB IDebugHelper_CreateSimpleConnectionPoint_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IDebugHelper_INTERFACE_DEFINED__ */
 
@@ -10869,36 +9047,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumDebugExpressionContexts* This,
+        IEnumDebugExpressionContexts *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumDebugExpressionContexts* This);
+        IEnumDebugExpressionContexts *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumDebugExpressionContexts* This);
+        IEnumDebugExpressionContexts *This);
 
     /*** IEnumDebugExpressionContexts methods ***/
     HRESULT (__stdcall *Next)(
-        IEnumDebugExpressionContexts* This,
+        IEnumDebugExpressionContexts *This,
         ULONG celt,
         IDebugExpressionContext **ppdec,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumDebugExpressionContexts* This,
+        IEnumDebugExpressionContexts *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumDebugExpressionContexts* This);
+        IEnumDebugExpressionContexts *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumDebugExpressionContexts* This,
+        IEnumDebugExpressionContexts *This,
         IEnumDebugExpressionContexts **ppedec);
 
     END_INTERFACE
 } IEnumDebugExpressionContextsVtbl;
+
 interface IEnumDebugExpressionContexts {
     CONST_VTBL IEnumDebugExpressionContextsVtbl* lpVtbl;
 };
@@ -10953,29 +9132,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugExpressionContexts_Skip_Proxy(
-    IEnumDebugExpressionContexts* This,
-    ULONG celt);
-void __RPC_STUB IEnumDebugExpressionContexts_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugExpressionContexts_Reset_Proxy(
-    IEnumDebugExpressionContexts* This);
-void __RPC_STUB IEnumDebugExpressionContexts_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumDebugExpressionContexts_Clone_Proxy(
-    IEnumDebugExpressionContexts* This,
-    IEnumDebugExpressionContexts **ppedec);
-void __RPC_STUB IEnumDebugExpressionContexts_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumDebugExpressionContexts_Next_Proxy(
     IEnumDebugExpressionContexts* This,
     ULONG celt,
@@ -11013,23 +9169,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IProvideExpressionContexts* This,
+        IProvideExpressionContexts *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IProvideExpressionContexts* This);
+        IProvideExpressionContexts *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IProvideExpressionContexts* This);
+        IProvideExpressionContexts *This);
 
     /*** IProvideExpressionContexts methods ***/
     HRESULT (STDMETHODCALLTYPE *EnumExpressionContexts)(
-        IProvideExpressionContexts* This,
+        IProvideExpressionContexts *This,
         IEnumDebugExpressionContexts **ppedec);
 
     END_INTERFACE
 } IProvideExpressionContextsVtbl;
+
 interface IProvideExpressionContexts {
     CONST_VTBL IProvideExpressionContextsVtbl* lpVtbl;
 };
@@ -11062,14 +9219,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IProvideExpressionContexts_EnumExpressionContexts_Proxy(
-    IProvideExpressionContexts* This,
-    IEnumDebugExpressionContexts **ppedec);
-void __RPC_STUB IProvideExpressionContexts_EnumExpressionContexts_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IProvideExpressionContexts_INTERFACE_DEFINED__ */
 
@@ -11079,296 +9228,465 @@
 #ifndef __IActiveScriptDebug32_FWD_DEFINED__
 #define __IActiveScriptDebug32_FWD_DEFINED__
 typedef interface IActiveScriptDebug32 IActiveScriptDebug32;
+#ifdef __cplusplus
+interface IActiveScriptDebug32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptDebug64_FWD_DEFINED__
 #define __IActiveScriptDebug64_FWD_DEFINED__
 typedef interface IActiveScriptDebug64 IActiveScriptDebug64;
+#ifdef __cplusplus
+interface IActiveScriptDebug64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptErrorDebug_FWD_DEFINED__
 #define __IActiveScriptErrorDebug_FWD_DEFINED__
 typedef interface IActiveScriptErrorDebug IActiveScriptErrorDebug;
+#ifdef __cplusplus
+interface IActiveScriptErrorDebug;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebug32_FWD_DEFINED__
 #define __IActiveScriptSiteDebug32_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebug32 IActiveScriptSiteDebug32;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebug32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebug64_FWD_DEFINED__
 #define __IActiveScriptSiteDebug64_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebug64 IActiveScriptSiteDebug64;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebug64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IActiveScriptSiteDebugEx_FWD_DEFINED__
 #define __IActiveScriptSiteDebugEx_FWD_DEFINED__
 typedef interface IActiveScriptSiteDebugEx IActiveScriptSiteDebugEx;
+#ifdef __cplusplus
+interface IActiveScriptSiteDebugEx;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IApplicationDebugger_FWD_DEFINED__
 #define __IApplicationDebugger_FWD_DEFINED__
 typedef interface IApplicationDebugger IApplicationDebugger;
+#ifdef __cplusplus
+interface IApplicationDebugger;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IApplicationDebuggerUI_FWD_DEFINED__
 #define __IApplicationDebuggerUI_FWD_DEFINED__
 typedef interface IApplicationDebuggerUI IApplicationDebuggerUI;
+#ifdef __cplusplus
+interface IApplicationDebuggerUI;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplication32_FWD_DEFINED__
 #define __IDebugApplication32_FWD_DEFINED__
 typedef interface IDebugApplication32 IDebugApplication32;
+#ifdef __cplusplus
+interface IDebugApplication32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplication64_FWD_DEFINED__
 #define __IDebugApplication64_FWD_DEFINED__
 typedef interface IDebugApplication64 IDebugApplication64;
+#ifdef __cplusplus
+interface IDebugApplication64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationNode_FWD_DEFINED__
 #define __IDebugApplicationNode_FWD_DEFINED__
 typedef interface IDebugApplicationNode IDebugApplicationNode;
+#ifdef __cplusplus
+interface IDebugApplicationNode;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationNodeEvents_FWD_DEFINED__
 #define __IDebugApplicationNodeEvents_FWD_DEFINED__
 typedef interface IDebugApplicationNodeEvents IDebugApplicationNodeEvents;
-#endif
-
-#ifndef __AsyncIDebugApplicationNodeEvents_FWD_DEFINED__
-#define __AsyncIDebugApplicationNodeEvents_FWD_DEFINED__
-typedef interface AsyncIDebugApplicationNodeEvents AsyncIDebugApplicationNodeEvents;
+#ifdef __cplusplus
+interface IDebugApplicationNodeEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugApplicationThread_FWD_DEFINED__
 #define __IDebugApplicationThread_FWD_DEFINED__
 typedef interface IDebugApplicationThread IDebugApplicationThread;
+#ifdef __cplusplus
+interface IDebugApplicationThread;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugAsyncOperation_FWD_DEFINED__
 #define __IDebugAsyncOperation_FWD_DEFINED__
 typedef interface IDebugAsyncOperation IDebugAsyncOperation;
+#ifdef __cplusplus
+interface IDebugAsyncOperation;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugAsyncOperationCallBack_FWD_DEFINED__
 #define __IDebugAsyncOperationCallBack_FWD_DEFINED__
 typedef interface IDebugAsyncOperationCallBack IDebugAsyncOperationCallBack;
+#ifdef __cplusplus
+interface IDebugAsyncOperationCallBack;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugCodeContext_FWD_DEFINED__
 #define __IDebugCodeContext_FWD_DEFINED__
 typedef interface IDebugCodeContext IDebugCodeContext;
+#ifdef __cplusplus
+interface IDebugCodeContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugCookie_FWD_DEFINED__
 #define __IDebugCookie_FWD_DEFINED__
 typedef interface IDebugCookie IDebugCookie;
+#ifdef __cplusplus
+interface IDebugCookie;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocument_FWD_DEFINED__
 #define __IDebugDocument_FWD_DEFINED__
 typedef interface IDebugDocument IDebugDocument;
+#ifdef __cplusplus
+interface IDebugDocument;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentContext_FWD_DEFINED__
 #define __IDebugDocumentContext_FWD_DEFINED__
 typedef interface IDebugDocumentContext IDebugDocumentContext;
+#ifdef __cplusplus
+interface IDebugDocumentContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHelper32_FWD_DEFINED__
 #define __IDebugDocumentHelper32_FWD_DEFINED__
 typedef interface IDebugDocumentHelper32 IDebugDocumentHelper32;
+#ifdef __cplusplus
+interface IDebugDocumentHelper32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHelper64_FWD_DEFINED__
 #define __IDebugDocumentHelper64_FWD_DEFINED__
 typedef interface IDebugDocumentHelper64 IDebugDocumentHelper64;
+#ifdef __cplusplus
+interface IDebugDocumentHelper64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentHost_FWD_DEFINED__
 #define __IDebugDocumentHost_FWD_DEFINED__
 typedef interface IDebugDocumentHost IDebugDocumentHost;
+#ifdef __cplusplus
+interface IDebugDocumentHost;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentInfo_FWD_DEFINED__
 #define __IDebugDocumentInfo_FWD_DEFINED__
 typedef interface IDebugDocumentInfo IDebugDocumentInfo;
+#ifdef __cplusplus
+interface IDebugDocumentInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentProvider_FWD_DEFINED__
 #define __IDebugDocumentProvider_FWD_DEFINED__
 typedef interface IDebugDocumentProvider IDebugDocumentProvider;
+#ifdef __cplusplus
+interface IDebugDocumentProvider;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentText_FWD_DEFINED__
 #define __IDebugDocumentText_FWD_DEFINED__
 typedef interface IDebugDocumentText IDebugDocumentText;
+#ifdef __cplusplus
+interface IDebugDocumentText;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextAuthor_FWD_DEFINED__
 #define __IDebugDocumentTextAuthor_FWD_DEFINED__
 typedef interface IDebugDocumentTextAuthor IDebugDocumentTextAuthor;
+#ifdef __cplusplus
+interface IDebugDocumentTextAuthor;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextEvents_FWD_DEFINED__
 #define __IDebugDocumentTextEvents_FWD_DEFINED__
 typedef interface IDebugDocumentTextEvents IDebugDocumentTextEvents;
+#ifdef __cplusplus
+interface IDebugDocumentTextEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugDocumentTextExternalAuthor_FWD_DEFINED__
 #define __IDebugDocumentTextExternalAuthor_FWD_DEFINED__
 typedef interface IDebugDocumentTextExternalAuthor IDebugDocumentTextExternalAuthor;
+#ifdef __cplusplus
+interface IDebugDocumentTextExternalAuthor;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpression_FWD_DEFINED__
 #define __IDebugExpression_FWD_DEFINED__
 typedef interface IDebugExpression IDebugExpression;
+#ifdef __cplusplus
+interface IDebugExpression;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpressionCallBack_FWD_DEFINED__
 #define __IDebugExpressionCallBack_FWD_DEFINED__
 typedef interface IDebugExpressionCallBack IDebugExpressionCallBack;
+#ifdef __cplusplus
+interface IDebugExpressionCallBack;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugExpressionContext_FWD_DEFINED__
 #define __IDebugExpressionContext_FWD_DEFINED__
 typedef interface IDebugExpressionContext IDebugExpressionContext;
+#ifdef __cplusplus
+interface IDebugExpressionContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugFormatter_FWD_DEFINED__
 #define __IDebugFormatter_FWD_DEFINED__
 typedef interface IDebugFormatter IDebugFormatter;
+#ifdef __cplusplus
+interface IDebugFormatter;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugHelper_FWD_DEFINED__
 #define __IDebugHelper_FWD_DEFINED__
 typedef interface IDebugHelper IDebugHelper;
+#ifdef __cplusplus
+interface IDebugHelper;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugSessionProvider_FWD_DEFINED__
 #define __IDebugSessionProvider_FWD_DEFINED__
 typedef interface IDebugSessionProvider IDebugSessionProvider;
+#ifdef __cplusplus
+interface IDebugSessionProvider;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrame_FWD_DEFINED__
 #define __IDebugStackFrame_FWD_DEFINED__
 typedef interface IDebugStackFrame IDebugStackFrame;
+#ifdef __cplusplus
+interface IDebugStackFrame;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSniffer_FWD_DEFINED__
 #define __IDebugStackFrameSniffer_FWD_DEFINED__
 typedef interface IDebugStackFrameSniffer IDebugStackFrameSniffer;
+#ifdef __cplusplus
+interface IDebugStackFrameSniffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSnifferEx32_FWD_DEFINED__
 #define __IDebugStackFrameSnifferEx32_FWD_DEFINED__
 typedef interface IDebugStackFrameSnifferEx32 IDebugStackFrameSnifferEx32;
+#ifdef __cplusplus
+interface IDebugStackFrameSnifferEx32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugStackFrameSnifferEx64_FWD_DEFINED__
 #define __IDebugStackFrameSnifferEx64_FWD_DEFINED__
 typedef interface IDebugStackFrameSnifferEx64 IDebugStackFrameSnifferEx64;
+#ifdef __cplusplus
+interface IDebugStackFrameSnifferEx64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugSyncOperation_FWD_DEFINED__
 #define __IDebugSyncOperation_FWD_DEFINED__
 typedef interface IDebugSyncOperation IDebugSyncOperation;
+#ifdef __cplusplus
+interface IDebugSyncOperation;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugThreadCall32_FWD_DEFINED__
 #define __IDebugThreadCall32_FWD_DEFINED__
 typedef interface IDebugThreadCall32 IDebugThreadCall32;
+#ifdef __cplusplus
+interface IDebugThreadCall32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IDebugThreadCall64_FWD_DEFINED__
 #define __IDebugThreadCall64_FWD_DEFINED__
 typedef interface IDebugThreadCall64 IDebugThreadCall64;
+#ifdef __cplusplus
+interface IDebugThreadCall64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugApplicationNodes_FWD_DEFINED__
 #define __IEnumDebugApplicationNodes_FWD_DEFINED__
 typedef interface IEnumDebugApplicationNodes IEnumDebugApplicationNodes;
+#ifdef __cplusplus
+interface IEnumDebugApplicationNodes;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugCodeContexts_FWD_DEFINED__
 #define __IEnumDebugCodeContexts_FWD_DEFINED__
 typedef interface IEnumDebugCodeContexts IEnumDebugCodeContexts;
+#ifdef __cplusplus
+interface IEnumDebugCodeContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugExpressionContexts_FWD_DEFINED__
 #define __IEnumDebugExpressionContexts_FWD_DEFINED__
 typedef interface IEnumDebugExpressionContexts IEnumDebugExpressionContexts;
+#ifdef __cplusplus
+interface IEnumDebugExpressionContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugStackFrames_FWD_DEFINED__
 #define __IEnumDebugStackFrames_FWD_DEFINED__
 typedef interface IEnumDebugStackFrames IEnumDebugStackFrames;
+#ifdef __cplusplus
+interface IEnumDebugStackFrames;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumDebugStackFrames64_FWD_DEFINED__
 #define __IEnumDebugStackFrames64_FWD_DEFINED__
 typedef interface IEnumDebugStackFrames64 IEnumDebugStackFrames64;
+#ifdef __cplusplus
+interface IEnumDebugStackFrames64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumRemoteDebugApplications_FWD_DEFINED__
 #define __IEnumRemoteDebugApplications_FWD_DEFINED__
 typedef interface IEnumRemoteDebugApplications IEnumRemoteDebugApplications;
+#ifdef __cplusplus
+interface IEnumRemoteDebugApplications;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumRemoteDebugApplicationThreads_FWD_DEFINED__
 #define __IEnumRemoteDebugApplicationThreads_FWD_DEFINED__
 typedef interface IEnumRemoteDebugApplicationThreads IEnumRemoteDebugApplicationThreads;
+#ifdef __cplusplus
+interface IEnumRemoteDebugApplicationThreads;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProcessDebugManager32_FWD_DEFINED__
 #define __IProcessDebugManager32_FWD_DEFINED__
 typedef interface IProcessDebugManager32 IProcessDebugManager32;
+#ifdef __cplusplus
+interface IProcessDebugManager32;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProcessDebugManager64_FWD_DEFINED__
 #define __IProcessDebugManager64_FWD_DEFINED__
 typedef interface IProcessDebugManager64 IProcessDebugManager64;
+#ifdef __cplusplus
+interface IProcessDebugManager64;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProvideExpressionContexts_FWD_DEFINED__
 #define __IProvideExpressionContexts_FWD_DEFINED__
 typedef interface IProvideExpressionContexts IProvideExpressionContexts;
+#ifdef __cplusplus
+interface IProvideExpressionContexts;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManager_FWD_DEFINED__
 #define __IMachineDebugManager_FWD_DEFINED__
 typedef interface IMachineDebugManager IMachineDebugManager;
+#ifdef __cplusplus
+interface IMachineDebugManager;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManagerCookie_FWD_DEFINED__
 #define __IMachineDebugManagerCookie_FWD_DEFINED__
 typedef interface IMachineDebugManagerCookie IMachineDebugManagerCookie;
+#ifdef __cplusplus
+interface IMachineDebugManagerCookie;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMachineDebugManagerEvents_FWD_DEFINED__
 #define __IMachineDebugManagerEvents_FWD_DEFINED__
 typedef interface IMachineDebugManagerEvents IMachineDebugManagerEvents;
+#ifdef __cplusplus
+interface IMachineDebugManagerEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplication_FWD_DEFINED__
 #define __IRemoteDebugApplication_FWD_DEFINED__
 typedef interface IRemoteDebugApplication IRemoteDebugApplication;
+#ifdef __cplusplus
+interface IRemoteDebugApplication;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplicationEvents_FWD_DEFINED__
 #define __IRemoteDebugApplicationEvents_FWD_DEFINED__
 typedef interface IRemoteDebugApplicationEvents IRemoteDebugApplicationEvents;
+#ifdef __cplusplus
+interface IRemoteDebugApplicationEvents;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRemoteDebugApplicationThread_FWD_DEFINED__
 #define __IRemoteDebugApplicationThread_FWD_DEFINED__
 typedef interface IRemoteDebugApplicationThread IRemoteDebugApplicationThread;
+#ifdef __cplusplus
+interface IRemoteDebugApplicationThread;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISimpleConnectionPoint_FWD_DEFINED__
 #define __ISimpleConnectionPoint_FWD_DEFINED__
 typedef interface ISimpleConnectionPoint ISimpleConnectionPoint;
+#ifdef __cplusplus
+interface ISimpleConnectionPoint;
+#endif /* __cplusplus */
 #endif
 
 /*****************************************************************************
diff --git a/mingw-w64-headers/include/napservermanagement.h b/mingw-w64-headers/include/napservermanagement.h
index cdd950d..9b9a361 100644
--- a/mingw-w64-headers/include/napservermanagement.h
+++ b/mingw-w64-headers/include/napservermanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from include/napservermanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 3.20 from include/napservermanagement.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -20,11 +20,17 @@
 #ifndef __INapServerManagement_FWD_DEFINED__
 #define __INapServerManagement_FWD_DEFINED__
 typedef interface INapServerManagement INapServerManagement;
+#ifdef __cplusplus
+interface INapServerManagement;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapServerInfo_FWD_DEFINED__
 #define __INapServerInfo_FWD_DEFINED__
 typedef interface INapServerInfo INapServerInfo;
+#ifdef __cplusplus
+interface INapServerInfo;
+#endif /* __cplusplus */
 #endif
 
 /* Headers for imported files */
@@ -42,11 +48,17 @@
 #ifndef __INapServerInfo_FWD_DEFINED__
 #define __INapServerInfo_FWD_DEFINED__
 typedef interface INapServerInfo INapServerInfo;
+#ifdef __cplusplus
+interface INapServerInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapServerManagement_FWD_DEFINED__
 #define __INapServerManagement_FWD_DEFINED__
 typedef interface INapServerManagement INapServerManagement;
+#ifdef __cplusplus
+interface INapServerManagement;
+#endif /* __cplusplus */
 #endif
 
 EXTERN_C const CLSID CLSID_NapServerManagement;
@@ -83,33 +95,34 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapServerManagement* This,
+        INapServerManagement *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapServerManagement* This);
+        INapServerManagement *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapServerManagement* This);
+        INapServerManagement *This);
 
     /*** INapServerManagement methods ***/
     HRESULT (STDMETHODCALLTYPE *RegisterSystemHealthValidator)(
-        INapServerManagement* This,
+        INapServerManagement *This,
         const NapComponentRegistrationInfo *validator,
         const CLSID *validatorClsid);
 
     HRESULT (STDMETHODCALLTYPE *UnregisterSystemHealthValidator)(
-        INapServerManagement* This,
+        INapServerManagement *This,
         SystemHealthEntityId id);
 
     HRESULT (STDMETHODCALLTYPE *SetFailureCategoryMappings)(
-        INapServerManagement* This,
+        INapServerManagement *This,
         SystemHealthEntityId id,
         const FailureCategoryMapping mapping);
 
     END_INTERFACE
 } INapServerManagementVtbl;
+
 interface INapServerManagement {
     CONST_VTBL INapServerManagementVtbl* lpVtbl;
 };
@@ -150,32 +163,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapServerManagement_RegisterSystemHealthValidator_Proxy(
-    INapServerManagement* This,
-    const NapComponentRegistrationInfo *validator,
-    const CLSID *validatorClsid);
-void __RPC_STUB INapServerManagement_RegisterSystemHealthValidator_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapServerManagement_UnregisterSystemHealthValidator_Proxy(
-    INapServerManagement* This,
-    SystemHealthEntityId id);
-void __RPC_STUB INapServerManagement_UnregisterSystemHealthValidator_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapServerManagement_SetFailureCategoryMappings_Proxy(
-    INapServerManagement* This,
-    SystemHealthEntityId id,
-    const FailureCategoryMapping mapping);
-void __RPC_STUB INapServerManagement_SetFailureCategoryMappings_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapServerManagement_INTERFACE_DEFINED__ */
 
@@ -214,36 +201,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapServerInfo* This,
+        INapServerInfo *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapServerInfo* This);
+        INapServerInfo *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapServerInfo* This);
+        INapServerInfo *This);
 
     /*** INapServerInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetNapServerInfo)(
-        INapServerInfo* This,
+        INapServerInfo *This,
         CountedString **serverName,
         CountedString **serverDescription,
         CountedString **protocolVersion);
 
     HRESULT (STDMETHODCALLTYPE *GetRegisteredSystemHealthValidators)(
-        INapServerInfo* This,
+        INapServerInfo *This,
         SystemHealthEntityCount *count,
         NapComponentRegistrationInfo **validators,
         CLSID **validatorClsids);
 
     HRESULT (STDMETHODCALLTYPE *GetFailureCategoryMappings)(
-        INapServerInfo* This,
+        INapServerInfo *This,
         SystemHealthEntityId id,
         FailureCategoryMapping *mapping);
 
     END_INTERFACE
 } INapServerInfoVtbl;
+
 interface INapServerInfo {
     CONST_VTBL INapServerInfoVtbl* lpVtbl;
 };
@@ -284,35 +272,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapServerInfo_GetNapServerInfo_Proxy(
-    INapServerInfo* This,
-    CountedString **serverName,
-    CountedString **serverDescription,
-    CountedString **protocolVersion);
-void __RPC_STUB INapServerInfo_GetNapServerInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapServerInfo_GetRegisteredSystemHealthValidators_Proxy(
-    INapServerInfo* This,
-    SystemHealthEntityCount *count,
-    NapComponentRegistrationInfo **validators,
-    CLSID **validatorClsids);
-void __RPC_STUB INapServerInfo_GetRegisteredSystemHealthValidators_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapServerInfo_GetFailureCategoryMappings_Proxy(
-    INapServerInfo* This,
-    SystemHealthEntityId id,
-    FailureCategoryMapping *mapping);
-void __RPC_STUB INapServerInfo_GetFailureCategoryMappings_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapServerInfo_INTERFACE_DEFINED__ */
 
diff --git a/mingw-w64-headers/include/napsystemhealthagent.h b/mingw-w64-headers/include/napsystemhealthagent.h
index fe8f6f4..e21b23a 100644
--- a/mingw-w64-headers/include/napsystemhealthagent.h
+++ b/mingw-w64-headers/include/napsystemhealthagent.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from include/napsystemhealthagent.idl - Do not edit ***/
+/*** Autogenerated by WIDL 3.20 from include/napsystemhealthagent.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -20,26 +20,41 @@
 #ifndef __INapSystemHealthAgentBinding_FWD_DEFINED__
 #define __INapSystemHealthAgentBinding_FWD_DEFINED__
 typedef interface INapSystemHealthAgentBinding INapSystemHealthAgentBinding;
+#ifdef __cplusplus
+interface INapSystemHealthAgentBinding;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthAgentBinding2_FWD_DEFINED__
 #define __INapSystemHealthAgentBinding2_FWD_DEFINED__
 typedef interface INapSystemHealthAgentBinding2 INapSystemHealthAgentBinding2;
+#ifdef __cplusplus
+interface INapSystemHealthAgentBinding2;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthAgentCallback_FWD_DEFINED__
 #define __INapSystemHealthAgentCallback_FWD_DEFINED__
 typedef interface INapSystemHealthAgentCallback INapSystemHealthAgentCallback;
+#ifdef __cplusplus
+interface INapSystemHealthAgentCallback;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __AsyncINapSystemHealthAgentCallback_FWD_DEFINED__
 #define __AsyncINapSystemHealthAgentCallback_FWD_DEFINED__
 typedef interface AsyncINapSystemHealthAgentCallback AsyncINapSystemHealthAgentCallback;
+#ifdef __cplusplus
+interface AsyncINapSystemHealthAgentCallback;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthAgentRequest_FWD_DEFINED__
 #define __INapSystemHealthAgentRequest_FWD_DEFINED__
 typedef interface INapSystemHealthAgentRequest INapSystemHealthAgentRequest;
+#ifdef __cplusplus
+interface INapSystemHealthAgentRequest;
+#endif /* __cplusplus */
 #endif
 
 /* Headers for imported files */
@@ -57,21 +72,25 @@
 #ifndef __INapSystemHealthAgentBinding_FWD_DEFINED__
 #define __INapSystemHealthAgentBinding_FWD_DEFINED__
 typedef interface INapSystemHealthAgentBinding INapSystemHealthAgentBinding;
+#ifdef __cplusplus
+interface INapSystemHealthAgentBinding;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthAgentCallback_FWD_DEFINED__
 #define __INapSystemHealthAgentCallback_FWD_DEFINED__
 typedef interface INapSystemHealthAgentCallback INapSystemHealthAgentCallback;
-#endif
-
-#ifndef __AsyncINapSystemHealthAgentCallback_FWD_DEFINED__
-#define __AsyncINapSystemHealthAgentCallback_FWD_DEFINED__
-typedef interface AsyncINapSystemHealthAgentCallback AsyncINapSystemHealthAgentCallback;
+#ifdef __cplusplus
+interface INapSystemHealthAgentCallback;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthAgentRequest_FWD_DEFINED__
 #define __INapSystemHealthAgentRequest_FWD_DEFINED__
 typedef interface INapSystemHealthAgentRequest INapSystemHealthAgentRequest;
+#ifdef __cplusplus
+interface INapSystemHealthAgentRequest;
+#endif /* __cplusplus */
 #endif
 
 EXTERN_C const CLSID CLSID_NapSystemHealthAgentBinding;
@@ -113,38 +132,39 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthAgentBinding* This,
+        INapSystemHealthAgentBinding *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthAgentBinding* This);
+        INapSystemHealthAgentBinding *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthAgentBinding* This);
+        INapSystemHealthAgentBinding *This);
 
     /*** INapSystemHealthAgentBinding methods ***/
     HRESULT (STDMETHODCALLTYPE *Initialize)(
-        INapSystemHealthAgentBinding* This,
+        INapSystemHealthAgentBinding *This,
         SystemHealthEntityId id,
         INapSystemHealthAgentCallback *callback);
 
     HRESULT (STDMETHODCALLTYPE *Uninitialize)(
-        INapSystemHealthAgentBinding* This);
+        INapSystemHealthAgentBinding *This);
 
     HRESULT (STDMETHODCALLTYPE *NotifySoHChange)(
-        INapSystemHealthAgentBinding* This);
+        INapSystemHealthAgentBinding *This);
 
     HRESULT (STDMETHODCALLTYPE *GetSystemIsolationInfo)(
-        INapSystemHealthAgentBinding* This,
+        INapSystemHealthAgentBinding *This,
         IsolationInfo **isolationInfo,
         WINBOOL *unknownConnections);
 
     HRESULT (STDMETHODCALLTYPE *FlushCache)(
-        INapSystemHealthAgentBinding* This);
+        INapSystemHealthAgentBinding *This);
 
     END_INTERFACE
 } INapSystemHealthAgentBindingVtbl;
+
 interface INapSystemHealthAgentBinding {
     CONST_VTBL INapSystemHealthAgentBindingVtbl* lpVtbl;
 };
@@ -193,45 +213,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentBinding_Initialize_Proxy(
-    INapSystemHealthAgentBinding* This,
-    SystemHealthEntityId id,
-    INapSystemHealthAgentCallback *callback);
-void __RPC_STUB INapSystemHealthAgentBinding_Initialize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentBinding_Uninitialize_Proxy(
-    INapSystemHealthAgentBinding* This);
-void __RPC_STUB INapSystemHealthAgentBinding_Uninitialize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentBinding_NotifySoHChange_Proxy(
-    INapSystemHealthAgentBinding* This);
-void __RPC_STUB INapSystemHealthAgentBinding_NotifySoHChange_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentBinding_GetSystemIsolationInfo_Proxy(
-    INapSystemHealthAgentBinding* This,
-    IsolationInfo **isolationInfo,
-    WINBOOL *unknownConnections);
-void __RPC_STUB INapSystemHealthAgentBinding_GetSystemIsolationInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentBinding_FlushCache_Proxy(
-    INapSystemHealthAgentBinding* This);
-void __RPC_STUB INapSystemHealthAgentBinding_FlushCache_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthAgentBinding_INTERFACE_DEFINED__ */
 
@@ -260,44 +241,45 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthAgentBinding2* This,
+        INapSystemHealthAgentBinding2 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthAgentBinding2* This);
+        INapSystemHealthAgentBinding2 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthAgentBinding2* This);
+        INapSystemHealthAgentBinding2 *This);
 
     /*** INapSystemHealthAgentBinding methods ***/
     HRESULT (STDMETHODCALLTYPE *Initialize)(
-        INapSystemHealthAgentBinding2* This,
+        INapSystemHealthAgentBinding2 *This,
         SystemHealthEntityId id,
         INapSystemHealthAgentCallback *callback);
 
     HRESULT (STDMETHODCALLTYPE *Uninitialize)(
-        INapSystemHealthAgentBinding2* This);
+        INapSystemHealthAgentBinding2 *This);
 
     HRESULT (STDMETHODCALLTYPE *NotifySoHChange)(
-        INapSystemHealthAgentBinding2* This);
+        INapSystemHealthAgentBinding2 *This);
 
     HRESULT (STDMETHODCALLTYPE *GetSystemIsolationInfo)(
-        INapSystemHealthAgentBinding2* This,
+        INapSystemHealthAgentBinding2 *This,
         IsolationInfo **isolationInfo,
         WINBOOL *unknownConnections);
 
     HRESULT (STDMETHODCALLTYPE *FlushCache)(
-        INapSystemHealthAgentBinding2* This);
+        INapSystemHealthAgentBinding2 *This);
 
     /*** INapSystemHealthAgentBinding2 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetSystemIsolationInfoEx)(
-        INapSystemHealthAgentBinding2* This,
+        INapSystemHealthAgentBinding2 *This,
         IsolationInfoEx **isolationInfo,
         WINBOOL *unknownConnections);
 
     END_INTERFACE
 } INapSystemHealthAgentBinding2Vtbl;
+
 interface INapSystemHealthAgentBinding2 {
     CONST_VTBL INapSystemHealthAgentBinding2Vtbl* lpVtbl;
 };
@@ -352,15 +334,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentBinding2_GetSystemIsolationInfoEx_Proxy(
-    INapSystemHealthAgentBinding2* This,
-    IsolationInfoEx **isolationInfo,
-    WINBOOL *unknownConnections);
-void __RPC_STUB INapSystemHealthAgentBinding2_GetSystemIsolationInfoEx_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthAgentBinding2_INTERFACE_DEFINED__ */
 
@@ -405,44 +378,45 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthAgentCallback* This,
+        INapSystemHealthAgentCallback *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthAgentCallback* This);
+        INapSystemHealthAgentCallback *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthAgentCallback* This);
+        INapSystemHealthAgentCallback *This);
 
     /*** INapSystemHealthAgentCallback methods ***/
     HRESULT (STDMETHODCALLTYPE *GetSoHRequest)(
-        INapSystemHealthAgentCallback* This,
+        INapSystemHealthAgentCallback *This,
         INapSystemHealthAgentRequest *request);
 
     HRESULT (STDMETHODCALLTYPE *ProcessSoHResponse)(
-        INapSystemHealthAgentCallback* This,
+        INapSystemHealthAgentCallback *This,
         INapSystemHealthAgentRequest *request);
 
     HRESULT (STDMETHODCALLTYPE *NotifySystemIsolationStateChange)(
-        INapSystemHealthAgentCallback* This);
+        INapSystemHealthAgentCallback *This);
 
     HRESULT (STDMETHODCALLTYPE *GetFixupInfo)(
-        INapSystemHealthAgentCallback* This,
+        INapSystemHealthAgentCallback *This,
         FixupInfo **info);
 
     HRESULT (STDMETHODCALLTYPE *CompareSoHRequests)(
-        INapSystemHealthAgentCallback* This,
+        INapSystemHealthAgentCallback *This,
         const SoHRequest *lhs,
         const SoHRequest *rhs,
         WINBOOL *isEqual);
 
     HRESULT (STDMETHODCALLTYPE *NotifyOrphanedSoHRequest)(
-        INapSystemHealthAgentCallback* This,
+        INapSystemHealthAgentCallback *This,
         const CorrelationId *correlationId);
 
     END_INTERFACE
 } INapSystemHealthAgentCallbackVtbl;
+
 interface INapSystemHealthAgentCallback {
     CONST_VTBL INapSystemHealthAgentCallbackVtbl* lpVtbl;
 };
@@ -495,55 +469,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentCallback_GetSoHRequest_Proxy(
-    INapSystemHealthAgentCallback* This,
-    INapSystemHealthAgentRequest *request);
-void __RPC_STUB INapSystemHealthAgentCallback_GetSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentCallback_ProcessSoHResponse_Proxy(
-    INapSystemHealthAgentCallback* This,
-    INapSystemHealthAgentRequest *request);
-void __RPC_STUB INapSystemHealthAgentCallback_ProcessSoHResponse_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentCallback_NotifySystemIsolationStateChange_Proxy(
-    INapSystemHealthAgentCallback* This);
-void __RPC_STUB INapSystemHealthAgentCallback_NotifySystemIsolationStateChange_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentCallback_GetFixupInfo_Proxy(
-    INapSystemHealthAgentCallback* This,
-    FixupInfo **info);
-void __RPC_STUB INapSystemHealthAgentCallback_GetFixupInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentCallback_CompareSoHRequests_Proxy(
-    INapSystemHealthAgentCallback* This,
-    const SoHRequest *lhs,
-    const SoHRequest *rhs,
-    WINBOOL *isEqual);
-void __RPC_STUB INapSystemHealthAgentCallback_CompareSoHRequests_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentCallback_NotifyOrphanedSoHRequest_Proxy(
-    INapSystemHealthAgentCallback* This,
-    const CorrelationId *correlationId);
-void __RPC_STUB INapSystemHealthAgentCallback_NotifyOrphanedSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthAgentCallback_INTERFACE_DEFINED__ */
 
@@ -558,38 +483,38 @@
 MIDL_INTERFACE("860d8fd9-0219-43ea-ae7f-59611f4cc16a")
 AsyncINapSystemHealthAgentCallback : public IUnknown
 {
-    virtual void STDMETHODCALLTYPE Begin_GetSoHRequest(
+    virtual HRESULT STDMETHODCALLTYPE Begin_GetSoHRequest(
         INapSystemHealthAgentRequest *request) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_GetSoHRequest(
         ) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_ProcessSoHResponse(
+    virtual HRESULT STDMETHODCALLTYPE Begin_ProcessSoHResponse(
         INapSystemHealthAgentRequest *request) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_ProcessSoHResponse(
         ) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_NotifySystemIsolationStateChange(
+    virtual HRESULT STDMETHODCALLTYPE Begin_NotifySystemIsolationStateChange(
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_NotifySystemIsolationStateChange(
         ) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_GetFixupInfo(
+    virtual HRESULT STDMETHODCALLTYPE Begin_GetFixupInfo(
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_GetFixupInfo(
         FixupInfo **info) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_CompareSoHRequests(
+    virtual HRESULT STDMETHODCALLTYPE Begin_CompareSoHRequests(
         const SoHRequest *lhs,
         const SoHRequest *rhs) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_CompareSoHRequests(
         WINBOOL *isEqual) = 0;
 
-    virtual void STDMETHODCALLTYPE Begin_NotifyOrphanedSoHRequest(
+    virtual HRESULT STDMETHODCALLTYPE Begin_NotifyOrphanedSoHRequest(
         const CorrelationId *correlationId) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE Finish_NotifyOrphanedSoHRequest(
@@ -605,62 +530,63 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        AsyncINapSystemHealthAgentCallback* This,
+        AsyncINapSystemHealthAgentCallback *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        AsyncINapSystemHealthAgentCallback* This);
+        AsyncINapSystemHealthAgentCallback *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        AsyncINapSystemHealthAgentCallback* This);
+        AsyncINapSystemHealthAgentCallback *This);
 
-    /*** INapSystemHealthAgentCallback methods ***/
-    void (STDMETHODCALLTYPE *Begin_GetSoHRequest)(
-        AsyncINapSystemHealthAgentCallback* This,
+    /*** AsyncINapSystemHealthAgentCallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *Begin_GetSoHRequest)(
+        AsyncINapSystemHealthAgentCallback *This,
         INapSystemHealthAgentRequest *request);
 
     HRESULT (STDMETHODCALLTYPE *Finish_GetSoHRequest)(
-        AsyncINapSystemHealthAgentCallback* This);
+        AsyncINapSystemHealthAgentCallback *This);
 
-    void (STDMETHODCALLTYPE *Begin_ProcessSoHResponse)(
-        AsyncINapSystemHealthAgentCallback* This,
+    HRESULT (STDMETHODCALLTYPE *Begin_ProcessSoHResponse)(
+        AsyncINapSystemHealthAgentCallback *This,
         INapSystemHealthAgentRequest *request);
 
     HRESULT (STDMETHODCALLTYPE *Finish_ProcessSoHResponse)(
-        AsyncINapSystemHealthAgentCallback* This);
+        AsyncINapSystemHealthAgentCallback *This);
 
-    void (STDMETHODCALLTYPE *Begin_NotifySystemIsolationStateChange)(
-        AsyncINapSystemHealthAgentCallback* This);
+    HRESULT (STDMETHODCALLTYPE *Begin_NotifySystemIsolationStateChange)(
+        AsyncINapSystemHealthAgentCallback *This);
 
     HRESULT (STDMETHODCALLTYPE *Finish_NotifySystemIsolationStateChange)(
-        AsyncINapSystemHealthAgentCallback* This);
+        AsyncINapSystemHealthAgentCallback *This);
 
-    void (STDMETHODCALLTYPE *Begin_GetFixupInfo)(
-        AsyncINapSystemHealthAgentCallback* This);
+    HRESULT (STDMETHODCALLTYPE *Begin_GetFixupInfo)(
+        AsyncINapSystemHealthAgentCallback *This);
 
     HRESULT (STDMETHODCALLTYPE *Finish_GetFixupInfo)(
-        AsyncINapSystemHealthAgentCallback* This,
+        AsyncINapSystemHealthAgentCallback *This,
         FixupInfo **info);
 
-    void (STDMETHODCALLTYPE *Begin_CompareSoHRequests)(
-        AsyncINapSystemHealthAgentCallback* This,
+    HRESULT (STDMETHODCALLTYPE *Begin_CompareSoHRequests)(
+        AsyncINapSystemHealthAgentCallback *This,
         const SoHRequest *lhs,
         const SoHRequest *rhs);
 
     HRESULT (STDMETHODCALLTYPE *Finish_CompareSoHRequests)(
-        AsyncINapSystemHealthAgentCallback* This,
+        AsyncINapSystemHealthAgentCallback *This,
         WINBOOL *isEqual);
 
-    void (STDMETHODCALLTYPE *Begin_NotifyOrphanedSoHRequest)(
-        AsyncINapSystemHealthAgentCallback* This,
+    HRESULT (STDMETHODCALLTYPE *Begin_NotifyOrphanedSoHRequest)(
+        AsyncINapSystemHealthAgentCallback *This,
         const CorrelationId *correlationId);
 
     HRESULT (STDMETHODCALLTYPE *Finish_NotifyOrphanedSoHRequest)(
-        AsyncINapSystemHealthAgentCallback* This);
+        AsyncINapSystemHealthAgentCallback *This);
 
     END_INTERFACE
 } AsyncINapSystemHealthAgentCallbackVtbl;
+
 interface AsyncINapSystemHealthAgentCallback {
     CONST_VTBL AsyncINapSystemHealthAgentCallbackVtbl* lpVtbl;
 };
@@ -671,7 +597,7 @@
 #define AsyncINapSystemHealthAgentCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define AsyncINapSystemHealthAgentCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define AsyncINapSystemHealthAgentCallback_Release(This) (This)->lpVtbl->Release(This)
-/*** INapSystemHealthAgentCallback methods ***/
+/*** AsyncINapSystemHealthAgentCallback methods ***/
 #define AsyncINapSystemHealthAgentCallback_Begin_GetSoHRequest(This,request) (This)->lpVtbl->Begin_GetSoHRequest(This,request)
 #define AsyncINapSystemHealthAgentCallback_Finish_GetSoHRequest(This) (This)->lpVtbl->Finish_GetSoHRequest(This)
 #define AsyncINapSystemHealthAgentCallback_Begin_ProcessSoHResponse(This,request) (This)->lpVtbl->Begin_ProcessSoHResponse(This,request)
@@ -695,41 +621,41 @@
 static FORCEINLINE ULONG AsyncINapSystemHealthAgentCallback_Release(AsyncINapSystemHealthAgentCallback* This) {
     return This->lpVtbl->Release(This);
 }
-/*** INapSystemHealthAgentCallback methods ***/
-static FORCEINLINE void Begin_AsyncINapSystemHealthAgentCallback_GetSoHRequest(AsyncINapSystemHealthAgentCallback* This,INapSystemHealthAgentRequest *request) {
-    This->lpVtbl->Begin_GetSoHRequest(This,request);
+/*** AsyncINapSystemHealthAgentCallback methods ***/
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Begin_GetSoHRequest(AsyncINapSystemHealthAgentCallback* This,INapSystemHealthAgentRequest *request) {
+    return This->lpVtbl->Begin_GetSoHRequest(This,request);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthAgentCallback_GetSoHRequest(AsyncINapSystemHealthAgentCallback* This) {
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Finish_GetSoHRequest(AsyncINapSystemHealthAgentCallback* This) {
     return This->lpVtbl->Finish_GetSoHRequest(This);
 }
-static FORCEINLINE void Begin_AsyncINapSystemHealthAgentCallback_ProcessSoHResponse(AsyncINapSystemHealthAgentCallback* This,INapSystemHealthAgentRequest *request) {
-    This->lpVtbl->Begin_ProcessSoHResponse(This,request);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Begin_ProcessSoHResponse(AsyncINapSystemHealthAgentCallback* This,INapSystemHealthAgentRequest *request) {
+    return This->lpVtbl->Begin_ProcessSoHResponse(This,request);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthAgentCallback_ProcessSoHResponse(AsyncINapSystemHealthAgentCallback* This) {
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Finish_ProcessSoHResponse(AsyncINapSystemHealthAgentCallback* This) {
     return This->lpVtbl->Finish_ProcessSoHResponse(This);
 }
-static FORCEINLINE void Begin_AsyncINapSystemHealthAgentCallback_NotifySystemIsolationStateChange(AsyncINapSystemHealthAgentCallback* This) {
-    This->lpVtbl->Begin_NotifySystemIsolationStateChange(This);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Begin_NotifySystemIsolationStateChange(AsyncINapSystemHealthAgentCallback* This) {
+    return This->lpVtbl->Begin_NotifySystemIsolationStateChange(This);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthAgentCallback_NotifySystemIsolationStateChange(AsyncINapSystemHealthAgentCallback* This) {
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Finish_NotifySystemIsolationStateChange(AsyncINapSystemHealthAgentCallback* This) {
     return This->lpVtbl->Finish_NotifySystemIsolationStateChange(This);
 }
-static FORCEINLINE void Begin_AsyncINapSystemHealthAgentCallback_GetFixupInfo(AsyncINapSystemHealthAgentCallback* This) {
-    This->lpVtbl->Begin_GetFixupInfo(This,info);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Begin_GetFixupInfo(AsyncINapSystemHealthAgentCallback* This) {
+    return This->lpVtbl->Begin_GetFixupInfo(This);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthAgentCallback_GetFixupInfo(AsyncINapSystemHealthAgentCallback* This,FixupInfo **info) {
-    return This->lpVtbl->Finish_GetFixupInfo(This);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Finish_GetFixupInfo(AsyncINapSystemHealthAgentCallback* This,FixupInfo **info) {
+    return This->lpVtbl->Finish_GetFixupInfo(This,info);
 }
-static FORCEINLINE void Begin_AsyncINapSystemHealthAgentCallback_CompareSoHRequests(AsyncINapSystemHealthAgentCallback* This,const SoHRequest *lhs,const SoHRequest *rhs) {
-    This->lpVtbl->Begin_CompareSoHRequests(This,lhs,rhs,isEqual);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Begin_CompareSoHRequests(AsyncINapSystemHealthAgentCallback* This,const SoHRequest *lhs,const SoHRequest *rhs) {
+    return This->lpVtbl->Begin_CompareSoHRequests(This,lhs,rhs);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthAgentCallback_CompareSoHRequests(AsyncINapSystemHealthAgentCallback* This,WINBOOL *isEqual) {
-    return This->lpVtbl->Finish_CompareSoHRequests(This);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Finish_CompareSoHRequests(AsyncINapSystemHealthAgentCallback* This,WINBOOL *isEqual) {
+    return This->lpVtbl->Finish_CompareSoHRequests(This,isEqual);
 }
-static FORCEINLINE void Begin_AsyncINapSystemHealthAgentCallback_NotifyOrphanedSoHRequest(AsyncINapSystemHealthAgentCallback* This,const CorrelationId *correlationId) {
-    This->lpVtbl->Begin_NotifyOrphanedSoHRequest(This,correlationId);
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Begin_NotifyOrphanedSoHRequest(AsyncINapSystemHealthAgentCallback* This,const CorrelationId *correlationId) {
+    return This->lpVtbl->Begin_NotifyOrphanedSoHRequest(This,correlationId);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthAgentCallback_NotifyOrphanedSoHRequest(AsyncINapSystemHealthAgentCallback* This) {
+static FORCEINLINE HRESULT AsyncINapSystemHealthAgentCallback_Finish_NotifyOrphanedSoHRequest(AsyncINapSystemHealthAgentCallback* This) {
     return This->lpVtbl->Finish_NotifyOrphanedSoHRequest(This);
 }
 #endif
@@ -737,100 +663,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Begin_GetSoHRequest_Proxy(
-    INapSystemHealthAgentCallback* This,
-    INapSystemHealthAgentRequest *request);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Begin_GetSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Finish_GetSoHRequest_Proxy(
-    INapSystemHealthAgentCallback* This,
-    INapSystemHealthAgentRequest *request);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Finish_GetSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Begin_ProcessSoHResponse_Proxy(
-    INapSystemHealthAgentCallback* This,
-    INapSystemHealthAgentRequest *request);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Begin_ProcessSoHResponse_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Finish_ProcessSoHResponse_Proxy(
-    INapSystemHealthAgentCallback* This,
-    INapSystemHealthAgentRequest *request);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Finish_ProcessSoHResponse_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Begin_NotifySystemIsolationStateChange_Proxy(
-    INapSystemHealthAgentCallback* This);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Begin_NotifySystemIsolationStateChange_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Finish_NotifySystemIsolationStateChange_Proxy(
-    INapSystemHealthAgentCallback* This);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Finish_NotifySystemIsolationStateChange_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Begin_GetFixupInfo_Proxy(
-    INapSystemHealthAgentCallback* This);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Begin_GetFixupInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Finish_GetFixupInfo_Proxy(
-    INapSystemHealthAgentCallback* This);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Finish_GetFixupInfo_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Begin_CompareSoHRequests_Proxy(
-    INapSystemHealthAgentCallback* This,
-    const SoHRequest *lhs,
-    const SoHRequest *rhs);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Begin_CompareSoHRequests_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Finish_CompareSoHRequests_Proxy(
-    INapSystemHealthAgentCallback* This,
-    const SoHRequest *lhs,
-    const SoHRequest *rhs);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Finish_CompareSoHRequests_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Begin_NotifyOrphanedSoHRequest_Proxy(
-    INapSystemHealthAgentCallback* This,
-    const CorrelationId *correlationId);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Begin_NotifyOrphanedSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthAgentCallback_Finish_NotifyOrphanedSoHRequest_Proxy(
-    INapSystemHealthAgentCallback* This,
-    const CorrelationId *correlationId);
-void __RPC_STUB AsyncINapSystemHealthAgentCallback_Finish_NotifyOrphanedSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __AsyncINapSystemHealthAgentCallback_INTERFACE_DEFINED__ */
 
@@ -875,45 +707,46 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthAgentRequest* This);
+        INapSystemHealthAgentRequest *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthAgentRequest* This);
+        INapSystemHealthAgentRequest *This);
 
     /*** INapSystemHealthAgentRequest methods ***/
     HRESULT (STDMETHODCALLTYPE *GetCorrelationId)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         CorrelationId *correlationId);
 
     HRESULT (STDMETHODCALLTYPE *GetStringCorrelationId)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         StringCorrelationId **correlationId);
 
     HRESULT (STDMETHODCALLTYPE *SetSoHRequest)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         const SoHRequest *sohRequest,
         WINBOOL cacheSohForLaterUse);
 
     HRESULT (STDMETHODCALLTYPE *GetSoHRequest)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         SoHRequest **sohRequest);
 
     HRESULT (STDMETHODCALLTYPE *GetSoHResponse)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         SoHResponse **sohResponse,
         UINT8 *flags);
 
     HRESULT (STDMETHODCALLTYPE *GetCacheSoHFlag)(
-        INapSystemHealthAgentRequest* This,
+        INapSystemHealthAgentRequest *This,
         WINBOOL *cacheSohForLaterUse);
 
     END_INTERFACE
 } INapSystemHealthAgentRequestVtbl;
+
 interface INapSystemHealthAgentRequest {
     CONST_VTBL INapSystemHealthAgentRequestVtbl* lpVtbl;
 };
@@ -966,56 +799,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentRequest_GetCorrelationId_Proxy(
-    INapSystemHealthAgentRequest* This,
-    CorrelationId *correlationId);
-void __RPC_STUB INapSystemHealthAgentRequest_GetCorrelationId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentRequest_GetStringCorrelationId_Proxy(
-    INapSystemHealthAgentRequest* This,
-    StringCorrelationId **correlationId);
-void __RPC_STUB INapSystemHealthAgentRequest_GetStringCorrelationId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentRequest_SetSoHRequest_Proxy(
-    INapSystemHealthAgentRequest* This,
-    const SoHRequest *sohRequest,
-    WINBOOL cacheSohForLaterUse);
-void __RPC_STUB INapSystemHealthAgentRequest_SetSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentRequest_GetSoHRequest_Proxy(
-    INapSystemHealthAgentRequest* This,
-    SoHRequest **sohRequest);
-void __RPC_STUB INapSystemHealthAgentRequest_GetSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentRequest_GetSoHResponse_Proxy(
-    INapSystemHealthAgentRequest* This,
-    SoHResponse **sohResponse,
-    UINT8 *flags);
-void __RPC_STUB INapSystemHealthAgentRequest_GetSoHResponse_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthAgentRequest_GetCacheSoHFlag_Proxy(
-    INapSystemHealthAgentRequest* This,
-    WINBOOL *cacheSohForLaterUse);
-void __RPC_STUB INapSystemHealthAgentRequest_GetCacheSoHFlag_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthAgentRequest_INTERFACE_DEFINED__ */
 
diff --git a/mingw-w64-headers/include/napsystemhealthvalidator.h b/mingw-w64-headers/include/napsystemhealthvalidator.h
index 78764a9..8e7d305 100644
--- a/mingw-w64-headers/include/napsystemhealthvalidator.h
+++ b/mingw-w64-headers/include/napsystemhealthvalidator.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from include/napsystemhealthvalidator.idl - Do not edit ***/
+/*** Autogenerated by WIDL 3.20 from include/napsystemhealthvalidator.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -20,26 +20,41 @@
 #ifndef __INapSystemHealthValidator_FWD_DEFINED__
 #define __INapSystemHealthValidator_FWD_DEFINED__
 typedef interface INapSystemHealthValidator INapSystemHealthValidator;
+#ifdef __cplusplus
+interface INapSystemHealthValidator;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __AsyncINapSystemHealthValidator_FWD_DEFINED__
 #define __AsyncINapSystemHealthValidator_FWD_DEFINED__
 typedef interface AsyncINapSystemHealthValidator AsyncINapSystemHealthValidator;
+#ifdef __cplusplus
+interface AsyncINapSystemHealthValidator;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapServerCallback_FWD_DEFINED__
 #define __INapServerCallback_FWD_DEFINED__
 typedef interface INapServerCallback INapServerCallback;
+#ifdef __cplusplus
+interface INapServerCallback;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthValidationRequest_FWD_DEFINED__
 #define __INapSystemHealthValidationRequest_FWD_DEFINED__
 typedef interface INapSystemHealthValidationRequest INapSystemHealthValidationRequest;
+#ifdef __cplusplus
+interface INapSystemHealthValidationRequest;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthValidationRequest2_FWD_DEFINED__
 #define __INapSystemHealthValidationRequest2_FWD_DEFINED__
 typedef interface INapSystemHealthValidationRequest2 INapSystemHealthValidationRequest2;
+#ifdef __cplusplus
+interface INapSystemHealthValidationRequest2;
+#endif /* __cplusplus */
 #endif
 
 /* Headers for imported files */
@@ -57,21 +72,25 @@
 #ifndef __INapServerCallback_FWD_DEFINED__
 #define __INapServerCallback_FWD_DEFINED__
 typedef interface INapServerCallback INapServerCallback;
+#ifdef __cplusplus
+interface INapServerCallback;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthValidator_FWD_DEFINED__
 #define __INapSystemHealthValidator_FWD_DEFINED__
 typedef interface INapSystemHealthValidator INapSystemHealthValidator;
-#endif
-
-#ifndef __AsyncINapSystemHealthValidator_FWD_DEFINED__
-#define __AsyncINapSystemHealthValidator_FWD_DEFINED__
-typedef interface AsyncINapSystemHealthValidator AsyncINapSystemHealthValidator;
+#ifdef __cplusplus
+interface INapSystemHealthValidator;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INapSystemHealthValidationRequest_FWD_DEFINED__
 #define __INapSystemHealthValidationRequest_FWD_DEFINED__
 typedef interface INapSystemHealthValidationRequest INapSystemHealthValidationRequest;
+#ifdef __cplusplus
+interface INapSystemHealthValidationRequest;
+#endif /* __cplusplus */
 #endif
 
 /*****************************************************************************
@@ -100,25 +119,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthValidator* This,
+        INapSystemHealthValidator *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthValidator* This);
+        INapSystemHealthValidator *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthValidator* This);
+        INapSystemHealthValidator *This);
 
     /*** INapSystemHealthValidator methods ***/
     HRESULT (STDMETHODCALLTYPE *Validate)(
-        INapSystemHealthValidator* This,
+        INapSystemHealthValidator *This,
         INapSystemHealthValidationRequest *request,
         UINT32 hintTimeOutInMsec,
         INapServerCallback *callback);
 
     END_INTERFACE
 } INapSystemHealthValidatorVtbl;
+
 interface INapSystemHealthValidator {
     CONST_VTBL INapSystemHealthValidatorVtbl* lpVtbl;
 };
@@ -151,16 +171,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidator_Validate_Proxy(
-    INapSystemHealthValidator* This,
-    INapSystemHealthValidationRequest *request,
-    UINT32 hintTimeOutInMsec,
-    INapServerCallback *callback);
-void __RPC_STUB INapSystemHealthValidator_Validate_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthValidator_INTERFACE_DEFINED__ */
 
@@ -175,7 +185,7 @@
 MIDL_INTERFACE("2516031a-a391-454d-b53d-c5dc84c7f2db")
 AsyncINapSystemHealthValidator : public IUnknown
 {
-    virtual void STDMETHODCALLTYPE Begin_Validate(
+    virtual HRESULT STDMETHODCALLTYPE Begin_Validate(
         INapSystemHealthValidationRequest *request,
         UINT32 hintTimeOutInMsec,
         INapServerCallback *callback) = 0;
@@ -193,28 +203,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        AsyncINapSystemHealthValidator* This,
+        AsyncINapSystemHealthValidator *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        AsyncINapSystemHealthValidator* This);
+        AsyncINapSystemHealthValidator *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        AsyncINapSystemHealthValidator* This);
+        AsyncINapSystemHealthValidator *This);
 
-    /*** INapSystemHealthValidator methods ***/
-    void (STDMETHODCALLTYPE *Begin_Validate)(
-        AsyncINapSystemHealthValidator* This,
+    /*** AsyncINapSystemHealthValidator methods ***/
+    HRESULT (STDMETHODCALLTYPE *Begin_Validate)(
+        AsyncINapSystemHealthValidator *This,
         INapSystemHealthValidationRequest *request,
         UINT32 hintTimeOutInMsec,
         INapServerCallback *callback);
 
     HRESULT (STDMETHODCALLTYPE *Finish_Validate)(
-        AsyncINapSystemHealthValidator* This);
+        AsyncINapSystemHealthValidator *This);
 
     END_INTERFACE
 } AsyncINapSystemHealthValidatorVtbl;
+
 interface AsyncINapSystemHealthValidator {
     CONST_VTBL AsyncINapSystemHealthValidatorVtbl* lpVtbl;
 };
@@ -225,7 +236,7 @@
 #define AsyncINapSystemHealthValidator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define AsyncINapSystemHealthValidator_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define AsyncINapSystemHealthValidator_Release(This) (This)->lpVtbl->Release(This)
-/*** INapSystemHealthValidator methods ***/
+/*** AsyncINapSystemHealthValidator methods ***/
 #define AsyncINapSystemHealthValidator_Begin_Validate(This,request,hintTimeOutInMsec,callback) (This)->lpVtbl->Begin_Validate(This,request,hintTimeOutInMsec,callback)
 #define AsyncINapSystemHealthValidator_Finish_Validate(This) (This)->lpVtbl->Finish_Validate(This)
 #else
@@ -239,11 +250,11 @@
 static FORCEINLINE ULONG AsyncINapSystemHealthValidator_Release(AsyncINapSystemHealthValidator* This) {
     return This->lpVtbl->Release(This);
 }
-/*** INapSystemHealthValidator methods ***/
-static FORCEINLINE void Begin_AsyncINapSystemHealthValidator_Validate(AsyncINapSystemHealthValidator* This,INapSystemHealthValidationRequest *request,UINT32 hintTimeOutInMsec,INapServerCallback *callback) {
-    This->lpVtbl->Begin_Validate(This,request,hintTimeOutInMsec,callback);
+/*** AsyncINapSystemHealthValidator methods ***/
+static FORCEINLINE HRESULT AsyncINapSystemHealthValidator_Begin_Validate(AsyncINapSystemHealthValidator* This,INapSystemHealthValidationRequest *request,UINT32 hintTimeOutInMsec,INapServerCallback *callback) {
+    return This->lpVtbl->Begin_Validate(This,request,hintTimeOutInMsec,callback);
 }
-static FORCEINLINE HRESULT Finish_AsyncINapSystemHealthValidator_Validate(AsyncINapSystemHealthValidator* This) {
+static FORCEINLINE HRESULT AsyncINapSystemHealthValidator_Finish_Validate(AsyncINapSystemHealthValidator* This) {
     return This->lpVtbl->Finish_Validate(This);
 }
 #endif
@@ -251,26 +262,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthValidator_Begin_Validate_Proxy(
-    INapSystemHealthValidator* This,
-    INapSystemHealthValidationRequest *request,
-    UINT32 hintTimeOutInMsec,
-    INapServerCallback *callback);
-void __RPC_STUB AsyncINapSystemHealthValidator_Begin_Validate_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncINapSystemHealthValidator_Finish_Validate_Proxy(
-    INapSystemHealthValidator* This,
-    INapSystemHealthValidationRequest *request,
-    UINT32 hintTimeOutInMsec,
-    INapServerCallback *callback);
-void __RPC_STUB AsyncINapSystemHealthValidator_Finish_Validate_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __AsyncINapSystemHealthValidator_INTERFACE_DEFINED__ */
 
@@ -299,24 +290,25 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapServerCallback* This,
+        INapServerCallback *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapServerCallback* This);
+        INapServerCallback *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapServerCallback* This);
+        INapServerCallback *This);
 
     /*** INapServerCallback methods ***/
     HRESULT (STDMETHODCALLTYPE *OnComplete)(
-        INapServerCallback* This,
+        INapServerCallback *This,
         INapSystemHealthValidationRequest *request,
         HRESULT errorCode);
 
     END_INTERFACE
 } INapServerCallbackVtbl;
+
 interface INapServerCallback {
     CONST_VTBL INapServerCallbackVtbl* lpVtbl;
 };
@@ -349,15 +341,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapServerCallback_OnComplete_Proxy(
-    INapServerCallback* This,
-    INapSystemHealthValidationRequest *request,
-    HRESULT errorCode);
-void __RPC_STUB INapServerCallback_OnComplete_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapServerCallback_INTERFACE_DEFINED__ */
 
@@ -407,52 +390,53 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthValidationRequest* This);
+        INapSystemHealthValidationRequest *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthValidationRequest* This);
+        INapSystemHealthValidationRequest *This);
 
     /*** INapSystemHealthValidationRequest methods ***/
     HRESULT (STDMETHODCALLTYPE *GetCorrelationId)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         CorrelationId *correlationId);
 
     HRESULT (STDMETHODCALLTYPE *GetStringCorrelationId)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         StringCorrelationId **correlationId);
 
     HRESULT (STDMETHODCALLTYPE *GetMachineName)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         CountedString **machineName);
 
     HRESULT (STDMETHODCALLTYPE *GetSoHRequest)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         SoHRequest **sohRequest,
         WINBOOL *napSystemGenerated);
 
     HRESULT (STDMETHODCALLTYPE *SetSoHResponse)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         const SoHResponse *sohResponse);
 
     HRESULT (STDMETHODCALLTYPE *GetSoHResponse)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         SoHResponse **sohResponse);
 
     HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         const PrivateData *privateData);
 
     HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
-        INapSystemHealthValidationRequest* This,
+        INapSystemHealthValidationRequest *This,
         PrivateData **privateData);
 
     END_INTERFACE
 } INapSystemHealthValidationRequestVtbl;
+
 interface INapSystemHealthValidationRequest {
     CONST_VTBL INapSystemHealthValidationRequestVtbl* lpVtbl;
 };
@@ -513,71 +497,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_GetCorrelationId_Proxy(
-    INapSystemHealthValidationRequest* This,
-    CorrelationId *correlationId);
-void __RPC_STUB INapSystemHealthValidationRequest_GetCorrelationId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_GetStringCorrelationId_Proxy(
-    INapSystemHealthValidationRequest* This,
-    StringCorrelationId **correlationId);
-void __RPC_STUB INapSystemHealthValidationRequest_GetStringCorrelationId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_GetMachineName_Proxy(
-    INapSystemHealthValidationRequest* This,
-    CountedString **machineName);
-void __RPC_STUB INapSystemHealthValidationRequest_GetMachineName_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_GetSoHRequest_Proxy(
-    INapSystemHealthValidationRequest* This,
-    SoHRequest **sohRequest,
-    WINBOOL *napSystemGenerated);
-void __RPC_STUB INapSystemHealthValidationRequest_GetSoHRequest_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_SetSoHResponse_Proxy(
-    INapSystemHealthValidationRequest* This,
-    const SoHResponse *sohResponse);
-void __RPC_STUB INapSystemHealthValidationRequest_SetSoHResponse_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_GetSoHResponse_Proxy(
-    INapSystemHealthValidationRequest* This,
-    SoHResponse **sohResponse);
-void __RPC_STUB INapSystemHealthValidationRequest_GetSoHResponse_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_SetPrivateData_Proxy(
-    INapSystemHealthValidationRequest* This,
-    const PrivateData *privateData);
-void __RPC_STUB INapSystemHealthValidationRequest_SetPrivateData_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest_GetPrivateData_Proxy(
-    INapSystemHealthValidationRequest* This,
-    PrivateData **privateData);
-void __RPC_STUB INapSystemHealthValidationRequest_GetPrivateData_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthValidationRequest_INTERFACE_DEFINED__ */
 
@@ -605,57 +524,58 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INapSystemHealthValidationRequest2* This);
+        INapSystemHealthValidationRequest2 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INapSystemHealthValidationRequest2* This);
+        INapSystemHealthValidationRequest2 *This);
 
     /*** INapSystemHealthValidationRequest methods ***/
     HRESULT (STDMETHODCALLTYPE *GetCorrelationId)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         CorrelationId *correlationId);
 
     HRESULT (STDMETHODCALLTYPE *GetStringCorrelationId)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         StringCorrelationId **correlationId);
 
     HRESULT (STDMETHODCALLTYPE *GetMachineName)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         CountedString **machineName);
 
     HRESULT (STDMETHODCALLTYPE *GetSoHRequest)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         SoHRequest **sohRequest,
         WINBOOL *napSystemGenerated);
 
     HRESULT (STDMETHODCALLTYPE *SetSoHResponse)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         const SoHResponse *sohResponse);
 
     HRESULT (STDMETHODCALLTYPE *GetSoHResponse)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         SoHResponse **sohResponse);
 
     HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         const PrivateData *privateData);
 
     HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         PrivateData **privateData);
 
     /*** INapSystemHealthValidationRequest2 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetConfigID)(
-        INapSystemHealthValidationRequest2* This,
+        INapSystemHealthValidationRequest2 *This,
         UINT32 *configID);
 
     END_INTERFACE
 } INapSystemHealthValidationRequest2Vtbl;
+
 interface INapSystemHealthValidationRequest2 {
     CONST_VTBL INapSystemHealthValidationRequest2Vtbl* lpVtbl;
 };
@@ -722,14 +642,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE INapSystemHealthValidationRequest2_GetConfigID_Proxy(
-    INapSystemHealthValidationRequest2* This,
-    UINT32 *configID);
-void __RPC_STUB INapSystemHealthValidationRequest2_GetConfigID_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __INapSystemHealthValidationRequest2_INTERFACE_DEFINED__ */
 
diff --git a/mingw-w64-headers/include/objidlbase.h b/mingw-w64-headers/include/objidlbase.h
index 3ac1aae..e2b95d2 100644
--- a/mingw-w64-headers/include/objidlbase.h
+++ b/mingw-w64-headers/include/objidlbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.6 from include/objidlbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 3.20 from include/objidlbase.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -20,261 +20,417 @@
 #ifndef __IMarshal_FWD_DEFINED__
 #define __IMarshal_FWD_DEFINED__
 typedef interface IMarshal IMarshal;
+#ifdef __cplusplus
+interface IMarshal;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __INoMarshal_FWD_DEFINED__
 #define __INoMarshal_FWD_DEFINED__
 typedef interface INoMarshal INoMarshal;
+#ifdef __cplusplus
+interface INoMarshal;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IAgileObject_FWD_DEFINED__
 #define __IAgileObject_FWD_DEFINED__
 typedef interface IAgileObject IAgileObject;
+#ifdef __cplusplus
+interface IAgileObject;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IAgileReference_FWD_DEFINED__
 #define __IAgileReference_FWD_DEFINED__
 typedef interface IAgileReference IAgileReference;
+#ifdef __cplusplus
+interface IAgileReference;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMarshal2_FWD_DEFINED__
 #define __IMarshal2_FWD_DEFINED__
 typedef interface IMarshal2 IMarshal2;
+#ifdef __cplusplus
+interface IMarshal2;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMalloc_FWD_DEFINED__
 #define __IMalloc_FWD_DEFINED__
 typedef interface IMalloc IMalloc;
+#ifdef __cplusplus
+interface IMalloc;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IStdMarshalInfo_FWD_DEFINED__
 #define __IStdMarshalInfo_FWD_DEFINED__
 typedef interface IStdMarshalInfo IStdMarshalInfo;
+#ifdef __cplusplus
+interface IStdMarshalInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IExternalConnection_FWD_DEFINED__
 #define __IExternalConnection_FWD_DEFINED__
 typedef interface IExternalConnection IExternalConnection;
+#ifdef __cplusplus
+interface IExternalConnection;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMultiQI_FWD_DEFINED__
 #define __IMultiQI_FWD_DEFINED__
 typedef interface IMultiQI IMultiQI;
+#ifdef __cplusplus
+interface IMultiQI;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __AsyncIMultiQI_FWD_DEFINED__
 #define __AsyncIMultiQI_FWD_DEFINED__
 typedef interface AsyncIMultiQI AsyncIMultiQI;
+#ifdef __cplusplus
+interface AsyncIMultiQI;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IInternalUnknown_FWD_DEFINED__
 #define __IInternalUnknown_FWD_DEFINED__
 typedef interface IInternalUnknown IInternalUnknown;
+#ifdef __cplusplus
+interface IInternalUnknown;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumUnknown_FWD_DEFINED__
 #define __IEnumUnknown_FWD_DEFINED__
 typedef interface IEnumUnknown IEnumUnknown;
+#ifdef __cplusplus
+interface IEnumUnknown;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumString_FWD_DEFINED__
 #define __IEnumString_FWD_DEFINED__
 typedef interface IEnumString IEnumString;
+#ifdef __cplusplus
+interface IEnumString;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISequentialStream_FWD_DEFINED__
 #define __ISequentialStream_FWD_DEFINED__
 typedef interface ISequentialStream ISequentialStream;
+#ifdef __cplusplus
+interface ISequentialStream;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IStream_FWD_DEFINED__
 #define __IStream_FWD_DEFINED__
 typedef interface IStream IStream;
+#ifdef __cplusplus
+interface IStream;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcChannelBuffer_FWD_DEFINED__
 #define __IRpcChannelBuffer_FWD_DEFINED__
 typedef interface IRpcChannelBuffer IRpcChannelBuffer;
+#ifdef __cplusplus
+interface IRpcChannelBuffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcChannelBuffer2_FWD_DEFINED__
 #define __IRpcChannelBuffer2_FWD_DEFINED__
 typedef interface IRpcChannelBuffer2 IRpcChannelBuffer2;
+#ifdef __cplusplus
+interface IRpcChannelBuffer2;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IAsyncRpcChannelBuffer_FWD_DEFINED__
 #define __IAsyncRpcChannelBuffer_FWD_DEFINED__
 typedef interface IAsyncRpcChannelBuffer IAsyncRpcChannelBuffer;
+#ifdef __cplusplus
+interface IAsyncRpcChannelBuffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcChannelBuffer3_FWD_DEFINED__
 #define __IRpcChannelBuffer3_FWD_DEFINED__
 typedef interface IRpcChannelBuffer3 IRpcChannelBuffer3;
+#ifdef __cplusplus
+interface IRpcChannelBuffer3;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcSyntaxNegotiate_FWD_DEFINED__
 #define __IRpcSyntaxNegotiate_FWD_DEFINED__
 typedef interface IRpcSyntaxNegotiate IRpcSyntaxNegotiate;
+#ifdef __cplusplus
+interface IRpcSyntaxNegotiate;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcProxyBuffer_FWD_DEFINED__
 #define __IRpcProxyBuffer_FWD_DEFINED__
 typedef interface IRpcProxyBuffer IRpcProxyBuffer;
+#ifdef __cplusplus
+interface IRpcProxyBuffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcStubBuffer_FWD_DEFINED__
 #define __IRpcStubBuffer_FWD_DEFINED__
 typedef interface IRpcStubBuffer IRpcStubBuffer;
+#ifdef __cplusplus
+interface IRpcStubBuffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IPSFactoryBuffer_FWD_DEFINED__
 #define __IPSFactoryBuffer_FWD_DEFINED__
 typedef interface IPSFactoryBuffer IPSFactoryBuffer;
+#ifdef __cplusplus
+interface IPSFactoryBuffer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IChannelHook_FWD_DEFINED__
 #define __IChannelHook_FWD_DEFINED__
 typedef interface IChannelHook IChannelHook;
+#ifdef __cplusplus
+interface IChannelHook;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IClientSecurity_FWD_DEFINED__
 #define __IClientSecurity_FWD_DEFINED__
 typedef interface IClientSecurity IClientSecurity;
+#ifdef __cplusplus
+interface IClientSecurity;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IServerSecurity_FWD_DEFINED__
 #define __IServerSecurity_FWD_DEFINED__
 typedef interface IServerSecurity IServerSecurity;
+#ifdef __cplusplus
+interface IServerSecurity;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcOptions_FWD_DEFINED__
 #define __IRpcOptions_FWD_DEFINED__
 typedef interface IRpcOptions IRpcOptions;
+#ifdef __cplusplus
+interface IRpcOptions;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IGlobalOptions_FWD_DEFINED__
 #define __IGlobalOptions_FWD_DEFINED__
 typedef interface IGlobalOptions IGlobalOptions;
+#ifdef __cplusplus
+interface IGlobalOptions;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISurrogate_FWD_DEFINED__
 #define __ISurrogate_FWD_DEFINED__
 typedef interface ISurrogate ISurrogate;
+#ifdef __cplusplus
+interface ISurrogate;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IGlobalInterfaceTable_FWD_DEFINED__
 #define __IGlobalInterfaceTable_FWD_DEFINED__
 typedef interface IGlobalInterfaceTable IGlobalInterfaceTable;
+#ifdef __cplusplus
+interface IGlobalInterfaceTable;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISynchronize_FWD_DEFINED__
 #define __ISynchronize_FWD_DEFINED__
 typedef interface ISynchronize ISynchronize;
+#ifdef __cplusplus
+interface ISynchronize;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISynchronizeHandle_FWD_DEFINED__
 #define __ISynchronizeHandle_FWD_DEFINED__
 typedef interface ISynchronizeHandle ISynchronizeHandle;
+#ifdef __cplusplus
+interface ISynchronizeHandle;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISynchronizeEvent_FWD_DEFINED__
 #define __ISynchronizeEvent_FWD_DEFINED__
 typedef interface ISynchronizeEvent ISynchronizeEvent;
+#ifdef __cplusplus
+interface ISynchronizeEvent;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISynchronizeContainer_FWD_DEFINED__
 #define __ISynchronizeContainer_FWD_DEFINED__
 typedef interface ISynchronizeContainer ISynchronizeContainer;
+#ifdef __cplusplus
+interface ISynchronizeContainer;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISynchronizeMutex_FWD_DEFINED__
 #define __ISynchronizeMutex_FWD_DEFINED__
 typedef interface ISynchronizeMutex ISynchronizeMutex;
+#ifdef __cplusplus
+interface ISynchronizeMutex;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ICancelMethodCalls_FWD_DEFINED__
 #define __ICancelMethodCalls_FWD_DEFINED__
 typedef interface ICancelMethodCalls ICancelMethodCalls;
+#ifdef __cplusplus
+interface ICancelMethodCalls;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IAsyncManager_FWD_DEFINED__
 #define __IAsyncManager_FWD_DEFINED__
 typedef interface IAsyncManager IAsyncManager;
+#ifdef __cplusplus
+interface IAsyncManager;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ICallFactory_FWD_DEFINED__
 #define __ICallFactory_FWD_DEFINED__
 typedef interface ICallFactory ICallFactory;
+#ifdef __cplusplus
+interface ICallFactory;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IRpcHelper_FWD_DEFINED__
 #define __IRpcHelper_FWD_DEFINED__
 typedef interface IRpcHelper IRpcHelper;
+#ifdef __cplusplus
+interface IRpcHelper;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IReleaseMarshalBuffers_FWD_DEFINED__
 #define __IReleaseMarshalBuffers_FWD_DEFINED__
 typedef interface IReleaseMarshalBuffers IReleaseMarshalBuffers;
+#ifdef __cplusplus
+interface IReleaseMarshalBuffers;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IWaitMultiple_FWD_DEFINED__
 #define __IWaitMultiple_FWD_DEFINED__
 typedef interface IWaitMultiple IWaitMultiple;
+#ifdef __cplusplus
+interface IWaitMultiple;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IAddrTrackingControl_FWD_DEFINED__
 #define __IAddrTrackingControl_FWD_DEFINED__
 typedef interface IAddrTrackingControl IAddrTrackingControl;
+#ifdef __cplusplus
+interface IAddrTrackingControl;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IAddrExclusionControl_FWD_DEFINED__
 #define __IAddrExclusionControl_FWD_DEFINED__
 typedef interface IAddrExclusionControl IAddrExclusionControl;
+#ifdef __cplusplus
+interface IAddrExclusionControl;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IPipeByte_FWD_DEFINED__
 #define __IPipeByte_FWD_DEFINED__
 typedef interface IPipeByte IPipeByte;
+#ifdef __cplusplus
+interface IPipeByte;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IPipeLong_FWD_DEFINED__
 #define __IPipeLong_FWD_DEFINED__
 typedef interface IPipeLong IPipeLong;
+#ifdef __cplusplus
+interface IPipeLong;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IPipeDouble_FWD_DEFINED__
 #define __IPipeDouble_FWD_DEFINED__
 typedef interface IPipeDouble IPipeDouble;
+#ifdef __cplusplus
+interface IPipeDouble;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumContextProps_FWD_DEFINED__
 #define __IEnumContextProps_FWD_DEFINED__
 typedef interface IEnumContextProps IEnumContextProps;
+#ifdef __cplusplus
+interface IEnumContextProps;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IContext_FWD_DEFINED__
 #define __IContext_FWD_DEFINED__
 typedef interface IContext IContext;
+#ifdef __cplusplus
+interface IContext;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IComThreadingInfo_FWD_DEFINED__
 #define __IComThreadingInfo_FWD_DEFINED__
 typedef interface IComThreadingInfo IComThreadingInfo;
+#ifdef __cplusplus
+interface IComThreadingInfo;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IProcessInitControl_FWD_DEFINED__
 #define __IProcessInitControl_FWD_DEFINED__
 typedef interface IProcessInitControl IProcessInitControl;
+#ifdef __cplusplus
+interface IProcessInitControl;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IFastRundown_FWD_DEFINED__
 #define __IFastRundown_FWD_DEFINED__
 typedef interface IFastRundown IFastRundown;
+#ifdef __cplusplus
+interface IFastRundown;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMarshalingStream_FWD_DEFINED__
 #define __IMarshalingStream_FWD_DEFINED__
 typedef interface IMarshalingStream IMarshalingStream;
+#ifdef __cplusplus
+interface IMarshalingStream;
+#endif /* __cplusplus */
 #endif
 
 /* Headers for imported files */
@@ -311,21 +467,25 @@
 #ifndef __IStream_FWD_DEFINED__
 #define __IStream_FWD_DEFINED__
 typedef interface IStream IStream;
+#ifdef __cplusplus
+interface IStream;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IEnumString_FWD_DEFINED__
 #define __IEnumString_FWD_DEFINED__
 typedef interface IEnumString IEnumString;
+#ifdef __cplusplus
+interface IEnumString;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __IMultiQI_FWD_DEFINED__
 #define __IMultiQI_FWD_DEFINED__
 typedef interface IMultiQI IMultiQI;
-#endif
-
-#ifndef __AsyncIMultiQI_FWD_DEFINED__
-#define __AsyncIMultiQI_FWD_DEFINED__
-typedef interface AsyncIMultiQI AsyncIMultiQI;
+#ifdef __cplusplus
+interface IMultiQI;
+#endif /* __cplusplus */
 #endif
 
 #endif
@@ -334,16 +494,25 @@
 #ifndef __IAsyncManager_FWD_DEFINED__
 #define __IAsyncManager_FWD_DEFINED__
 typedef interface IAsyncManager IAsyncManager;
+#ifdef __cplusplus
+interface IAsyncManager;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ICallFactory_FWD_DEFINED__
 #define __ICallFactory_FWD_DEFINED__
 typedef interface ICallFactory ICallFactory;
+#ifdef __cplusplus
+interface ICallFactory;
+#endif /* __cplusplus */
 #endif
 
 #ifndef __ISynchronize_FWD_DEFINED__
 #define __ISynchronize_FWD_DEFINED__
 typedef interface ISynchronize ISynchronize;
+#ifdef __cplusplus
+interface ISynchronize;
+#endif /* __cplusplus */
 #endif
 
 #endif
@@ -413,19 +582,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMarshal* This,
+        IMarshal *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMarshal* This);
+        IMarshal *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMarshal* This);
+        IMarshal *This);
 
     /*** IMarshal methods ***/
     HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
-        IMarshal* This,
+        IMarshal *This,
         REFIID riid,
         void *pv,
         DWORD dwDestContext,
@@ -434,7 +603,7 @@
         CLSID *pCid);
 
     HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
-        IMarshal* This,
+        IMarshal *This,
         REFIID riid,
         void *pv,
         DWORD dwDestContext,
@@ -443,7 +612,7 @@
         DWORD *pSize);
 
     HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
-        IMarshal* This,
+        IMarshal *This,
         IStream *pStm,
         REFIID riid,
         void *pv,
@@ -452,21 +621,22 @@
         DWORD mshlflags);
 
     HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
-        IMarshal* This,
+        IMarshal *This,
         IStream *pStm,
         REFIID riid,
         void **ppv);
 
     HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
-        IMarshal* This,
+        IMarshal *This,
         IStream *pStm);
 
     HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
-        IMarshal* This,
+        IMarshal *This,
         DWORD dwReserved);
 
     END_INTERFACE
 } IMarshalVtbl;
+
 interface IMarshal {
     CONST_VTBL IMarshalVtbl* lpVtbl;
 };
@@ -519,71 +689,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IMarshal_GetUnmarshalClass_Proxy(
-    IMarshal* This,
-    REFIID riid,
-    void *pv,
-    DWORD dwDestContext,
-    void *pvDestContext,
-    DWORD mshlflags,
-    CLSID *pCid);
-void __RPC_STUB IMarshal_GetUnmarshalClass_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMarshal_GetMarshalSizeMax_Proxy(
-    IMarshal* This,
-    REFIID riid,
-    void *pv,
-    DWORD dwDestContext,
-    void *pvDestContext,
-    DWORD mshlflags,
-    DWORD *pSize);
-void __RPC_STUB IMarshal_GetMarshalSizeMax_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMarshal_MarshalInterface_Proxy(
-    IMarshal* This,
-    IStream *pStm,
-    REFIID riid,
-    void *pv,
-    DWORD dwDestContext,
-    void *pvDestContext,
-    DWORD mshlflags);
-void __RPC_STUB IMarshal_MarshalInterface_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMarshal_UnmarshalInterface_Proxy(
-    IMarshal* This,
-    IStream *pStm,
-    REFIID riid,
-    void **ppv);
-void __RPC_STUB IMarshal_UnmarshalInterface_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMarshal_ReleaseMarshalData_Proxy(
-    IMarshal* This,
-    IStream *pStm);
-void __RPC_STUB IMarshal_ReleaseMarshalData_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IMarshal_DisconnectObject_Proxy(
-    IMarshal* This,
-    DWORD dwReserved);
-void __RPC_STUB IMarshal_DisconnectObject_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMarshal_INTERFACE_DEFINED__ */
 
@@ -609,18 +714,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        INoMarshal* This,
+        INoMarshal *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        INoMarshal* This);
+        INoMarshal *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        INoMarshal* This);
+        INoMarshal *This);
 
     END_INTERFACE
 } INoMarshalVtbl;
+
 interface INoMarshal {
     CONST_VTBL INoMarshalVtbl* lpVtbl;
 };
@@ -672,18 +778,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IAgileObject* This,
+        IAgileObject *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IAgileObject* This);
+        IAgileObject *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IAgileObject* This);
+        IAgileObject *This);
 
     END_INTERFACE
 } IAgileObjectVtbl;
+
 interface IAgileObject {
     CONST_VTBL IAgileObjectVtbl* lpVtbl;
 };
@@ -738,24 +845,25 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IAgileReference* This,
+        IAgileReference *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IAgileReference* This);
+        IAgileReference *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IAgileReference* This);
+        IAgileReference *This);
 
     /*** IAgileReference methods ***/
     HRESULT (STDMETHODCALLTYPE *Resolve)(
-        IAgileReference* This,
+        IAgileReference *This,
         REFIID riid,
         void **ppv);
 
     END_INTERFACE
 } IAgileReferenceVtbl;
+
 interface IAgileReference {
     CONST_VTBL IAgileReferenceVtbl* lpVtbl;
 };
@@ -788,15 +896,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IAgileReference_Resolve_Proxy(
-    IAgileReference* This,
-    REFIID riid,
-    void **ppv);
-void __RPC_STUB IAgileReference_Resolve_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IAgileReference_INTERFACE_DEFINED__ */
 
@@ -825,19 +924,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMarshal2* This,
+        IMarshal2 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMarshal2* This);
+        IMarshal2 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMarshal2* This);
+        IMarshal2 *This);
 
     /*** IMarshal methods ***/
     HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
-        IMarshal2* This,
+        IMarshal2 *This,
         REFIID riid,
         void *pv,
         DWORD dwDestContext,
@@ -846,7 +945,7 @@
         CLSID *pCid);
 
     HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
-        IMarshal2* This,
+        IMarshal2 *This,
         REFIID riid,
         void *pv,
         DWORD dwDestContext,
@@ -855,7 +954,7 @@
         DWORD *pSize);
 
     HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
-        IMarshal2* This,
+        IMarshal2 *This,
         IStream *pStm,
         REFIID riid,
         void *pv,
@@ -864,21 +963,22 @@
         DWORD mshlflags);
 
     HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
-        IMarshal2* This,
+        IMarshal2 *This,
         IStream *pStm,
         REFIID riid,
         void **ppv);
 
     HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
-        IMarshal2* This,
+        IMarshal2 *This,
         IStream *pStm);
 
     HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
-        IMarshal2* This,
+        IMarshal2 *This,
         DWORD dwReserved);
 
     END_INTERFACE
 } IMarshal2Vtbl;
+
 interface IMarshal2 {
     CONST_VTBL IMarshal2Vtbl* lpVtbl;
 };
@@ -977,43 +1077,44 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMalloc* This,
+        IMalloc *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMalloc* This);
+        IMalloc *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMalloc* This);
+        IMalloc *This);
 
     /*** IMalloc methods ***/
     void * (STDMETHODCALLTYPE *Alloc)(
-        IMalloc* This,
+        IMalloc *This,
         SIZE_T cb);
 
     void * (STDMETHODCALLTYPE *Realloc)(
-        IMalloc* This,
+        IMalloc *This,
         void *pv,
         SIZE_T cb);
 
     void (STDMETHODCALLTYPE *Free)(
-        IMalloc* This,
+        IMalloc *This,
         void *pv);
 
     SIZE_T (STDMETHODCALLTYPE *GetSize)(
-        IMalloc* This,
+        IMalloc *This,
         void *pv);
 
     int (STDMETHODCALLTYPE *DidAlloc)(
-        IMalloc* This,
+        IMalloc *This,
         void *pv);
 
     void (STDMETHODCALLTYPE *HeapMinimize)(
-        IMalloc* This);
+        IMalloc *This);
 
     END_INTERFACE
 } IMallocVtbl;
+
 interface IMalloc {
     CONST_VTBL IMallocVtbl* lpVtbl;
 };
@@ -1066,54 +1167,6 @@
 
 #endif
 
-void * STDMETHODCALLTYPE IMalloc_Alloc_Proxy(
-    IMalloc* This,
-    SIZE_T cb);
-void __RPC_STUB IMalloc_Alloc_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void * STDMETHODCALLTYPE IMalloc_Realloc_Proxy(
-    IMalloc* This,
-    void *pv,
-    SIZE_T cb);
-void __RPC_STUB IMalloc_Realloc_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IMalloc_Free_Proxy(
-    IMalloc* This,
-    void *pv);
-void __RPC_STUB IMalloc_Free_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-SIZE_T STDMETHODCALLTYPE IMalloc_GetSize_Proxy(
-    IMalloc* This,
-    void *pv);
-void __RPC_STUB IMalloc_GetSize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-int STDMETHODCALLTYPE IMalloc_DidAlloc_Proxy(
-    IMalloc* This,
-    void *pv);
-void __RPC_STUB IMalloc_DidAlloc_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IMalloc_HeapMinimize_Proxy(
-    IMalloc* This);
-void __RPC_STUB IMalloc_HeapMinimize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMalloc_INTERFACE_DEFINED__ */
 
@@ -1146,25 +1199,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IStdMarshalInfo* This,
+        IStdMarshalInfo *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IStdMarshalInfo* This);
+        IStdMarshalInfo *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IStdMarshalInfo* This);
+        IStdMarshalInfo *This);
 
     /*** IStdMarshalInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetClassForHandler)(
-        IStdMarshalInfo* This,
+        IStdMarshalInfo *This,
         DWORD dwDestContext,
         void *pvDestContext,
         CLSID *pClsid);
 
     END_INTERFACE
 } IStdMarshalInfoVtbl;
+
 interface IStdMarshalInfo {
     CONST_VTBL IStdMarshalInfoVtbl* lpVtbl;
 };
@@ -1197,16 +1251,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IStdMarshalInfo_GetClassForHandler_Proxy(
-    IStdMarshalInfo* This,
-    DWORD dwDestContext,
-    void *pvDestContext,
-    CLSID *pClsid);
-void __RPC_STUB IStdMarshalInfo_GetClassForHandler_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IStdMarshalInfo_INTERFACE_DEFINED__ */
 
@@ -1249,30 +1293,31 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IExternalConnection* This,
+        IExternalConnection *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IExternalConnection* This);
+        IExternalConnection *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IExternalConnection* This);
+        IExternalConnection *This);
 
     /*** IExternalConnection methods ***/
     DWORD (STDMETHODCALLTYPE *AddConnection)(
-        IExternalConnection* This,
+        IExternalConnection *This,
         DWORD extconn,
         DWORD reserved);
 
     DWORD (STDMETHODCALLTYPE *ReleaseConnection)(
-        IExternalConnection* This,
+        IExternalConnection *This,
         DWORD extconn,
         DWORD reserved,
         WINBOOL fLastReleaseCloses);
 
     END_INTERFACE
 } IExternalConnectionVtbl;
+
 interface IExternalConnection {
     CONST_VTBL IExternalConnectionVtbl* lpVtbl;
 };
@@ -1309,25 +1354,6 @@
 
 #endif
 
-DWORD STDMETHODCALLTYPE IExternalConnection_AddConnection_Proxy(
-    IExternalConnection* This,
-    DWORD extconn,
-    DWORD reserved);
-void __RPC_STUB IExternalConnection_AddConnection_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-DWORD STDMETHODCALLTYPE IExternalConnection_ReleaseConnection_Proxy(
-    IExternalConnection* This,
-    DWORD extconn,
-    DWORD reserved,
-    WINBOOL fLastReleaseCloses);
-void __RPC_STUB IExternalConnection_ReleaseConnection_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IExternalConnection_INTERFACE_DEFINED__ */
 
@@ -1367,24 +1393,25 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMultiQI* This,
+        IMultiQI *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMultiQI* This);
+        IMultiQI *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMultiQI* This);
+        IMultiQI *This);
 
     /*** IMultiQI methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryMultipleInterfaces)(
-        IMultiQI* This,
+        IMultiQI *This,
         ULONG cMQIs,
         MULTI_QI *pMQIs);
 
     END_INTERFACE
 } IMultiQIVtbl;
+
 interface IMultiQI {
     CONST_VTBL IMultiQIVtbl* lpVtbl;
 };
@@ -1417,15 +1444,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IMultiQI_QueryMultipleInterfaces_Proxy(
-    IMultiQI* This,
-    ULONG cMQIs,
-    MULTI_QI *pMQIs);
-void __RPC_STUB IMultiQI_QueryMultipleInterfaces_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMultiQI_INTERFACE_DEFINED__ */
 
@@ -1440,7 +1458,7 @@
 MIDL_INTERFACE("000e0020-0000-0000-c000-000000000046")
 AsyncIMultiQI : public IUnknown
 {
-    virtual void STDMETHODCALLTYPE Begin_QueryMultipleInterfaces(
+    virtual HRESULT STDMETHODCALLTYPE Begin_QueryMultipleInterfaces(
         ULONG cMQIs,
         MULTI_QI *pMQIs) = 0;
 
@@ -1457,28 +1475,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        AsyncIMultiQI* This,
+        AsyncIMultiQI *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        AsyncIMultiQI* This);
+        AsyncIMultiQI *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        AsyncIMultiQI* This);
+        AsyncIMultiQI *This);
 
-    /*** IMultiQI methods ***/
-    void (STDMETHODCALLTYPE *Begin_QueryMultipleInterfaces)(
-        AsyncIMultiQI* This,
+    /*** AsyncIMultiQI methods ***/
+    HRESULT (STDMETHODCALLTYPE *Begin_QueryMultipleInterfaces)(
+        AsyncIMultiQI *This,
         ULONG cMQIs,
         MULTI_QI *pMQIs);
 
     HRESULT (STDMETHODCALLTYPE *Finish_QueryMultipleInterfaces)(
-        AsyncIMultiQI* This,
+        AsyncIMultiQI *This,
         MULTI_QI *pMQIs);
 
     END_INTERFACE
 } AsyncIMultiQIVtbl;
+
 interface AsyncIMultiQI {
     CONST_VTBL AsyncIMultiQIVtbl* lpVtbl;
 };
@@ -1489,7 +1508,7 @@
 #define AsyncIMultiQI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 #define AsyncIMultiQI_AddRef(This) (This)->lpVtbl->AddRef(This)
 #define AsyncIMultiQI_Release(This) (This)->lpVtbl->Release(This)
-/*** IMultiQI methods ***/
+/*** AsyncIMultiQI methods ***/
 #define AsyncIMultiQI_Begin_QueryMultipleInterfaces(This,cMQIs,pMQIs) (This)->lpVtbl->Begin_QueryMultipleInterfaces(This,cMQIs,pMQIs)
 #define AsyncIMultiQI_Finish_QueryMultipleInterfaces(This,pMQIs) (This)->lpVtbl->Finish_QueryMultipleInterfaces(This,pMQIs)
 #else
@@ -1503,36 +1522,18 @@
 static FORCEINLINE ULONG AsyncIMultiQI_Release(AsyncIMultiQI* This) {
     return This->lpVtbl->Release(This);
 }
-/*** IMultiQI methods ***/
-static FORCEINLINE void Begin_AsyncIMultiQI_QueryMultipleInterfaces(AsyncIMultiQI* This,ULONG cMQIs,MULTI_QI *pMQIs) {
-    This->lpVtbl->Begin_QueryMultipleInterfaces(This,cMQIs,pMQIs);
+/*** AsyncIMultiQI methods ***/
+static FORCEINLINE HRESULT AsyncIMultiQI_Begin_QueryMultipleInterfaces(AsyncIMultiQI* This,ULONG cMQIs,MULTI_QI *pMQIs) {
+    return This->lpVtbl->Begin_QueryMultipleInterfaces(This,cMQIs,pMQIs);
 }
-static FORCEINLINE HRESULT Finish_AsyncIMultiQI_QueryMultipleInterfaces(AsyncIMultiQI* This,MULTI_QI *pMQIs) {
-    return This->lpVtbl->Finish_QueryMultipleInterfaces(This);
+static FORCEINLINE HRESULT AsyncIMultiQI_Finish_QueryMultipleInterfaces(AsyncIMultiQI* This,MULTI_QI *pMQIs) {
+    return This->lpVtbl->Finish_QueryMultipleInterfaces(This,pMQIs);
 }
 #endif
 #endif
 
 #endif
 
-HRESULT STDMETHODCALLTYPE AsyncIMultiQI_Begin_QueryMultipleInterfaces_Proxy(
-    IMultiQI* This,
-    ULONG cMQIs,
-    MULTI_QI *pMQIs);
-void __RPC_STUB AsyncIMultiQI_Begin_QueryMultipleInterfaces_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE AsyncIMultiQI_Finish_QueryMultipleInterfaces_Proxy(
-    IMultiQI* This,
-    ULONG cMQIs,
-    MULTI_QI *pMQIs);
-void __RPC_STUB AsyncIMultiQI_Finish_QueryMultipleInterfaces_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __AsyncIMultiQI_INTERFACE_DEFINED__ */
 
@@ -1564,24 +1565,25 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IInternalUnknown* This,
+        IInternalUnknown *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IInternalUnknown* This);
+        IInternalUnknown *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IInternalUnknown* This);
+        IInternalUnknown *This);
 
     /*** IInternalUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInternalInterface)(
-        IInternalUnknown* This,
+        IInternalUnknown *This,
         REFIID riid,
         void **ppv);
 
     END_INTERFACE
 } IInternalUnknownVtbl;
+
 interface IInternalUnknown {
     CONST_VTBL IInternalUnknownVtbl* lpVtbl;
 };
@@ -1614,15 +1616,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IInternalUnknown_QueryInternalInterface_Proxy(
-    IInternalUnknown* This,
-    REFIID riid,
-    void **ppv);
-void __RPC_STUB IInternalUnknown_QueryInternalInterface_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IInternalUnknown_INTERFACE_DEFINED__ */
 
@@ -1666,36 +1659,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumUnknown* This,
+        IEnumUnknown *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumUnknown* This);
+        IEnumUnknown *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumUnknown* This);
+        IEnumUnknown *This);
 
     /*** IEnumUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *Next)(
-        IEnumUnknown* This,
+        IEnumUnknown *This,
         ULONG celt,
         IUnknown **rgelt,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumUnknown* This,
+        IEnumUnknown *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumUnknown* This);
+        IEnumUnknown *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumUnknown* This,
+        IEnumUnknown *This,
         IEnumUnknown **ppenum);
 
     END_INTERFACE
 } IEnumUnknownVtbl;
+
 interface IEnumUnknown {
     CONST_VTBL IEnumUnknownVtbl* lpVtbl;
 };
@@ -1750,29 +1744,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumUnknown_Skip_Proxy(
-    IEnumUnknown* This,
-    ULONG celt);
-void __RPC_STUB IEnumUnknown_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumUnknown_Reset_Proxy(
-    IEnumUnknown* This);
-void __RPC_STUB IEnumUnknown_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumUnknown_Clone_Proxy(
-    IEnumUnknown* This,
-    IEnumUnknown **ppenum);
-void __RPC_STUB IEnumUnknown_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumUnknown_Next_Proxy(
     IEnumUnknown* This,
     ULONG celt,
@@ -1824,36 +1795,37 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumString* This,
+        IEnumString *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumString* This);
+        IEnumString *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumString* This);
+        IEnumString *This);
 
     /*** IEnumString methods ***/
     HRESULT (STDMETHODCALLTYPE *Next)(
-        IEnumString* This,
+        IEnumString *This,
         ULONG celt,
         LPOLESTR *rgelt,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumString* This,
+        IEnumString *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumString* This);
+        IEnumString *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumString* This,
+        IEnumString *This,
         IEnumString **ppenum);
 
     END_INTERFACE
 } IEnumStringVtbl;
+
 interface IEnumString {
     CONST_VTBL IEnumStringVtbl* lpVtbl;
 };
@@ -1908,29 +1880,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumString_Skip_Proxy(
-    IEnumString* This,
-    ULONG celt);
-void __RPC_STUB IEnumString_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumString_Reset_Proxy(
-    IEnumString* This);
-void __RPC_STUB IEnumString_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumString_Clone_Proxy(
-    IEnumString* This,
-    IEnumString **ppenum);
-void __RPC_STUB IEnumString_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IEnumString_Next_Proxy(
     IEnumString* This,
     ULONG celt,
@@ -1976,31 +1925,32 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISequentialStream* This,
+        ISequentialStream *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISequentialStream* This);
+        ISequentialStream *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISequentialStream* This);
+        ISequentialStream *This);
 
     /*** ISequentialStream methods ***/
     HRESULT (STDMETHODCALLTYPE *Read)(
-        ISequentialStream* This,
+        ISequentialStream *This,
         void *pv,
         ULONG cb,
         ULONG *pcbRead);
 
     HRESULT (STDMETHODCALLTYPE *Write)(
-        ISequentialStream* This,
+        ISequentialStream *This,
         const void *pv,
         ULONG cb,
         ULONG *pcbWritten);
 
     END_INTERFACE
 } ISequentialStreamVtbl;
+
 interface ISequentialStream {
     CONST_VTBL ISequentialStreamVtbl* lpVtbl;
 };
@@ -2174,77 +2124,78 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IStream* This,
+        IStream *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IStream* This);
+        IStream *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IStream* This);
+        IStream *This);
 
     /*** ISequentialStream methods ***/
     HRESULT (STDMETHODCALLTYPE *Read)(
-        IStream* This,
+        IStream *This,
         void *pv,
         ULONG cb,
         ULONG *pcbRead);
 
     HRESULT (STDMETHODCALLTYPE *Write)(
-        IStream* This,
+        IStream *This,
         const void *pv,
         ULONG cb,
         ULONG *pcbWritten);
 
     /*** IStream methods ***/
     HRESULT (STDMETHODCALLTYPE *Seek)(
-        IStream* This,
+        IStream *This,
         LARGE_INTEGER dlibMove,
         DWORD dwOrigin,
         ULARGE_INTEGER *plibNewPosition);
 
     HRESULT (STDMETHODCALLTYPE *SetSize)(
-        IStream* This,
+        IStream *This,
         ULARGE_INTEGER libNewSize);
 
     HRESULT (STDMETHODCALLTYPE *CopyTo)(
-        IStream* This,
+        IStream *This,
         IStream *pstm,
         ULARGE_INTEGER cb,
         ULARGE_INTEGER *pcbRead,
         ULARGE_INTEGER *pcbWritten);
 
     HRESULT (STDMETHODCALLTYPE *Commit)(
-        IStream* This,
+        IStream *This,
         DWORD grfCommitFlags);
 
     HRESULT (STDMETHODCALLTYPE *Revert)(
-        IStream* This);
+        IStream *This);
 
     HRESULT (STDMETHODCALLTYPE *LockRegion)(
-        IStream* This,
+        IStream *This,
         ULARGE_INTEGER libOffset,
         ULARGE_INTEGER cb,
         DWORD dwLockType);
 
     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
-        IStream* This,
+        IStream *This,
         ULARGE_INTEGER libOffset,
         ULARGE_INTEGER cb,
         DWORD dwLockType);
 
     HRESULT (STDMETHODCALLTYPE *Stat)(
-        IStream* This,
+        IStream *This,
         STATSTG *pstatstg,
         DWORD grfStatFlag);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IStream* This,
+        IStream *This,
         IStream **ppstm);
 
     END_INTERFACE
 } IStreamVtbl;
+
 interface IStream {
     CONST_VTBL IStreamVtbl* lpVtbl;
 };
@@ -2329,14 +2280,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_SetSize_Proxy(
-    IStream* This,
-    ULARGE_INTEGER libNewSize);
-void __RPC_STUB IStream_SetSize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT STDMETHODCALLTYPE IStream_RemoteCopyTo_Proxy(
     IStream* This,
     IStream *pstm,
@@ -2348,58 +2291,6 @@
     IRpcChannelBuffer* pRpcChannelBuffer,
     PRPC_MESSAGE pRpcMessage,
     DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_Commit_Proxy(
-    IStream* This,
-    DWORD grfCommitFlags);
-void __RPC_STUB IStream_Commit_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_Revert_Proxy(
-    IStream* This);
-void __RPC_STUB IStream_Revert_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_LockRegion_Proxy(
-    IStream* This,
-    ULARGE_INTEGER libOffset,
-    ULARGE_INTEGER cb,
-    DWORD dwLockType);
-void __RPC_STUB IStream_LockRegion_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_UnlockRegion_Proxy(
-    IStream* This,
-    ULARGE_INTEGER libOffset,
-    ULARGE_INTEGER cb,
-    DWORD dwLockType);
-void __RPC_STUB IStream_UnlockRegion_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_Stat_Proxy(
-    IStream* This,
-    STATSTG *pstatstg,
-    DWORD grfStatFlag);
-void __RPC_STUB IStream_Stat_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IStream_Clone_Proxy(
-    IStream* This,
-    IStream **ppstm);
-void __RPC_STUB IStream_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 HRESULT CALLBACK IStream_Seek_Proxy(
     IStream* This,
     LARGE_INTEGER dlibMove,
@@ -2479,41 +2370,42 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcChannelBuffer* This,
+        IRpcChannelBuffer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcChannelBuffer* This);
+        IRpcChannelBuffer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcChannelBuffer* This);
+        IRpcChannelBuffer *This);
 
     /*** IRpcChannelBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
-        IRpcChannelBuffer* This,
+        IRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMessage,
         REFIID riid);
 
     HRESULT (STDMETHODCALLTYPE *SendReceive)(
-        IRpcChannelBuffer* This,
+        IRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMessage,
         ULONG *pStatus);
 
     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
-        IRpcChannelBuffer* This,
+        IRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMessage);
 
     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
-        IRpcChannelBuffer* This,
+        IRpcChannelBuffer *This,
         DWORD *pdwDestContext,
         void **ppvDestContext);
 
     HRESULT (STDMETHODCALLTYPE *IsConnected)(
-        IRpcChannelBuffer* This);
+        IRpcChannelBuffer *This);
 
     END_INTERFACE
 } IRpcChannelBufferVtbl;
+
 interface IRpcChannelBuffer {
     CONST_VTBL IRpcChannelBufferVtbl* lpVtbl;
 };
@@ -2562,48 +2454,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetBuffer_Proxy(
-    IRpcChannelBuffer* This,
-    RPCOLEMESSAGE *pMessage,
-    REFIID riid);
-void __RPC_STUB IRpcChannelBuffer_GetBuffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_SendReceive_Proxy(
-    IRpcChannelBuffer* This,
-    RPCOLEMESSAGE *pMessage,
-    ULONG *pStatus);
-void __RPC_STUB IRpcChannelBuffer_SendReceive_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_FreeBuffer_Proxy(
-    IRpcChannelBuffer* This,
-    RPCOLEMESSAGE *pMessage);
-void __RPC_STUB IRpcChannelBuffer_FreeBuffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetDestCtx_Proxy(
-    IRpcChannelBuffer* This,
-    DWORD *pdwDestContext,
-    void **ppvDestContext);
-void __RPC_STUB IRpcChannelBuffer_GetDestCtx_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_IsConnected_Proxy(
-    IRpcChannelBuffer* This);
-void __RPC_STUB IRpcChannelBuffer_IsConnected_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcChannelBuffer_INTERFACE_DEFINED__ */
 
@@ -2634,46 +2484,47 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcChannelBuffer2* This,
+        IRpcChannelBuffer2 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcChannelBuffer2* This);
+        IRpcChannelBuffer2 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcChannelBuffer2* This);
+        IRpcChannelBuffer2 *This);
 
     /*** IRpcChannelBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
-        IRpcChannelBuffer2* This,
+        IRpcChannelBuffer2 *This,
         RPCOLEMESSAGE *pMessage,
         REFIID riid);
 
     HRESULT (STDMETHODCALLTYPE *SendReceive)(
-        IRpcChannelBuffer2* This,
+        IRpcChannelBuffer2 *This,
         RPCOLEMESSAGE *pMessage,
         ULONG *pStatus);
 
     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
-        IRpcChannelBuffer2* This,
+        IRpcChannelBuffer2 *This,
         RPCOLEMESSAGE *pMessage);
 
     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
-        IRpcChannelBuffer2* This,
+        IRpcChannelBuffer2 *This,
         DWORD *pdwDestContext,
         void **ppvDestContext);
 
     HRESULT (STDMETHODCALLTYPE *IsConnected)(
-        IRpcChannelBuffer2* This);
+        IRpcChannelBuffer2 *This);
 
     /*** IRpcChannelBuffer2 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
-        IRpcChannelBuffer2* This,
+        IRpcChannelBuffer2 *This,
         DWORD *pdwVersion);
 
     END_INTERFACE
 } IRpcChannelBuffer2Vtbl;
+
 interface IRpcChannelBuffer2 {
     CONST_VTBL IRpcChannelBuffer2Vtbl* lpVtbl;
 };
@@ -2728,14 +2579,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer2_GetProtocolVersion_Proxy(
-    IRpcChannelBuffer2* This,
-    DWORD *pdwVersion);
-void __RPC_STUB IRpcChannelBuffer2_GetProtocolVersion_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcChannelBuffer2_INTERFACE_DEFINED__ */
 
@@ -2775,64 +2618,65 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IAsyncRpcChannelBuffer* This);
+        IAsyncRpcChannelBuffer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IAsyncRpcChannelBuffer* This);
+        IAsyncRpcChannelBuffer *This);
 
     /*** IRpcChannelBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMessage,
         REFIID riid);
 
     HRESULT (STDMETHODCALLTYPE *SendReceive)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMessage,
         ULONG *pStatus);
 
     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMessage);
 
     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         DWORD *pdwDestContext,
         void **ppvDestContext);
 
     HRESULT (STDMETHODCALLTYPE *IsConnected)(
-        IAsyncRpcChannelBuffer* This);
+        IAsyncRpcChannelBuffer *This);
 
     /*** IRpcChannelBuffer2 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         DWORD *pdwVersion);
 
     /*** IAsyncRpcChannelBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *Send)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMsg,
         ISynchronize *pSync,
         ULONG *pulStatus);
 
     HRESULT (STDMETHODCALLTYPE *Receive)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMsg,
         ULONG *pulStatus);
 
     HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
-        IAsyncRpcChannelBuffer* This,
+        IAsyncRpcChannelBuffer *This,
         RPCOLEMESSAGE *pMsg,
         DWORD *pdwDestContext,
         void **ppvDestContext);
 
     END_INTERFACE
 } IAsyncRpcChannelBufferVtbl;
+
 interface IAsyncRpcChannelBuffer {
     CONST_VTBL IAsyncRpcChannelBufferVtbl* lpVtbl;
 };
@@ -2901,35 +2745,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_Send_Proxy(
-    IAsyncRpcChannelBuffer* This,
-    RPCOLEMESSAGE *pMsg,
-    ISynchronize *pSync,
-    ULONG *pulStatus);
-void __RPC_STUB IAsyncRpcChannelBuffer_Send_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_Receive_Proxy(
-    IAsyncRpcChannelBuffer* This,
-    RPCOLEMESSAGE *pMsg,
-    ULONG *pulStatus);
-void __RPC_STUB IAsyncRpcChannelBuffer_Receive_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_GetDestCtxEx_Proxy(
-    IAsyncRpcChannelBuffer* This,
-    RPCOLEMESSAGE *pMsg,
-    DWORD *pdwDestContext,
-    void **ppvDestContext);
-void __RPC_STUB IAsyncRpcChannelBuffer_GetDestCtxEx_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__ */
 
@@ -2985,84 +2800,85 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcChannelBuffer3* This);
+        IRpcChannelBuffer3 *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcChannelBuffer3* This);
+        IRpcChannelBuffer3 *This);
 
     /*** IRpcChannelBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMessage,
         REFIID riid);
 
     HRESULT (STDMETHODCALLTYPE *SendReceive)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMessage,
         ULONG *pStatus);
 
     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMessage);
 
     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         DWORD *pdwDestContext,
         void **ppvDestContext);
 
     HRESULT (STDMETHODCALLTYPE *IsConnected)(
-        IRpcChannelBuffer3* This);
+        IRpcChannelBuffer3 *This);
 
     /*** IRpcChannelBuffer2 methods ***/
     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         DWORD *pdwVersion);
 
     /*** IRpcChannelBuffer3 methods ***/
     HRESULT (STDMETHODCALLTYPE *Send)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg,
         ULONG *pulStatus);
 
     HRESULT (STDMETHODCALLTYPE *Receive)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg,
         ULONG ulSize,
         ULONG *pulStatus);
 
     HRESULT (STDMETHODCALLTYPE *Cancel)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg);
 
     HRESULT (STDMETHODCALLTYPE *GetCallContext)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg,
         REFIID riid,
         void **pInterface);
 
     HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg,
         DWORD *pdwDestContext,
         void **ppvDestContext);
 
     HRESULT (STDMETHODCALLTYPE *GetState)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg,
         DWORD *pState);
 
     HRESULT (STDMETHODCALLTYPE *RegisterAsync)(
-        IRpcChannelBuffer3* This,
+        IRpcChannelBuffer3 *This,
         RPCOLEMESSAGE *pMsg,
         IAsyncManager *pAsyncMgr);
 
     END_INTERFACE
 } IRpcChannelBuffer3Vtbl;
+
 interface IRpcChannelBuffer3 {
     CONST_VTBL IRpcChannelBuffer3Vtbl* lpVtbl;
 };
@@ -3147,71 +2963,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Send_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg,
-    ULONG *pulStatus);
-void __RPC_STUB IRpcChannelBuffer3_Send_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Receive_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg,
-    ULONG ulSize,
-    ULONG *pulStatus);
-void __RPC_STUB IRpcChannelBuffer3_Receive_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Cancel_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg);
-void __RPC_STUB IRpcChannelBuffer3_Cancel_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetCallContext_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg,
-    REFIID riid,
-    void **pInterface);
-void __RPC_STUB IRpcChannelBuffer3_GetCallContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetDestCtxEx_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg,
-    DWORD *pdwDestContext,
-    void **ppvDestContext);
-void __RPC_STUB IRpcChannelBuffer3_GetDestCtxEx_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetState_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg,
-    DWORD *pState);
-void __RPC_STUB IRpcChannelBuffer3_GetState_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_RegisterAsync_Proxy(
-    IRpcChannelBuffer3* This,
-    RPCOLEMESSAGE *pMsg,
-    IAsyncManager *pAsyncMgr);
-void __RPC_STUB IRpcChannelBuffer3_RegisterAsync_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcChannelBuffer3_INTERFACE_DEFINED__ */
 
@@ -3240,23 +2991,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcSyntaxNegotiate* This,
+        IRpcSyntaxNegotiate *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcSyntaxNegotiate* This);
+        IRpcSyntaxNegotiate *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcSyntaxNegotiate* This);
+        IRpcSyntaxNegotiate *This);
 
     /*** IRpcSyntaxNegotiate methods ***/
     HRESULT (STDMETHODCALLTYPE *NegotiateSyntax)(
-        IRpcSyntaxNegotiate* This,
+        IRpcSyntaxNegotiate *This,
         RPCOLEMESSAGE *pMsg);
 
     END_INTERFACE
 } IRpcSyntaxNegotiateVtbl;
+
 interface IRpcSyntaxNegotiate {
     CONST_VTBL IRpcSyntaxNegotiateVtbl* lpVtbl;
 };
@@ -3289,14 +3041,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcSyntaxNegotiate_NegotiateSyntax_Proxy(
-    IRpcSyntaxNegotiate* This,
-    RPCOLEMESSAGE *pMsg);
-void __RPC_STUB IRpcSyntaxNegotiate_NegotiateSyntax_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcSyntaxNegotiate_INTERFACE_DEFINED__ */
 
@@ -3328,26 +3072,27 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcProxyBuffer* This,
+        IRpcProxyBuffer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcProxyBuffer* This);
+        IRpcProxyBuffer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcProxyBuffer* This);
+        IRpcProxyBuffer *This);
 
     /*** IRpcProxyBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *Connect)(
-        IRpcProxyBuffer* This,
+        IRpcProxyBuffer *This,
         IRpcChannelBuffer *pRpcChannelBuffer);
 
     void (STDMETHODCALLTYPE *Disconnect)(
-        IRpcProxyBuffer* This);
+        IRpcProxyBuffer *This);
 
     END_INTERFACE
 } IRpcProxyBufferVtbl;
+
 interface IRpcProxyBuffer {
     CONST_VTBL IRpcProxyBufferVtbl* lpVtbl;
 };
@@ -3384,21 +3129,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcProxyBuffer_Connect_Proxy(
-    IRpcProxyBuffer* This,
-    IRpcChannelBuffer *pRpcChannelBuffer);
-void __RPC_STUB IRpcProxyBuffer_Connect_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IRpcProxyBuffer_Disconnect_Proxy(
-    IRpcProxyBuffer* This);
-void __RPC_STUB IRpcProxyBuffer_Disconnect_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcProxyBuffer_INTERFACE_DEFINED__ */
 
@@ -3448,46 +3178,47 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcStubBuffer* This,
+        IRpcStubBuffer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcStubBuffer* This);
+        IRpcStubBuffer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcStubBuffer* This);
+        IRpcStubBuffer *This);
 
     /*** IRpcStubBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *Connect)(
-        IRpcStubBuffer* This,
+        IRpcStubBuffer *This,
         IUnknown *pUnkServer);
 
     void (STDMETHODCALLTYPE *Disconnect)(
-        IRpcStubBuffer* This);
+        IRpcStubBuffer *This);
 
     HRESULT (STDMETHODCALLTYPE *Invoke)(
-        IRpcStubBuffer* This,
+        IRpcStubBuffer *This,
         RPCOLEMESSAGE *_prpcmsg,
         IRpcChannelBuffer *_pRpcChannelBuffer);
 
     IRpcStubBuffer * (STDMETHODCALLTYPE *IsIIDSupported)(
-        IRpcStubBuffer* This,
+        IRpcStubBuffer *This,
         REFIID riid);
 
     ULONG (STDMETHODCALLTYPE *CountRefs)(
-        IRpcStubBuffer* This);
+        IRpcStubBuffer *This);
 
     HRESULT (STDMETHODCALLTYPE *DebugServerQueryInterface)(
-        IRpcStubBuffer* This,
+        IRpcStubBuffer *This,
         void **ppv);
 
     void (STDMETHODCALLTYPE *DebugServerRelease)(
-        IRpcStubBuffer* This,
+        IRpcStubBuffer *This,
         void *pv);
 
     END_INTERFACE
 } IRpcStubBufferVtbl;
+
 interface IRpcStubBuffer {
     CONST_VTBL IRpcStubBufferVtbl* lpVtbl;
 };
@@ -3544,61 +3275,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Connect_Proxy(
-    IRpcStubBuffer* This,
-    IUnknown *pUnkServer);
-void __RPC_STUB IRpcStubBuffer_Connect_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IRpcStubBuffer_Disconnect_Proxy(
-    IRpcStubBuffer* This);
-void __RPC_STUB IRpcStubBuffer_Disconnect_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Invoke_Proxy(
-    IRpcStubBuffer* This,
-    RPCOLEMESSAGE *_prpcmsg,
-    IRpcChannelBuffer *_pRpcChannelBuffer);
-void __RPC_STUB IRpcStubBuffer_Invoke_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-IRpcStubBuffer * STDMETHODCALLTYPE IRpcStubBuffer_IsIIDSupported_Proxy(
-    IRpcStubBuffer* This,
-    REFIID riid);
-void __RPC_STUB IRpcStubBuffer_IsIIDSupported_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-ULONG STDMETHODCALLTYPE IRpcStubBuffer_CountRefs_Proxy(
-    IRpcStubBuffer* This);
-void __RPC_STUB IRpcStubBuffer_CountRefs_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcStubBuffer_DebugServerQueryInterface_Proxy(
-    IRpcStubBuffer* This,
-    void **ppv);
-void __RPC_STUB IRpcStubBuffer_DebugServerQueryInterface_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IRpcStubBuffer_DebugServerRelease_Proxy(
-    IRpcStubBuffer* This,
-    void *pv);
-void __RPC_STUB IRpcStubBuffer_DebugServerRelease_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcStubBuffer_INTERFACE_DEFINED__ */
 
@@ -3635,32 +3311,33 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IPSFactoryBuffer* This,
+        IPSFactoryBuffer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IPSFactoryBuffer* This);
+        IPSFactoryBuffer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IPSFactoryBuffer* This);
+        IPSFactoryBuffer *This);
 
     /*** IPSFactoryBuffer methods ***/
     HRESULT (STDMETHODCALLTYPE *CreateProxy)(
-        IPSFactoryBuffer* This,
+        IPSFactoryBuffer *This,
         IUnknown *pUnkOuter,
         REFIID riid,
         IRpcProxyBuffer **ppProxy,
         void **ppv);
 
     HRESULT (STDMETHODCALLTYPE *CreateStub)(
-        IPSFactoryBuffer* This,
+        IPSFactoryBuffer *This,
         REFIID riid,
         IUnknown *pUnkServer,
         IRpcStubBuffer **ppStub);
 
     END_INTERFACE
 } IPSFactoryBufferVtbl;
+
 interface IPSFactoryBuffer {
     CONST_VTBL IPSFactoryBufferVtbl* lpVtbl;
 };
@@ -3697,27 +3374,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateProxy_Proxy(
-    IPSFactoryBuffer* This,
-    IUnknown *pUnkOuter,
-    REFIID riid,
-    IRpcProxyBuffer **ppProxy,
-    void **ppv);
-void __RPC_STUB IPSFactoryBuffer_CreateProxy_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateStub_Proxy(
-    IPSFactoryBuffer* This,
-    REFIID riid,
-    IUnknown *pUnkServer,
-    IRpcStubBuffer **ppStub);
-void __RPC_STUB IPSFactoryBuffer_CreateStub_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IPSFactoryBuffer_INTERFACE_DEFINED__ */
 
@@ -3794,32 +3450,32 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IChannelHook* This);
+        IChannelHook *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IChannelHook* This);
+        IChannelHook *This);
 
     /*** IChannelHook methods ***/
     void (STDMETHODCALLTYPE *ClientGetSize)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFGUID uExtent,
         REFIID riid,
         ULONG *pDataSize);
 
     void (STDMETHODCALLTYPE *ClientFillBuffer)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFGUID uExtent,
         REFIID riid,
         ULONG *pDataSize,
         void *pDataBuffer);
 
     void (STDMETHODCALLTYPE *ClientNotify)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFGUID uExtent,
         REFIID riid,
         ULONG cbDataSize,
@@ -3828,7 +3484,7 @@
         HRESULT hrFault);
 
     void (STDMETHODCALLTYPE *ServerNotify)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFGUID uExtent,
         REFIID riid,
         ULONG cbDataSize,
@@ -3836,14 +3492,14 @@
         DWORD lDataRep);
 
     void (STDMETHODCALLTYPE *ServerGetSize)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFGUID uExtent,
         REFIID riid,
         HRESULT hrFault,
         ULONG *pDataSize);
 
     void (STDMETHODCALLTYPE *ServerFillBuffer)(
-        IChannelHook* This,
+        IChannelHook *This,
         REFGUID uExtent,
         REFIID riid,
         ULONG *pDataSize,
@@ -3852,6 +3508,7 @@
 
     END_INTERFACE
 } IChannelHookVtbl;
+
 interface IChannelHook {
     CONST_VTBL IChannelHookVtbl* lpVtbl;
 };
@@ -3904,75 +3561,6 @@
 
 #endif
 
-void STDMETHODCALLTYPE IChannelHook_ClientGetSize_Proxy(
-    IChannelHook* This,
-    REFGUID uExtent,
-    REFIID riid,
-    ULONG *pDataSize);
-void __RPC_STUB IChannelHook_ClientGetSize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IChannelHook_ClientFillBuffer_Proxy(
-    IChannelHook* This,
-    REFGUID uExtent,
-    REFIID riid,
-    ULONG *pDataSize,
-    void *pDataBuffer);
-void __RPC_STUB IChannelHook_ClientFillBuffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IChannelHook_ClientNotify_Proxy(
-    IChannelHook* This,
-    REFGUID uExtent,
-    REFIID riid,
-    ULONG cbDataSize,
-    void *pDataBuffer,
-    DWORD lDataRep,
-    HRESULT hrFault);
-void __RPC_STUB IChannelHook_ClientNotify_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IChannelHook_ServerNotify_Proxy(
-    IChannelHook* This,
-    REFGUID uExtent,
-    REFIID riid,
-    ULONG cbDataSize,
-    void *pDataBuffer,
-    DWORD lDataRep);
-void __RPC_STUB IChannelHook_ServerNotify_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IChannelHook_ServerGetSize_Proxy(
-    IChannelHook* This,
-    REFGUID uExtent,
-    REFIID riid,
-    HRESULT hrFault,
-    ULONG *pDataSize);
-void __RPC_STUB IChannelHook_ServerGetSize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-void STDMETHODCALLTYPE IChannelHook_ServerFillBuffer_Proxy(
-    IChannelHook* This,
-    REFGUID uExtent,
-    REFIID riid,
-    ULONG *pDataSize,
-    void *pDataBuffer,
-    HRESULT hrFault);
-void __RPC_STUB IChannelHook_ServerFillBuffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IChannelHook_INTERFACE_DEFINED__ */
 
@@ -4071,19 +3659,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IClientSecurity* This,
+        IClientSecurity *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IClientSecurity* This);
+        IClientSecurity *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IClientSecurity* This);
+        IClientSecurity *This);
 
     /*** IClientSecurity methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
-        IClientSecurity* This,
+        IClientSecurity *This,
         IUnknown *pProxy,
         DWORD *pAuthnSvc,
         DWORD *pAuthzSvc,
@@ -4094,7 +3682,7 @@
         DWORD *pCapabilites);
 
     HRESULT (STDMETHODCALLTYPE *SetBlanket)(
-        IClientSecurity* This,
+        IClientSecurity *This,
         IUnknown *pProxy,
         DWORD dwAuthnSvc,
         DWORD dwAuthzSvc,
@@ -4105,12 +3693,13 @@
         DWORD dwCapabilities);
 
     HRESULT (STDMETHODCALLTYPE *CopyProxy)(
-        IClientSecurity* This,
+        IClientSecurity *This,
         IUnknown *pProxy,
         IUnknown **ppCopy);
 
     END_INTERFACE
 } IClientSecurityVtbl;
+
 interface IClientSecurity {
     CONST_VTBL IClientSecurityVtbl* lpVtbl;
 };
@@ -4151,45 +3740,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IClientSecurity_QueryBlanket_Proxy(
-    IClientSecurity* This,
-    IUnknown *pProxy,
-    DWORD *pAuthnSvc,
-    DWORD *pAuthzSvc,
-    OLECHAR **pServerPrincName,
-    DWORD *pAuthnLevel,
-    DWORD *pImpLevel,
-    void **pAuthInfo,
-    DWORD *pCapabilites);
-void __RPC_STUB IClientSecurity_QueryBlanket_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IClientSecurity_SetBlanket_Proxy(
-    IClientSecurity* This,
-    IUnknown *pProxy,
-    DWORD dwAuthnSvc,
-    DWORD dwAuthzSvc,
-    OLECHAR *pServerPrincName,
-    DWORD dwAuthnLevel,
-    DWORD dwImpLevel,
-    void *pAuthInfo,
-    DWORD dwCapabilities);
-void __RPC_STUB IClientSecurity_SetBlanket_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IClientSecurity_CopyProxy_Proxy(
-    IClientSecurity* This,
-    IUnknown *pProxy,
-    IUnknown **ppCopy);
-void __RPC_STUB IClientSecurity_CopyProxy_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IClientSecurity_INTERFACE_DEFINED__ */
 
@@ -4235,19 +3785,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IServerSecurity* This,
+        IServerSecurity *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IServerSecurity* This);
+        IServerSecurity *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IServerSecurity* This);
+        IServerSecurity *This);
 
     /*** IServerSecurity methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
-        IServerSecurity* This,
+        IServerSecurity *This,
         DWORD *pAuthnSvc,
         DWORD *pAuthzSvc,
         OLECHAR **pServerPrincName,
@@ -4257,16 +3807,17 @@
         DWORD *pCapabilities);
 
     HRESULT (STDMETHODCALLTYPE *ImpersonateClient)(
-        IServerSecurity* This);
+        IServerSecurity *This);
 
     HRESULT (STDMETHODCALLTYPE *RevertToSelf)(
-        IServerSecurity* This);
+        IServerSecurity *This);
 
     WINBOOL (STDMETHODCALLTYPE *IsImpersonating)(
-        IServerSecurity* This);
+        IServerSecurity *This);
 
     END_INTERFACE
 } IServerSecurityVtbl;
+
 interface IServerSecurity {
     CONST_VTBL IServerSecurityVtbl* lpVtbl;
 };
@@ -4311,41 +3862,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IServerSecurity_QueryBlanket_Proxy(
-    IServerSecurity* This,
-    DWORD *pAuthnSvc,
-    DWORD *pAuthzSvc,
-    OLECHAR **pServerPrincName,
-    DWORD *pAuthnLevel,
-    DWORD *pImpLevel,
-    void **pPrivs,
-    DWORD *pCapabilities);
-void __RPC_STUB IServerSecurity_QueryBlanket_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IServerSecurity_ImpersonateClient_Proxy(
-    IServerSecurity* This);
-void __RPC_STUB IServerSecurity_ImpersonateClient_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IServerSecurity_RevertToSelf_Proxy(
-    IServerSecurity* This);
-void __RPC_STUB IServerSecurity_RevertToSelf_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-WINBOOL STDMETHODCALLTYPE IServerSecurity_IsImpersonating_Proxy(
-    IServerSecurity* This);
-void __RPC_STUB IServerSecurity_IsImpersonating_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IServerSecurity_INTERFACE_DEFINED__ */
 
@@ -4393,31 +3909,32 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcOptions* This,
+        IRpcOptions *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcOptions* This);
+        IRpcOptions *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcOptions* This);
+        IRpcOptions *This);
 
     /*** IRpcOptions methods ***/
     HRESULT (STDMETHODCALLTYPE *Set)(
-        IRpcOptions* This,
+        IRpcOptions *This,
         IUnknown *pPrx,
         RPCOPT_PROPERTIES dwProperty,
         ULONG_PTR dwValue);
 
     HRESULT (STDMETHODCALLTYPE *Query)(
-        IRpcOptions* This,
+        IRpcOptions *This,
         IUnknown *pPrx,
         RPCOPT_PROPERTIES dwProperty,
         ULONG_PTR *pdwValue);
 
     END_INTERFACE
 } IRpcOptionsVtbl;
+
 interface IRpcOptions {
     CONST_VTBL IRpcOptionsVtbl* lpVtbl;
 };
@@ -4454,26 +3971,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcOptions_Set_Proxy(
-    IRpcOptions* This,
-    IUnknown *pPrx,
-    RPCOPT_PROPERTIES dwProperty,
-    ULONG_PTR dwValue);
-void __RPC_STUB IRpcOptions_Set_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcOptions_Query_Proxy(
-    IRpcOptions* This,
-    IUnknown *pPrx,
-    RPCOPT_PROPERTIES dwProperty,
-    ULONG_PTR *pdwValue);
-void __RPC_STUB IRpcOptions_Query_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcOptions_INTERFACE_DEFINED__ */
 
@@ -4546,29 +4043,30 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IGlobalOptions* This,
+        IGlobalOptions *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IGlobalOptions* This);
+        IGlobalOptions *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IGlobalOptions* This);
+        IGlobalOptions *This);
 
     /*** IGlobalOptions methods ***/
     HRESULT (STDMETHODCALLTYPE *Set)(
-        IGlobalOptions* This,
+        IGlobalOptions *This,
         GLOBALOPT_PROPERTIES dwProperty,
         ULONG_PTR dwValue);
 
     HRESULT (STDMETHODCALLTYPE *Query)(
-        IGlobalOptions* This,
+        IGlobalOptions *This,
         GLOBALOPT_PROPERTIES dwProperty,
         ULONG_PTR *pdwValue);
 
     END_INTERFACE
 } IGlobalOptionsVtbl;
+
 interface IGlobalOptions {
     CONST_VTBL IGlobalOptionsVtbl* lpVtbl;
 };
@@ -4605,24 +4103,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IGlobalOptions_Set_Proxy(
-    IGlobalOptions* This,
-    GLOBALOPT_PROPERTIES dwProperty,
-    ULONG_PTR dwValue);
-void __RPC_STUB IGlobalOptions_Set_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IGlobalOptions_Query_Proxy(
-    IGlobalOptions* This,
-    GLOBALOPT_PROPERTIES dwProperty,
-    ULONG_PTR *pdwValue);
-void __RPC_STUB IGlobalOptions_Query_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IGlobalOptions_INTERFACE_DEFINED__ */
 
@@ -4659,26 +4139,27 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISurrogate* This,
+        ISurrogate *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISurrogate* This);
+        ISurrogate *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISurrogate* This);
+        ISurrogate *This);
 
     /*** ISurrogate methods ***/
     HRESULT (STDMETHODCALLTYPE *LoadDllServer)(
-        ISurrogate* This,
+        ISurrogate *This,
         REFCLSID Clsid);
 
     HRESULT (STDMETHODCALLTYPE *FreeSurrogate)(
-        ISurrogate* This);
+        ISurrogate *This);
 
     END_INTERFACE
 } ISurrogateVtbl;
+
 interface ISurrogate {
     CONST_VTBL ISurrogateVtbl* lpVtbl;
 };
@@ -4715,21 +4196,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISurrogate_LoadDllServer_Proxy(
-    ISurrogate* This,
-    REFCLSID Clsid);
-void __RPC_STUB ISurrogate_LoadDllServer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISurrogate_FreeSurrogate_Proxy(
-    ISurrogate* This);
-void __RPC_STUB ISurrogate_FreeSurrogate_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISurrogate_INTERFACE_DEFINED__ */
 
@@ -4770,35 +4236,36 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IGlobalInterfaceTable* This,
+        IGlobalInterfaceTable *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IGlobalInterfaceTable* This);
+        IGlobalInterfaceTable *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IGlobalInterfaceTable* This);
+        IGlobalInterfaceTable *This);
 
     /*** IGlobalInterfaceTable methods ***/
     HRESULT (STDMETHODCALLTYPE *RegisterInterfaceInGlobal)(
-        IGlobalInterfaceTable* This,
+        IGlobalInterfaceTable *This,
         IUnknown *pUnk,
         REFIID riid,
         DWORD *pdwCookie);
 
     HRESULT (STDMETHODCALLTYPE *RevokeInterfaceFromGlobal)(
-        IGlobalInterfaceTable* This,
+        IGlobalInterfaceTable *This,
         DWORD dwCookie);
 
     HRESULT (STDMETHODCALLTYPE *GetInterfaceFromGlobal)(
-        IGlobalInterfaceTable* This,
+        IGlobalInterfaceTable *This,
         DWORD dwCookie,
         REFIID riid,
         void **ppv);
 
     END_INTERFACE
 } IGlobalInterfaceTableVtbl;
+
 interface IGlobalInterfaceTable {
     CONST_VTBL IGlobalInterfaceTableVtbl* lpVtbl;
 };
@@ -4839,34 +4306,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_RegisterInterfaceInGlobal_Proxy(
-    IGlobalInterfaceTable* This,
-    IUnknown *pUnk,
-    REFIID riid,
-    DWORD *pdwCookie);
-void __RPC_STUB IGlobalInterfaceTable_RegisterInterfaceInGlobal_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Proxy(
-    IGlobalInterfaceTable* This,
-    DWORD dwCookie);
-void __RPC_STUB IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_GetInterfaceFromGlobal_Proxy(
-    IGlobalInterfaceTable* This,
-    DWORD dwCookie,
-    REFIID riid,
-    void **ppv);
-void __RPC_STUB IGlobalInterfaceTable_GetInterfaceFromGlobal_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IGlobalInterfaceTable_INTERFACE_DEFINED__ */
 
@@ -4904,30 +4343,31 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISynchronize* This,
+        ISynchronize *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISynchronize* This);
+        ISynchronize *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISynchronize* This);
+        ISynchronize *This);
 
     /*** ISynchronize methods ***/
     HRESULT (STDMETHODCALLTYPE *Wait)(
-        ISynchronize* This,
+        ISynchronize *This,
         DWORD dwFlags,
         DWORD dwMilliseconds);
 
     HRESULT (STDMETHODCALLTYPE *Signal)(
-        ISynchronize* This);
+        ISynchronize *This);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        ISynchronize* This);
+        ISynchronize *This);
 
     END_INTERFACE
 } ISynchronizeVtbl;
+
 interface ISynchronize {
     CONST_VTBL ISynchronizeVtbl* lpVtbl;
 };
@@ -4968,29 +4408,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISynchronize_Wait_Proxy(
-    ISynchronize* This,
-    DWORD dwFlags,
-    DWORD dwMilliseconds);
-void __RPC_STUB ISynchronize_Wait_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISynchronize_Signal_Proxy(
-    ISynchronize* This);
-void __RPC_STUB ISynchronize_Signal_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISynchronize_Reset_Proxy(
-    ISynchronize* This);
-void __RPC_STUB ISynchronize_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISynchronize_INTERFACE_DEFINED__ */
 
@@ -5019,23 +4436,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISynchronizeHandle* This,
+        ISynchronizeHandle *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISynchronizeHandle* This);
+        ISynchronizeHandle *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISynchronizeHandle* This);
+        ISynchronizeHandle *This);
 
     /*** ISynchronizeHandle methods ***/
     HRESULT (STDMETHODCALLTYPE *GetHandle)(
-        ISynchronizeHandle* This,
+        ISynchronizeHandle *This,
         HANDLE *ph);
 
     END_INTERFACE
 } ISynchronizeHandleVtbl;
+
 interface ISynchronizeHandle {
     CONST_VTBL ISynchronizeHandleVtbl* lpVtbl;
 };
@@ -5068,14 +4486,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISynchronizeHandle_GetHandle_Proxy(
-    ISynchronizeHandle* This,
-    HANDLE *ph);
-void __RPC_STUB ISynchronizeHandle_GetHandle_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISynchronizeHandle_INTERFACE_DEFINED__ */
 
@@ -5104,28 +4514,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISynchronizeEvent* This,
+        ISynchronizeEvent *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISynchronizeEvent* This);
+        ISynchronizeEvent *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISynchronizeEvent* This);
+        ISynchronizeEvent *This);
 
     /*** ISynchronizeHandle methods ***/
     HRESULT (STDMETHODCALLTYPE *GetHandle)(
-        ISynchronizeEvent* This,
+        ISynchronizeEvent *This,
         HANDLE *ph);
 
     /*** ISynchronizeEvent methods ***/
     HRESULT (STDMETHODCALLTYPE *SetEventHandle)(
-        ISynchronizeEvent* This,
+        ISynchronizeEvent *This,
         HANDLE *ph);
 
     END_INTERFACE
 } ISynchronizeEventVtbl;
+
 interface ISynchronizeEvent {
     CONST_VTBL ISynchronizeEventVtbl* lpVtbl;
 };
@@ -5164,14 +4575,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISynchronizeEvent_SetEventHandle_Proxy(
-    ISynchronizeEvent* This,
-    HANDLE *ph);
-void __RPC_STUB ISynchronizeEvent_SetEventHandle_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISynchronizeEvent_INTERFACE_DEFINED__ */
 
@@ -5205,29 +4608,30 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISynchronizeContainer* This,
+        ISynchronizeContainer *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISynchronizeContainer* This);
+        ISynchronizeContainer *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISynchronizeContainer* This);
+        ISynchronizeContainer *This);
 
     /*** ISynchronizeContainer methods ***/
     HRESULT (STDMETHODCALLTYPE *AddSynchronize)(
-        ISynchronizeContainer* This,
+        ISynchronizeContainer *This,
         ISynchronize *pSync);
 
     HRESULT (STDMETHODCALLTYPE *WaitMultiple)(
-        ISynchronizeContainer* This,
+        ISynchronizeContainer *This,
         DWORD dwFlags,
         DWORD dwTimeOut,
         ISynchronize **ppSync);
 
     END_INTERFACE
 } ISynchronizeContainerVtbl;
+
 interface ISynchronizeContainer {
     CONST_VTBL ISynchronizeContainerVtbl* lpVtbl;
 };
@@ -5264,24 +4668,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISynchronizeContainer_AddSynchronize_Proxy(
-    ISynchronizeContainer* This,
-    ISynchronize *pSync);
-void __RPC_STUB ISynchronizeContainer_AddSynchronize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ISynchronizeContainer_WaitMultiple_Proxy(
-    ISynchronizeContainer* This,
-    DWORD dwFlags,
-    DWORD dwTimeOut,
-    ISynchronize **ppSync);
-void __RPC_STUB ISynchronizeContainer_WaitMultiple_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISynchronizeContainer_INTERFACE_DEFINED__ */
 
@@ -5310,34 +4696,35 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ISynchronizeMutex* This,
+        ISynchronizeMutex *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ISynchronizeMutex* This);
+        ISynchronizeMutex *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ISynchronizeMutex* This);
+        ISynchronizeMutex *This);
 
     /*** ISynchronize methods ***/
     HRESULT (STDMETHODCALLTYPE *Wait)(
-        ISynchronizeMutex* This,
+        ISynchronizeMutex *This,
         DWORD dwFlags,
         DWORD dwMilliseconds);
 
     HRESULT (STDMETHODCALLTYPE *Signal)(
-        ISynchronizeMutex* This);
+        ISynchronizeMutex *This);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        ISynchronizeMutex* This);
+        ISynchronizeMutex *This);
 
     /*** ISynchronizeMutex methods ***/
     HRESULT (STDMETHODCALLTYPE *ReleaseMutex)(
-        ISynchronizeMutex* This);
+        ISynchronizeMutex *This);
 
     END_INTERFACE
 } ISynchronizeMutexVtbl;
+
 interface ISynchronizeMutex {
     CONST_VTBL ISynchronizeMutexVtbl* lpVtbl;
 };
@@ -5384,13 +4771,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ISynchronizeMutex_ReleaseMutex_Proxy(
-    ISynchronizeMutex* This);
-void __RPC_STUB ISynchronizeMutex_ReleaseMutex_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ISynchronizeMutex_INTERFACE_DEFINED__ */
 
@@ -5424,26 +4804,27 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ICancelMethodCalls* This,
+        ICancelMethodCalls *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ICancelMethodCalls* This);
+        ICancelMethodCalls *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ICancelMethodCalls* This);
+        ICancelMethodCalls *This);
 
     /*** ICancelMethodCalls methods ***/
     HRESULT (STDMETHODCALLTYPE *Cancel)(
-        ICancelMethodCalls* This,
+        ICancelMethodCalls *This,
         ULONG ulSeconds);
 
     HRESULT (STDMETHODCALLTYPE *TestCancel)(
-        ICancelMethodCalls* This);
+        ICancelMethodCalls *This);
 
     END_INTERFACE
 } ICancelMethodCallsVtbl;
+
 interface ICancelMethodCalls {
     CONST_VTBL ICancelMethodCallsVtbl* lpVtbl;
 };
@@ -5480,21 +4861,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ICancelMethodCalls_Cancel_Proxy(
-    ICancelMethodCalls* This,
-    ULONG ulSeconds);
-void __RPC_STUB ICancelMethodCalls_Cancel_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE ICancelMethodCalls_TestCancel_Proxy(
-    ICancelMethodCalls* This);
-void __RPC_STUB ICancelMethodCalls_TestCancel_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ICancelMethodCalls_INTERFACE_DEFINED__ */
 
@@ -5536,32 +4902,33 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IAsyncManager* This,
+        IAsyncManager *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IAsyncManager* This);
+        IAsyncManager *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IAsyncManager* This);
+        IAsyncManager *This);
 
     /*** IAsyncManager methods ***/
     HRESULT (STDMETHODCALLTYPE *CompleteCall)(
-        IAsyncManager* This,
+        IAsyncManager *This,
         HRESULT Result);
 
     HRESULT (STDMETHODCALLTYPE *GetCallContext)(
-        IAsyncManager* This,
+        IAsyncManager *This,
         REFIID riid,
         void **pInterface);
 
     HRESULT (STDMETHODCALLTYPE *GetState)(
-        IAsyncManager* This,
+        IAsyncManager *This,
         ULONG *pulStateFlags);
 
     END_INTERFACE
 } IAsyncManagerVtbl;
+
 interface IAsyncManager {
     CONST_VTBL IAsyncManagerVtbl* lpVtbl;
 };
@@ -5602,31 +4969,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IAsyncManager_CompleteCall_Proxy(
-    IAsyncManager* This,
-    HRESULT Result);
-void __RPC_STUB IAsyncManager_CompleteCall_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IAsyncManager_GetCallContext_Proxy(
-    IAsyncManager* This,
-    REFIID riid,
-    void **pInterface);
-void __RPC_STUB IAsyncManager_GetCallContext_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IAsyncManager_GetState_Proxy(
-    IAsyncManager* This,
-    ULONG *pulStateFlags);
-void __RPC_STUB IAsyncManager_GetState_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IAsyncManager_INTERFACE_DEFINED__ */
 
@@ -5658,19 +5000,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        ICallFactory* This,
+        ICallFactory *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        ICallFactory* This);
+        ICallFactory *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        ICallFactory* This);
+        ICallFactory *This);
 
     /*** ICallFactory methods ***/
     HRESULT (STDMETHODCALLTYPE *CreateCall)(
-        ICallFactory* This,
+        ICallFactory *This,
         REFIID riid,
         IUnknown *pCtrlUnk,
         REFIID riid2,
@@ -5678,6 +5020,7 @@
 
     END_INTERFACE
 } ICallFactoryVtbl;
+
 interface ICallFactory {
     CONST_VTBL ICallFactoryVtbl* lpVtbl;
 };
@@ -5710,17 +5053,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE ICallFactory_CreateCall_Proxy(
-    ICallFactory* This,
-    REFIID riid,
-    IUnknown *pCtrlUnk,
-    REFIID riid2,
-    IUnknown **ppv);
-void __RPC_STUB ICallFactory_CreateCall_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __ICallFactory_INTERFACE_DEFINED__ */
 
@@ -5753,28 +5085,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IRpcHelper* This,
+        IRpcHelper *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IRpcHelper* This);
+        IRpcHelper *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IRpcHelper* This);
+        IRpcHelper *This);
 
     /*** IRpcHelper methods ***/
     HRESULT (STDMETHODCALLTYPE *GetDCOMProtocolVersion)(
-        IRpcHelper* This,
+        IRpcHelper *This,
         DWORD *pComVersion);
 
     HRESULT (STDMETHODCALLTYPE *GetIIDFromOBJREF)(
-        IRpcHelper* This,
+        IRpcHelper *This,
         void *pObjRef,
         IID **piid);
 
     END_INTERFACE
 } IRpcHelperVtbl;
+
 interface IRpcHelper {
     CONST_VTBL IRpcHelperVtbl* lpVtbl;
 };
@@ -5811,23 +5144,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IRpcHelper_GetDCOMProtocolVersion_Proxy(
-    IRpcHelper* This,
-    DWORD *pComVersion);
-void __RPC_STUB IRpcHelper_GetDCOMProtocolVersion_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IRpcHelper_GetIIDFromOBJREF_Proxy(
-    IRpcHelper* This,
-    void *pObjRef,
-    IID **piid);
-void __RPC_STUB IRpcHelper_GetIIDFromOBJREF_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IRpcHelper_INTERFACE_DEFINED__ */
 
@@ -5858,25 +5174,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IReleaseMarshalBuffers* This,
+        IReleaseMarshalBuffers *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IReleaseMarshalBuffers* This);
+        IReleaseMarshalBuffers *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IReleaseMarshalBuffers* This);
+        IReleaseMarshalBuffers *This);
 
     /*** IReleaseMarshalBuffers methods ***/
     HRESULT (STDMETHODCALLTYPE *ReleaseMarshalBuffer)(
-        IReleaseMarshalBuffers* This,
+        IReleaseMarshalBuffers *This,
         RPCOLEMESSAGE *pMsg,
         DWORD dwFlags,
         IUnknown *pChnl);
 
     END_INTERFACE
 } IReleaseMarshalBuffersVtbl;
+
 interface IReleaseMarshalBuffers {
     CONST_VTBL IReleaseMarshalBuffersVtbl* lpVtbl;
 };
@@ -5909,16 +5226,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IReleaseMarshalBuffers_ReleaseMarshalBuffer_Proxy(
-    IReleaseMarshalBuffers* This,
-    RPCOLEMESSAGE *pMsg,
-    DWORD dwFlags,
-    IUnknown *pChnl);
-void __RPC_STUB IReleaseMarshalBuffers_ReleaseMarshalBuffer_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IReleaseMarshalBuffers_INTERFACE_DEFINED__ */
 
@@ -5951,28 +5258,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IWaitMultiple* This,
+        IWaitMultiple *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IWaitMultiple* This);
+        IWaitMultiple *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IWaitMultiple* This);
+        IWaitMultiple *This);
 
     /*** IWaitMultiple methods ***/
     HRESULT (STDMETHODCALLTYPE *WaitMultiple)(
-        IWaitMultiple* This,
+        IWaitMultiple *This,
         DWORD timeout,
         ISynchronize **pSync);
 
     HRESULT (STDMETHODCALLTYPE *AddSynchronize)(
-        IWaitMultiple* This,
+        IWaitMultiple *This,
         ISynchronize *pSync);
 
     END_INTERFACE
 } IWaitMultipleVtbl;
+
 interface IWaitMultiple {
     CONST_VTBL IWaitMultipleVtbl* lpVtbl;
 };
@@ -6009,23 +5317,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IWaitMultiple_WaitMultiple_Proxy(
-    IWaitMultiple* This,
-    DWORD timeout,
-    ISynchronize **pSync);
-void __RPC_STUB IWaitMultiple_WaitMultiple_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IWaitMultiple_AddSynchronize_Proxy(
-    IWaitMultiple* This,
-    ISynchronize *pSync);
-void __RPC_STUB IWaitMultiple_AddSynchronize_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IWaitMultiple_INTERFACE_DEFINED__ */
 
@@ -6058,25 +5349,26 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IAddrTrackingControl* This,
+        IAddrTrackingControl *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IAddrTrackingControl* This);
+        IAddrTrackingControl *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IAddrTrackingControl* This);
+        IAddrTrackingControl *This);
 
     /*** IAddrTrackingControl methods ***/
     HRESULT (STDMETHODCALLTYPE *EnableCOMDynamicAddrTracking)(
-        IAddrTrackingControl* This);
+        IAddrTrackingControl *This);
 
     HRESULT (STDMETHODCALLTYPE *DisableCOMDynamicAddrTracking)(
-        IAddrTrackingControl* This);
+        IAddrTrackingControl *This);
 
     END_INTERFACE
 } IAddrTrackingControlVtbl;
+
 interface IAddrTrackingControl {
     CONST_VTBL IAddrTrackingControlVtbl* lpVtbl;
 };
@@ -6113,20 +5405,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IAddrTrackingControl_EnableCOMDynamicAddrTracking_Proxy(
-    IAddrTrackingControl* This);
-void __RPC_STUB IAddrTrackingControl_EnableCOMDynamicAddrTracking_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IAddrTrackingControl_DisableCOMDynamicAddrTracking_Proxy(
-    IAddrTrackingControl* This);
-void __RPC_STUB IAddrTrackingControl_DisableCOMDynamicAddrTracking_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IAddrTrackingControl_INTERFACE_DEFINED__ */
 
@@ -6160,28 +5438,29 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IAddrExclusionControl* This,
+        IAddrExclusionControl *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IAddrExclusionControl* This);
+        IAddrExclusionControl *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IAddrExclusionControl* This);
+        IAddrExclusionControl *This);
 
     /*** IAddrExclusionControl methods ***/
     HRESULT (STDMETHODCALLTYPE *GetCurrentAddrExclusionList)(
-        IAddrExclusionControl* This,
+        IAddrExclusionControl *This,
         REFIID riid,
         void **ppEnumerator);
 
     HRESULT (STDMETHODCALLTYPE *UpdateAddrExclusionList)(
-        IAddrExclusionControl* This,
+        IAddrExclusionControl *This,
         IUnknown *pEnumerator);
 
     END_INTERFACE
 } IAddrExclusionControlVtbl;
+
 interface IAddrExclusionControl {
     CONST_VTBL IAddrExclusionControlVtbl* lpVtbl;
 };
@@ -6218,23 +5497,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IAddrExclusionControl_GetCurrentAddrExclusionList_Proxy(
-    IAddrExclusionControl* This,
-    REFIID riid,
-    void **ppEnumerator);
-void __RPC_STUB IAddrExclusionControl_GetCurrentAddrExclusionList_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IAddrExclusionControl_UpdateAddrExclusionList_Proxy(
-    IAddrExclusionControl* This,
-    IUnknown *pEnumerator);
-void __RPC_STUB IAddrExclusionControl_UpdateAddrExclusionList_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IAddrExclusionControl_INTERFACE_DEFINED__ */
 
@@ -6269,30 +5531,31 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IPipeByte* This,
+        IPipeByte *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IPipeByte* This);
+        IPipeByte *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IPipeByte* This);
+        IPipeByte *This);
 
     /*** IPipeByte methods ***/
     HRESULT (STDMETHODCALLTYPE *Pull)(
-        IPipeByte* This,
+        IPipeByte *This,
         BYTE *buf,
         ULONG cRequest,
         ULONG *pcReturned);
 
     HRESULT (STDMETHODCALLTYPE *Push)(
-        IPipeByte* This,
+        IPipeByte *This,
         BYTE *buf,
         ULONG cSent);
 
     END_INTERFACE
 } IPipeByteVtbl;
+
 interface IPipeByte {
     CONST_VTBL IPipeByteVtbl* lpVtbl;
 };
@@ -6329,25 +5592,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IPipeByte_Pull_Proxy(
-    IPipeByte* This,
-    BYTE *buf,
-    ULONG cRequest,
-    ULONG *pcReturned);
-void __RPC_STUB IPipeByte_Pull_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IPipeByte_Push_Proxy(
-    IPipeByte* This,
-    BYTE *buf,
-    ULONG cSent);
-void __RPC_STUB IPipeByte_Push_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IPipeByte_INTERFACE_DEFINED__ */
 
@@ -6382,30 +5626,31 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IPipeLong* This,
+        IPipeLong *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IPipeLong* This);
+        IPipeLong *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IPipeLong* This);
+        IPipeLong *This);
 
     /*** IPipeLong methods ***/
     HRESULT (STDMETHODCALLTYPE *Pull)(
-        IPipeLong* This,
+        IPipeLong *This,
         LONG *buf,
         ULONG cRequest,
         ULONG *pcReturned);
 
     HRESULT (STDMETHODCALLTYPE *Push)(
-        IPipeLong* This,
+        IPipeLong *This,
         LONG *buf,
         ULONG cSent);
 
     END_INTERFACE
 } IPipeLongVtbl;
+
 interface IPipeLong {
     CONST_VTBL IPipeLongVtbl* lpVtbl;
 };
@@ -6442,25 +5687,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IPipeLong_Pull_Proxy(
-    IPipeLong* This,
-    LONG *buf,
-    ULONG cRequest,
-    ULONG *pcReturned);
-void __RPC_STUB IPipeLong_Pull_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IPipeLong_Push_Proxy(
-    IPipeLong* This,
-    LONG *buf,
-    ULONG cSent);
-void __RPC_STUB IPipeLong_Push_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IPipeLong_INTERFACE_DEFINED__ */
 
@@ -6495,30 +5721,31 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IPipeDouble* This,
+        IPipeDouble *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IPipeDouble* This);
+        IPipeDouble *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IPipeDouble* This);
+        IPipeDouble *This);
 
     /*** IPipeDouble methods ***/
     HRESULT (STDMETHODCALLTYPE *Pull)(
-        IPipeDouble* This,
+        IPipeDouble *This,
         DOUBLE *buf,
         ULONG cRequest,
         ULONG *pcReturned);
 
     HRESULT (STDMETHODCALLTYPE *Push)(
-        IPipeDouble* This,
+        IPipeDouble *This,
         DOUBLE *buf,
         ULONG cSent);
 
     END_INTERFACE
 } IPipeDoubleVtbl;
+
 interface IPipeDouble {
     CONST_VTBL IPipeDoubleVtbl* lpVtbl;
 };
@@ -6555,25 +5782,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IPipeDouble_Pull_Proxy(
-    IPipeDouble* This,
-    DOUBLE *buf,
-    ULONG cRequest,
-    ULONG *pcReturned);
-void __RPC_STUB IPipeDouble_Pull_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IPipeDouble_Push_Proxy(
-    IPipeDouble* This,
-    DOUBLE *buf,
-    ULONG cSent);
-void __RPC_STUB IPipeDouble_Push_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IPipeDouble_INTERFACE_DEFINED__ */
 
@@ -6628,40 +5836,41 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IEnumContextProps* This,
+        IEnumContextProps *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IEnumContextProps* This);
+        IEnumContextProps *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IEnumContextProps* This);
+        IEnumContextProps *This);
 
     /*** IEnumContextProps methods ***/
     HRESULT (STDMETHODCALLTYPE *Next)(
-        IEnumContextProps* This,
+        IEnumContextProps *This,
         ULONG celt,
         ContextProperty *pContextProperties,
         ULONG *pceltFetched);
 
     HRESULT (STDMETHODCALLTYPE *Skip)(
-        IEnumContextProps* This,
+        IEnumContextProps *This,
         ULONG celt);
 
     HRESULT (STDMETHODCALLTYPE *Reset)(
-        IEnumContextProps* This);
+        IEnumContextProps *This);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IEnumContextProps* This,
+        IEnumContextProps *This,
         IEnumContextProps **ppEnumContextProps);
 
     HRESULT (STDMETHODCALLTYPE *Count)(
-        IEnumContextProps* This,
+        IEnumContextProps *This,
         ULONG *pcelt);
 
     END_INTERFACE
 } IEnumContextPropsVtbl;
+
 interface IEnumContextProps {
     CONST_VTBL IEnumContextPropsVtbl* lpVtbl;
 };
@@ -6710,47 +5919,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IEnumContextProps_Next_Proxy(
-    IEnumContextProps* This,
-    ULONG celt,
-    ContextProperty *pContextProperties,
-    ULONG *pceltFetched);
-void __RPC_STUB IEnumContextProps_Next_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumContextProps_Skip_Proxy(
-    IEnumContextProps* This,
-    ULONG celt);
-void __RPC_STUB IEnumContextProps_Skip_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumContextProps_Reset_Proxy(
-    IEnumContextProps* This);
-void __RPC_STUB IEnumContextProps_Reset_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumContextProps_Clone_Proxy(
-    IEnumContextProps* This,
-    IEnumContextProps **ppEnumContextProps);
-void __RPC_STUB IEnumContextProps_Clone_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IEnumContextProps_Count_Proxy(
-    IEnumContextProps* This,
-    ULONG *pcelt);
-void __RPC_STUB IEnumContextProps_Count_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IEnumContextProps_INTERFACE_DEFINED__ */
 
@@ -6792,39 +5960,40 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IContext* This,
+        IContext *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IContext* This);
+        IContext *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IContext* This);
+        IContext *This);
 
     /*** IContext methods ***/
     HRESULT (STDMETHODCALLTYPE *SetProperty)(
-        IContext* This,
+        IContext *This,
         REFGUID rpolicyId,
         CPFLAGS flags,
         IUnknown *pUnk);
 
     HRESULT (STDMETHODCALLTYPE *RemoveProperty)(
-        IContext* This,
+        IContext *This,
         REFGUID rPolicyId);
 
     HRESULT (STDMETHODCALLTYPE *GetProperty)(
-        IContext* This,
+        IContext *This,
         REFGUID rGuid,
         CPFLAGS *pFlags,
         IUnknown **ppUnk);
 
     HRESULT (STDMETHODCALLTYPE *EnumContextProps)(
-        IContext* This,
+        IContext *This,
         IEnumContextProps **ppEnumContextProps);
 
     END_INTERFACE
 } IContextVtbl;
+
 interface IContext {
     CONST_VTBL IContextVtbl* lpVtbl;
 };
@@ -6869,42 +6038,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IContext_SetProperty_Proxy(
-    IContext* This,
-    REFGUID rpolicyId,
-    CPFLAGS flags,
-    IUnknown *pUnk);
-void __RPC_STUB IContext_SetProperty_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IContext_RemoveProperty_Proxy(
-    IContext* This,
-    REFGUID rPolicyId);
-void __RPC_STUB IContext_RemoveProperty_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IContext_GetProperty_Proxy(
-    IContext* This,
-    REFGUID rGuid,
-    CPFLAGS *pFlags,
-    IUnknown **ppUnk);
-void __RPC_STUB IContext_GetProperty_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IContext_EnumContextProps_Proxy(
-    IContext* This,
-    IEnumContextProps **ppEnumContextProps);
-void __RPC_STUB IContext_EnumContextProps_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IContext_INTERFACE_DEFINED__ */
 
@@ -6972,35 +6105,36 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IComThreadingInfo* This,
+        IComThreadingInfo *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IComThreadingInfo* This);
+        IComThreadingInfo *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IComThreadingInfo* This);
+        IComThreadingInfo *This);
 
     /*** IComThreadingInfo methods ***/
     HRESULT (STDMETHODCALLTYPE *GetCurrentApartmentType)(
-        IComThreadingInfo* This,
+        IComThreadingInfo *This,
         APTTYPE *pAptType);
 
     HRESULT (STDMETHODCALLTYPE *GetCurrentThreadType)(
-        IComThreadingInfo* This,
+        IComThreadingInfo *This,
         THDTYPE *pThreadType);
 
     HRESULT (STDMETHODCALLTYPE *GetCurrentLogicalThreadId)(
-        IComThreadingInfo* This,
+        IComThreadingInfo *This,
         GUID *pguidLogicalThreadId);
 
     HRESULT (STDMETHODCALLTYPE *SetCurrentLogicalThreadId)(
-        IComThreadingInfo* This,
+        IComThreadingInfo *This,
         REFGUID rguid);
 
     END_INTERFACE
 } IComThreadingInfoVtbl;
+
 interface IComThreadingInfo {
     CONST_VTBL IComThreadingInfoVtbl* lpVtbl;
 };
@@ -7045,38 +6179,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentApartmentType_Proxy(
-    IComThreadingInfo* This,
-    APTTYPE *pAptType);
-void __RPC_STUB IComThreadingInfo_GetCurrentApartmentType_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentThreadType_Proxy(
-    IComThreadingInfo* This,
-    THDTYPE *pThreadType);
-void __RPC_STUB IComThreadingInfo_GetCurrentThreadType_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentLogicalThreadId_Proxy(
-    IComThreadingInfo* This,
-    GUID *pguidLogicalThreadId);
-void __RPC_STUB IComThreadingInfo_GetCurrentLogicalThreadId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
-HRESULT STDMETHODCALLTYPE IComThreadingInfo_SetCurrentLogicalThreadId_Proxy(
-    IComThreadingInfo* This,
-    REFGUID rguid);
-void __RPC_STUB IComThreadingInfo_SetCurrentLogicalThreadId_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IComThreadingInfo_INTERFACE_DEFINED__ */
 
@@ -7105,23 +6207,24 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IProcessInitControl* This,
+        IProcessInitControl *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IProcessInitControl* This);
+        IProcessInitControl *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IProcessInitControl* This);
+        IProcessInitControl *This);
 
     /*** IProcessInitControl methods ***/
     HRESULT (STDMETHODCALLTYPE *ResetInitializerTimeout)(
-        IProcessInitControl* This,
+        IProcessInitControl *This,
         DWORD dwSecondsRemaining);
 
     END_INTERFACE
 } IProcessInitControlVtbl;
+
 interface IProcessInitControl {
     CONST_VTBL IProcessInitControlVtbl* lpVtbl;
 };
@@ -7154,14 +6257,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IProcessInitControl_ResetInitializerTimeout_Proxy(
-    IProcessInitControl* This,
-    DWORD dwSecondsRemaining);
-void __RPC_STUB IProcessInitControl_ResetInitializerTimeout_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IProcessInitControl_INTERFACE_DEFINED__ */
 
@@ -7187,18 +6282,19 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IFastRundown* This,
+        IFastRundown *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IFastRundown* This);
+        IFastRundown *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IFastRundown* This);
+        IFastRundown *This);
 
     END_INTERFACE
 } IFastRundownVtbl;
+
 interface IFastRundown {
     CONST_VTBL IFastRundownVtbl* lpVtbl;
 };
@@ -7258,83 +6354,84 @@
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        IMarshalingStream* This);
+        IMarshalingStream *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        IMarshalingStream* This);
+        IMarshalingStream *This);
 
     /*** ISequentialStream methods ***/
     HRESULT (STDMETHODCALLTYPE *Read)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         void *pv,
         ULONG cb,
         ULONG *pcbRead);
 
     HRESULT (STDMETHODCALLTYPE *Write)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         const void *pv,
         ULONG cb,
         ULONG *pcbWritten);
 
     /*** IStream methods ***/
     HRESULT (STDMETHODCALLTYPE *Seek)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         LARGE_INTEGER dlibMove,
         DWORD dwOrigin,
         ULARGE_INTEGER *plibNewPosition);
 
     HRESULT (STDMETHODCALLTYPE *SetSize)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         ULARGE_INTEGER libNewSize);
 
     HRESULT (STDMETHODCALLTYPE *CopyTo)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         IStream *pstm,
         ULARGE_INTEGER cb,
         ULARGE_INTEGER *pcbRead,
         ULARGE_INTEGER *pcbWritten);
 
     HRESULT (STDMETHODCALLTYPE *Commit)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         DWORD grfCommitFlags);
 
     HRESULT (STDMETHODCALLTYPE *Revert)(
-        IMarshalingStream* This);
+        IMarshalingStream *This);
 
     HRESULT (STDMETHODCALLTYPE *LockRegion)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         ULARGE_INTEGER libOffset,
         ULARGE_INTEGER cb,
         DWORD dwLockType);
 
     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         ULARGE_INTEGER libOffset,
         ULARGE_INTEGER cb,
         DWORD dwLockType);
 
     HRESULT (STDMETHODCALLTYPE *Stat)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         STATSTG *pstatstg,
         DWORD grfStatFlag);
 
     HRESULT (STDMETHODCALLTYPE *Clone)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         IStream **ppstm);
 
     /*** IMarshalingStream methods ***/
     HRESULT (STDMETHODCALLTYPE *GetMarshalingContextAttribute)(
-        IMarshalingStream* This,
+        IMarshalingStream *This,
         CO_MARSHALING_CONTEXT_ATTRIBUTES attribute,
         ULONG_PTR *pAttributeValue);
 
     END_INTERFACE
 } IMarshalingStreamVtbl;
+
 interface IMarshalingStream {
     CONST_VTBL IMarshalingStreamVtbl* lpVtbl;
 };
@@ -7415,15 +6512,6 @@
 
 #endif
 
-HRESULT STDMETHODCALLTYPE IMarshalingStream_GetMarshalingContextAttribute_Proxy(
-    IMarshalingStream* This,
-    CO_MARSHALING_CONTEXT_ATTRIBUTES attribute,
-    ULONG_PTR *pAttributeValue);
-void __RPC_STUB IMarshalingStream_GetMarshalingContextAttribute_Stub(
-    IRpcStubBuffer* This,
-    IRpcChannelBuffer* pRpcChannelBuffer,
-    PRPC_MESSAGE pRpcMessage,
-    DWORD* pdwStubPhase);
 
 #endif  /* __IMarshalingStream_INTERFACE_DEFINED__ */
 
