| 1 | /** | 
 
 
 
 
 | 2 | * This file has no copyright assigned and is placed in the Public Domain. | 
 
 
 
 
 | 3 | * This file is part of the mingw-w64 runtime package. | 
 
 
 
 
 | 4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
 
 
 
 
 | 5 | */ | 
 
 
 
 
 | 6 | #ifndef __dsclient_h | 
 
 
 
 
 | 7 | #define __dsclient_h | 
 
 
 
 
 | 8 |  | 
 
 
 
 
 | 9 | #include <_mingw_unicode.h> | 
 
 
 
 
 | 10 | #include <shlobj.h> | 
 
 
 
 
 | 11 |  | 
 
 
 
 
 | 12 | DEFINE_GUID(CLSID_MicrosoftDS,0xfe1290f0,0xcfbd,0x11cf,0xa3,0x30,0x0,0xaa,0x0,0xc1,0x6e,0x65); | 
 
 
 
 
 | 13 | #define CLSID_DsFolder CLSID_MicrosoftDS | 
 
 
 
 
 | 14 | DEFINE_GUID(CLSID_DsPropertyPages,0xd45d530,0x764b,0x11d0,0xa1,0xca,0x0,0xaa,0x0,0xc1,0x6e,0x65); | 
 
 
 
 
 | 15 | DEFINE_GUID(CLSID_DsDomainTreeBrowser,0x1698790a,0xe2b4,0x11d0,0xb0,0xb1,0x00,0xc0,0x4f,0xd8,0xdc,0xa6); | 
 
 
 
 
 | 16 | DEFINE_GUID(IID_IDsBrowseDomainTree,0x7cabcf1e,0x78f5,0x11d2,0x96,0xc,0x0,0xc0,0x4f,0xa3,0x1a,0x86); | 
 
 
 
 
 | 17 | DEFINE_GUID(CLSID_DsDisplaySpecifier,0x1ab4a8c0,0x6a0b,0x11d2,0xad,0x49,0x0,0xc0,0x4f,0xa3,0x1a,0x86); | 
 
 
 
 
 | 18 | #define IID_IDsDisplaySpecifier CLSID_DsDisplaySpecifier | 
 
 
 
 
 | 19 | DEFINE_GUID(CLSID_DsFolderProperties,0x9e51e0d0,0x6e0f,0x11d2,0x96,0x1,0x0,0xc0,0x4f,0xa3,0x1a,0x86); | 
 
 
 
 
 | 20 | #define IID_IDsFolderProperties CLSID_DsFolderProperties | 
 
 
 
 
 | 21 |  | 
 
 
 
 
 | 22 | #ifndef GUID_DEFS_ONLY | 
 
 
 
 
 | 23 |  | 
 
 
 
 
 | 24 | #include "activeds.h" | 
 
 
 
 
 | 25 |  | 
 
 
 
 
 | 26 | #define DSOBJECT_ISCONTAINER 0x00000001 | 
 
 
 
 
 | 27 | #define DSOBJECT_READONLYPAGES 0x80000000 | 
 
 
 
 
 | 28 |  | 
 
 
 
 
 | 29 | #define DSPROVIDER_UNUSED_0 0x00000001 | 
 
 
 
 
 | 30 | #define DSPROVIDER_UNUSED_1 0x00000002 | 
 
 
 
 
 | 31 | #define DSPROVIDER_UNUSED_2 0x00000004 | 
 
 
 
 
 | 32 | #define DSPROVIDER_UNUSED_3 0x00000008 | 
 
 
 
 
 | 33 | #define DSPROVIDER_ADVANCED 0x00000010 | 
 
 
 
 
 | 34 |  | 
 
 
 
 
 | 35 | #define CFSTR_DSOBJECTNAMES TEXT("DsObjectNames") | 
 
 
 
 
 | 36 |  | 
 
 
 
 
 | 37 | typedef struct { | 
 
 
 
 
 | 38 | DWORD dwFlags; | 
 
 
 
 
 | 39 | DWORD dwProviderFlags; | 
 
 
 
 
 | 40 | DWORD offsetName; | 
 
 
 
 
 | 41 | DWORD offsetClass; | 
 
 
 
 
 | 42 | } DSOBJECT,*LPDSOBJECT; | 
 
 
 
 
 | 43 |  | 
 
 
 
 
 | 44 | typedef struct { | 
 
 
 
 
 | 45 | CLSID clsidNamespace; | 
 
 
 
 
 | 46 | UINT cItems; | 
 
 
 
 
 | 47 | DSOBJECT aObjects[1]; | 
 
 
 
 
 | 48 | } DSOBJECTNAMES,*LPDSOBJECTNAMES; | 
 
 
 
 
 | 49 |  | 
 
 
 
 
 | 50 | #define CFSTR_DS_DISPLAY_SPEC_OPTIONS TEXT("DsDisplaySpecOptions") | 
 
 
 
 
 | 51 | #define CFSTR_DSDISPLAYSPECOPTIONS CFSTR_DS_DISPLAY_SPEC_OPTIONS | 
 
 
 
 
 | 52 |  | 
 
 
 
 
 | 53 | typedef struct _DSDISPLAYSPECOPTIONS { | 
 
 
 
 
 | 54 | DWORD dwSize; | 
 
 
 
 
 | 55 | DWORD dwFlags; | 
 
 
 
 
 | 56 | DWORD offsetAttribPrefix; | 
 
 
 
 
 | 57 | DWORD offsetUserName; | 
 
 
 
 
 | 58 | DWORD offsetPassword; | 
 
 
 
 
 | 59 | DWORD offsetServer; | 
 
 
 
 
 | 60 | DWORD offsetServerConfigPath; | 
 
 
 
 
 | 61 | } DSDISPLAYSPECOPTIONS,*PDSDISPLAYSPECOPTIONS,*LPDSDISPLAYSPECOPTIONS; | 
 
 
 
 
 | 62 |  | 
 
 
 
 
 | 63 | #define DS_PROP_SHELL_PREFIX L"shell" | 
 
 
 
 
 | 64 | #define DS_PROP_ADMIN_PREFIX L"admin" | 
 
 
 
 
 | 65 |  | 
 
 
 
 
 | 66 | #define DSDSOF_HASUSERANDSERVERINFO 0x00000001 | 
 
 
 
 
 | 67 | #define DSDSOF_SIMPLEAUTHENTICATE 0x00000002 | 
 
 
 
 
 | 68 | #define DSDSOF_DONTSIGNSEAL 0x00000004 | 
 
 
 
 
 | 69 | #define DSDSOF_DSAVAILABLE 0x40000000 | 
 
 
 
 
 | 70 |  | 
 
 
 
 
 | 71 | #define CFSTR_DSPROPERTYPAGEINFO TEXT("DsPropPageInfo") | 
 
 
 
 
 | 72 |  | 
 
 
 
 
 | 73 | typedef struct { | 
 
 
 
 
 | 74 | DWORD offsetString; | 
 
 
 
 
 | 75 | } DSPROPERTYPAGEINFO,*LPDSPROPERTYPAGEINFO; | 
 
 
 
 
 | 76 |  | 
 
 
 
 
 | 77 | #define DSPROP_ATTRCHANGED_MSG TEXT("DsPropAttrChanged") | 
 
 
 
 
 | 78 |  | 
 
 
 
 
 | 79 | #define DBDTF_RETURNFQDN 0x00000001 | 
 
 
 
 
 | 80 | #define DBDTF_RETURNMIXEDDOMAINS 0x00000002 | 
 
 
 
 
 | 81 | #define DBDTF_RETURNEXTERNAL 0x00000004 | 
 
 
 
 
 | 82 | #define DBDTF_RETURNINBOUND 0x00000008 | 
 
 
 
 
 | 83 | #define DBDTF_RETURNINOUTBOUND 0x00000010 | 
 
 
 
 
 | 84 |  | 
 
 
 
 
 | 85 | typedef struct _DOMAINDESC { | 
 
 
 
 
 | 86 | LPWSTR pszName; | 
 
 
 
 
 | 87 | LPWSTR pszPath; | 
 
 
 
 
 | 88 | LPWSTR pszNCName; | 
 
 
 
 
 | 89 | LPWSTR pszTrustParent; | 
 
 
 
 
 | 90 | LPWSTR pszObjectClass; | 
 
 
 
 
 | 91 | ULONG ulFlags; | 
 
 
 
 
 | 92 | WINBOOL fDownLevel; | 
 
 
 
 
 | 93 | struct _DOMAINDESC *pdChildList; | 
 
 
 
 
 | 94 | struct _DOMAINDESC *pdNextSibling; | 
 
 
 
 
 | 95 | } DOMAIN_DESC,DOMAINDESC,*PDOMAIN_DESC,*LPDOMAINDESC; | 
 
 
 
 
 | 96 |  | 
 
 
 
 
 | 97 | typedef struct { | 
 
 
 
 
 | 98 | DWORD dsSize; | 
 
 
 
 
 | 99 | DWORD dwCount; | 
 
 
 
 
 | 100 | DOMAINDESC aDomains[1]; | 
 
 
 
 
 | 101 | } DOMAIN_TREE,DOMAINTREE,*PDOMAIN_TREE,*LPDOMAINTREE; | 
 
 
 
 
 | 102 |  | 
 
 
 
 
 | 103 | #undef INTERFACE | 
 
 
 
 
 | 104 | #define INTERFACE IDsBrowseDomainTree | 
 
 
 
 
 | 105 | DECLARE_INTERFACE_(IDsBrowseDomainTree,IUnknown) { | 
 
 
 
 
 | 106 | STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID *ppvObj) PURE; | 
 
 
 
 
 | 107 | STDMETHOD_(ULONG,AddRef)(THIS) PURE; | 
 
 
 
 
 | 108 | STDMETHOD_(ULONG,Release)(THIS) PURE; | 
 
 
 
 
 | 109 | STDMETHOD(BrowseTo)(THIS_ HWND hwndParent,LPWSTR *ppszTargetPath,DWORD dwFlags) PURE; | 
 
 
 
 
 | 110 | STDMETHOD(GetDomains)(THIS_ PDOMAIN_TREE *ppDomainTree,DWORD dwFlags) PURE; | 
 
 
 
 
 | 111 | STDMETHOD(FreeDomains)(THIS_ PDOMAIN_TREE *ppDomainTree) PURE; | 
 
 
 
 
 | 112 | STDMETHOD(FlushCachedDomains)(THIS) PURE; | 
 
 
 
 
 | 113 | STDMETHOD(SetComputer)(THIS_ LPCWSTR pszComputerName,LPCWSTR pszUserName,LPCWSTR pszPassword) PURE; | 
 
 
 
 
 | 114 | }; | 
 
 
 
 
 | 115 |  | 
 
 
 
 
 | 116 | #define DSSSF_SIMPLEAUTHENTICATE 0x00000001 | 
 
 
 
 
 | 117 | #define DSSSF_DONTSIGNSEAL 0x00000002 | 
 
 
 
 
 | 118 | #define DSSSF_DSAVAILABLE 0x80000000 | 
 
 
 
 
 | 119 |  | 
 
 
 
 
 | 120 | #define DSGIF_ISNORMAL 0x0000000 | 
 
 
 
 
 | 121 | #define DSGIF_ISOPEN 0x0000001 | 
 
 
 
 
 | 122 | #define DSGIF_ISDISABLED 0x0000002 | 
 
 
 
 
 | 123 | #define DSGIF_ISMASK 0x000000f | 
 
 
 
 
 | 124 | #define DSGIF_GETDEFAULTICON 0x0000010 | 
 
 
 
 
 | 125 | #define DSGIF_DEFAULTISCONTAINER 0x0000020 | 
 
 
 
 
 | 126 |  | 
 
 
 
 
 | 127 | #define DSICCF_IGNORETREATASLEAF 0x00000001 | 
 
 
 
 
 | 128 |  | 
 
 
 
 
 | 129 | #define DSECAF_NOTLISTED 0x00000001 | 
 
 
 
 
 | 130 |  | 
 
 
 
 
 | 131 | typedef HRESULT (CALLBACK *LPDSENUMATTRIBUTES)(LPARAM lParam,LPCWSTR pszAttributeName,LPCWSTR pszDisplayName,DWORD dwFlags); | 
 
 
 
 
 | 132 |  | 
 
 
 
 
 | 133 | #define DSCCIF_HASWIZARDDIALOG 0x00000001 | 
 
 
 
 
 | 134 | #define DSCCIF_HASWIZARDPRIMARYPAGE 0x00000002 | 
 
 
 
 
 | 135 |  | 
 
 
 
 
 | 136 | typedef struct { | 
 
 
 
 
 | 137 | DWORD dwFlags; | 
 
 
 
 
 | 138 | CLSID clsidWizardDialog; | 
 
 
 
 
 | 139 | CLSID clsidWizardPrimaryPage; | 
 
 
 
 
 | 140 | DWORD cWizardExtensions; | 
 
 
 
 
 | 141 | CLSID aWizardExtensions[1]; | 
 
 
 
 
 | 142 | } DSCLASSCREATIONINFO,*LPDSCLASSCREATIONINFO; | 
 
 
 
 
 | 143 |  | 
 
 
 
 
 | 144 | #undef INTERFACE | 
 
 
 
 
 | 145 | #define INTERFACE IDsDisplaySpecifier | 
 
 
 
 
 | 146 | DECLARE_INTERFACE_(IDsDisplaySpecifier,IUnknown) { | 
 
 
 
 
 | 147 | STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID *ppvObj) PURE; | 
 
 
 
 
 | 148 | STDMETHOD_(ULONG,AddRef)(THIS) PURE; | 
 
 
 
 
 | 149 | STDMETHOD_(ULONG,Release)(THIS) PURE; | 
 
 
 
 
 | 150 | STDMETHOD(SetServer)(THIS_ LPCWSTR pszServer,LPCWSTR pszUserName,LPCWSTR pszPassword,DWORD dwFlags) PURE; | 
 
 
 
 
 | 151 | STDMETHOD(SetLanguageID)(THIS_ LANGID langid) PURE; | 
 
 
 
 
 | 152 | STDMETHOD(GetDisplaySpecifier)(THIS_ LPCWSTR pszObjectClass,REFIID riid,void **ppv) PURE; | 
 
 
 
 
 | 153 | STDMETHOD(GetIconLocation)(THIS_ LPCWSTR pszObjectClass,DWORD dwFlags,LPWSTR pszBuffer,INT cchBuffer,INT *presid) PURE; | 
 
 
 
 
 | 154 | STDMETHOD_(HICON,GetIcon)(THIS_ LPCWSTR pszObjectClass,DWORD dwFlags,INT cxIcon,INT cyIcon) PURE; | 
 
 
 
 
 | 155 | STDMETHOD(GetFriendlyClassName)(THIS_ LPCWSTR pszObjectClass,LPWSTR pszBuffer,INT cchBuffer) PURE; | 
 
 
 
 
 | 156 | STDMETHOD(GetFriendlyAttributeName)(THIS_ LPCWSTR pszObjectClass,LPCWSTR pszAttributeName,LPWSTR pszBuffer,UINT cchBuffer) PURE; | 
 
 
 
 
 | 157 | STDMETHOD_(WINBOOL,IsClassContainer)(THIS_ LPCWSTR pszObjectClass,LPCWSTR pszADsPath,DWORD dwFlags) PURE; | 
 
 
 
 
 | 158 | STDMETHOD(GetClassCreationInfo)(THIS_ LPCWSTR pszObjectClass,LPDSCLASSCREATIONINFO *ppdscci) PURE; | 
 
 
 
 
 | 159 | STDMETHOD(EnumClassAttributes)(THIS_ LPCWSTR pszObjectClass,LPDSENUMATTRIBUTES pcbEnum,LPARAM lParam) PURE; | 
 
 
 
 
 | 160 | STDMETHOD_(ADSTYPE,GetAttributeADsType)(THIS_ LPCWSTR pszAttributeName) PURE; | 
 
 
 
 
 | 161 | }; | 
 
 
 
 
 | 162 |  | 
 
 
 
 
 | 163 | typedef struct { | 
 
 
 
 
 | 164 | DWORD cbStruct; | 
 
 
 
 
 | 165 | HWND hwndOwner; | 
 
 
 
 
 | 166 | LPCWSTR pszCaption; | 
 
 
 
 
 | 167 | LPCWSTR pszTitle; | 
 
 
 
 
 | 168 | LPCWSTR pszRoot; | 
 
 
 
 
 | 169 | LPWSTR pszPath; | 
 
 
 
 
 | 170 | ULONG cchPath; | 
 
 
 
 
 | 171 | DWORD dwFlags; | 
 
 
 
 
 | 172 | BFFCALLBACK pfnCallback; | 
 
 
 
 
 | 173 | LPARAM lParam; | 
 
 
 
 
 | 174 | DWORD dwReturnFormat; | 
 
 
 
 
 | 175 | LPCWSTR pUserName; | 
 
 
 
 
 | 176 | LPCWSTR pPassword; | 
 
 
 
 
 | 177 | LPWSTR pszObjectClass; | 
 
 
 
 
 | 178 | ULONG cchObjectClass; | 
 
 
 
 
 | 179 | } DSBROWSEINFOW,*PDSBROWSEINFOW; | 
 
 
 
 
 | 180 |  | 
 
 
 
 
 | 181 | typedef struct { | 
 
 
 
 
 | 182 | DWORD cbStruct; | 
 
 
 
 
 | 183 | HWND hwndOwner; | 
 
 
 
 
 | 184 | LPCSTR pszCaption; | 
 
 
 
 
 | 185 | LPCSTR pszTitle; | 
 
 
 
 
 | 186 | LPCWSTR pszRoot; | 
 
 
 
 
 | 187 | LPWSTR pszPath; | 
 
 
 
 
 | 188 | ULONG cchPath; | 
 
 
 
 
 | 189 | DWORD dwFlags; | 
 
 
 
 
 | 190 | BFFCALLBACK pfnCallback; | 
 
 
 
 
 | 191 | LPARAM lParam; | 
 
 
 
 
 | 192 | DWORD dwReturnFormat; | 
 
 
 
 
 | 193 | LPCWSTR pUserName; | 
 
 
 
 
 | 194 | LPCWSTR pPassword; | 
 
 
 
 
 | 195 | LPWSTR pszObjectClass; | 
 
 
 
 
 | 196 | ULONG cchObjectClass; | 
 
 
 
 
 | 197 | } DSBROWSEINFOA,*PDSBROWSEINFOA; | 
 
 
 
 
 | 198 |  | 
 
 
 
 
 | 199 | #define DSBROWSEINFO __MINGW_NAME_AW(DSBROWSEINFO) | 
 
 
 
 
 | 200 | #define PDSBROWSEINFO __MINGW_NAME_AW(PDSBROWSEINFO) | 
 
 
 
 
 | 201 |  | 
 
 
 
 
 | 202 | #define DSBI_NOBUTTONS 0x00000001 | 
 
 
 
 
 | 203 | #define DSBI_NOLINES 0x00000002 | 
 
 
 
 
 | 204 | #define DSBI_NOLINESATROOT 0x00000004 | 
 
 
 
 
 | 205 | #define DSBI_CHECKBOXES 0x00000100 | 
 
 
 
 
 | 206 | #define DSBI_NOROOT 0x00010000 | 
 
 
 
 
 | 207 | #define DSBI_INCLUDEHIDDEN 0x00020000 | 
 
 
 
 
 | 208 | #define DSBI_EXPANDONOPEN 0x00040000 | 
 
 
 
 
 | 209 | #define DSBI_ENTIREDIRECTORY 0x00090000 | 
 
 
 
 
 | 210 | #define DSBI_RETURN_FORMAT 0x00100000 | 
 
 
 
 
 | 211 | #define DSBI_HASCREDENTIALS 0x00200000 | 
 
 
 
 
 | 212 | #define DSBI_IGNORETREATASLEAF 0x00400000 | 
 
 
 
 
 | 213 | #define DSBI_SIMPLEAUTHENTICATE 0x00800000 | 
 
 
 
 
 | 214 | #define DSBI_RETURNOBJECTCLASS 0x01000000 | 
 
 
 
 
 | 215 | #define DSBI_DONTSIGNSEAL 0x02000000 | 
 
 
 
 
 | 216 |  | 
 
 
 
 
 | 217 | #define DSB_MAX_DISPLAYNAME_CHARS 64 | 
 
 
 
 
 | 218 |  | 
 
 
 
 
 | 219 | typedef struct { | 
 
 
 
 
 | 220 | DWORD cbStruct; | 
 
 
 
 
 | 221 | LPCWSTR pszADsPath; | 
 
 
 
 
 | 222 | LPCWSTR pszClass; | 
 
 
 
 
 | 223 | DWORD dwMask; | 
 
 
 
 
 | 224 | DWORD dwState; | 
 
 
 
 
 | 225 | DWORD dwStateMask; | 
 
 
 
 
 | 226 | WCHAR szDisplayName[DSB_MAX_DISPLAYNAME_CHARS]; | 
 
 
 
 
 | 227 | WCHAR szIconLocation[MAX_PATH]; | 
 
 
 
 
 | 228 | INT iIconResID; | 
 
 
 
 
 | 229 | } DSBITEMW,*PDSBITEMW; | 
 
 
 
 
 | 230 |  | 
 
 
 
 
 | 231 | typedef struct { | 
 
 
 
 
 | 232 | DWORD cbStruct; | 
 
 
 
 
 | 233 | LPCWSTR pszADsPath; | 
 
 
 
 
 | 234 | LPCWSTR pszClass; | 
 
 
 
 
 | 235 | DWORD dwMask; | 
 
 
 
 
 | 236 | DWORD dwState; | 
 
 
 
 
 | 237 | DWORD dwStateMask; | 
 
 
 
 
 | 238 | CHAR szDisplayName[DSB_MAX_DISPLAYNAME_CHARS]; | 
 
 
 
 
 | 239 | CHAR szIconLocation[MAX_PATH]; | 
 
 
 
 
 | 240 | INT iIconResID; | 
 
 
 
 
 | 241 | } DSBITEMA,*PDSBITEMA; | 
 
 
 
 
 | 242 |  | 
 
 
 
 
 | 243 | #define DSBITEM __MINGW_NAME_AW(DSBITEM) | 
 
 
 
 
 | 244 | #define PDSBITEM __MINGW_NAME_AW(PDSBITEM) | 
 
 
 
 
 | 245 |  | 
 
 
 
 
 | 246 | #define DSBF_STATE 0x00000001 | 
 
 
 
 
 | 247 | #define DSBF_ICONLOCATION 0x00000002 | 
 
 
 
 
 | 248 | #define DSBF_DISPLAYNAME 0x00000004 | 
 
 
 
 
 | 249 |  | 
 
 
 
 
 | 250 | #define DSBS_CHECKED 0x00000001 | 
 
 
 
 
 | 251 | #define DSBS_HIDDEN 0x00000002 | 
 
 
 
 
 | 252 | #define DSBS_ROOT 0x00000004 | 
 
 
 
 
 | 253 |  | 
 
 
 
 
 | 254 | #define DSBM_QUERYINSERTW 100 | 
 
 
 
 
 | 255 | #define DSBM_QUERYINSERTA 101 | 
 
 
 
 
 | 256 |  | 
 
 
 
 
 | 257 | #define DSBM_QUERYINSERT __MINGW_NAME_AW(DSBM_QUERYINSERT) | 
 
 
 
 
 | 258 |  | 
 
 
 
 
 | 259 | #define DSBM_CHANGEIMAGESTATE 102 | 
 
 
 
 
 | 260 | #define DSBM_HELP 103 | 
 
 
 
 
 | 261 | #define DSBM_CONTEXTMENU 104 | 
 
 
 
 
 | 262 |  | 
 
 
 
 
 | 263 | #define DSBID_BANNER 256 | 
 
 
 
 
 | 264 | #define DSBID_CONTAINERLIST 257 | 
 
 
 
 
 | 265 |  | 
 
 
 
 
 | 266 | STDAPI_(int) DsBrowseForContainerW(PDSBROWSEINFOW pInfo); | 
 
 
 
 
 | 267 | STDAPI_(int) DsBrowseForContainerA(PDSBROWSEINFOA pInfo); | 
 
 
 
 
 | 268 |  | 
 
 
 
 
 | 269 | #define DsBrowseForContainer __MINGW_NAME_AW(DsBrowseForContainer) | 
 
 
 
 
 | 270 |  | 
 
 
 
 
 | 271 | STDAPI_(HICON) DsGetIcon(DWORD dwFlags,LPWSTR pszObjectClass,INT cxImage,INT cyImage); | 
 
 
 
 
 | 272 | STDAPI DsGetFriendlyClassName(LPWSTR pszObjectClass,LPWSTR pszBuffer,UINT cchBuffer); | 
 
 
 
 
 | 273 | #endif | 
 
 
 
 
 | 274 | #endif |