Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2337 lines
49 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
vs_types.hxx
Abstract:
General thunking class.
Author:
Adi Oltean [aoltean] 01/11/2002
Revision History:
Name Date Comments
aoltean 01/11/2002 Created
Description:
A thunk is a very thin wrapper around a COM object.
This wrapper intercepts all calls and delegates them
to teh original object. You generally cannot tell the difference
between a thunked COM object and a non-thunked one.
The thunk intercepts all the QueryInterface/AddRef/Release calls
and traces detalied information (like reference counts). For example,
an AddRef to a thunked object will be translated into an AddRef
call to the managed (original) COM object.
Thunking is done internally at COM interface level. However, since
QueryInterface is intercepted. a thunk is automatically created
for every new interface pointer.
Since the IUnknown pointer for a COM object must be the same for its
entire lifetime, the QueryInterface implementation will return the same
IUnknown thunk each time, therefore maintaining COM semantics of QueryInterface.
Usage:
// Attach a thunk to the managed (original object)
// The thunk object is created with an initial reference count == 1
// The managed object will remain with the SAME reference count!
hr = CVssQIThunk::CreateNewThunk(pManagedItf,
L"ObjectName", // for debugging only
IID_IYourInterface, // The initial interface for your thunk
(IUnknown**)&pThunked interface); // Thunked interface
Example:
// vs_cmxml.cxx
#include "vs_thunk.hxx"
// ---------- Original code ---------------------
CComPtr<IVssWriter> pWriter;
ft.CoCreateInstanceWithLog(
VSSDBG_XML,
CLSID_VssEvent,
L"VSSEvent",
CLSCTX_ALL,
IID_IVssWriter,
(IUnknown**)&(pWriter));
ft.CheckForError(VSSDBG_XML, L"CoCreateInstance");
// ---------- Code with the added thunk ---------------------
// Create the pWriterManagedItf instance
CComPtr<IVssWriter> pWriterManagedItf;
ft.CoCreateInstanceWithLog(
VSSDBG_XML,
CLSID_VssEvent,
L"VSSEvent",
CLSCTX_ALL,
IID_IVssWriter,
(IUnknown**)&(pWriterManagedItf));
ft.CheckForError(VSSDBG_XML, L"CoCreateInstance");
// Setup the thunking interface
CComPtr<IVssWriter> pWriter;
ft.hr = CVssQIThunk::CreateNewThunk(pWriterManagedItf,
L"WriterBC",
IID_IVssWriter,
(IUnknown**)&pWriter);
ft.CheckForError( VSSDBG_COORD, L"CreateNewThunk(writersBC)");
// Detach the original COM interface
pWriterManagedItf.Detach();
// -------------------------------------------------------
Remark:
In teh example above, we assume that we want to "final release"
the managed interface when the final release
of the thunk interface is being called. (this assumption holds only
if you attach the thunk to an object which has the reference cout = 1 at the
moment of attach).
However, it is not necesary to have the same reference count for the thunk and
for the managed interface. You may want to enforce this restriction only
if you want minimal changes in the existing code.
--*/
#pragma once
////////////////////////////////////////////////////////////////////////
// Standard foo for file name aliasing. This code block must be after
// all includes of VSS header files.
//
#ifdef VSS_FILE_ALIAS
#undef VSS_FILE_ALIAS
#endif
#define VSS_FILE_ALIAS "INCTHUNH"
//
////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// The QueryInterface thunk (used for refcount debugging purposes)
// Maximum length for the object name
class CVssQIThunk: public IUnknown
{
// Data members
private:
// Managed object
// This has to be the first member (4 bytes)
IUnknown* m_pManagedInterface;
// Internal reference count (for life management)
// This has to be the second member (4 bytes)
LONG m_cInternalRefCount;
// Interface ID
IID m_iid;
// Object name (for debugging)
CVssAutoPWSZ m_aszObjectName;
// Interface name (for debugging)
CVssAutoPWSZ m_aszInterfaceName;
// Thunk ID (for debugging purposes)
// (note that an object can have many thunks)
LONG m_ThunkID;
// TRUE if this instance was added to the map.
bool m_bIsAddedToTheMap;
// Static members
private:
// ID for the last returned thunk
static volatile LONG m_NewestThunkID;
// Map of IUnknown for thunked identities
// Key: the IUnknown identity of the managed interface
// Value: the thunk for the managed identity interface.
// - An entry is added in this array whenever a thunked obkect is created for the
// identity IUnknown
// - This will guarantee identity closure over thunked objects.
static CVssSimpleMap<IUnknown*, CVssQIThunk*> m_mapIdentities;
// Lock around the map
static CVssSafeCriticalSection m_csMapCriticalSection;
// Constructors/destructors
private:
// fake constructors/operations (never called)
CVssQIThunk(const CVssQIThunk&);
CVssQIThunk& operator=(const CVssQIThunk&);
// Standard constructor
CVssQIThunk(
IN IUnknown* pManagedInterface,
IN const IID& iid,
IN LPCWSTR wszObjectName
);
public:
// Public static constructor
static HRESULT CreateNewThunk(
IN IUnknown* pManagedUnknown,
IN LPCWSTR wszObjectName,
IN const IID& iid,
OUT IUnknown** pp
);
CVssQIThunk() {};
~CVssQIThunk();
// Attributes
public:
bool IsValid() { return (GetObjectName() && GetInterfaceName()); };
LPWSTR GetObjectName() { return m_aszObjectName; };
LPWSTR GetInterfaceName() { return m_aszInterfaceName; };
LONG GetThunkID() { return m_ThunkID; };
bool IsIdentity() { return !!(m_iid == IID_IUnknown); };
bool IsAddedToTheMap() { return m_bIsAddedToTheMap; };
void MarkAsAddedToTheMap() { m_bIsAddedToTheMap = true; };
// Private operations
private:
// Lookup for this identity in the global identity table
static CVssQIThunk* LookupForIdentity(
IN IUnknown* pManagedItf
);
// Add this identity in the global identity table
static bool AddIdentity(
IN IUnknown* pManagedItf,
IN CVssQIThunk* pThunk
);
// Remove this identity from the global identity table
static void RemoveIdentity(
IN IUnknown* pManagedItf
);
// Provides the lock for operating with the global identity table
CVssSafeCriticalSection& GetCS() { return m_csMapCriticalSection; };
// Reuse this identity
void ReuseIdentity();
static void GetInterfaceNameFromRegistry(
IN REFIID iid,
OUT CVssAutoPWSZ & aszInterfaceName
);
// Ovverides
public:
STDMETHOD(QueryInterface)(REFIID iid, void** pp);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
STDMETHOD(f3)();
STDMETHOD(f4)();
STDMETHOD(f5)();
STDMETHOD(f6)();
STDMETHOD(f7)();
STDMETHOD(f8)();
STDMETHOD(f9)();
STDMETHOD(f10)();
STDMETHOD(f11)();
STDMETHOD(f12)();
STDMETHOD(f13)();
STDMETHOD(f14)();
STDMETHOD(f15)();
STDMETHOD(f16)();
STDMETHOD(f17)();
STDMETHOD(f18)();
STDMETHOD(f19)();
STDMETHOD(f20)();
STDMETHOD(f21)();
STDMETHOD(f22)();
STDMETHOD(f23)();
STDMETHOD(f24)();
STDMETHOD(f25)();
STDMETHOD(f26)();
STDMETHOD(f27)();
STDMETHOD(f28)();
STDMETHOD(f29)();
STDMETHOD(f30)();
STDMETHOD(f31)();
STDMETHOD(f32)();
STDMETHOD(f33)();
STDMETHOD(f34)();
STDMETHOD(f35)();
STDMETHOD(f36)();
STDMETHOD(f37)();
STDMETHOD(f38)();
STDMETHOD(f39)();
STDMETHOD(f40)();
STDMETHOD(f41)();
STDMETHOD(f42)();
STDMETHOD(f43)();
STDMETHOD(f44)();
STDMETHOD(f45)();
STDMETHOD(f46)();
STDMETHOD(f47)();
STDMETHOD(f48)();
STDMETHOD(f49)();
STDMETHOD(f50)();
STDMETHOD(f51)();
STDMETHOD(f52)();
STDMETHOD(f53)();
STDMETHOD(f54)();
STDMETHOD(f55)();
STDMETHOD(f56)();
STDMETHOD(f57)();
STDMETHOD(f58)();
STDMETHOD(f59)();
STDMETHOD(f60)();
STDMETHOD(f61)();
STDMETHOD(f62)();
STDMETHOD(f63)();
STDMETHOD(f64)();
STDMETHOD(f65)();
STDMETHOD(f66)();
STDMETHOD(f67)();
STDMETHOD(f68)();
STDMETHOD(f69)();
STDMETHOD(f70)();
STDMETHOD(f71)();
STDMETHOD(f72)();
STDMETHOD(f73)();
STDMETHOD(f74)();
STDMETHOD(f75)();
STDMETHOD(f76)();
STDMETHOD(f77)();
STDMETHOD(f78)();
STDMETHOD(f79)();
STDMETHOD(f80)();
STDMETHOD(f81)();
STDMETHOD(f82)();
STDMETHOD(f83)();
STDMETHOD(f84)();
STDMETHOD(f85)();
STDMETHOD(f86)();
STDMETHOD(f87)();
STDMETHOD(f88)();
STDMETHOD(f89)();
STDMETHOD(f90)();
STDMETHOD(f91)();
STDMETHOD(f92)();
STDMETHOD(f93)();
STDMETHOD(f94)();
STDMETHOD(f95)();
STDMETHOD(f96)();
STDMETHOD(f97)();
STDMETHOD(f98)();
STDMETHOD(f99)();
STDMETHOD(f100)();
STDMETHOD(f101)();
STDMETHOD(f102)();
STDMETHOD(f103)();
STDMETHOD(f104)();
STDMETHOD(f105)();
STDMETHOD(f106)();
STDMETHOD(f107)();
STDMETHOD(f108)();
STDMETHOD(f109)();
STDMETHOD(f110)();
STDMETHOD(f111)();
STDMETHOD(f112)();
STDMETHOD(f113)();
STDMETHOD(f114)();
STDMETHOD(f115)();
STDMETHOD(f116)();
STDMETHOD(f117)();
STDMETHOD(f118)();
STDMETHOD(f119)();
STDMETHOD(f120)();
STDMETHOD(f121)();
STDMETHOD(f122)();
STDMETHOD(f123)();
STDMETHOD(f124)();
STDMETHOD(f125)();
STDMETHOD(f126)();
STDMETHOD(f127)();
STDMETHOD(f128)();
STDMETHOD(f129)();
STDMETHOD(f130)();
STDMETHOD(f131)();
STDMETHOD(f132)();
STDMETHOD(f133)();
STDMETHOD(f134)();
STDMETHOD(f135)();
STDMETHOD(f136)();
STDMETHOD(f137)();
STDMETHOD(f138)();
STDMETHOD(f139)();
STDMETHOD(f140)();
STDMETHOD(f141)();
STDMETHOD(f142)();
STDMETHOD(f143)();
STDMETHOD(f144)();
STDMETHOD(f145)();
STDMETHOD(f146)();
STDMETHOD(f147)();
STDMETHOD(f148)();
STDMETHOD(f149)();
STDMETHOD(f150)();
STDMETHOD(f151)();
STDMETHOD(f152)();
STDMETHOD(f153)();
STDMETHOD(f154)();
STDMETHOD(f155)();
STDMETHOD(f156)();
STDMETHOD(f157)();
STDMETHOD(f158)();
STDMETHOD(f159)();
STDMETHOD(f160)();
STDMETHOD(f161)();
STDMETHOD(f162)();
STDMETHOD(f163)();
STDMETHOD(f164)();
STDMETHOD(f165)();
STDMETHOD(f166)();
STDMETHOD(f167)();
STDMETHOD(f168)();
STDMETHOD(f169)();
STDMETHOD(f170)();
STDMETHOD(f171)();
STDMETHOD(f172)();
STDMETHOD(f173)();
STDMETHOD(f174)();
STDMETHOD(f175)();
STDMETHOD(f176)();
STDMETHOD(f177)();
STDMETHOD(f178)();
STDMETHOD(f179)();
STDMETHOD(f180)();
STDMETHOD(f181)();
STDMETHOD(f182)();
STDMETHOD(f183)();
STDMETHOD(f184)();
STDMETHOD(f185)();
STDMETHOD(f186)();
STDMETHOD(f187)();
STDMETHOD(f188)();
STDMETHOD(f189)();
STDMETHOD(f190)();
STDMETHOD(f191)();
STDMETHOD(f192)();
STDMETHOD(f193)();
STDMETHOD(f194)();
STDMETHOD(f195)();
STDMETHOD(f196)();
STDMETHOD(f197)();
STDMETHOD(f198)();
STDMETHOD(f199)();
STDMETHOD(f200)();
STDMETHOD(f201)();
STDMETHOD(f202)();
STDMETHOD(f203)();
STDMETHOD(f204)();
STDMETHOD(f205)();
STDMETHOD(f206)();
STDMETHOD(f207)();
STDMETHOD(f208)();
STDMETHOD(f209)();
STDMETHOD(f210)();
STDMETHOD(f211)();
STDMETHOD(f212)();
STDMETHOD(f213)();
STDMETHOD(f214)();
STDMETHOD(f215)();
STDMETHOD(f216)();
STDMETHOD(f217)();
STDMETHOD(f218)();
STDMETHOD(f219)();
STDMETHOD(f220)();
STDMETHOD(f221)();
STDMETHOD(f222)();
STDMETHOD(f223)();
STDMETHOD(f224)();
STDMETHOD(f225)();
STDMETHOD(f226)();
STDMETHOD(f227)();
STDMETHOD(f228)();
STDMETHOD(f229)();
STDMETHOD(f230)();
STDMETHOD(f231)();
STDMETHOD(f232)();
STDMETHOD(f233)();
STDMETHOD(f234)();
STDMETHOD(f235)();
STDMETHOD(f236)();
STDMETHOD(f237)();
STDMETHOD(f238)();
STDMETHOD(f239)();
STDMETHOD(f240)();
STDMETHOD(f241)();
STDMETHOD(f242)();
STDMETHOD(f243)();
STDMETHOD(f244)();
STDMETHOD(f245)();
STDMETHOD(f246)();
STDMETHOD(f247)();
STDMETHOD(f248)();
STDMETHOD(f249)();
STDMETHOD(f250)();
STDMETHOD(f251)();
STDMETHOD(f252)();
STDMETHOD(f253)();
STDMETHOD(f254)();
STDMETHOD(f255)();
STDMETHOD(f256)();
STDMETHOD(f257)();
STDMETHOD(f258)();
STDMETHOD(f259)();
STDMETHOD(f260)();
STDMETHOD(f261)();
STDMETHOD(f262)();
STDMETHOD(f263)();
STDMETHOD(f264)();
STDMETHOD(f265)();
STDMETHOD(f266)();
STDMETHOD(f267)();
STDMETHOD(f268)();
STDMETHOD(f269)();
STDMETHOD(f270)();
STDMETHOD(f271)();
STDMETHOD(f272)();
STDMETHOD(f273)();
STDMETHOD(f274)();
STDMETHOD(f275)();
STDMETHOD(f276)();
STDMETHOD(f277)();
STDMETHOD(f278)();
STDMETHOD(f279)();
STDMETHOD(f280)();
STDMETHOD(f281)();
STDMETHOD(f282)();
STDMETHOD(f283)();
STDMETHOD(f284)();
STDMETHOD(f285)();
STDMETHOD(f286)();
STDMETHOD(f287)();
STDMETHOD(f288)();
STDMETHOD(f289)();
STDMETHOD(f290)();
STDMETHOD(f291)();
STDMETHOD(f292)();
STDMETHOD(f293)();
STDMETHOD(f294)();
STDMETHOD(f295)();
STDMETHOD(f296)();
STDMETHOD(f297)();
STDMETHOD(f298)();
STDMETHOD(f299)();
STDMETHOD(f300)();
STDMETHOD(f301)();
STDMETHOD(f302)();
STDMETHOD(f303)();
STDMETHOD(f304)();
STDMETHOD(f305)();
STDMETHOD(f306)();
STDMETHOD(f307)();
STDMETHOD(f308)();
STDMETHOD(f309)();
STDMETHOD(f310)();
STDMETHOD(f311)();
STDMETHOD(f312)();
STDMETHOD(f313)();
STDMETHOD(f314)();
STDMETHOD(f315)();
STDMETHOD(f316)();
STDMETHOD(f317)();
STDMETHOD(f318)();
STDMETHOD(f319)();
STDMETHOD(f320)();
STDMETHOD(f321)();
STDMETHOD(f322)();
STDMETHOD(f323)();
STDMETHOD(f324)();
STDMETHOD(f325)();
STDMETHOD(f326)();
STDMETHOD(f327)();
STDMETHOD(f328)();
STDMETHOD(f329)();
STDMETHOD(f330)();
STDMETHOD(f331)();
STDMETHOD(f332)();
STDMETHOD(f333)();
STDMETHOD(f334)();
STDMETHOD(f335)();
STDMETHOD(f336)();
STDMETHOD(f337)();
STDMETHOD(f338)();
STDMETHOD(f339)();
STDMETHOD(f340)();
STDMETHOD(f341)();
STDMETHOD(f342)();
STDMETHOD(f343)();
STDMETHOD(f344)();
STDMETHOD(f345)();
STDMETHOD(f346)();
STDMETHOD(f347)();
STDMETHOD(f348)();
STDMETHOD(f349)();
STDMETHOD(f350)();
STDMETHOD(f351)();
STDMETHOD(f352)();
STDMETHOD(f353)();
STDMETHOD(f354)();
STDMETHOD(f355)();
STDMETHOD(f356)();
STDMETHOD(f357)();
STDMETHOD(f358)();
STDMETHOD(f359)();
STDMETHOD(f360)();
STDMETHOD(f361)();
STDMETHOD(f362)();
STDMETHOD(f363)();
STDMETHOD(f364)();
STDMETHOD(f365)();
STDMETHOD(f366)();
STDMETHOD(f367)();
STDMETHOD(f368)();
STDMETHOD(f369)();
STDMETHOD(f370)();
STDMETHOD(f371)();
STDMETHOD(f372)();
STDMETHOD(f373)();
STDMETHOD(f374)();
STDMETHOD(f375)();
STDMETHOD(f376)();
STDMETHOD(f377)();
STDMETHOD(f378)();
STDMETHOD(f379)();
STDMETHOD(f380)();
STDMETHOD(f381)();
STDMETHOD(f382)();
STDMETHOD(f383)();
STDMETHOD(f384)();
STDMETHOD(f385)();
STDMETHOD(f386)();
STDMETHOD(f387)();
STDMETHOD(f388)();
STDMETHOD(f389)();
STDMETHOD(f390)();
STDMETHOD(f391)();
STDMETHOD(f392)();
STDMETHOD(f393)();
STDMETHOD(f394)();
STDMETHOD(f395)();
STDMETHOD(f396)();
STDMETHOD(f397)();
STDMETHOD(f398)();
STDMETHOD(f399)();
STDMETHOD(f400)();
STDMETHOD(f401)();
STDMETHOD(f402)();
STDMETHOD(f403)();
STDMETHOD(f404)();
STDMETHOD(f405)();
STDMETHOD(f406)();
STDMETHOD(f407)();
STDMETHOD(f408)();
STDMETHOD(f409)();
STDMETHOD(f410)();
STDMETHOD(f411)();
STDMETHOD(f412)();
STDMETHOD(f413)();
STDMETHOD(f414)();
STDMETHOD(f415)();
STDMETHOD(f416)();
STDMETHOD(f417)();
STDMETHOD(f418)();
STDMETHOD(f419)();
STDMETHOD(f420)();
STDMETHOD(f421)();
STDMETHOD(f422)();
STDMETHOD(f423)();
STDMETHOD(f424)();
STDMETHOD(f425)();
STDMETHOD(f426)();
STDMETHOD(f427)();
STDMETHOD(f428)();
STDMETHOD(f429)();
STDMETHOD(f430)();
STDMETHOD(f431)();
STDMETHOD(f432)();
STDMETHOD(f433)();
STDMETHOD(f434)();
STDMETHOD(f435)();
STDMETHOD(f436)();
STDMETHOD(f437)();
STDMETHOD(f438)();
STDMETHOD(f439)();
STDMETHOD(f440)();
STDMETHOD(f441)();
STDMETHOD(f442)();
STDMETHOD(f443)();
STDMETHOD(f444)();
STDMETHOD(f445)();
STDMETHOD(f446)();
STDMETHOD(f447)();
STDMETHOD(f448)();
STDMETHOD(f449)();
STDMETHOD(f450)();
STDMETHOD(f451)();
STDMETHOD(f452)();
STDMETHOD(f453)();
STDMETHOD(f454)();
STDMETHOD(f455)();
STDMETHOD(f456)();
STDMETHOD(f457)();
STDMETHOD(f458)();
STDMETHOD(f459)();
STDMETHOD(f460)();
STDMETHOD(f461)();
STDMETHOD(f462)();
STDMETHOD(f463)();
STDMETHOD(f464)();
STDMETHOD(f465)();
STDMETHOD(f466)();
STDMETHOD(f467)();
STDMETHOD(f468)();
STDMETHOD(f469)();
STDMETHOD(f470)();
STDMETHOD(f471)();
STDMETHOD(f472)();
STDMETHOD(f473)();
STDMETHOD(f474)();
STDMETHOD(f475)();
STDMETHOD(f476)();
STDMETHOD(f477)();
STDMETHOD(f478)();
STDMETHOD(f479)();
STDMETHOD(f480)();
STDMETHOD(f481)();
STDMETHOD(f482)();
STDMETHOD(f483)();
STDMETHOD(f484)();
STDMETHOD(f485)();
STDMETHOD(f486)();
STDMETHOD(f487)();
STDMETHOD(f488)();
STDMETHOD(f489)();
STDMETHOD(f490)();
STDMETHOD(f491)();
STDMETHOD(f492)();
STDMETHOD(f493)();
STDMETHOD(f494)();
STDMETHOD(f495)();
STDMETHOD(f496)();
STDMETHOD(f497)();
STDMETHOD(f498)();
STDMETHOD(f499)();
STDMETHOD(f500)();
STDMETHOD(f501)();
STDMETHOD(f502)();
STDMETHOD(f503)();
STDMETHOD(f504)();
STDMETHOD(f505)();
STDMETHOD(f506)();
STDMETHOD(f507)();
STDMETHOD(f508)();
STDMETHOD(f509)();
STDMETHOD(f510)();
STDMETHOD(f511)();
STDMETHOD(f512)();
STDMETHOD(f513)();
STDMETHOD(f514)();
STDMETHOD(f515)();
STDMETHOD(f516)();
STDMETHOD(f517)();
STDMETHOD(f518)();
STDMETHOD(f519)();
STDMETHOD(f520)();
STDMETHOD(f521)();
STDMETHOD(f522)();
STDMETHOD(f523)();
STDMETHOD(f524)();
STDMETHOD(f525)();
STDMETHOD(f526)();
STDMETHOD(f527)();
STDMETHOD(f528)();
STDMETHOD(f529)();
STDMETHOD(f530)();
STDMETHOD(f531)();
STDMETHOD(f532)();
STDMETHOD(f533)();
STDMETHOD(f534)();
STDMETHOD(f535)();
STDMETHOD(f536)();
STDMETHOD(f537)();
STDMETHOD(f538)();
STDMETHOD(f539)();
STDMETHOD(f540)();
STDMETHOD(f541)();
STDMETHOD(f542)();
STDMETHOD(f543)();
STDMETHOD(f544)();
STDMETHOD(f545)();
STDMETHOD(f546)();
STDMETHOD(f547)();
STDMETHOD(f548)();
STDMETHOD(f549)();
STDMETHOD(f550)();
STDMETHOD(f551)();
STDMETHOD(f552)();
STDMETHOD(f553)();
STDMETHOD(f554)();
STDMETHOD(f555)();
STDMETHOD(f556)();
STDMETHOD(f557)();
STDMETHOD(f558)();
STDMETHOD(f559)();
STDMETHOD(f560)();
STDMETHOD(f561)();
STDMETHOD(f562)();
STDMETHOD(f563)();
STDMETHOD(f564)();
STDMETHOD(f565)();
STDMETHOD(f566)();
STDMETHOD(f567)();
STDMETHOD(f568)();
STDMETHOD(f569)();
STDMETHOD(f570)();
STDMETHOD(f571)();
STDMETHOD(f572)();
STDMETHOD(f573)();
STDMETHOD(f574)();
STDMETHOD(f575)();
STDMETHOD(f576)();
STDMETHOD(f577)();
STDMETHOD(f578)();
STDMETHOD(f579)();
STDMETHOD(f580)();
STDMETHOD(f581)();
STDMETHOD(f582)();
STDMETHOD(f583)();
STDMETHOD(f584)();
STDMETHOD(f585)();
STDMETHOD(f586)();
STDMETHOD(f587)();
STDMETHOD(f588)();
STDMETHOD(f589)();
STDMETHOD(f590)();
STDMETHOD(f591)();
STDMETHOD(f592)();
STDMETHOD(f593)();
STDMETHOD(f594)();
STDMETHOD(f595)();
STDMETHOD(f596)();
STDMETHOD(f597)();
STDMETHOD(f598)();
STDMETHOD(f599)();
STDMETHOD(f600)();
STDMETHOD(f601)();
STDMETHOD(f602)();
STDMETHOD(f603)();
STDMETHOD(f604)();
STDMETHOD(f605)();
STDMETHOD(f606)();
STDMETHOD(f607)();
STDMETHOD(f608)();
STDMETHOD(f609)();
STDMETHOD(f610)();
STDMETHOD(f611)();
STDMETHOD(f612)();
STDMETHOD(f613)();
STDMETHOD(f614)();
STDMETHOD(f615)();
STDMETHOD(f616)();
STDMETHOD(f617)();
STDMETHOD(f618)();
STDMETHOD(f619)();
STDMETHOD(f620)();
STDMETHOD(f621)();
STDMETHOD(f622)();
STDMETHOD(f623)();
STDMETHOD(f624)();
STDMETHOD(f625)();
STDMETHOD(f626)();
STDMETHOD(f627)();
STDMETHOD(f628)();
STDMETHOD(f629)();
STDMETHOD(f630)();
STDMETHOD(f631)();
STDMETHOD(f632)();
STDMETHOD(f633)();
STDMETHOD(f634)();
STDMETHOD(f635)();
STDMETHOD(f636)();
STDMETHOD(f637)();
STDMETHOD(f638)();
STDMETHOD(f639)();
STDMETHOD(f640)();
STDMETHOD(f641)();
STDMETHOD(f642)();
STDMETHOD(f643)();
STDMETHOD(f644)();
STDMETHOD(f645)();
STDMETHOD(f646)();
STDMETHOD(f647)();
STDMETHOD(f648)();
STDMETHOD(f649)();
STDMETHOD(f650)();
STDMETHOD(f651)();
STDMETHOD(f652)();
STDMETHOD(f653)();
STDMETHOD(f654)();
STDMETHOD(f655)();
STDMETHOD(f656)();
STDMETHOD(f657)();
STDMETHOD(f658)();
STDMETHOD(f659)();
STDMETHOD(f660)();
STDMETHOD(f661)();
STDMETHOD(f662)();
STDMETHOD(f663)();
STDMETHOD(f664)();
STDMETHOD(f665)();
STDMETHOD(f666)();
STDMETHOD(f667)();
STDMETHOD(f668)();
STDMETHOD(f669)();
STDMETHOD(f670)();
STDMETHOD(f671)();
STDMETHOD(f672)();
STDMETHOD(f673)();
STDMETHOD(f674)();
STDMETHOD(f675)();
STDMETHOD(f676)();
STDMETHOD(f677)();
STDMETHOD(f678)();
STDMETHOD(f679)();
STDMETHOD(f680)();
STDMETHOD(f681)();
STDMETHOD(f682)();
STDMETHOD(f683)();
STDMETHOD(f684)();
STDMETHOD(f685)();
STDMETHOD(f686)();
STDMETHOD(f687)();
STDMETHOD(f688)();
STDMETHOD(f689)();
STDMETHOD(f690)();
STDMETHOD(f691)();
STDMETHOD(f692)();
STDMETHOD(f693)();
STDMETHOD(f694)();
STDMETHOD(f695)();
STDMETHOD(f696)();
STDMETHOD(f697)();
STDMETHOD(f698)();
STDMETHOD(f699)();
STDMETHOD(f700)();
STDMETHOD(f701)();
STDMETHOD(f702)();
STDMETHOD(f703)();
STDMETHOD(f704)();
STDMETHOD(f705)();
STDMETHOD(f706)();
STDMETHOD(f707)();
STDMETHOD(f708)();
STDMETHOD(f709)();
STDMETHOD(f710)();
STDMETHOD(f711)();
STDMETHOD(f712)();
STDMETHOD(f713)();
STDMETHOD(f714)();
STDMETHOD(f715)();
STDMETHOD(f716)();
STDMETHOD(f717)();
STDMETHOD(f718)();
STDMETHOD(f719)();
STDMETHOD(f720)();
STDMETHOD(f721)();
STDMETHOD(f722)();
STDMETHOD(f723)();
STDMETHOD(f724)();
STDMETHOD(f725)();
STDMETHOD(f726)();
STDMETHOD(f727)();
STDMETHOD(f728)();
STDMETHOD(f729)();
STDMETHOD(f730)();
STDMETHOD(f731)();
STDMETHOD(f732)();
STDMETHOD(f733)();
STDMETHOD(f734)();
STDMETHOD(f735)();
STDMETHOD(f736)();
STDMETHOD(f737)();
STDMETHOD(f738)();
STDMETHOD(f739)();
STDMETHOD(f740)();
STDMETHOD(f741)();
STDMETHOD(f742)();
STDMETHOD(f743)();
STDMETHOD(f744)();
STDMETHOD(f745)();
STDMETHOD(f746)();
STDMETHOD(f747)();
STDMETHOD(f748)();
STDMETHOD(f749)();
STDMETHOD(f750)();
STDMETHOD(f751)();
STDMETHOD(f752)();
STDMETHOD(f753)();
STDMETHOD(f754)();
STDMETHOD(f755)();
STDMETHOD(f756)();
STDMETHOD(f757)();
STDMETHOD(f758)();
STDMETHOD(f759)();
STDMETHOD(f760)();
STDMETHOD(f761)();
STDMETHOD(f762)();
STDMETHOD(f763)();
STDMETHOD(f764)();
STDMETHOD(f765)();
STDMETHOD(f766)();
STDMETHOD(f767)();
STDMETHOD(f768)();
STDMETHOD(f769)();
STDMETHOD(f770)();
STDMETHOD(f771)();
STDMETHOD(f772)();
STDMETHOD(f773)();
STDMETHOD(f774)();
STDMETHOD(f775)();
STDMETHOD(f776)();
STDMETHOD(f777)();
STDMETHOD(f778)();
STDMETHOD(f779)();
STDMETHOD(f780)();
STDMETHOD(f781)();
STDMETHOD(f782)();
STDMETHOD(f783)();
STDMETHOD(f784)();
STDMETHOD(f785)();
STDMETHOD(f786)();
STDMETHOD(f787)();
STDMETHOD(f788)();
STDMETHOD(f789)();
STDMETHOD(f790)();
STDMETHOD(f791)();
STDMETHOD(f792)();
STDMETHOD(f793)();
STDMETHOD(f794)();
STDMETHOD(f795)();
STDMETHOD(f796)();
STDMETHOD(f797)();
STDMETHOD(f798)();
STDMETHOD(f799)();
STDMETHOD(f800)();
STDMETHOD(f801)();
STDMETHOD(f802)();
STDMETHOD(f803)();
STDMETHOD(f804)();
STDMETHOD(f805)();
STDMETHOD(f806)();
STDMETHOD(f807)();
STDMETHOD(f808)();
STDMETHOD(f809)();
STDMETHOD(f810)();
STDMETHOD(f811)();
STDMETHOD(f812)();
STDMETHOD(f813)();
STDMETHOD(f814)();
STDMETHOD(f815)();
STDMETHOD(f816)();
STDMETHOD(f817)();
STDMETHOD(f818)();
STDMETHOD(f819)();
STDMETHOD(f820)();
STDMETHOD(f821)();
STDMETHOD(f822)();
STDMETHOD(f823)();
STDMETHOD(f824)();
STDMETHOD(f825)();
STDMETHOD(f826)();
STDMETHOD(f827)();
STDMETHOD(f828)();
STDMETHOD(f829)();
STDMETHOD(f830)();
STDMETHOD(f831)();
STDMETHOD(f832)();
STDMETHOD(f833)();
STDMETHOD(f834)();
STDMETHOD(f835)();
STDMETHOD(f836)();
STDMETHOD(f837)();
STDMETHOD(f838)();
STDMETHOD(f839)();
STDMETHOD(f840)();
STDMETHOD(f841)();
STDMETHOD(f842)();
STDMETHOD(f843)();
STDMETHOD(f844)();
STDMETHOD(f845)();
STDMETHOD(f846)();
STDMETHOD(f847)();
STDMETHOD(f848)();
STDMETHOD(f849)();
STDMETHOD(f850)();
STDMETHOD(f851)();
STDMETHOD(f852)();
STDMETHOD(f853)();
STDMETHOD(f854)();
STDMETHOD(f855)();
STDMETHOD(f856)();
STDMETHOD(f857)();
STDMETHOD(f858)();
STDMETHOD(f859)();
STDMETHOD(f860)();
STDMETHOD(f861)();
STDMETHOD(f862)();
STDMETHOD(f863)();
STDMETHOD(f864)();
STDMETHOD(f865)();
STDMETHOD(f866)();
STDMETHOD(f867)();
STDMETHOD(f868)();
STDMETHOD(f869)();
STDMETHOD(f870)();
STDMETHOD(f871)();
STDMETHOD(f872)();
STDMETHOD(f873)();
STDMETHOD(f874)();
STDMETHOD(f875)();
STDMETHOD(f876)();
STDMETHOD(f877)();
STDMETHOD(f878)();
STDMETHOD(f879)();
STDMETHOD(f880)();
STDMETHOD(f881)();
STDMETHOD(f882)();
STDMETHOD(f883)();
STDMETHOD(f884)();
STDMETHOD(f885)();
STDMETHOD(f886)();
STDMETHOD(f887)();
STDMETHOD(f888)();
STDMETHOD(f889)();
STDMETHOD(f890)();
STDMETHOD(f891)();
STDMETHOD(f892)();
STDMETHOD(f893)();
STDMETHOD(f894)();
STDMETHOD(f895)();
STDMETHOD(f896)();
STDMETHOD(f897)();
STDMETHOD(f898)();
STDMETHOD(f899)();
STDMETHOD(f900)();
STDMETHOD(f901)();
STDMETHOD(f902)();
STDMETHOD(f903)();
STDMETHOD(f904)();
STDMETHOD(f905)();
STDMETHOD(f906)();
STDMETHOD(f907)();
STDMETHOD(f908)();
STDMETHOD(f909)();
STDMETHOD(f910)();
STDMETHOD(f911)();
STDMETHOD(f912)();
STDMETHOD(f913)();
STDMETHOD(f914)();
STDMETHOD(f915)();
STDMETHOD(f916)();
STDMETHOD(f917)();
STDMETHOD(f918)();
STDMETHOD(f919)();
STDMETHOD(f920)();
STDMETHOD(f921)();
STDMETHOD(f922)();
STDMETHOD(f923)();
STDMETHOD(f924)();
STDMETHOD(f925)();
STDMETHOD(f926)();
STDMETHOD(f927)();
STDMETHOD(f928)();
STDMETHOD(f929)();
STDMETHOD(f930)();
STDMETHOD(f931)();
STDMETHOD(f932)();
STDMETHOD(f933)();
STDMETHOD(f934)();
STDMETHOD(f935)();
STDMETHOD(f936)();
STDMETHOD(f937)();
STDMETHOD(f938)();
STDMETHOD(f939)();
STDMETHOD(f940)();
STDMETHOD(f941)();
STDMETHOD(f942)();
STDMETHOD(f943)();
STDMETHOD(f944)();
STDMETHOD(f945)();
STDMETHOD(f946)();
STDMETHOD(f947)();
STDMETHOD(f948)();
STDMETHOD(f949)();
STDMETHOD(f950)();
STDMETHOD(f951)();
STDMETHOD(f952)();
STDMETHOD(f953)();
STDMETHOD(f954)();
STDMETHOD(f955)();
STDMETHOD(f956)();
STDMETHOD(f957)();
STDMETHOD(f958)();
STDMETHOD(f959)();
STDMETHOD(f960)();
STDMETHOD(f961)();
STDMETHOD(f962)();
STDMETHOD(f963)();
STDMETHOD(f964)();
STDMETHOD(f965)();
STDMETHOD(f966)();
STDMETHOD(f967)();
STDMETHOD(f968)();
STDMETHOD(f969)();
STDMETHOD(f970)();
STDMETHOD(f971)();
STDMETHOD(f972)();
STDMETHOD(f973)();
STDMETHOD(f974)();
STDMETHOD(f975)();
STDMETHOD(f976)();
STDMETHOD(f977)();
STDMETHOD(f978)();
STDMETHOD(f979)();
STDMETHOD(f980)();
STDMETHOD(f981)();
STDMETHOD(f982)();
STDMETHOD(f983)();
STDMETHOD(f984)();
STDMETHOD(f985)();
STDMETHOD(f986)();
STDMETHOD(f987)();
STDMETHOD(f988)();
STDMETHOD(f989)();
STDMETHOD(f990)();
STDMETHOD(f991)();
STDMETHOD(f992)();
STDMETHOD(f993)();
STDMETHOD(f994)();
STDMETHOD(f995)();
STDMETHOD(f996)();
STDMETHOD(f997)();
STDMETHOD(f998)();
STDMETHOD(f999)();
STDMETHOD(f1000)();
STDMETHOD(f1001)();
STDMETHOD(f1002)();
STDMETHOD(f1003)();
STDMETHOD(f1004)();
STDMETHOD(f1005)();
STDMETHOD(f1006)();
STDMETHOD(f1007)();
STDMETHOD(f1008)();
STDMETHOD(f1009)();
STDMETHOD(f1010)();
STDMETHOD(f1011)();
STDMETHOD(f1012)();
STDMETHOD(f1013)();
STDMETHOD(f1014)();
STDMETHOD(f1015)();
STDMETHOD(f1016)();
STDMETHOD(f1017)();
STDMETHOD(f1018)();
STDMETHOD(f1019)();
STDMETHOD(f1020)();
STDMETHOD(f1021)();
STDMETHOD(f1022)();
STDMETHOD(f1023)();
#ifndef _WIN64
STDMETHOD(f1024)();
#endif
};
////////////////////////////////////////////////////////////////////////
// Thunk implementations
inline static void VssBadThunkCall()
{
BS_ASSERT(false);
}
#ifdef _M_IX86
#define IMPL_THUNK(n)\
__declspec(naked) inline HRESULT CVssQIThunk::f##n()\
{\
__asm mov eax, [esp+4]\
__asm cmp dword ptr [eax+8], 0\
__asm jg goodref\
__asm call VssBadThunkCall\
__asm goodref:\
__asm mov eax, [esp+4]\
__asm mov eax, dword ptr [eax+4]\
__asm mov [esp+4], eax\
__asm mov eax, dword ptr [eax]\
__asm mov eax, dword ptr [eax+4*n]\
__asm jmp eax\
}
#else
#define IMPL_THUNK(x)
inline HRESULT CVssQIThunk::f##n()\
{\
return E_NOTIMPL;\
}
#endif
IMPL_THUNK(3)
IMPL_THUNK(4)
IMPL_THUNK(5)
IMPL_THUNK(6)
IMPL_THUNK(7)
IMPL_THUNK(8)
IMPL_THUNK(9)
IMPL_THUNK(10)
IMPL_THUNK(11)
IMPL_THUNK(12)
IMPL_THUNK(13)
IMPL_THUNK(14)
IMPL_THUNK(15)
IMPL_THUNK(16)
IMPL_THUNK(17)
IMPL_THUNK(18)
IMPL_THUNK(19)
IMPL_THUNK(20)
IMPL_THUNK(21)
IMPL_THUNK(22)
IMPL_THUNK(23)
IMPL_THUNK(24)
IMPL_THUNK(25)
IMPL_THUNK(26)
IMPL_THUNK(27)
IMPL_THUNK(28)
IMPL_THUNK(29)
IMPL_THUNK(30)
IMPL_THUNK(31)
IMPL_THUNK(32)
IMPL_THUNK(33)
IMPL_THUNK(34)
IMPL_THUNK(35)
IMPL_THUNK(36)
IMPL_THUNK(37)
IMPL_THUNK(38)
IMPL_THUNK(39)
IMPL_THUNK(40)
IMPL_THUNK(41)
IMPL_THUNK(42)
IMPL_THUNK(43)
IMPL_THUNK(44)
IMPL_THUNK(45)
IMPL_THUNK(46)
IMPL_THUNK(47)
IMPL_THUNK(48)
IMPL_THUNK(49)
IMPL_THUNK(50)
IMPL_THUNK(51)
IMPL_THUNK(52)
IMPL_THUNK(53)
IMPL_THUNK(54)
IMPL_THUNK(55)
IMPL_THUNK(56)
IMPL_THUNK(57)
IMPL_THUNK(58)
IMPL_THUNK(59)
IMPL_THUNK(60)
IMPL_THUNK(61)
IMPL_THUNK(62)
IMPL_THUNK(63)
IMPL_THUNK(64)
IMPL_THUNK(65)
IMPL_THUNK(66)
IMPL_THUNK(67)
IMPL_THUNK(68)
IMPL_THUNK(69)
IMPL_THUNK(70)
IMPL_THUNK(71)
IMPL_THUNK(72)
IMPL_THUNK(73)
IMPL_THUNK(74)
IMPL_THUNK(75)
IMPL_THUNK(76)
IMPL_THUNK(77)
IMPL_THUNK(78)
IMPL_THUNK(79)
IMPL_THUNK(80)
IMPL_THUNK(81)
IMPL_THUNK(82)
IMPL_THUNK(83)
IMPL_THUNK(84)
IMPL_THUNK(85)
IMPL_THUNK(86)
IMPL_THUNK(87)
IMPL_THUNK(88)
IMPL_THUNK(89)
IMPL_THUNK(90)
IMPL_THUNK(91)
IMPL_THUNK(92)
IMPL_THUNK(93)
IMPL_THUNK(94)
IMPL_THUNK(95)
IMPL_THUNK(96)
IMPL_THUNK(97)
IMPL_THUNK(98)
IMPL_THUNK(99)
IMPL_THUNK(100)
IMPL_THUNK(101)
IMPL_THUNK(102)
IMPL_THUNK(103)
IMPL_THUNK(104)
IMPL_THUNK(105)
IMPL_THUNK(106)
IMPL_THUNK(107)
IMPL_THUNK(108)
IMPL_THUNK(109)
IMPL_THUNK(110)
IMPL_THUNK(111)
IMPL_THUNK(112)
IMPL_THUNK(113)
IMPL_THUNK(114)
IMPL_THUNK(115)
IMPL_THUNK(116)
IMPL_THUNK(117)
IMPL_THUNK(118)
IMPL_THUNK(119)
IMPL_THUNK(120)
IMPL_THUNK(121)
IMPL_THUNK(122)
IMPL_THUNK(123)
IMPL_THUNK(124)
IMPL_THUNK(125)
IMPL_THUNK(126)
IMPL_THUNK(127)
IMPL_THUNK(128)
IMPL_THUNK(129)
IMPL_THUNK(130)
IMPL_THUNK(131)
IMPL_THUNK(132)
IMPL_THUNK(133)
IMPL_THUNK(134)
IMPL_THUNK(135)
IMPL_THUNK(136)
IMPL_THUNK(137)
IMPL_THUNK(138)
IMPL_THUNK(139)
IMPL_THUNK(140)
IMPL_THUNK(141)
IMPL_THUNK(142)
IMPL_THUNK(143)
IMPL_THUNK(144)
IMPL_THUNK(145)
IMPL_THUNK(146)
IMPL_THUNK(147)
IMPL_THUNK(148)
IMPL_THUNK(149)
IMPL_THUNK(150)
IMPL_THUNK(151)
IMPL_THUNK(152)
IMPL_THUNK(153)
IMPL_THUNK(154)
IMPL_THUNK(155)
IMPL_THUNK(156)
IMPL_THUNK(157)
IMPL_THUNK(158)
IMPL_THUNK(159)
IMPL_THUNK(160)
IMPL_THUNK(161)
IMPL_THUNK(162)
IMPL_THUNK(163)
IMPL_THUNK(164)
IMPL_THUNK(165)
IMPL_THUNK(166)
IMPL_THUNK(167)
IMPL_THUNK(168)
IMPL_THUNK(169)
IMPL_THUNK(170)
IMPL_THUNK(171)
IMPL_THUNK(172)
IMPL_THUNK(173)
IMPL_THUNK(174)
IMPL_THUNK(175)
IMPL_THUNK(176)
IMPL_THUNK(177)
IMPL_THUNK(178)
IMPL_THUNK(179)
IMPL_THUNK(180)
IMPL_THUNK(181)
IMPL_THUNK(182)
IMPL_THUNK(183)
IMPL_THUNK(184)
IMPL_THUNK(185)
IMPL_THUNK(186)
IMPL_THUNK(187)
IMPL_THUNK(188)
IMPL_THUNK(189)
IMPL_THUNK(190)
IMPL_THUNK(191)
IMPL_THUNK(192)
IMPL_THUNK(193)
IMPL_THUNK(194)
IMPL_THUNK(195)
IMPL_THUNK(196)
IMPL_THUNK(197)
IMPL_THUNK(198)
IMPL_THUNK(199)
IMPL_THUNK(200)
IMPL_THUNK(201)
IMPL_THUNK(202)
IMPL_THUNK(203)
IMPL_THUNK(204)
IMPL_THUNK(205)
IMPL_THUNK(206)
IMPL_THUNK(207)
IMPL_THUNK(208)
IMPL_THUNK(209)
IMPL_THUNK(210)
IMPL_THUNK(211)
IMPL_THUNK(212)
IMPL_THUNK(213)
IMPL_THUNK(214)
IMPL_THUNK(215)
IMPL_THUNK(216)
IMPL_THUNK(217)
IMPL_THUNK(218)
IMPL_THUNK(219)
IMPL_THUNK(220)
IMPL_THUNK(221)
IMPL_THUNK(222)
IMPL_THUNK(223)
IMPL_THUNK(224)
IMPL_THUNK(225)
IMPL_THUNK(226)
IMPL_THUNK(227)
IMPL_THUNK(228)
IMPL_THUNK(229)
IMPL_THUNK(230)
IMPL_THUNK(231)
IMPL_THUNK(232)
IMPL_THUNK(233)
IMPL_THUNK(234)
IMPL_THUNK(235)
IMPL_THUNK(236)
IMPL_THUNK(237)
IMPL_THUNK(238)
IMPL_THUNK(239)
IMPL_THUNK(240)
IMPL_THUNK(241)
IMPL_THUNK(242)
IMPL_THUNK(243)
IMPL_THUNK(244)
IMPL_THUNK(245)
IMPL_THUNK(246)
IMPL_THUNK(247)
IMPL_THUNK(248)
IMPL_THUNK(249)
IMPL_THUNK(250)
IMPL_THUNK(251)
IMPL_THUNK(252)
IMPL_THUNK(253)
IMPL_THUNK(254)
IMPL_THUNK(255)
IMPL_THUNK(256)
IMPL_THUNK(257)
IMPL_THUNK(258)
IMPL_THUNK(259)
IMPL_THUNK(260)
IMPL_THUNK(261)
IMPL_THUNK(262)
IMPL_THUNK(263)
IMPL_THUNK(264)
IMPL_THUNK(265)
IMPL_THUNK(266)
IMPL_THUNK(267)
IMPL_THUNK(268)
IMPL_THUNK(269)
IMPL_THUNK(270)
IMPL_THUNK(271)
IMPL_THUNK(272)
IMPL_THUNK(273)
IMPL_THUNK(274)
IMPL_THUNK(275)
IMPL_THUNK(276)
IMPL_THUNK(277)
IMPL_THUNK(278)
IMPL_THUNK(279)
IMPL_THUNK(280)
IMPL_THUNK(281)
IMPL_THUNK(282)
IMPL_THUNK(283)
IMPL_THUNK(284)
IMPL_THUNK(285)
IMPL_THUNK(286)
IMPL_THUNK(287)
IMPL_THUNK(288)
IMPL_THUNK(289)
IMPL_THUNK(290)
IMPL_THUNK(291)
IMPL_THUNK(292)
IMPL_THUNK(293)
IMPL_THUNK(294)
IMPL_THUNK(295)
IMPL_THUNK(296)
IMPL_THUNK(297)
IMPL_THUNK(298)
IMPL_THUNK(299)
IMPL_THUNK(300)
IMPL_THUNK(301)
IMPL_THUNK(302)
IMPL_THUNK(303)
IMPL_THUNK(304)
IMPL_THUNK(305)
IMPL_THUNK(306)
IMPL_THUNK(307)
IMPL_THUNK(308)
IMPL_THUNK(309)
IMPL_THUNK(310)
IMPL_THUNK(311)
IMPL_THUNK(312)
IMPL_THUNK(313)
IMPL_THUNK(314)
IMPL_THUNK(315)
IMPL_THUNK(316)
IMPL_THUNK(317)
IMPL_THUNK(318)
IMPL_THUNK(319)
IMPL_THUNK(320)
IMPL_THUNK(321)
IMPL_THUNK(322)
IMPL_THUNK(323)
IMPL_THUNK(324)
IMPL_THUNK(325)
IMPL_THUNK(326)
IMPL_THUNK(327)
IMPL_THUNK(328)
IMPL_THUNK(329)
IMPL_THUNK(330)
IMPL_THUNK(331)
IMPL_THUNK(332)
IMPL_THUNK(333)
IMPL_THUNK(334)
IMPL_THUNK(335)
IMPL_THUNK(336)
IMPL_THUNK(337)
IMPL_THUNK(338)
IMPL_THUNK(339)
IMPL_THUNK(340)
IMPL_THUNK(341)
IMPL_THUNK(342)
IMPL_THUNK(343)
IMPL_THUNK(344)
IMPL_THUNK(345)
IMPL_THUNK(346)
IMPL_THUNK(347)
IMPL_THUNK(348)
IMPL_THUNK(349)
IMPL_THUNK(350)
IMPL_THUNK(351)
IMPL_THUNK(352)
IMPL_THUNK(353)
IMPL_THUNK(354)
IMPL_THUNK(355)
IMPL_THUNK(356)
IMPL_THUNK(357)
IMPL_THUNK(358)
IMPL_THUNK(359)
IMPL_THUNK(360)
IMPL_THUNK(361)
IMPL_THUNK(362)
IMPL_THUNK(363)
IMPL_THUNK(364)
IMPL_THUNK(365)
IMPL_THUNK(366)
IMPL_THUNK(367)
IMPL_THUNK(368)
IMPL_THUNK(369)
IMPL_THUNK(370)
IMPL_THUNK(371)
IMPL_THUNK(372)
IMPL_THUNK(373)
IMPL_THUNK(374)
IMPL_THUNK(375)
IMPL_THUNK(376)
IMPL_THUNK(377)
IMPL_THUNK(378)
IMPL_THUNK(379)
IMPL_THUNK(380)
IMPL_THUNK(381)
IMPL_THUNK(382)
IMPL_THUNK(383)
IMPL_THUNK(384)
IMPL_THUNK(385)
IMPL_THUNK(386)
IMPL_THUNK(387)
IMPL_THUNK(388)
IMPL_THUNK(389)
IMPL_THUNK(390)
IMPL_THUNK(391)
IMPL_THUNK(392)
IMPL_THUNK(393)
IMPL_THUNK(394)
IMPL_THUNK(395)
IMPL_THUNK(396)
IMPL_THUNK(397)
IMPL_THUNK(398)
IMPL_THUNK(399)
IMPL_THUNK(400)
IMPL_THUNK(401)
IMPL_THUNK(402)
IMPL_THUNK(403)
IMPL_THUNK(404)
IMPL_THUNK(405)
IMPL_THUNK(406)
IMPL_THUNK(407)
IMPL_THUNK(408)
IMPL_THUNK(409)
IMPL_THUNK(410)
IMPL_THUNK(411)
IMPL_THUNK(412)
IMPL_THUNK(413)
IMPL_THUNK(414)
IMPL_THUNK(415)
IMPL_THUNK(416)
IMPL_THUNK(417)
IMPL_THUNK(418)
IMPL_THUNK(419)
IMPL_THUNK(420)
IMPL_THUNK(421)
IMPL_THUNK(422)
IMPL_THUNK(423)
IMPL_THUNK(424)
IMPL_THUNK(425)
IMPL_THUNK(426)
IMPL_THUNK(427)
IMPL_THUNK(428)
IMPL_THUNK(429)
IMPL_THUNK(430)
IMPL_THUNK(431)
IMPL_THUNK(432)
IMPL_THUNK(433)
IMPL_THUNK(434)
IMPL_THUNK(435)
IMPL_THUNK(436)
IMPL_THUNK(437)
IMPL_THUNK(438)
IMPL_THUNK(439)
IMPL_THUNK(440)
IMPL_THUNK(441)
IMPL_THUNK(442)
IMPL_THUNK(443)
IMPL_THUNK(444)
IMPL_THUNK(445)
IMPL_THUNK(446)
IMPL_THUNK(447)
IMPL_THUNK(448)
IMPL_THUNK(449)
IMPL_THUNK(450)
IMPL_THUNK(451)
IMPL_THUNK(452)
IMPL_THUNK(453)
IMPL_THUNK(454)
IMPL_THUNK(455)
IMPL_THUNK(456)
IMPL_THUNK(457)
IMPL_THUNK(458)
IMPL_THUNK(459)
IMPL_THUNK(460)
IMPL_THUNK(461)
IMPL_THUNK(462)
IMPL_THUNK(463)
IMPL_THUNK(464)
IMPL_THUNK(465)
IMPL_THUNK(466)
IMPL_THUNK(467)
IMPL_THUNK(468)
IMPL_THUNK(469)
IMPL_THUNK(470)
IMPL_THUNK(471)
IMPL_THUNK(472)
IMPL_THUNK(473)
IMPL_THUNK(474)
IMPL_THUNK(475)
IMPL_THUNK(476)
IMPL_THUNK(477)
IMPL_THUNK(478)
IMPL_THUNK(479)
IMPL_THUNK(480)
IMPL_THUNK(481)
IMPL_THUNK(482)
IMPL_THUNK(483)
IMPL_THUNK(484)
IMPL_THUNK(485)
IMPL_THUNK(486)
IMPL_THUNK(487)
IMPL_THUNK(488)
IMPL_THUNK(489)
IMPL_THUNK(490)
IMPL_THUNK(491)
IMPL_THUNK(492)
IMPL_THUNK(493)
IMPL_THUNK(494)
IMPL_THUNK(495)
IMPL_THUNK(496)
IMPL_THUNK(497)
IMPL_THUNK(498)
IMPL_THUNK(499)
IMPL_THUNK(500)
IMPL_THUNK(501)
IMPL_THUNK(502)
IMPL_THUNK(503)
IMPL_THUNK(504)
IMPL_THUNK(505)
IMPL_THUNK(506)
IMPL_THUNK(507)
IMPL_THUNK(508)
IMPL_THUNK(509)
IMPL_THUNK(510)
IMPL_THUNK(511)
IMPL_THUNK(512)
IMPL_THUNK(513)
IMPL_THUNK(514)
IMPL_THUNK(515)
IMPL_THUNK(516)
IMPL_THUNK(517)
IMPL_THUNK(518)
IMPL_THUNK(519)
IMPL_THUNK(520)
IMPL_THUNK(521)
IMPL_THUNK(522)
IMPL_THUNK(523)
IMPL_THUNK(524)
IMPL_THUNK(525)
IMPL_THUNK(526)
IMPL_THUNK(527)
IMPL_THUNK(528)
IMPL_THUNK(529)
IMPL_THUNK(530)
IMPL_THUNK(531)
IMPL_THUNK(532)
IMPL_THUNK(533)
IMPL_THUNK(534)
IMPL_THUNK(535)
IMPL_THUNK(536)
IMPL_THUNK(537)
IMPL_THUNK(538)
IMPL_THUNK(539)
IMPL_THUNK(540)
IMPL_THUNK(541)
IMPL_THUNK(542)
IMPL_THUNK(543)
IMPL_THUNK(544)
IMPL_THUNK(545)
IMPL_THUNK(546)
IMPL_THUNK(547)
IMPL_THUNK(548)
IMPL_THUNK(549)
IMPL_THUNK(550)
IMPL_THUNK(551)
IMPL_THUNK(552)
IMPL_THUNK(553)
IMPL_THUNK(554)
IMPL_THUNK(555)
IMPL_THUNK(556)
IMPL_THUNK(557)
IMPL_THUNK(558)
IMPL_THUNK(559)
IMPL_THUNK(560)
IMPL_THUNK(561)
IMPL_THUNK(562)
IMPL_THUNK(563)
IMPL_THUNK(564)
IMPL_THUNK(565)
IMPL_THUNK(566)
IMPL_THUNK(567)
IMPL_THUNK(568)
IMPL_THUNK(569)
IMPL_THUNK(570)
IMPL_THUNK(571)
IMPL_THUNK(572)
IMPL_THUNK(573)
IMPL_THUNK(574)
IMPL_THUNK(575)
IMPL_THUNK(576)
IMPL_THUNK(577)
IMPL_THUNK(578)
IMPL_THUNK(579)
IMPL_THUNK(580)
IMPL_THUNK(581)
IMPL_THUNK(582)
IMPL_THUNK(583)
IMPL_THUNK(584)
IMPL_THUNK(585)
IMPL_THUNK(586)
IMPL_THUNK(587)
IMPL_THUNK(588)
IMPL_THUNK(589)
IMPL_THUNK(590)
IMPL_THUNK(591)
IMPL_THUNK(592)
IMPL_THUNK(593)
IMPL_THUNK(594)
IMPL_THUNK(595)
IMPL_THUNK(596)
IMPL_THUNK(597)
IMPL_THUNK(598)
IMPL_THUNK(599)
IMPL_THUNK(600)
IMPL_THUNK(601)
IMPL_THUNK(602)
IMPL_THUNK(603)
IMPL_THUNK(604)
IMPL_THUNK(605)
IMPL_THUNK(606)
IMPL_THUNK(607)
IMPL_THUNK(608)
IMPL_THUNK(609)
IMPL_THUNK(610)
IMPL_THUNK(611)
IMPL_THUNK(612)
IMPL_THUNK(613)
IMPL_THUNK(614)
IMPL_THUNK(615)
IMPL_THUNK(616)
IMPL_THUNK(617)
IMPL_THUNK(618)
IMPL_THUNK(619)
IMPL_THUNK(620)
IMPL_THUNK(621)
IMPL_THUNK(622)
IMPL_THUNK(623)
IMPL_THUNK(624)
IMPL_THUNK(625)
IMPL_THUNK(626)
IMPL_THUNK(627)
IMPL_THUNK(628)
IMPL_THUNK(629)
IMPL_THUNK(630)
IMPL_THUNK(631)
IMPL_THUNK(632)
IMPL_THUNK(633)
IMPL_THUNK(634)
IMPL_THUNK(635)
IMPL_THUNK(636)
IMPL_THUNK(637)
IMPL_THUNK(638)
IMPL_THUNK(639)
IMPL_THUNK(640)
IMPL_THUNK(641)
IMPL_THUNK(642)
IMPL_THUNK(643)
IMPL_THUNK(644)
IMPL_THUNK(645)
IMPL_THUNK(646)
IMPL_THUNK(647)
IMPL_THUNK(648)
IMPL_THUNK(649)
IMPL_THUNK(650)
IMPL_THUNK(651)
IMPL_THUNK(652)
IMPL_THUNK(653)
IMPL_THUNK(654)
IMPL_THUNK(655)
IMPL_THUNK(656)
IMPL_THUNK(657)
IMPL_THUNK(658)
IMPL_THUNK(659)
IMPL_THUNK(660)
IMPL_THUNK(661)
IMPL_THUNK(662)
IMPL_THUNK(663)
IMPL_THUNK(664)
IMPL_THUNK(665)
IMPL_THUNK(666)
IMPL_THUNK(667)
IMPL_THUNK(668)
IMPL_THUNK(669)
IMPL_THUNK(670)
IMPL_THUNK(671)
IMPL_THUNK(672)
IMPL_THUNK(673)
IMPL_THUNK(674)
IMPL_THUNK(675)
IMPL_THUNK(676)
IMPL_THUNK(677)
IMPL_THUNK(678)
IMPL_THUNK(679)
IMPL_THUNK(680)
IMPL_THUNK(681)
IMPL_THUNK(682)
IMPL_THUNK(683)
IMPL_THUNK(684)
IMPL_THUNK(685)
IMPL_THUNK(686)
IMPL_THUNK(687)
IMPL_THUNK(688)
IMPL_THUNK(689)
IMPL_THUNK(690)
IMPL_THUNK(691)
IMPL_THUNK(692)
IMPL_THUNK(693)
IMPL_THUNK(694)
IMPL_THUNK(695)
IMPL_THUNK(696)
IMPL_THUNK(697)
IMPL_THUNK(698)
IMPL_THUNK(699)
IMPL_THUNK(700)
IMPL_THUNK(701)
IMPL_THUNK(702)
IMPL_THUNK(703)
IMPL_THUNK(704)
IMPL_THUNK(705)
IMPL_THUNK(706)
IMPL_THUNK(707)
IMPL_THUNK(708)
IMPL_THUNK(709)
IMPL_THUNK(710)
IMPL_THUNK(711)
IMPL_THUNK(712)
IMPL_THUNK(713)
IMPL_THUNK(714)
IMPL_THUNK(715)
IMPL_THUNK(716)
IMPL_THUNK(717)
IMPL_THUNK(718)
IMPL_THUNK(719)
IMPL_THUNK(720)
IMPL_THUNK(721)
IMPL_THUNK(722)
IMPL_THUNK(723)
IMPL_THUNK(724)
IMPL_THUNK(725)
IMPL_THUNK(726)
IMPL_THUNK(727)
IMPL_THUNK(728)
IMPL_THUNK(729)
IMPL_THUNK(730)
IMPL_THUNK(731)
IMPL_THUNK(732)
IMPL_THUNK(733)
IMPL_THUNK(734)
IMPL_THUNK(735)
IMPL_THUNK(736)
IMPL_THUNK(737)
IMPL_THUNK(738)
IMPL_THUNK(739)
IMPL_THUNK(740)
IMPL_THUNK(741)
IMPL_THUNK(742)
IMPL_THUNK(743)
IMPL_THUNK(744)
IMPL_THUNK(745)
IMPL_THUNK(746)
IMPL_THUNK(747)
IMPL_THUNK(748)
IMPL_THUNK(749)
IMPL_THUNK(750)
IMPL_THUNK(751)
IMPL_THUNK(752)
IMPL_THUNK(753)
IMPL_THUNK(754)
IMPL_THUNK(755)
IMPL_THUNK(756)
IMPL_THUNK(757)
IMPL_THUNK(758)
IMPL_THUNK(759)
IMPL_THUNK(760)
IMPL_THUNK(761)
IMPL_THUNK(762)
IMPL_THUNK(763)
IMPL_THUNK(764)
IMPL_THUNK(765)
IMPL_THUNK(766)
IMPL_THUNK(767)
IMPL_THUNK(768)
IMPL_THUNK(769)
IMPL_THUNK(770)
IMPL_THUNK(771)
IMPL_THUNK(772)
IMPL_THUNK(773)
IMPL_THUNK(774)
IMPL_THUNK(775)
IMPL_THUNK(776)
IMPL_THUNK(777)
IMPL_THUNK(778)
IMPL_THUNK(779)
IMPL_THUNK(780)
IMPL_THUNK(781)
IMPL_THUNK(782)
IMPL_THUNK(783)
IMPL_THUNK(784)
IMPL_THUNK(785)
IMPL_THUNK(786)
IMPL_THUNK(787)
IMPL_THUNK(788)
IMPL_THUNK(789)
IMPL_THUNK(790)
IMPL_THUNK(791)
IMPL_THUNK(792)
IMPL_THUNK(793)
IMPL_THUNK(794)
IMPL_THUNK(795)
IMPL_THUNK(796)
IMPL_THUNK(797)
IMPL_THUNK(798)
IMPL_THUNK(799)
IMPL_THUNK(800)
IMPL_THUNK(801)
IMPL_THUNK(802)
IMPL_THUNK(803)
IMPL_THUNK(804)
IMPL_THUNK(805)
IMPL_THUNK(806)
IMPL_THUNK(807)
IMPL_THUNK(808)
IMPL_THUNK(809)
IMPL_THUNK(810)
IMPL_THUNK(811)
IMPL_THUNK(812)
IMPL_THUNK(813)
IMPL_THUNK(814)
IMPL_THUNK(815)
IMPL_THUNK(816)
IMPL_THUNK(817)
IMPL_THUNK(818)
IMPL_THUNK(819)
IMPL_THUNK(820)
IMPL_THUNK(821)
IMPL_THUNK(822)
IMPL_THUNK(823)
IMPL_THUNK(824)
IMPL_THUNK(825)
IMPL_THUNK(826)
IMPL_THUNK(827)
IMPL_THUNK(828)
IMPL_THUNK(829)
IMPL_THUNK(830)
IMPL_THUNK(831)
IMPL_THUNK(832)
IMPL_THUNK(833)
IMPL_THUNK(834)
IMPL_THUNK(835)
IMPL_THUNK(836)
IMPL_THUNK(837)
IMPL_THUNK(838)
IMPL_THUNK(839)
IMPL_THUNK(840)
IMPL_THUNK(841)
IMPL_THUNK(842)
IMPL_THUNK(843)
IMPL_THUNK(844)
IMPL_THUNK(845)
IMPL_THUNK(846)
IMPL_THUNK(847)
IMPL_THUNK(848)
IMPL_THUNK(849)
IMPL_THUNK(850)
IMPL_THUNK(851)
IMPL_THUNK(852)
IMPL_THUNK(853)
IMPL_THUNK(854)
IMPL_THUNK(855)
IMPL_THUNK(856)
IMPL_THUNK(857)
IMPL_THUNK(858)
IMPL_THUNK(859)
IMPL_THUNK(860)
IMPL_THUNK(861)
IMPL_THUNK(862)
IMPL_THUNK(863)
IMPL_THUNK(864)
IMPL_THUNK(865)
IMPL_THUNK(866)
IMPL_THUNK(867)
IMPL_THUNK(868)
IMPL_THUNK(869)
IMPL_THUNK(870)
IMPL_THUNK(871)
IMPL_THUNK(872)
IMPL_THUNK(873)
IMPL_THUNK(874)
IMPL_THUNK(875)
IMPL_THUNK(876)
IMPL_THUNK(877)
IMPL_THUNK(878)
IMPL_THUNK(879)
IMPL_THUNK(880)
IMPL_THUNK(881)
IMPL_THUNK(882)
IMPL_THUNK(883)
IMPL_THUNK(884)
IMPL_THUNK(885)
IMPL_THUNK(886)
IMPL_THUNK(887)
IMPL_THUNK(888)
IMPL_THUNK(889)
IMPL_THUNK(890)
IMPL_THUNK(891)
IMPL_THUNK(892)
IMPL_THUNK(893)
IMPL_THUNK(894)
IMPL_THUNK(895)
IMPL_THUNK(896)
IMPL_THUNK(897)
IMPL_THUNK(898)
IMPL_THUNK(899)
IMPL_THUNK(900)
IMPL_THUNK(901)
IMPL_THUNK(902)
IMPL_THUNK(903)
IMPL_THUNK(904)
IMPL_THUNK(905)
IMPL_THUNK(906)
IMPL_THUNK(907)
IMPL_THUNK(908)
IMPL_THUNK(909)
IMPL_THUNK(910)
IMPL_THUNK(911)
IMPL_THUNK(912)
IMPL_THUNK(913)
IMPL_THUNK(914)
IMPL_THUNK(915)
IMPL_THUNK(916)
IMPL_THUNK(917)
IMPL_THUNK(918)
IMPL_THUNK(919)
IMPL_THUNK(920)
IMPL_THUNK(921)
IMPL_THUNK(922)
IMPL_THUNK(923)
IMPL_THUNK(924)
IMPL_THUNK(925)
IMPL_THUNK(926)
IMPL_THUNK(927)
IMPL_THUNK(928)
IMPL_THUNK(929)
IMPL_THUNK(930)
IMPL_THUNK(931)
IMPL_THUNK(932)
IMPL_THUNK(933)
IMPL_THUNK(934)
IMPL_THUNK(935)
IMPL_THUNK(936)
IMPL_THUNK(937)
IMPL_THUNK(938)
IMPL_THUNK(939)
IMPL_THUNK(940)
IMPL_THUNK(941)
IMPL_THUNK(942)
IMPL_THUNK(943)
IMPL_THUNK(944)
IMPL_THUNK(945)
IMPL_THUNK(946)
IMPL_THUNK(947)
IMPL_THUNK(948)
IMPL_THUNK(949)
IMPL_THUNK(950)
IMPL_THUNK(951)
IMPL_THUNK(952)
IMPL_THUNK(953)
IMPL_THUNK(954)
IMPL_THUNK(955)
IMPL_THUNK(956)
IMPL_THUNK(957)
IMPL_THUNK(958)
IMPL_THUNK(959)
IMPL_THUNK(960)
IMPL_THUNK(961)
IMPL_THUNK(962)
IMPL_THUNK(963)
IMPL_THUNK(964)
IMPL_THUNK(965)
IMPL_THUNK(966)
IMPL_THUNK(967)
IMPL_THUNK(968)
IMPL_THUNK(969)
IMPL_THUNK(970)
IMPL_THUNK(971)
IMPL_THUNK(972)
IMPL_THUNK(973)
IMPL_THUNK(974)
IMPL_THUNK(975)
IMPL_THUNK(976)
IMPL_THUNK(977)
IMPL_THUNK(978)
IMPL_THUNK(979)
IMPL_THUNK(980)
IMPL_THUNK(981)
IMPL_THUNK(982)
IMPL_THUNK(983)
IMPL_THUNK(984)
IMPL_THUNK(985)
IMPL_THUNK(986)
IMPL_THUNK(987)
IMPL_THUNK(988)
IMPL_THUNK(989)
IMPL_THUNK(990)
IMPL_THUNK(991)
IMPL_THUNK(992)
IMPL_THUNK(993)
IMPL_THUNK(994)
IMPL_THUNK(995)
IMPL_THUNK(996)
IMPL_THUNK(997)
IMPL_THUNK(998)
IMPL_THUNK(999)
IMPL_THUNK(1000)
IMPL_THUNK(1001)
IMPL_THUNK(1002)
IMPL_THUNK(1003)
IMPL_THUNK(1004)
IMPL_THUNK(1005)
IMPL_THUNK(1006)
IMPL_THUNK(1007)
IMPL_THUNK(1008)
IMPL_THUNK(1009)
IMPL_THUNK(1010)
IMPL_THUNK(1011)
IMPL_THUNK(1012)
IMPL_THUNK(1013)
IMPL_THUNK(1014)
IMPL_THUNK(1015)
IMPL_THUNK(1016)
IMPL_THUNK(1017)
IMPL_THUNK(1018)
IMPL_THUNK(1019)
IMPL_THUNK(1020)
IMPL_THUNK(1021)
IMPL_THUNK(1022)
IMPL_THUNK(1023)
IMPL_THUNK(1024)