From fb267a5683cf1be71b39a8eba3355f074d5ecf79 Mon Sep 17 00:00:00 2001 From: superp00t Date: Thu, 6 Mar 2025 16:40:31 -0500 Subject: [PATCH] feat(profile): more bc routines --- .../ida/batch/import_data_types.idc | 63 +- .../ida/batch/import_functions.idc | 3 + .../ida/batch/import_symbols.idc | 96 +- .../include/bc/file/filesystem.h | 2 +- .../3.3.5a-windows-386/include/bc/file/info.h | 22 + .../include/bc/file/processdir.h | 15 + .../include/bc/file/stream.h | 11 +- .../include/bc/lock/do_once.h | 11 + .../include/bc/string/quicknativepath.h | 15 + .../include/bc/systemfile/stacked.h | 27 +- .../include/bc/time/timestamp.h | 6 + .../include/common/handle.h | 10 +- .../3.3.5a-windows-386/include/db/records.h | 2863 ----------------- profile/3.3.5a-windows-386/include/gx/font.h | 1 - .../3.3.5a-windows-386/include/gx/format.h | 14 +- profile/3.3.5a-windows-386/include/main.h | 5 + .../include/storm/array/c2ivector.h | 10 + .../include/system/detect.h | 2 +- .../3.3.5a-windows-386/include/text/font.h | 1 - profile/3.3.5a-windows-386/symbol/bc/func.sym | 65 +- .../3.3.5a-windows-386/symbol/bc/label.sym | 8 + .../3.3.5a-windows-386/symbol/client/func.sym | 2 - .../symbol/console/func.sym | 4 +- .../symbol/console/label.sym | 7 +- .../3.3.5a-windows-386/symbol/cvar/func.sym | 1 - profile/3.3.5a-windows-386/symbol/gx/func.sym | 6 +- .../3.3.5a-windows-386/symbol/gx/label.sym | 2 + .../symbol/gxdevice/func.sym | 4 +- profile/3.3.5a-windows-386/symbol/main.sym | 94 +- .../symbol/nullsub/func.sym | 3 +- profile/3.3.5a-windows-386/symbol/os/func.sym | 10 +- .../3.3.5a-windows-386/symbol/os/label.sym | 2 + .../3.3.5a-windows-386/symbol/storm/func.sym | 4 + profile/3.3.5a-windows-386/x64dbg/game.dd32 | Bin 106863 -> 109513 bytes profile/3.3.5a-windows-386/x64dbg/types.json | 388 ++- 35 files changed, 818 insertions(+), 2959 deletions(-) create mode 100644 profile/3.3.5a-windows-386/include/bc/file/info.h create mode 100644 profile/3.3.5a-windows-386/include/bc/file/processdir.h create mode 100644 profile/3.3.5a-windows-386/include/bc/lock/do_once.h create mode 100644 profile/3.3.5a-windows-386/include/bc/string/quicknativepath.h create mode 100644 profile/3.3.5a-windows-386/include/bc/time/timestamp.h create mode 100644 profile/3.3.5a-windows-386/include/storm/array/c2ivector.h create mode 100644 profile/3.3.5a-windows-386/symbol/gx/label.sym create mode 100644 profile/3.3.5a-windows-386/symbol/os/label.sym diff --git a/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc b/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc index f23dc42..fab6265 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc @@ -6,7 +6,45 @@ static import_data_types() { apply_type(0x00401030, "void __stdcall func(void* ptr)"); apply_type(0x00408070, "void __stdcall func(float* minX, float* maxX, float* minY, float* maxY, float* minZ, float* maxZ)"); apply_type(0x00409670, "void __thiscall func(CGxDevice* this)"); + apply_type(0x004271D0, "bool __stdcall func(char* name, Blizzard__File__Info* info)"); + apply_type(0x00427250, "Blizzard__File__Info* __stdcall func(Blizzard__File__StreamRecord* file)"); + apply_type(0x004272C0, "bool __stdcall func(Blizzard__File__StreamRecord* file, Blizzard__File__FileInfo* info)"); + apply_type(0x00427CC0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00427D10, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00428500, "char* __stdcall func(char* str)"); + apply_type(0x00428670, "int32_t __stdcall func(char* dst, const char* src, int32_t count)"); + apply_type(0x00428940, "int32_t __stdcall func(uint8_t* dst, uint32_t dstmaxchars, const uint16_t* src, uint32_t srcmaxchars, uint32_t* dstchars, uint32_t* srcchars)"); + apply_type(0x00428B00, "int32_t __stdcall func(uint16_t* dst, uint32_t dstmaxchars, const uint8_t* src, uint32_t srcmaxchars, uint32_t* dstchars, uint32_t* srcchars)"); + apply_type(0x00428F00, "Blizzard__Time__Timestamp __stdcall func(uint64_t fileTime)"); apply_type(0x0042D440, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x0042D620, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x004325C0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00433590, "void __stdcall func(uint8_t *buffer, uint32_t buffersize, const char *str)"); + apply_type(0x00435580, "void __stdcall func(Blizzard__File__StreamRecord* file)"); + apply_type(0x004356B0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00435790, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00435890, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x004359C0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454A50, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454AC0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454AE0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454B50, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454CB0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454CF0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454E70, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00454FD0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455050, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x004550C0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455130, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x004554C0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455730, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x004558F0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455910, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455A30, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455B10, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455BA0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455CA0, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); + apply_type(0x00455D20, "int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)"); apply_type(0x0047B6F0, "int32_t __stdcall func(CMDOPT)"); apply_type(0x0047B700, "char* __stdcall func(CMDOPT)"); apply_type(0x0047B720, "int32_t __stdcall func()"); @@ -46,13 +84,17 @@ static import_data_types() { apply_type(0x004BE9C0, "HTEXTFONT __stdcall func(char* fontName, uint32_t fontFlags, float fontHeight)"); apply_type(0x004C4B80, "void __thiscall func(TSGrowableArray_C3Vector* this, uint32_t count)"); apply_type(0x00532AF0, "CGxCaps* __thiscall func(CGxDevice* this)"); + apply_type(0x0054EFE0, "void __fastcall func(TSGrowableArray_C2iVector* this, C2iVector* resolution)"); apply_type(0x0057FDD0, "void __thiscall func(TSGrowableArray_C2Vector* this, uint32_t count)"); apply_type(0x006160B0, "int32_t __usercall func@(uint32_t** image@, MipBits* mipImages@, uint32_t width@, uint32_t height)"); apply_type(0x00616800, "void __stdcall func(CURSORMODE mode)"); apply_type(0x00616CA0, "void __thiscall func(TSGrowableArray_CImVector* this, uint32_t count)"); + apply_type(0x006811D0, "int32_t __stdcall func(EGxApi api)"); apply_type(0x00681210, "int32_t __stdcall func(TSGrowableArray_CGxMonitorMode* modes)"); apply_type(0x00681220, "int32_t __stdcall func(CGxMonitorMode* mode)"); apply_type(0x00681630, "void __stdcall func(CGxQuery** query, EGxQueryType type)"); + apply_type(0x00681770, "void __stdcall func(uint32_t maxFPS)"); + apply_type(0x00681790, "void __stdcall func(uint32_t maxFPSBk)"); apply_type(0x006817C0, "void __stdcall func()"); apply_type(0x006817E0, "int __stdcall func(char* format, ...)"); apply_type(0x00681A60, "void __stdcall func()"); @@ -147,7 +189,12 @@ static import_data_types() { apply_type(0x006890C0, "void __thiscall func(CGxDevice* this)"); apply_type(0x00689690, "void __thiscall func(CGxDevice* this, uint8_t __flags)"); apply_type(0x006897C0, "void __thiscall func(CGxDevice* this, CGxShader**, EGxShTarget, char*, char*, int32_t)"); + apply_type(0x00689E80, "int32_t __stdcall func(void* a, void* b)"); + apply_type(0x00689EA0, "int32_t __stdcall func(PDISPLAY_DEVICEA device, uint32_t flag)"); apply_type(0x00689EF0, "CGxDevice* __stdcall func()"); + apply_type(0x0068A090, "CGxMonitorMode* __thiscall func(TSGrowableArray_CGxMonitorMode* this)"); + apply_type(0x0068A0F0, "void __thiscall func(TSGrowableArray_CGxMonitorMode* this, uint32_t count)"); + apply_type(0x0068A4C0, "void __stdcall func(TSGrowableArray_CGxMonitorMode* modes)"); apply_type(0x0068BBC0, "void __thiscall func(CGxDeviceOpenGl* this)"); apply_type(0x0068BF20, "CGxDevice* __stdcall func()"); apply_type(0x0068C220, "CGxDevice* __stdcall func()"); @@ -304,6 +351,7 @@ static import_data_types() { apply_type(0x00769610, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); apply_type(0x00769650, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); apply_type(0x007696A0, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); + apply_type(0x007696D0, "void __stdcall func(char* list)"); apply_type(0x00769810, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); apply_type(0x00769830, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); apply_type(0x00769860, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); @@ -373,8 +421,8 @@ static import_data_types() { apply_type(0x00818070, "void __stdcall func(lua_State* L, int startIndex, char* buffer, uint32_t bufferSize)"); apply_type(0x00819830, "void __thiscall func(FrameScript_Object* this)"); apply_type(0x00819EA0, "void __stdcall func(int32_t function, FrameScript_Object* object, int32_t args, char* args_fmt, FrameScript_EventObject* eventObject)"); + apply_type(0x0086BBA0, "uint64_t __stdcall func()"); apply_type(0x0086E200, "void __thiscall func(TSExplicitList_CGxBuf* this, CGxBuf* ptr)"); - apply_type(0x008A1420, "bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)"); apply_type(0x008C8DE0, "EGxApi __stdcall func()"); apply_type(0x0095BFB0, "int32_t __stdcall func()"); apply_type(0x0095F3A0, "void __thiscall func(CSimpleModel* this)"); @@ -423,9 +471,13 @@ static import_data_types() { apply_type(0x00961470, "int32_t __stdcall func(lua_State* L)"); apply_type(0x009614B0, "int32_t __stdcall func(lua_State* L)"); apply_type(0x009AD000, "void __thiscall func(DayNight__DNGlare* this, char* a1)"); + apply_type(0x009E537C, "uint32_t[7]"); + apply_type(0x009E5398, "uint8_t[256]"); apply_type(0x009E9EC8, "uint32_t[7]"); apply_type(0x00A2DDC0, "CGxDevice__vtable"); apply_type(0x00AB90AC, "Blizzard__File__Filesystem*"); + apply_type(0x00AB91C0, "Blizzard__File__Filesystem"); + apply_type(0x00AB92C0, "Blizzard__File__Filesystem"); apply_type(0x00AC1B9C, "TSExplicitList_CILayer"); apply_type(0x00AD2808, "char*[53]"); apply_type(0x00AD305C, "WowClientDB_AchievementRec"); @@ -679,11 +731,14 @@ static import_data_types() { apply_type(0x00ADBEC0, "float[4][2]"); apply_type(0x00ADBEE0, "float[4][2]"); apply_type(0x00ADBF00, "float[5][2]"); + apply_type(0x00ADBF88, "WowClientDB_VideoHardwareRec"); apply_type(0x00AF4998, "WowClientDB_LightSkyboxRec"); apply_type(0x00AF49BC, "WowClientDB_LightIntBandRec"); apply_type(0x00AF49E0, "WowClientDB_LightFloatBandRec"); apply_type(0x00AF4A04, "WowClientDB_LightParamsRec"); apply_type(0x00AF4A28, "WowClientDB_LightRec"); + apply_type(0x00B38A5C, "Blizzard__Lock__DoOnceData"); + apply_type(0x00B38A64, "Blizzard__Lock__DoOnceData"); apply_type(0x00B417C8, "uint32_t"); apply_type(0x00B417D0, "int32_t"); apply_type(0x00B41850, "CDataRecycler"); @@ -693,6 +748,8 @@ static import_data_types() { apply_type(0x00C26DE8, "CURSORMODE"); apply_type(0x00C26DF0, "uint32_t[53][1024]"); apply_type(0x00C5DE9C, "int32_t"); + apply_type(0x00C5DF74, "uint32_t"); + apply_type(0x00C5DF7C, "uint32_t"); apply_type(0x00C5DF88, "CGxDevice*"); apply_type(0x00C5FFF8, "HSLOG"); apply_type(0x00CA1690, "float"); @@ -740,6 +797,7 @@ static import_data_types() { apply_type(0x00CABABC, "CVar*"); apply_type(0x00CABAC0, "CVar*"); apply_type(0x00CABAC4, "CVar*"); + apply_type(0x00CABAC8, "int32_t[9]"); apply_type(0x00CABAEC, "CVar*"); apply_type(0x00CABAF0, "DefaultSettings"); apply_type(0x00CABB30, "CVar*"); @@ -748,6 +806,7 @@ static import_data_types() { apply_type(0x00CABB70, "CVar*"); apply_type(0x00CABB74, "CVar*"); apply_type(0x00CABB78, "CVar*"); + apply_type(0x00CABB7C, "uint32_t[9]"); apply_type(0x00CABBA0, "CVar*"); apply_type(0x00CABBA4, "CVar*"); apply_type(0x00CABBA8, "CVar*"); @@ -764,5 +823,7 @@ static import_data_types() { apply_type(0x00CABDA8, "CGxFormat"); apply_type(0x00CABE00, "CGxFormat"); apply_type(0x00CABE98, "CGxFormat[5]"); + apply_type(0x00D41580, "int32_t"); + apply_type(0x00D415C8, "uint64_t"); apply_type(0x00D43020, "int32_t"); } diff --git a/profile/3.3.5a-windows-386/ida/batch/import_functions.idc b/profile/3.3.5a-windows-386/ida/batch/import_functions.idc index 31b166b..6ee3808 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_functions.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_functions.idc @@ -51,12 +51,14 @@ static import_functions() { set_func_cmt(0x00659B80, "WowClientDB::LoadRecords(SFile*, char const*, int)", 0); set_func_cmt(0x0065C290, "00005410", 0); set_func_cmt(0x0065F520, "WowClientDB::GetRecordByIndex(int, void*)", 0); + set_func_cmt(0x006811D0, "00005410", 0); set_func_cmt(0x00681BE0, "UC", 0); set_func_cmt(0x00682400, "this is one of the functions named 'GxPrimVertexPtr' that uses the fixed-function pipeline", 0); set_func_cmt(0x00683670, "static void CGxDevice::LogOpen(void)", 0); set_func_cmt(0x00684C40, "CGxDevice::Log(CGxCaps const&) const", 0); set_func_cmt(0x006859E0, "CGxDevice::IRsForceUpdate(EGxRenderState)", 0); set_func_cmt(0x00685A70, "CGxDevice::IRsForceUpdate()", 0); + set_func_cmt(0x00689EA0, "UC", 0); set_func_cmt(0x0069FE10, "UC (invented name)", 0); set_func_cmt(0x006AA350, "UC", 0); set_func_cmt(0x006AA420, "private utility method", 0); @@ -110,6 +112,7 @@ static import_functions() { set_func_cmt(0x0081AC90, "vFrameScript_SignalEvent(unsigned int, char const*, char*)", 0); set_func_cmt(0x0081B530, "FrameScript_SignalEvent(unsigned int, char const*, ...)", 0); set_func_cmt(0x0081B5F0, "FrameScript_CreateEvents(char const**, unsigned int)", 0); + set_func_cmt(0x008A1420, "known names: System_File::Shutdown, CVGxVideoOptionsVersionCallback", 0); set_func_cmt(0x008E5250, "Script_ToggleTris", 0); set_func_cmt(0x0095D110, "CDataAllocator::GetData(int, char const*, int)", 0); set_func_cmt(0x0095D1B0, "CDataAllocator::PutData(void*, char const*, int)", 0); diff --git a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc index bdaa5e8..4dd0c20 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc @@ -2,8 +2,8 @@ static import_symbols() { // Set/create names - set_name(0x00401010, "operator_new"); - set_name(0x00401030, "operator_delete_array"); + set_name(0x00401010, "Blizzard__Memory__Allocate"); + set_name(0x00401030, "Blizzard__Memory__Free"); set_name(0x00401070, "CDataStore__FetchWrite"); set_name(0x004010D0, "CDataStore__IsRead"); set_name(0x004010E0, "CDataStore__Reset"); @@ -42,12 +42,65 @@ static import_symbols() { set_name(0x00424F80, "SFile__Open"); set_name(0x004270F0, "Blizzard__File__Close"); set_name(0x00427130, "Blizzard__File__Delete"); + set_name(0x004271D0, "Blizzard__File__GetFileInfo"); + set_name(0x00427250, "Blizzard__File__GetFileInfo@2"); + set_name(0x004272C0, "Blizzard__File__GetFileInfo@3"); + set_name(0x004273A0, "Blizzard__File__GetPos"); + set_name(0x00427410, "Blizzard__File__GetRootChars"); + set_name(0x00427470, "Blizzard__File__GetWorkingDirectory"); + set_name(0x004274C0, "Blizzard__File__IsAbsolutePath"); set_name(0x00427500, "Blizzard__File__MakeAbsolutePath"); set_name(0x00427560, "Blizzard__File__Move"); + set_name(0x004275B0, "Blizzard__File__Copy"); set_name(0x00427600, "Blizzard__File__Open"); set_name(0x004276C0, "Blizzard__File__Read"); set_name(0x004279B0, "Blizzard__File__Write"); + set_name(0x00427C70, "System_File__FromNativeAttributes"); + set_name(0x00427CC0, "System_File__ReadP"); + set_name(0x00427D10, "System_File__WriteP"); + set_name(0x00428500, "Blizzard__String__FindFilename"); + set_name(0x00428670, "Blizzard__String__Copy"); + set_name(0x00428940, "Blizzard__Unicode__ConvertUTF16to8"); + set_name(0x00428B00, "Blizzard__Unicode__ConvertUTF8to16"); + set_name(0x00428F00, "Blizzard__Time__FromFileTime"); + set_name(0x0042CEA0, "Blizzard__File__CreateDirectory"); + set_name(0x0042CFB0, "HoistAll"); set_name(0x0042D440, "System_File__Stacked__file_init"); + set_name(0x0042D620, "System_File__Close"); + set_name(0x0042E670, "Blizzard__String__Format"); + set_name(0x004325C0, "System_File__GetRootChars"); + set_name(0x00433590, "System_File__FromNativeName"); + set_name(0x00433650, "Blizzard__String__QuickNativePath_300__QuickNativePath"); + set_name(0x00435580, "System_File__GetFileInfoByFile"); + set_name(0x004356B0, "System_File__Exists"); + set_name(0x00435790, "System_File__MakeAbsolutePath"); + set_name(0x00435890, "System_File__Move"); + set_name(0x004359C0, "System_File__Delete"); + set_name(0x00454870, "System_File__read_overlapped"); + set_name(0x00454910, "System_File__write_overlapped"); + set_name(0x00454A50, "System_File__SetWorkingDirectory"); + set_name(0x00454AC0, "System_File__Create"); + set_name(0x00454AE0, "System_File__GetWorkingDirectory"); + set_name(0x00454B50, "System_File__ProcessDirFast"); + set_name(0x00454CB0, "System_File__Flush"); + set_name(0x00454CF0, "System_File__GetFileInfo"); + set_name(0x00454E70, "System_File__GetFreeSpace"); + set_name(0x00454FD0, "System_File__GetPos"); + set_name(0x00455050, "System_File__IsAbsolutePath"); + set_name(0x004550C0, "System_File__IsReadOnly"); + set_name(0x00455130, "System_File__CreateDirectory"); + set_name(0x004554C0, "System_File__Copy"); + set_name(0x00455730, "System_File__Open"); + set_name(0x004558F0, "System_File__Read"); + set_name(0x00455910, "System_File__RemoveDirectory"); + set_name(0x00455A30, "System_File__SetCacheMode"); + set_name(0x00455B10, "System_File__SetEOF"); + set_name(0x00455BA0, "System_File__SetAttributes"); + set_name(0x00455CA0, "System_File__SetPos"); + set_name(0x00455D20, "System_File__Write"); + set_name(0x00457820, "System_File__read_locked"); + set_name(0x00457910, "System_File__write_locked"); + set_name(0x00459910, "System_File__detect_io_mode"); set_name(0x00461B00, "OsCloseFile"); set_name(0x00461B50, "OsReadFile"); set_name(0x00461BD0, "OsGetFileSize"); @@ -862,6 +915,7 @@ static import_symbols() { set_name(0x0054ED80, "Script_SetupFullscreenScale"); set_name(0x0054EE60, "Script_GetVideoCaps"); set_name(0x0054EF90, "Script_IsStereoVideoAvailable"); + set_name(0x0054EFE0, "AddResolution"); set_name(0x0054F430, "Script_GetScreenResolutions"); set_name(0x0054F4A0, "Script_GetCurrentResolution"); set_name(0x0054F570, "Script_SetScreenResolution"); @@ -2139,12 +2193,15 @@ static import_symbols() { set_name(0x00659B80, "WowClientDB_CharBaseInfoRec__LoadRecords"); set_name(0x0065C290, "WowClientDB__GetRecord"); set_name(0x0065F520, "WowClientDB_AchievementRec__GetRecordByIndex"); + set_name(0x006811D0, "GxApiSupported"); set_name(0x00681210, "GxAdapterMonitorModes"); set_name(0x00681220, "GxAdapterDesktopMode"); set_name(0x00681290, "GxDevCreate"); set_name(0x006813B0, "GxSceneClear"); set_name(0x006813D0, "GxTexUpdate"); set_name(0x00681630, "GxQueryCreate"); + set_name(0x00681770, "GxSetMaxFPS"); + set_name(0x00681790, "GxSetMaxFPSBk"); set_name(0x006817C0, "GxLogOpen"); set_name(0x006817E0, "GxLog"); set_name(0x00681A60, "GxDrawLockedElements"); @@ -2243,7 +2300,12 @@ static import_symbols() { set_name(0x00689690, "CGxDevice__scalar_deleting_destructor"); set_name(0x006897C0, "CGxDevice__ShaderCreate"); set_name(0x00689A50, "CGxShader__Valid"); + set_name(0x00689E80, "CGxMonitorModeSort"); + set_name(0x00689EA0, "CGxDevice__FindDisplayDevice"); set_name(0x00689EF0, "CGxDevice__NewD3d"); + set_name(0x0068A090, "TSGrowableArray_CGxMonitorMode__New"); + set_name(0x0068A0F0, "TSGrowableArray_CGxMonitorMode__SetCount"); + set_name(0x0068A4C0, "CGxDevice__AdapterMonitorModes"); set_name(0x0068BBC0, "CGxDeviceOpenGl__CGxDeviceOpenGl"); set_name(0x0068BF20, "CGxDevice__NewOpenGl"); set_name(0x0068C220, "CGxDevice__NewD3d9Ex"); @@ -2520,6 +2582,7 @@ static import_symbols() { set_name(0x00769610, "CVGxMultisampleCallback"); set_name(0x00769650, "CVGxMultisampleQualityCallback"); set_name(0x007696A0, "CVGxFixLagCallback"); + set_name(0x007696D0, "ConsoleGxOverride"); set_name(0x00769810, "CVGxOverrideCallback"); set_name(0x00769830, "CVGxMaxFPSCallback"); set_name(0x00769860, "CVGxMaxFPSBkCallback"); @@ -2586,7 +2649,9 @@ static import_symbols() { set_name(0x00774690, "SSyncObject__Wait"); set_name(0x00774720, "SEvent__Set"); set_name(0x00774730, "SEvent__Reset"); + set_name(0x007754A0, "SLogClose"); set_name(0x007757E0, "SLogCreate"); + set_name(0x00775BB0, "SLogWrite"); set_name(0x00777420, "SRgnCombineRectf"); set_name(0x00777590, "SRgnGetBoundingRectf"); set_name(0x00777940, "SRgnDelete"); @@ -2694,6 +2759,7 @@ static import_symbols() { set_name(0x00856760, "luaD_call"); set_name(0x00857CA0, "_luaV_execute"); set_name(0x008695B0, "RestoreMouse"); + set_name(0x00869620, "OsInputSetWindowResizeLock"); set_name(0x00869720, "OsInputInitialize"); set_name(0x00869760, "OsInputDestroy"); set_name(0x00869D90, "OsInputSetEventPollProc"); @@ -2706,11 +2772,14 @@ static import_symbols() { set_name(0x0086AE20, "OsGetAsyncTimeMs"); set_name(0x0086B0C0, "OsSystemEnableCpuLog"); set_name(0x0086B240, "OsGetProcessorCount"); + set_name(0x0086B780, "OsIsRemoteSession"); + set_name(0x0086BBA0, "OsGetAsyncClocksPerSecond"); set_name(0x0086BBD0, "OsGetExeName"); set_name(0x0086BC30, "OsPathGetRootChars"); set_name(0x0086BE50, "OsPathStripFilename"); set_name(0x0086BEA0, "OsGetExePath"); set_name(0x0086C6A0, "OsGuiGetWindow"); + set_name(0x0086C6E0, "OsGuiMessageBox"); set_name(0x0086D0A0, "OsIMEInitialize"); set_name(0x0086D0C0, "OsIMEDestroy"); set_name(0x0086E200, "TSExplicitList_CGxBuf__LinkToTail"); @@ -2719,10 +2788,10 @@ static import_symbols() { set_name(0x0086F880, "OsCallInitializeContext"); set_name(0x00872280, "OsClipboardGetString"); set_name(0x008722A0, "OsClipboardPutString"); - set_name(0x008726F0, "InternalClipboardGetString"); - set_name(0x008727E0, "InternalClipboardPutString"); + set_name(0x008726F0, "IOsClipboardGetString"); + set_name(0x008727E0, "IOsClipboardPutString"); set_name(0x00872C10, "CShaderEffect__UpdateProjMatrix"); - set_name(0x008A1420, "CVGxVideoOptionsVersionCallback"); + set_name(0x008A1420, "return_one_byte_sub"); set_name(0x008C8DE0, "GxDefaultApi"); set_name(0x008E5250, "return_zero4_sub"); set_name(0x0095BFB0, "ConsoleCommandHistoryDepth"); @@ -2944,13 +3013,19 @@ static import_symbols() { set_name(0x009DE1B0, "nullsub_148"); set_name(0x009DE1C0, "nullsub_149"); set_name(0x009DE1D0, "nullsub_150"); - set_name(0x009E9EC8, "firstByteMark"); + set_name(0x009E537C, "firstByteMark"); + set_name(0x009E5398, "bytesFromUTF8"); + set_name(0x009E9EC8, "firstByteMark@2"); set_name(0x009F1074, "s_pixelFormatToMipBitsCache"); set_name(0x00A2DDC0, "CGxDevice__vtable"); set_name(0x00A2E198, "CGxDeviceOpenGl__vtable"); set_name(0x00A2E718, "CGxDeviceD3d__vtable"); set_name(0x00A2F500, "CGxDeviceD3d9Ex__vtable"); set_name(0x00AB90AC, "System_File__Stacked__s_manager"); + set_name(0x00AB912C, "System_File__read_func"); + set_name(0x00AB91B4, "System_File__write_func"); + set_name(0x00AB91C0, "System_File__Stacked__s_nullstack"); + set_name(0x00AB92C0, "System_File__Stacked__s_basestack"); set_name(0x00AC1B9C, "s_zorderlist"); set_name(0x00AD2808, "s_cursorNames"); set_name(0x00AD305C, "g_achievementDB"); @@ -3204,11 +3279,14 @@ static import_symbols() { set_name(0x00ADBEC0, "s_smallCull"); set_name(0x00ADBEE0, "s_distCull"); set_name(0x00ADBF00, "s_farClip"); + set_name(0x00ADBF88, "g_videoHardwareDB"); set_name(0x00AF4998, "g_lightSkyboxDB"); set_name(0x00AF49BC, "g_lightIntBandDB"); set_name(0x00AF49E0, "g_lightFloatBandDB"); set_name(0x00AF4A04, "g_lightParamsDB"); set_name(0x00AF4A28, "g_lightDB"); + set_name(0x00B38A5C, "System_File__s_read_init"); + set_name(0x00B38A64, "System_File__s_write_init"); set_name(0x00B417C8, "s_mainThread"); set_name(0x00B417D0, "s_interactiveCount"); set_name(0x00B41850, "s_messageRecycler"); @@ -3223,6 +3301,8 @@ static import_symbols() { set_name(0x00C26DE8, "s_cursorMode"); set_name(0x00C26DF0, "s_cursorImages"); set_name(0x00C5DE9C, "_CURRENT_LANGUAGE"); + set_name(0x00C5DF74, "s_maxFPSBk"); + set_name(0x00C5DF7C, "s_maxFPS"); set_name(0x00C5DF88, "g_theGxDevicePtr"); set_name(0x00C5DFDC, "CGxDevice__s_uiVertexShader"); set_name(0x00C5DFE0, "CGxDevice__s_shadowConstants"); @@ -3275,6 +3355,7 @@ static import_symbols() { set_name(0x00CABABC, "s_cvGxOverride"); set_name(0x00CABAC0, "s_cvGxFixLag"); set_name(0x00CABAC4, "s_cvMaxFPS"); + set_name(0x00CABAC8, "s_consoleGxOverrideSet"); set_name(0x00CABAEC, "s_cvGxVSync"); set_name(0x00CABAF0, "s_defaults"); set_name(0x00CABB30, "s_cvVideoOptionsVersion"); @@ -3283,6 +3364,7 @@ static import_symbols() { set_name(0x00CABB70, "s_cvGxTripleBuffer"); set_name(0x00CABB74, "s_cvGxDepthBits"); set_name(0x00CABB78, "s_cvGxColorBits"); + set_name(0x00CABB7C, "s_consoleGxOverrideVal"); set_name(0x00CABBA0, "s_cvGxApi"); set_name(0x00CABBA4, "s_cvGxAspect"); set_name(0x00CABBA8, "s_cvFixedFunction"); @@ -3299,5 +3381,7 @@ static import_symbols() { set_name(0x00CABDA8, "s_fallbackFormat"); set_name(0x00CABE00, "s_lastGoodFormat"); set_name(0x00CABE98, "s_formats"); + set_name(0x00D41580, "s_WindowResizeLock"); + set_name(0x00D415C8, "s_cpuTicksPerSecond"); set_name(0x00D43020, "CShaderEffect__s_enableShaders"); } diff --git a/profile/3.3.5a-windows-386/include/bc/file/filesystem.h b/profile/3.3.5a-windows-386/include/bc/file/filesystem.h index 503f773..6139d20 100644 --- a/profile/3.3.5a-windows-386/include/bc/file/filesystem.h +++ b/profile/3.3.5a-windows-386/include/bc/file/filesystem.h @@ -41,7 +41,7 @@ enum Blizzard__File__Operation { num_operations }; -#define FS_OP(N) bool (*f_##N)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms) +#define FS_OP(N) bool (*N)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms) // 0x7C bytes = 4 + 4 + (29 * 4) struct Blizzard__File__Filesystem { diff --git a/profile/3.3.5a-windows-386/include/bc/file/info.h b/profile/3.3.5a-windows-386/include/bc/file/info.h new file mode 100644 index 0000000..7e21c7d --- /dev/null +++ b/profile/3.3.5a-windows-386/include/bc/file/info.h @@ -0,0 +1,22 @@ +#ifndef BC_FILE_INFO_H +#define BC_FILE_INFO_H + +#include "bc/time/timestamp.h" + +DECLARE_STRUCT(Blizzard__File__FileInfo); + +struct Blizzard__File__FileInfo { + char* name; + uint32_t unk04; + // uint32_t unk08; + // uint32_t unk0C; + uint64_t size; // 08 + uint32_t attributes; + Blizzard__Time__Timestamp creationTime; + Blizzard__Time__Timestamp lastWriteTime; + Blizzard__Time__Timestamp lastAccessTime; + int32_t exists; + int32_t normal; +}; + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/bc/file/processdir.h b/profile/3.3.5a-windows-386/include/bc/file/processdir.h new file mode 100644 index 0000000..bb5bb03 --- /dev/null +++ b/profile/3.3.5a-windows-386/include/bc/file/processdir.h @@ -0,0 +1,15 @@ +#ifndef BC_FILE_PROCESS_DIR_H +#define BC_FILE_PROCESS_DIR_H + +DECLARE_STRUCT(Blizzard__File__ProcessDirParms); + +struct Blizzard__File__ProcessDirParms { + const char* dir; + const char* item; + void* param; + bool isdir; +}; + +typedef bool (*Blizzard__File__ProcessDirCallback)(const Blizzard__File__ProcessDirParms* parms); + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/bc/file/stream.h b/profile/3.3.5a-windows-386/include/bc/file/stream.h index 897f766..6f5aae7 100644 --- a/profile/3.3.5a-windows-386/include/bc/file/stream.h +++ b/profile/3.3.5a-windows-386/include/bc/file/stream.h @@ -1,10 +1,19 @@ #ifndef BC_FILE_STREAM_H #define BC_FILE_STREAM_H +#include "bc/file/info.h" + DECLARE_STRUCT(Blizzard__File__StreamRecord); struct Blizzard__File__StreamRecord { - void* handle; + void* filehandle; + uint32_t flags; + bool haveinfo; + uint32_t unk0C; + Blizzard__File__FileInfo info; + int32_t* unk48; + char* name; // name is a pointer to &filehandle (0x00) + sizeof(StreamRecord) + // extra buffer that holds the actual data of name }; #endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/bc/lock/do_once.h b/profile/3.3.5a-windows-386/include/bc/lock/do_once.h new file mode 100644 index 0000000..b3dd63b --- /dev/null +++ b/profile/3.3.5a-windows-386/include/bc/lock/do_once.h @@ -0,0 +1,11 @@ +#ifndef BC_LOCK_DO_ONCE_H +#define BC_LOCK_DO_ONCE_H + +DECLARE_STRUCT(Blizzard__Lock__DoOnceData); + +struct Blizzard__Lock__DoOnceData { + bool done; + int32_t atomic; +}; + +#endif diff --git a/profile/3.3.5a-windows-386/include/bc/string/quicknativepath.h b/profile/3.3.5a-windows-386/include/bc/string/quicknativepath.h new file mode 100644 index 0000000..80bc619 --- /dev/null +++ b/profile/3.3.5a-windows-386/include/bc/string/quicknativepath.h @@ -0,0 +1,15 @@ +#ifndef BC_STRING_QUICK_NATIVE_PATH_H +#define BC_STRING_QUICK_NATIVE_PATH_H + +#define BC_STRING_QUICK_NATIVE_PATH(N) \ +typedef struct Blizzard__String__QuickNativePath_##N Blizzard__String__QuickNativePath_##N; \ +struct Blizzard__String__QuickNativePath_##N { \ + uint32_t length; \ + char* path; \ + char buffer[N]; \ +} + +BC_STRING_QUICK_NATIVE_PATH(300); +BC_STRING_QUICK_NATIVE_PATH(1024); + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/bc/systemfile/stacked.h b/profile/3.3.5a-windows-386/include/bc/systemfile/stacked.h index 45060b6..60b0216 100644 --- a/profile/3.3.5a-windows-386/include/bc/systemfile/stacked.h +++ b/profile/3.3.5a-windows-386/include/bc/systemfile/stacked.h @@ -1,10 +1,35 @@ #ifndef BC_SYSTEM_FILE_STACKED_H #define BC_SYSTEM_FILE_STACKED_H +#include "system/types.h" +#include "bc/file/stream.h" +#include "bc/file/info.h" +#include "bc/file/processdir.h" + DECLARE_STRUCT(System_File__Stacked__FileParms); struct System_File__Stacked__FileParms { - uint32_t offset; + // the offset of the file operation + // inside Blizzard::File::Filesystem + uint32_t op; //0x0 + // name/path to a file or directory + char* name; //0x4 + char* newname; // 0x8 + Blizzard__File__StreamRecord* file; // 0xC + Blizzard__File__FileInfo* info; + uint32_t extra[17]; // 0x10 + uint32_t flags; + void* data; // + uint32_t count; + int64_t offset; + uint32_t unk__; + char* buffer; + int32_t buffersize; + bool unkbool1; + bool unkbool2; + void* dirwalkparam; + Blizzard__File__ProcessDirCallback dirwalkcallback; + uint32_t extra3[2]; }; #endif diff --git a/profile/3.3.5a-windows-386/include/bc/time/timestamp.h b/profile/3.3.5a-windows-386/include/bc/time/timestamp.h new file mode 100644 index 0000000..f4497b1 --- /dev/null +++ b/profile/3.3.5a-windows-386/include/bc/time/timestamp.h @@ -0,0 +1,6 @@ +#ifndef BC_TIME_TIMESTAMP_H +#define BC_TIME_TIMESTAMP_H + +typedef int64_t Blizzard__Time__Timestamp; + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/common/handle.h b/profile/3.3.5a-windows-386/include/common/handle.h index 14e7d6a..9389530 100644 --- a/profile/3.3.5a-windows-386/include/common/handle.h +++ b/profile/3.3.5a-windows-386/include/common/handle.h @@ -3,12 +3,12 @@ #include "system/types.h" -#if !defined(DECLARE_HANDLE) -#define DECLARE_HANDLE(name) \ -typedef struct name##__ { \ +#define DECLARE_HANDLE(I) \ +typedef struct I##__ I##__; \ +struct I##__ { \ int32_t unused; \ -}* name -#endif +}; \ +typedef I##__* I DECLARE_STRUCT(CHandleObject); diff --git a/profile/3.3.5a-windows-386/include/db/records.h b/profile/3.3.5a-windows-386/include/db/records.h index 13e9d10..c7228c0 100644 --- a/profile/3.3.5a-windows-386/include/db/records.h +++ b/profile/3.3.5a-windows-386/include/db/records.h @@ -3166,2869 +3166,6 @@ struct gtSpellScalingRec { }; -struct AchievementRec { - int32_t m_ID; - int32_t m_faction; - int32_t m_instanceID; - int32_t m_supercedes; - const char* m_title; - const char* m_description; - int32_t m_category; - int32_t m_points; - int32_t m_uiOrder; - int32_t m_flags; - int32_t m_iconID; - const char* m_reward; - int32_t m_minimumCriteria; - int32_t m_sharesCriteria; -}; - -struct Achievement_CategoryRec { - int32_t m_ID; - int32_t m_parent; - const char* m_name; - int32_t m_uiOrder; -}; - -struct Achievement_CriteriaRec { - int32_t m_ID; - int32_t m_achievementID; - int32_t m_type; - int32_t m_assetID; - int32_t m_quantity; - int32_t m_startEvent; - int32_t m_startAsset; - int32_t m_failEvent; - int32_t m_failAsset; - const char* m_description; - int32_t m_flags; - int32_t m_timerStartEvent; - int32_t m_timerAssetID; - int32_t m_timerTime; - int32_t m_uiOrder; -}; - -struct AnimKitRec { - int32_t m_ID; - int32_t m_oneShotDuration; - int32_t m_oneShotStopAnimKitID; -}; - -struct AnimKitBoneSetRec { - int32_t m_ID; - const char* m_name; - int32_t m_boneDataID; - int32_t m_parentAnimKitBoneSetID; - int32_t m_extraBoneCount; - int32_t m_altAnimKitBoneSetID; -}; - -struct AnimKitBoneSetAliasRec { - int32_t m_ID; - int32_t m_boneDataID; - int32_t m_animKitBoneSetID; -}; - -struct AnimKitConfigRec { - int32_t m_ID; - int32_t m_configFlags; -}; - -struct AnimKitConfigBoneSetRec { - int32_t m_ID; - int32_t m_parentAnimKitConfigID; - int32_t m_animKitBoneSetID; - int32_t m_animKitPriorityID; -}; - -struct AnimKitPriorityRec { - int32_t m_ID; - int32_t m_priority; -}; - -struct AnimKitSegmentRec { - int32_t m_ID; - int32_t m_parentAnimKitID; - int32_t m_animID; - int32_t m_animStartTime; - int32_t m_animKitConfigID; - int32_t m_startCondition; - int32_t m_startConditionParam; - int32_t m_startConditionDelay; - int32_t m_endCondition; - int32_t m_endConditionParam; - int32_t m_endConditionDelay; - float m_speed; - int32_t m_segmentFlags; - int32_t m_forcedVariation; - int32_t m_overrideConfigFlags; - int32_t m_loopToSegmentIndex; -}; - -struct AnimReplacementRec { - int32_t m_ID; - int32_t m_srcAnimID; - int32_t m_dstAnimID; - int32_t m_parentAnimReplacementSetID; -}; - -struct AnimReplacementSetRec { - int32_t m_ID; - int32_t m_execOrder; -}; - -struct AnimationDataRec { - int32_t m_ID; - const char* m_name; - int32_t m_weaponflags; - int32_t m_bodyflags; - int32_t m_flags; - int32_t m_fallback; - int32_t m_behaviorID; - int32_t m_behaviorTier; -}; - -struct AreaAssignmentRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_areaID; - int32_t m_chunkX; - int32_t m_chunkY; -}; - -struct AreaGroupRec { - int32_t m_ID; - int32_t m_areaID[6]; - int32_t m_nextAreaID; -}; - -struct AreaPOIRec { - int32_t m_ID; - int32_t m_importance; - int32_t m_icon[9]; - int32_t m_factionID; - float m_pos[3]; - int32_t m_continentID; - int32_t m_flags; - int32_t m_areaID; - const char* m_name; - const char* m_description; - int32_t m_worldStateID; - int32_t m_worldMapLink; -}; - -struct AreaTableRec { - int32_t m_ID; - int32_t m_continentID; - int32_t m_parentAreaID; - int32_t m_areaBit; - int32_t m_flags; - int32_t m_soundProviderPref; - int32_t m_soundProviderPrefUnderwater; - int32_t m_ambienceID; - int32_t m_zoneMusic; - int32_t m_introSound; - int32_t m_explorationLevel; - const char* m_areaName; - int32_t m_factionGroupMask; - int32_t m_liquidTypeID[4]; - float m_minElevation; - float m_ambientMultiplier; - int32_t m_lightID; -}; - -struct AreaTriggerRec { - int32_t m_ID; - int32_t m_continentID; - float m_pos[3]; - float m_radius; - float m_boxLength; - float m_boxWidth; - float m_boxHeight; - float m_boxYaw; -}; - -struct ArmorLocationRec { - int32_t m_ID; - float m_clothmodifier; - float m_leathermodifier; - float m_chainmodifier; - float m_platemodifier; - float m_modifier; -}; - -struct AttackAnimKitsRec { - int32_t m_ID; - int32_t m_itemSubclassID; - int32_t m_animTypeID; - int32_t m_animFrequency; - int32_t m_whichHand; -}; - -struct AttackAnimTypesRec { - int32_t m_animID; - const char* m_animName; - int32_t m_generatedID; -}; - -struct AuctionHouseRec { - int32_t m_ID; - int32_t m_factionID; - int32_t m_depositRate; - int32_t m_consignmentRate; - const char* m_name; -}; - -struct BankBagSlotPricesRec { - int32_t m_ID; - int32_t m_cost; -}; - -struct BannedAddonsRec { - int32_t m_ID; - int32_t m_nameMd5[4]; - int32_t m_versionMd5[4]; - int32_t m_lastModified; - int32_t m_flags; -}; - -struct BarberShopStyleRec { - int32_t m_ID; - int32_t m_type; - const char* m_displayName; - const char* m_description; - float m_costModifier; - int32_t m_race; - int32_t m_sex; - int32_t m_data; -}; - -struct BattlemasterListRec { - int32_t m_ID; - int32_t m_mapID[8]; - int32_t m_instanceType; - int32_t m_groupsAllowed; - const char* m_name; - int32_t m_maxGroupSize; - int32_t m_holidayWorldState; - int32_t m_minLevel; - int32_t m_maxLevel; -}; - -struct CameraModeRec { - int32_t m_ID; - const char* m_name; - int32_t m_type; - int32_t m_flags; - float m_positionOffset[3]; - float m_targetOffset[3]; - float m_positionSmoothing; - float m_rotationSmoothing; - float m_fieldOfView; - int32_t m_lockedPositionOffsetBase; - int32_t m_lockedPositionOffsetDirection; - int32_t m_lockedTargetOffsetBase; - int32_t m_lockedTargetOffsetDirection; -}; - -struct CameraShakesRec { - int32_t m_ID; - int32_t m_shakeType; - int32_t m_direction; - float m_amplitude; - float m_frequency; - float m_duration; - float m_phase; - float m_coefficient; -}; - -struct Cfg_CategoriesRec { - int32_t m_ID; - int32_t m_localeMask; - int32_t m_createCharsetMask; - int32_t m_flags; - const char* m_name; -}; - -struct Cfg_ConfigsRec { - int32_t m_ID; - int32_t m_realmType; - int32_t m_playerKillingAllowed; - int32_t m_roleplaying; -}; - -struct CharBaseInfoRec { - int8_t m_raceID; - int8_t m_classID; - int32_t m_generatedID; -}; - -struct CharHairGeosetsRec { - int32_t m_ID; - int32_t m_raceID; - int32_t m_sexID; - int32_t m_variationID; - int32_t m_geosetID; - int32_t m_showscalp; -}; - -struct CharHairTexturesRec { - int32_t m_ID; - int32_t m_field_0_5_3_3368_001_race; // unconfirmed - int32_t m_field_0_5_3_3368_002_gender; // unconfirmed - int32_t m_field_0_5_3_3368_003; // unconfirmed - int32_t m_field_0_5_3_3368_004_mayberacemask; // unconfirmed - int32_t m_field_0_5_3_3368_005_the_x_in_hair_xy_blp; // unconfirmed - int32_t m_field_0_5_3_3368_006; // unconfirmed - int32_t m_field_0_5_3_3368_007; // unconfirmed -}; - -struct CharSectionsRec { - int32_t m_ID; - int32_t m_raceID; - int32_t m_sexID; - int32_t m_baseSection; - const char* m_textureName[3]; - int32_t m_flags; - int32_t m_variationIndex; - int32_t m_colorIndex; -}; - -struct CharStartOutfitRec { - int32_t m_ID; - int8_t m_raceID; - int8_t m_classID; - int8_t m_sexID; - int8_t m_outfitID; - int32_t m_itemID[24]; - int32_t m_displayItemID[24]; - int32_t m_inventoryType[24]; -}; - -struct CharTitlesRec { - int32_t m_ID; - int32_t m_conditionID; - const char* m_name; - const char* m_name1; - int32_t m_maskID; -}; - -struct CharVariationsRec { - int32_t m_raceID; - int32_t m_sexID; - int32_t m_textureHoldLayer[4]; - int32_t m_generatedID; -}; - -struct CharacterFacialHairStylesRec { - int32_t m_raceID; - int32_t m_sexID; - int32_t m_variationID; - int32_t m_geoset[5]; - int32_t m_generatedID; -}; - -struct ChatChannelsRec { - int32_t m_ID; - int32_t m_flags; - int32_t m_factionGroup; - const char* m_name; - const char* m_shortcut; -}; - -struct ChatProfanityRec { - int32_t m_ID; - const char* m_text; - int32_t m_language; -}; - -struct ChrClassesRec { - int32_t m_ID; - int32_t m_damageBonusStat; - int32_t m_displayPower; - const char* m_petNameToken; - const char* m_name; - const char* m_nameFemale; - const char* m_nameMale; - const char* m_filename; - int32_t m_spellClassSet; - int32_t m_flags; - int32_t m_cinematicSequenceID; - int32_t m_requiredExpansion; -}; - -struct ChrRacesRec { - int32_t m_ID; - int32_t m_flags; - int32_t m_factionID; - int32_t m_explorationSoundID; - int32_t m_maleDisplayID; - int32_t m_femaleDisplayID; - const char* m_clientPrefix; - int32_t m_baseLanguage; - int32_t m_creatureType; - int32_t m_resSicknessSpellID; - int32_t m_splashSoundID; - const char* m_clientFileString; - int32_t m_cinematicSequenceID; - int32_t m_alliance; - const char* m_name; - const char* m_nameFemale; - const char* m_nameMale; - const char* m_facialHairCustomization[2]; - const char* m_hairCustomization; - int32_t m_requiredExpansion; -}; - -struct CinematicCameraRec { - int32_t m_ID; - const char* m_model; - int32_t m_soundID; - float m_origin[3]; - float m_originFacing; -}; - -struct CinematicSequencesRec { - int32_t m_ID; - int32_t m_soundID; - int32_t m_camera[8]; -}; - -struct CreatureDisplayInfoRec { - int32_t m_ID; - int32_t m_modelID; - int32_t m_soundID; - int32_t m_extendedDisplayInfoID; - float m_creatureModelScale; - int32_t m_creatureModelAlpha; - const char* m_textureVariation[3]; - const char* m_portraitTextureName; - int32_t m_sizeClass; - int32_t m_bloodID; - int32_t m_npcsoundID; - int32_t m_particleColorID; - int32_t m_creatureGeosetData; - int32_t m_objectEffectPackageID; -}; - -struct CreatureDisplayInfoExtraRec { - int32_t m_ID; - int32_t m_displayRaceID; - int32_t m_displaySexID; - int32_t m_skinID; - int32_t m_faceID; - int32_t m_hairStyleID; - int32_t m_hairColorID; - int32_t m_facialHairID; - int32_t m_npcitemDisplay[11]; - int32_t m_flags; - const char* m_bakeName; -}; - -struct CreatureFamilyRec { - int32_t m_ID; - float m_minScale; - int32_t m_minScaleLevel; - float m_maxScale; - int32_t m_maxScaleLevel; - int32_t m_skillLine[2]; - int32_t m_petFoodMask; - int32_t m_petTalentType; - int32_t m_categoryEnumID; - const char* m_name; - const char* m_iconFile; -}; - -struct CreatureModelDataRec { - int32_t m_ID; - int32_t m_flags; - const char* m_modelName; - int32_t m_sizeClass; - float m_modelScale; - int32_t m_bloodID; - int32_t m_footprintTextureID; - float m_footprintTextureLength; - float m_footprintTextureWidth; - float m_footprintParticleScale; - int32_t m_foleyMaterialID; - int32_t m_footstepShakeSize; - int32_t m_deathThudShakeSize; - int32_t m_soundID; - float m_collisionWidth; - float m_collisionHeight; - float m_mountHeight; - float m_geoBoxMinX; - float m_geoBoxMinY; - float m_geoBoxMinZ; - float m_geoBoxMaxX; - float m_geoBoxMaxY; - float m_geoBoxMaxZ; - float m_worldEffectScale; - float m_attachedEffectScale; - float m_missileCollisionRadius; - float m_missileCollisionPush; - float m_missileCollisionRaise; -}; - -struct CreatureMovementInfoRec { - int32_t m_ID; - float m_smoothFacingChaseRate; -}; - -struct CreatureSoundDataRec { - int32_t m_ID; - int32_t m_soundExertionID; - int32_t m_soundExertionCriticalID; - int32_t m_soundInjuryID; - int32_t m_soundInjuryCriticalID; - int32_t m_soundInjuryCrushingBlowID; - int32_t m_soundDeathID; - int32_t m_soundStunID; - int32_t m_soundStandID; - int32_t m_soundFootstepID; - int32_t m_soundAggroID; - int32_t m_soundWingFlapID; - int32_t m_soundWingGlideID; - int32_t m_soundAlertID; - int32_t m_soundFidget[5]; - int32_t m_customAttack[4]; - int32_t m_npcsoundID; - int32_t m_loopSoundID; - int32_t m_creatureImpactType; - int32_t m_soundJumpStartID; - int32_t m_soundJumpEndID; - int32_t m_soundPetAttackID; - int32_t m_soundPetOrderID; - int32_t m_soundPetDismissID; - float m_fidgetDelaySecondsMin; - float m_fidgetDelaySecondsMax; - int32_t m_birthSoundID; - int32_t m_spellCastDirectedSoundID; - int32_t m_submergeSoundID; - int32_t m_submergedSoundID; - int32_t m_creatureSoundDataIdpet; -}; - -struct CreatureSpellDataRec { - int32_t m_ID; - int32_t m_spells[4]; - int32_t m_availability[4]; -}; - -struct CreatureTypeRec { - int32_t m_ID; - const char* m_name; - int32_t m_flags; -}; - -struct CurrencyCategoryRec { - int32_t m_ID; - int32_t m_flags; - const char* m_name; -}; - -struct CurrencyTypesRec { - int32_t m_ID; - int32_t m_itemID; - int32_t m_categoryID; - int32_t m_bitIndex; -}; - -struct DanceMovesRec { - int32_t m_ID; - int32_t m_type; - int32_t m_param; - int32_t m_fallback; - int32_t m_racemask; - const char* m_internalName; - const char* m_name; - int32_t m_lockID; -}; - -struct DeathThudLookupsRec { - int32_t m_ID; - int32_t m_sizeClass; - int32_t m_terrainTypeSoundID; - int32_t m_soundEntryID; - int32_t m_soundEntryIdwater; -}; - -struct DeclinedWordRec { - int32_t m_ID; - const char* m_word; -}; - -struct DeclinedWordCasesRec { - int32_t m_ID; - int32_t m_declinedWordID; - int32_t m_caseIndex; - const char* m_declinedWord; -}; - -struct DestructibleModelDataRec { - int32_t m_ID; - int32_t m_state0ImpactEffectDoodadSet; - int32_t m_state0AmbientDoodadSet; - int32_t m_state1WMO; - int32_t m_state1DestructionDoodadSet; - int32_t m_state1ImpactEffectDoodadSet; - int32_t m_state1AmbientDoodadSet; - int32_t m_state2WMO; - int32_t m_state2DestructionDoodadSet; - int32_t m_state2ImpactEffectDoodadSet; - int32_t m_state2AmbientDoodadSet; - int32_t m_state3WMO; - int32_t m_state3InitDoodadSet; - int32_t m_state3AmbientDoodadSet; - int32_t m_ejectDirection; - int32_t m_repairGroundFx; - int32_t m_doNotHighlight; - int32_t m_healEffect; - int32_t m_healEffectSpeed; -}; - -struct DungeonEncounterRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_difficulty; - int32_t m_orderIndex; - int32_t m_bit; - const char* m_name; - int32_t m_spellIconID; -}; - -struct DungeonMapRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_floorIndex; - float m_minX; - float m_maxX; - float m_minY; - float m_maxY; - int32_t m_parentWorldMapID; -}; - -struct DungeonMapChunkRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_wmogroupID; - int32_t m_dungeonMapID; - float m_minZ; -}; - -struct DurabilityCostsRec { - int32_t m_ID; - int32_t m_weaponSubClassCost[21]; - int32_t m_armorSubClassCost[8]; -}; - -struct DurabilityQualityRec { - int32_t m_ID; - float m_data; -}; - -struct EmotesRec { - int32_t m_ID; - const char* m_emoteSlashCommand; - int32_t m_animID; - int32_t m_emoteFlags; - int32_t m_emoteSpecProc; - int32_t m_emoteSpecProcParam; - int32_t m_eventSoundID; -}; - -struct EmotesTextRec { - int32_t m_ID; - const char* m_name; - int32_t m_emoteID; - int32_t m_emoteText[16]; -}; - -struct EmotesTextDataRec { - int32_t m_ID; - const char* m_text; -}; - -struct EmotesTextSoundRec { - int32_t m_ID; - int32_t m_emotesTextID; - int32_t m_raceID; - int32_t m_sexID; - int32_t m_soundID; -}; - -struct EnvironmentalDamageRec { - int32_t m_ID; - int32_t m_enumID; - int32_t m_visualkitID; -}; - -struct ExhaustionRec { - int32_t m_ID; - int32_t m_xp; - float m_factor; - float m_outdoorHours; - float m_innHours; - const char* m_name; - float m_threshold; -}; - -struct FactionRec { - int32_t m_ID; - int32_t m_reputationIndex; - int32_t m_reputationRaceMask[4]; - int32_t m_reputationClassMask[4]; - int32_t m_reputationBase[4]; - int32_t m_reputationFlags[4]; - int32_t m_parentFactionID; - float m_parentFactionMod[2]; - int32_t m_parentFactionCap[2]; - const char* m_name; - const char* m_description; -}; - -struct FactionGroupRec { - int32_t m_ID; - int32_t m_maskID; - const char* m_internalName; - const char* m_name; -}; - -struct FactionTemplateRec { - int32_t m_ID; - int32_t m_faction; - int32_t m_flags; - int32_t m_factionGroup; - int32_t m_friendGroup; - int32_t m_enemyGroup; - int32_t m_enemies[4]; - int32_t m_friend[4]; -}; - -struct FileDataRec { - int32_t m_ID; - const char* m_filename; - const char* m_filepath; -}; - -struct FootprintTexturesRec { - int32_t m_ID; - const char* m_footstepFilename; -}; - -struct FootstepTerrainLookupRec { - int32_t m_ID; - int32_t m_creatureFootstepID; - int32_t m_terrainSoundID; - int32_t m_soundID; - int32_t m_soundIdsplash; -}; - -struct GMSurveyAnswersRec { - int32_t m_ID; - int32_t m_sortIndex; - int32_t m_gmsurveyQuestionID; - const char* m_answer; -}; - -struct GMSurveyCurrentSurveyRec { - int32_t m_langid; - int32_t m_gmsurveyID; - int32_t m_generatedID; -}; - -struct GMSurveyQuestionsRec { - int32_t m_ID; - const char* m_question; -}; - -struct GMSurveySurveysRec { - int32_t m_ID; - int32_t m_[10]; -}; - -struct GMTicketCategoryRec { - int32_t m_ID; - const char* m_category; -}; - -struct GameObjectArtKitRec { - int32_t m_ID; - const char* m_textureVariation[3]; - const char* m_attachModel[4]; -}; - -struct GameObjectDisplayInfoRec { - int32_t m_ID; - const char* m_modelName; - int32_t m_sound[10]; - float m_geoBoxMin[3]; - float m_geoBoxMax[3]; - int32_t m_objectEffectPackageID; -}; - -struct GameTablesRec { - const char* m_name; - int32_t m_numRows; - int32_t m_numColumns; - int32_t m_generatedID; -}; - -struct GameTipsRec { - int32_t m_ID; - const char* m_text; -}; - -struct GemPropertiesRec { - int32_t m_ID; - int32_t m_enchantID; - int32_t m_maxcountInv; - int32_t m_maxcountItem; - int32_t m_type; -}; - -struct GlueScreenEmoteRec { - int32_t m_ID; - int32_t m_classID; - int32_t m_raceID; - int32_t m_sexID; - int32_t m_leftHandItemType; - int32_t m_rightHandItemType; - int32_t m_animKitID; - int32_t m_spellVisualKitID; -}; - -struct GlyphPropertiesRec { - int32_t m_ID; - int32_t m_spellID; - int32_t m_glyphSlotFlags; - int32_t m_spellIconID; -}; - -struct GlyphSlotRec { - int32_t m_ID; - int32_t m_type; - int32_t m_tooltip; -}; - -struct GroundEffectDoodadRec { - int32_t m_ID; - const char* m_doodadpath; - int32_t m_flags; -}; - -struct GroundEffectTextureRec { - int32_t m_ID; - int32_t m_doodadID[4]; - int32_t m_doodadWeight[4]; - int32_t m_density; - int32_t m_sound; -}; - -struct GuildPerkSpellsRec { - int32_t m_ID; - int32_t m_guildLevel; - int32_t m_spellID; -}; - -struct HelmetGeosetVisDataRec { - int32_t m_ID; - int32_t m_hideGeoset[7]; -}; - -struct HolidayDescriptionsRec { - int32_t m_ID; - const char* m_description; -}; - -struct HolidayNamesRec { - int32_t m_ID; - const char* m_name; -}; - -struct HolidaysRec { - int32_t m_ID; - int32_t m_duration[10]; - int32_t m_date[26]; - int32_t m_region; - int32_t m_looping; - int32_t m_calendarFlags[10]; - int32_t m_holidayNameID; - int32_t m_holidayDescriptionID; - const char* m_textureFileName; - int32_t m_priority; - int32_t m_calendarFilterType; - int32_t m_flags; -}; - -struct ItemRec { - int32_t m_ID; - int32_t m_classID; - int32_t m_subclassID; - int32_t m_soundOverrideSubclassID; - int32_t m_material; - int32_t m_displayInfoID; - int32_t m_inventoryType; - int32_t m_sheatheType; -}; - -struct ItemArmorQualityRec { - int32_t m_ID; - float m_qualitymod[7]; - int32_t m_itemLevel; -}; - -struct ItemArmorShieldRec { - int32_t m_ID; - int32_t m_itemLevel; - float m_quality[7]; -}; - -struct ItemArmorTotalRec { - int32_t m_ID; - int32_t m_itemLevel; - float m_cloth; - float m_leather; - float m_mail; - float m_plate; -}; - -struct ItemBagFamilyRec { - int32_t m_ID; - const char* m_name; -}; - -struct ItemClassRec { - int32_t m_classID; - int32_t m_subclassMapID; - int32_t m_flags; - const char* m_className; - int32_t m_generatedID; -}; - -struct ItemCondExtCostsRec { - int32_t m_ID; - int32_t m_condExtendedCost; // unconfirmed - int32_t m_itemExtendedCostEntry; - int32_t m_arenaSeason; // unconfirmed -}; - -struct ItemDamageAmmoRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageOneHandRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageOneHandCasterRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageRangedRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageThrownRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageTwoHandRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageTwoHandCasterRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDamageWandRec { - int32_t m_ID; - float m_quality[7]; - int32_t m_itemLevel; -}; - -struct ItemDisplayInfoRec { - int32_t m_ID; - const char* m_modelName[2]; - const char* m_modelTexture[2]; - const char* m_inventoryIcon[2]; - int32_t m_geosetGroup[3]; - int32_t m_flags; - int32_t m_spellVisualID; - int32_t m_groupSoundIndex; - int32_t m_helmetGeosetVisID[2]; - const char* m_texture[8]; - int32_t m_itemVisual; - int32_t m_particleColorID; -}; - -struct ItemExtendedCostRec { - int32_t m_ID; - int32_t m_honorPoints; - int32_t m_arenaPoints; - int32_t m_arenaBracket; - int32_t m_itemID[5]; - int32_t m_itemCount[5]; - int32_t m_requiredArenaRating; - int32_t m_itemPurchaseGroup; -}; - -struct ItemGroupSoundsRec { - int32_t m_ID; - int32_t m_sound[4]; -}; - -struct ItemLimitCategoryRec { - int32_t m_ID; - const char* m_name; - int32_t m_quantity; - int32_t m_flags; -}; - -struct ItemPetFoodRec { - int32_t m_ID; - const char* m_name; -}; - -struct ItemPurchaseGroupRec { - int32_t m_ID; - int32_t m_itemID[8]; - const char* m_name; -}; - -struct ItemRandomPropertiesRec { - int32_t m_ID; - const char* m_name; - int32_t m_enchantment[5]; - const char* m_name_lang; -}; - -struct ItemRandomSuffixRec { - int32_t m_ID; - const char* m_name; - const char* m_internalName; - int32_t m_enchantment[5]; - int32_t m_allocationPct[5]; -}; - -struct ItemReforgeRec { - int32_t m_ID; // unconfirmed - int32_t m_sourceStat; // unconfirmed - float m_sourceMultiplier; // unconfirmed - int32_t m_targetStat; // unconfirmed - float m_targetMultiplier; // unconfirmed -}; - -struct ItemSetRec { - int32_t m_ID; - const char* m_name; - int32_t m_itemID[17]; - int32_t m_setSpellID[8]; - int32_t m_setThreshold[8]; - int32_t m_requiredSkill; - int32_t m_requiredSkillRank; -}; - -struct ItemSubClassRec { - int32_t m_classID; - int32_t m_subClassID; - int32_t m_prerequisiteProficiency; - int32_t m_postrequisiteProficiency; - int32_t m_flags; - int32_t m_displayFlags; - int32_t m_weaponParrySeq; - int32_t m_weaponReadySeq; - int32_t m_weaponAttackSeq; - int32_t m_weaponSwingSize; - const char* m_displayName; - const char* m_verboseName; - int32_t m_generatedID; -}; - -struct ItemSubClassMaskRec { - int32_t m_classID; - int32_t m_mask; - const char* m_name; - int32_t m_generatedID; -}; - -struct ItemVisualEffectsRec { - int32_t m_ID; - const char* m_model; -}; - -struct ItemVisualsRec { - int32_t m_ID; - int32_t m_slot[5]; -}; - -struct LFGDungeonExpansionRec { - int32_t m_ID; - int32_t m_lfgID; - int32_t m_expansionLevel; - int32_t m_randomID; - int32_t m_hardLevelMin; - int32_t m_hardLevelMax; - int32_t m_targetLevelMin; - int32_t m_targetLevelMax; -}; - -struct LFGDungeonGroupRec { - int32_t m_ID; - const char* m_name; - int32_t m_orderIndex; - int32_t m_parentGroupID; - int32_t m_typeID; -}; - -struct LFGDungeonsRec { - int32_t m_ID; - const char* m_name; - int32_t m_minLevel; - int32_t m_maxLevel; - int32_t m_targetLevel; - int32_t m_targetLevelMin; - int32_t m_targetLevelMax; - int32_t m_mapID; - int32_t m_difficulty; - int32_t m_flags; - int32_t m_typeID; - int32_t m_faction; - const char* m_textureFilename; - int32_t m_expansionLevel; - int32_t m_orderIndex; - int32_t m_groupID; - const char* m_description; -}; - -struct LanguageWordsRec { - int32_t m_ID; - int32_t m_languageID; - const char* m_word; -}; - -struct LanguagesRec { - int32_t m_ID; - const char* m_name; -}; - -struct LightRec { - int32_t m_ID; - int32_t m_continentID; - float m_gameCoords[3]; - float m_gameFalloffStart; - float m_gameFalloffEnd; - int32_t m_lightParamsID[8]; -}; - -struct LightFloatBandRec { - int32_t m_ID; - int32_t m_num; - int32_t m_time[16]; - float m_data[16]; -}; - -struct LightIntBandRec { - int32_t m_ID; - int32_t m_num; - int32_t m_time[16]; - int32_t m_data[16]; -}; - -struct LightParamsRec { - int32_t m_ID; - int32_t m_highlightSky; - int32_t m_lightSkyboxID; - float m_glow; - float m_waterShallowAlpha; - float m_waterDeepAlpha; - float m_oceanShallowAlpha; - float m_oceanDeepAlpha; - int32_t m_flags; -}; - -struct LightSkyboxRec { - int32_t m_ID; - const char* m_name; - int32_t m_flags; -}; - -struct LiquidMaterialRec { - int32_t m_ID; - int32_t m_lvf; - int32_t m_flags; -}; - -struct LiquidObjectRec { - int32_t m_ID; - float m_flowDirection; - float m_flowSpeed; - int32_t m_liquidTypeID; - int32_t m_fishable; - int32_t m_reflection; -}; - -struct LiquidTypeRec { - int32_t m_ID; - const char* m_name; - int32_t m_flags; - int32_t m_soundBank; - int32_t m_soundID; - int32_t m_spellID; - float m_maxDarkenDepth; - float m_fogDarkenIntensity; - float m_ambDarkenIntensity; - float m_dirDarkenIntensity; - int32_t m_lightID; - float m_particleScale; - int32_t m_particleMovement; - int32_t m_particleTexSlots; - int32_t m_materialID; - const char* m_texture[6]; - int32_t m_color[2]; - float m_float[18]; - int32_t m_int[4]; -}; - -struct LoadingScreenTaxiSplinesRec { - int32_t m_ID; - int32_t m_pathID; - float m_locx[8]; - float m_locy[8]; - int32_t m_legIndex; -}; - -struct LoadingScreensRec { - int32_t m_ID; - const char* m_name; - const char* m_fileName; - int32_t m_hasWideScreen; -}; - -struct LockRec { - int32_t m_ID; - int32_t m_type[8]; - int32_t m_index[8]; - int32_t m_skill[8]; - int32_t m_action[8]; -}; - -struct LockTypeRec { - int32_t m_ID; - const char* m_name; - const char* m_resourceName; - const char* m_verb; - const char* m_cursorName; -}; - -struct MailTemplateRec { - int32_t m_ID; - const char* m_subject; - const char* m_body; -}; - -struct MapRec { - int32_t m_ID; - const char* m_directory; - int32_t m_instanceType; - int32_t m_flags; // unconfirmed - int32_t m_pvp; - const char* m_mapName; - int32_t m_areaTableID; - const char* m_mapDescription0; - const char* m_mapDescription1; - int32_t m_loadingScreenID; - float m_minimapIconScale; - int32_t m_corpseMapID; - float m_corpse[2]; - int32_t m_timeOfDayOverride; - int32_t m_expansionID; - int32_t m_raidOffset; - int32_t m_maxPlayers; -}; - -struct MapDifficultyRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_difficulty; - const char* m_message; - int32_t m_raidDuration; - int32_t m_maxPlayers; - const char* m_difficultystring; -}; - -struct MaterialRec { - int32_t m_ID; - int32_t m_flags; - int32_t m_foleySoundID; - int32_t m_sheatheSoundID; - int32_t m_unsheatheSoundID; -}; - -struct MountTypeRec { - int32_t m_ID; - int32_t m_capability[8]; -}; - -struct MovieRec { - int32_t m_ID; - const char* m_filename; - int32_t m_volume; -}; - -struct MovieFileDataRec { - int32_t m_fileDataID; - int32_t m_resolution; - int32_t m_generatedID; -}; - -struct MovieVariationRec { - int32_t m_ID; - int32_t m_movieID; - int32_t m_fileDataID; -}; - -struct NPCSoundsRec { - int32_t m_ID; - int32_t m_soundID[4]; -}; - -struct NameGenRec { - int32_t m_ID; - const char* m_name; - int32_t m_raceID; - int32_t m_sex; -}; - -struct NamesProfanityRec { - int32_t m_ID; - const char* m_name; - int32_t m_language; -}; - -struct NamesReservedRec { - int32_t m_ID; - const char* m_name; - int32_t m_language; -}; - -struct ObjectEffectRec { - int32_t m_ID; - const char* m_name; - int32_t m_objectEffectGroupID; - int32_t m_triggerType; - int32_t m_eventType; - int32_t m_effectRecType; - int32_t m_effectRecID; - int32_t m_attachment; - float m_offset[3]; - int32_t m_objectEffectModifierID; -}; - -struct ObjectEffectGroupRec { - int32_t m_ID; - const char* m_name; -}; - -struct ObjectEffectModifierRec { - int32_t m_ID; - int32_t m_inputType; - int32_t m_mapType; - int32_t m_outputType; - float m_param[4]; -}; - -struct ObjectEffectPackageRec { - int32_t m_ID; - const char* m_name; -}; - -struct ObjectEffectPackageElemRec { - int32_t m_ID; - int32_t m_objectEffectPackageID; - int32_t m_objectEffectGroupID; - int32_t m_stateType; -}; - -struct OverrideSpellDataRec { - int32_t m_ID; - int32_t m_spells[10]; - int32_t m_flags; -}; - -struct PVPDifficultyRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_rangeIndex; - int32_t m_minLevel; - int32_t m_maxLevel; - int32_t m_difficulty; -}; - -struct PackageRec { - int32_t m_ID; - const char* m_icon; - int32_t m_cost; - const char* m_name; -}; - -struct PageTextMaterialRec { - int32_t m_ID; - const char* m_name; -}; - -struct PaperDollItemFrameRec { - const char* m_itemButtonName; - const char* m_slotIcon; - int32_t m_slotNumber; - int32_t m_generatedID; -}; - -struct ParticleColorRec { - int32_t m_ID; - int32_t m_start[3]; - int32_t m_mid[3]; - int32_t m_end[3]; -}; - -struct PetPersonalityRec { - int32_t m_ID; - const char* m_name; - int32_t m_happinessThreshold[3]; - float m_happinessDamage[3]; -}; - -struct PetitionTypeRec { - int32_t m_ID; // unconfirmed - const char* m_name; // unconfirmed - int32_t m_type; // unconfirmed -}; - -struct PhaseRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_parentMapID[2]; // unconfirmed - const char* m_name; - int32_t m_flags; -}; - -struct PhaseShiftZoneSoundsRec { - int32_t m_ID; - int32_t m_areaID; - int32_t m_wmoareaID; - int32_t m_phaseID; - int32_t m_phaseGroupID; - int32_t m_phaseUseFlags; - int32_t m_zoneIntroMusicID; - int32_t m_zoneMusicID; - int32_t m_soundAmbienceID; - int32_t m_soundProviderPreferencesID; - int32_t m_uwzoneIntroMusicID; - int32_t m_uwzoneMusicID; - int32_t m_uwsoundAmbienceID; - int32_t m_uwsoundProviderPreferencesID; -}; - -struct PhaseXPhaseGroupRec { - int32_t m_ID; - int32_t m_phaseID; - int32_t m_phaseGroupID; -}; - -struct PowerDisplayRec { - int32_t m_ID; - int32_t m_actualType; - const char* m_globalStringBaseTag; - int8_t m_red; - int8_t m_green; - int8_t m_blue; -}; - -struct QuestFactionRewardRec { - int32_t m_ID; - int32_t m_difficulty[10]; -}; - -struct QuestInfoRec { - int32_t m_ID; - const char* m_infoName; -}; - -struct QuestSortRec { - int32_t m_ID; - const char* m_sortName; -}; - -struct QuestXPRec { - int32_t m_ID; - int32_t m_difficulty[10]; -}; - -struct RandPropPointsRec { - int32_t m_ID; - int32_t m_epic[5]; - int32_t m_superior[5]; - int32_t m_good[5]; -}; - -struct ResearchBranchRec { - int32_t m_ID; - const char* m_name; - int32_t m_researchFieldID; - int32_t m_currencyID; - const char* m_texture; - int32_t m_itemID; -}; - -struct ResistancesRec { - int32_t m_ID; - int32_t m_flags; - int32_t m_fizzleSoundID; - const char* m_name; -}; - -struct ScalingStatDistributionRec { - int32_t m_ID; - int32_t m_statID[10]; - int32_t m_bonus[10]; - int32_t m_maxlevel; -}; - -struct ScalingStatValuesRec { - int32_t m_ID; - int32_t m_charlevel; - int32_t m_shoulderBudget; - int32_t m_trinketBudget; - int32_t m_weaponBudget1h; - int32_t m_rangedBudget; - int32_t m_clothShoulderArmor; - int32_t m_leatherShoulderArmor; - int32_t m_mailShoulderArmor; - int32_t m_plateShoulderArmor; - int32_t m_weaponDps1h; - int32_t m_weaponDps2h; - int32_t m_spellcasterDps1h; - int32_t m_spellcasterDps2h; - int32_t m_rangedDps; - int32_t m_wandDps; - int32_t m_spellPower; - int32_t m_primaryBudget; - int32_t m_tertiaryBudget; - int32_t m_clothCloakArmor; - int32_t m_clothChestArmor; - int32_t m_leatherChestArmor; - int32_t m_mailChestArmor; - int32_t m_plateChestArmor; -}; - -struct ScreenEffectRec { - int32_t m_ID; - const char* m_name; - int32_t m_effect; - int32_t m_param[4]; - int32_t m_lightParamsID; - int32_t m_soundAmbienceID; - int32_t m_zoneMusicID; -}; - -struct ServerMessagesRec { - int32_t m_ID; - const char* m_text; -}; - -struct SheatheSoundLookupsRec { - int32_t m_ID; - int32_t m_classID; - int32_t m_subclassID; - int32_t m_material; - int32_t m_checkMaterial; - int32_t m_sheatheSound; - int32_t m_unsheatheSound; -}; - -struct SkillCostsDataRec { - int32_t m_ID; - int32_t m_skillCostsID; - int32_t m_cost[3]; -}; - -struct SkillLineRec { - int32_t m_ID; - int32_t m_categoryID; - int32_t m_skillCostsID; - const char* m_displayName; - const char* m_description; - int32_t m_spellIconID; - const char* m_alternateVerb; - int32_t m_canLink; -}; - -struct SkillLineAbilityRec { - int32_t m_ID; - int32_t m_skillLine; - int32_t m_spell; - int32_t m_raceMask; - int32_t m_classMask; - int32_t m_excludeRace; - int32_t m_excludeClass; - int32_t m_minSkillLineRank; - int32_t m_supercededBySpell; - int32_t m_acquireMethod; - int32_t m_trivialSkillLineRankHigh; - int32_t m_trivialSkillLineRankLow; - int32_t m_characterPoints[2]; -}; - -struct SkillLineCategoryRec { - int32_t m_ID; - const char* m_name; - int32_t m_sortIndex; -}; - -struct SkillRaceClassInfoRec { - int32_t m_ID; - int32_t m_skillID; - int32_t m_raceMask; - int32_t m_classMask; - int32_t m_flags; - int32_t m_minLevel; - int32_t m_skillTierID; - int32_t m_skillCostIndex; -}; - -struct SkillTiersRec { - int32_t m_ID; - int32_t m_cost[16]; - int32_t m_value[16]; -}; - -struct SoundAmbienceRec { - int32_t m_ID; - int32_t m_ambienceID[2]; -}; - -struct SoundEmittersRec { - int32_t m_ID; - float m_position[3]; - float m_direction[3]; - int32_t m_soundEntryAdvancedID; - int32_t m_mapID; - const char* m_name; -}; - -struct SoundEntriesRec { - int32_t m_ID; - int32_t m_soundType; - const char* m_name; - const char* m_file[10]; - int32_t m_freq[10]; - const char* m_directoryBase; - float m_volumeFloat; - int32_t m_flags; - float m_minDistance; - float m_distanceCutoff; - int32_t m_eaxdef; - int32_t m_soundEntriesAdvancedID; -}; - -struct SoundEntriesAdvancedRec { - int32_t m_ID; - int32_t m_soundEntryID; - float m_innerRadius2d; - int32_t m_timeA; - int32_t m_timeB; - int32_t m_timeC; - int32_t m_timeD; - int32_t m_randomOffsetRange; - int32_t m_usage; - int32_t m_timeIntervalMin; - int32_t m_timeIntervalMax; - int32_t m_volumeSliderCategory; - float m_duckToSfx; - float m_duckToMusic; - float m_duckToAmbience; - float m_innerRadiusOfInfluence; - float m_outerRadiusOfInfluence; - int32_t m_timeToDuck; - int32_t m_timeToUnduck; - float m_insideAngle; - float m_outsideAngle; - float m_outsideVolume; - float m_outerRadius2d; - const char* m_name; -}; - -struct SoundFilterRec { - int32_t m_ID; - const char* m_name; -}; - -struct SoundFilterElemRec { - int32_t m_ID; - int32_t m_soundFilterID; - int32_t m_orderIndex; - int32_t m_filterType; - float m_params[9]; -}; - -struct SoundProviderPreferencesRec { - int32_t m_ID; - const char* m_description; - int32_t m_flags; - int32_t m_eaxenvironmentSelection; - float m_eaxdecayTime; - float m_eax2EnvironmentSize; - float m_eax2EnvironmentDiffusion; - int32_t m_eax2Room; - int32_t m_eax2RoomHf; - float m_eax2DecayHfratio; - int32_t m_eax2Reflections; - float m_eax2ReflectionsDelay; - int32_t m_eax2Reverb; - float m_eax2ReverbDelay; - float m_eax2RoomRolloff; - float m_eax2AirAbsorption; - int32_t m_eax3RoomLf; - float m_eax3DecayLfratio; - float m_eax3EchoTime; - float m_eax3EchoDepth; - float m_eax3ModulationTime; - float m_eax3ModulationDepth; - float m_eax3Hfreference; - float m_eax3Lfreference; -}; - -struct SoundSamplePreferencesRec { - int32_t m_ID; - int32_t m_field_0_6_0_3592_001; // unconfirmed - int32_t m_field_0_6_0_3592_002; // unconfirmed - int32_t m_eax2SampleRoom; - int32_t m_field_0_6_0_3592_004; // unconfirmed - int32_t m_field_0_6_0_3592_005; // unconfirmed - float m_field_0_6_0_3592_006; // unconfirmed - int32_t m_field_0_6_0_3592_007; // unconfirmed - float m_eax2SampleOcclusionLfratio; - float m_eax2SampleOcclusionRoomRatio; - int32_t m_field_0_6_0_3592_010; // unconfirmed - float m_eax1EffectLevel; - int32_t m_field_0_6_0_3592_012; // unconfirmed - float m_field_0_6_0_3592_013; // unconfirmed - float m_eax3SampleExclusion; - float m_field_0_6_0_3592_015; // unconfirmed - int32_t m_field_0_6_0_3592_016; // unconfirmed -}; - -struct SoundWaterTypeRec { - int32_t m_ID; - int32_t m_soundType; - int32_t m_soundSubtype; - int32_t m_soundID; -}; - -struct SpamMessagesRec { - int32_t m_ID; - const char* m_text; -}; - -struct SpellRec { - int32_t m_ID; - int32_t m_category; - int32_t m_dispelType; - int32_t m_mechanic; - int32_t m_attributes; - int32_t m_attributesEx; - int32_t m_attributesExB; - int32_t m_attributesExC; - int32_t m_attributesExD; - int32_t m_attributesExE; - int32_t m_attributesExF; - int32_t m_attributesExG; - int32_t m_shapeshiftMask[2]; - int32_t m_shapeshiftExclude[2]; - int32_t m_targets; - int32_t m_targetCreatureType; - int32_t m_requiresSpellFocus; - int32_t m_facingCasterFlags; - int32_t m_casterAuraState; - int32_t m_targetAuraState; - int32_t m_excludeCasterAuraState; - int32_t m_excludeTargetAuraState; - int32_t m_casterAuraSpell; - int32_t m_targetAuraSpell; - int32_t m_excludeCasterAuraSpell; - int32_t m_excludeTargetAuraSpell; - int32_t m_castingTimeIndex; - int32_t m_recoveryTime; - int32_t m_categoryRecoveryTime; - int32_t m_interruptFlags; - int32_t m_auraInterruptFlags; - int32_t m_channelInterruptFlags; - int32_t m_procTypeMask; - int32_t m_procChance; - int32_t m_procCharges; - int32_t m_maxLevel; - int32_t m_baseLevel; - int32_t m_spellLevel; - int32_t m_durationIndex; - int32_t m_powerType; - int32_t m_manaCost; - int32_t m_manaCostPerLevel; - int32_t m_manaPerSecond; - int32_t m_manaPerSecondPerLevel; - int32_t m_rangeIndex; - float m_speed; - int32_t m_modalNextSpell; - int32_t m_cumulativeAura; - int32_t m_totem[2]; - int32_t m_reagent[8]; - int32_t m_reagentCount[8]; - int32_t m_equippedItemClass; - int32_t m_equippedItemSubclass; - int32_t m_equippedItemInvTypes; - int32_t m_effect[3]; - int32_t m_effectDieSides[3]; - float m_effectRealPointsPerLevel[3]; - int32_t m_effectBasePoints[3]; - int32_t m_effectMechanic[3]; - int32_t m_implicitTargetA[3]; - int32_t m_implicitTargetB[3]; - int32_t m_effectRadiusIndex[3]; - int32_t m_effectAura[3]; - int32_t m_effectAuraPeriod[3]; - float m_effectAmplitude[3]; - int32_t m_effectChainTargets[3]; - int32_t m_effectItemType[3]; - int32_t m_effectMiscValue[3]; - int32_t m_effectMiscValueB[3]; - int32_t m_effectTriggerSpell[3]; - float m_effectPointsPerCombo[3]; - int32_t m_effectSpellClassMaskA[3]; - int32_t m_effectSpellClassMaskB[3]; - int32_t m_effectSpellClassMaskC[3]; - int32_t m_spellVisualID[2]; - int32_t m_spellIconID; - int32_t m_activeIconID; - int32_t m_spellPriority; - const char* m_name; - const char* m_nameSubtext; - const char* m_description; - const char* m_auraDescription; - int32_t m_manaCostPct; - int32_t m_startRecoveryCategory; - int32_t m_startRecoveryTime; - int32_t m_maxTargetLevel; - int32_t m_spellClassSet; - int32_t m_spellClassMask[3]; - int32_t m_maxTargets; - int32_t m_defenseType; - int32_t m_preventionType; - int32_t m_stanceBarOrder; - float m_effectChainAmplitude[3]; - int32_t m_minFactionID; - int32_t m_minReputation; - int32_t m_requiredAuraVision; - int32_t m_requiredTotemCategoryID[2]; - int32_t m_requiredAreasID; - int32_t m_schoolMask; - int32_t m_runeCostID; - int32_t m_spellMissileID; - int32_t m_powerDisplayID; - float m_effectBonusCoefficient[3]; - int32_t m_descriptionVariablesID; - int32_t m_difficulty; -}; - -struct SpellAuraOptionsRec { - int32_t m_ID; - int32_t m_cumulativeAura; - int32_t m_procChance; - int32_t m_procCharges; - int32_t m_procTypeMask; -}; - -struct SpellAuraRestrictionsRec { - int32_t m_ID; - int32_t m_casterAuraState; - int32_t m_targetAuraState; - int32_t m_excludeCasterAuraState; - int32_t m_excludeTargetAuraState; - int32_t m_casterAuraSpell; - int32_t m_targetAuraSpell; - int32_t m_excludeCasterAuraSpell; - int32_t m_excludeTargetAuraSpell; -}; - -struct SpellCastTimesRec { - int32_t m_ID; - int32_t m_base; - int32_t m_perLevel; - int32_t m_minimum; -}; - -struct SpellCastingRequirementsRec { - int32_t m_ID; - int32_t m_facingCasterFlags; - int32_t m_minFactionID; - int32_t m_minReputation; - int32_t m_requiredAreasID; - int32_t m_requiredAuraVision; - int32_t m_requiresSpellFocus; -}; - -struct SpellCategoriesRec { - int32_t m_ID; - int32_t m_category; - int32_t m_defenseType; - int32_t m_dispelType; - int32_t m_mechanic; - int32_t m_preventionType; - int32_t m_startRecoveryCategory; -}; - -struct SpellCategoryRec { - int32_t m_ID; - int32_t m_flags; -}; - -struct SpellChainEffectsRec { - int32_t m_ID; - float m_avgSegLen; - float m_width; - float m_noiseScale; - float m_texCoordScale; - int32_t m_segDuration; - int32_t m_segDelay; - const char* m_texture; - int32_t m_flags; - int32_t m_jointCount; - float m_jointOffsetRadius; - int32_t m_jointsPerMinorJoint; - int32_t m_minorJointsPerMajorJoint; - float m_minorJointScale; - float m_majorJointScale; - float m_jointMoveSpeed; - float m_jointSmoothness; - float m_minDurationBetweenJointJumps; - float m_maxDurationBetweenJointJumps; - float m_waveHeight; - float m_waveFreq; - float m_waveSpeed; - float m_minWaveAngle; - float m_maxWaveAngle; - float m_minWaveSpin; - float m_maxWaveSpin; - float m_arcHeight; - float m_minArcAngle; - float m_maxArcAngle; - float m_minArcSpin; - float m_maxArcSpin; - float m_delayBetweenEffects; - float m_minFlickerOnDuration; - float m_maxFlickerOnDuration; - float m_minFlickerOffDuration; - float m_maxFlickerOffDuration; - float m_pulseSpeed; - float m_pulseOnLength; - float m_pulseFadeLength; - int8_t m_alpha; - int8_t m_red; - int8_t m_green; - int8_t m_blue; - int8_t m_blendMode; - const char* m_combo; - int32_t m_renderLayer; - float m_textureLength; - float m_wavePhase; -}; - -struct SpellClassOptionsRec { - int32_t m_ID; - int32_t m_modalNextSpell; - int32_t m_spellClassMask[3]; - int32_t m_spellClassSet; -}; - -struct SpellCooldownsRec { - int32_t m_ID; - int32_t m_categoryRecoveryTime; - int32_t m_recoveryTime; - int32_t m_startRecoveryTime; -}; - -struct SpellDescriptionVariablesRec { - int32_t m_ID; - const char* m_variables; -}; - -struct SpellDifficultyRec { - int32_t m_ID; - int32_t m_difficultySpellID[4]; -}; - -struct SpellDispelTypeRec { - int32_t m_ID; - const char* m_name; - int32_t m_mask; - int32_t m_immunityPossible; - const char* m_internalName; -}; - -struct SpellDurationRec { - int32_t m_ID; - int32_t m_duration; - int32_t m_durationPerLevel; - int32_t m_maxDuration; -}; - -struct SpellEffectRec { - int32_t m_ID; - int32_t m_effect; - float m_effectAmplitude; - int32_t m_effectAura; - int32_t m_effectAuraPeriod; - int32_t m_effectBasePoints; - float m_effectBonusCoefficient; - float m_effectChainAmplitude; - int32_t m_effectChainTargets; - int32_t m_effectDieSides; - int32_t m_effectItemType; - int32_t m_effectMechanic; - int32_t m_effectMiscValue[2]; - float m_effectPointsPerResource; - int32_t m_effectRadiusIndex[2]; - float m_effectRealPointsPerLevel; - int32_t m_effectSpellClassMask[3]; - int32_t m_effectTriggerSpell; - int32_t m_implicitTarget[2]; - int32_t m_spellID; - int32_t m_effectIndex; -}; - -struct SpellEffectCameraShakesRec { - int32_t m_ID; - int32_t m_cameraShake[3]; -}; - -struct SpellEquippedItemsRec { - int32_t m_ID; - int32_t m_equippedItemClass; - int32_t m_equippedItemInvTypes; - int32_t m_equippedItemSubclass; -}; - -struct SpellFocusObjectRec { - int32_t m_ID; - const char* m_name; -}; - -struct SpellIconRec { - int32_t m_ID; - const char* m_textureFilename; -}; - -struct SpellInterruptsRec { - int32_t m_ID; - int32_t m_auraInterruptFlags[2]; - int32_t m_channelInterruptFlags[2]; - int32_t m_interruptFlags; -}; - -struct SpellItemEnchantmentRec { - int32_t m_ID; - int32_t m_charges; - int32_t m_effect[3]; - int32_t m_effectPointsMin[3]; - int32_t m_effectPointsMax[3]; - int32_t m_effectArg[3]; - const char* m_name; - int32_t m_itemVisual; - int32_t m_flags; - int32_t m_srcItemID; - int32_t m_conditionID; - int32_t m_requiredSkillID; - int32_t m_requiredSkillRank; - int32_t m_minLevel; -}; - -struct SpellItemEnchantmentConditionRec { - int32_t m_ID; - int8_t m_ltOperandType[5]; - int32_t m_ltOperand[5]; - int8_t m_operator[5]; - int8_t m_rtOperandType[5]; - int32_t m_rtOperand[5]; - int8_t m_logic[5]; -}; - -struct SpellLevelsRec { - int32_t m_ID; - int32_t m_baseLevel; - int32_t m_maxLevel; - int32_t m_spellLevel; -}; - -struct SpellMechanicRec { - int32_t m_ID; - const char* m_stateName; -}; - -struct SpellMissileRec { - int32_t m_ID; - int32_t m_flags; - float m_defaultPitchMin; - float m_defaultPitchMax; - float m_defaultSpeedMin; - float m_defaultSpeedMax; - float m_randomizeFacingMin; - float m_randomizeFacingMax; - float m_randomizePitchMin; - float m_randomizePitchMax; - float m_randomizeSpeedMin; - float m_randomizeSpeedMax; - float m_gravity; - float m_maxDuration; - float m_collisionRadius; -}; - -struct SpellMissileMotionRec { - int32_t m_ID; - const char* m_name; - const char* m_scriptBody; - int32_t m_flags; - int32_t m_missileCount; -}; - -struct SpellPowerRec { - int32_t m_ID; - int32_t m_manaCost; - int32_t m_manaCostPerLevel; - int32_t m_powerCost; // unconfirmed - int32_t m_manaPerSecond; - int32_t m_powerDisplayID; -}; - -struct SpellRadiusRec { - int32_t m_ID; - float m_radius; - float m_radiusPerLevel; - float m_radiusMax; -}; - -struct SpellRangeRec { - int32_t m_ID; - float m_rangeMin[2]; - float m_rangeMax[2]; - int32_t m_flags; - const char* m_displayName; - const char* m_displayNameShort; -}; - -struct SpellReagentsRec { - int32_t m_ID; - int32_t m_reagent[8]; - int32_t m_reagentCount[8]; -}; - -struct SpellRuneCostRec { - int32_t m_ID; - int32_t m_blood; - int32_t m_unholy; - int32_t m_frost; - int32_t m_runicPower; -}; - -struct SpellScalingRec { - int32_t m_ID; - int32_t m_castTimeMin; - int32_t m_castTimeMax; - int32_t m_castTimeMaxLevel; - int32_t m_class; - float m_coefficient[3]; - float m_variance[3]; - float m_comboPointsCoefficient[3]; - float m_nerfFactor; - int32_t m_nerfMaxLevel; -}; - -struct SpellShapeshiftRec { - int32_t m_ID; - int32_t m_shapeshiftExclude[2]; - int32_t m_shapeshiftMask[2]; - int32_t m_stanceBarOrder; -}; - -struct SpellShapeshiftFormRec { - int32_t m_ID; - int32_t m_bonusActionBar; - const char* m_name; - int32_t m_flags; - int32_t m_creatureType; - int32_t m_attackIconID; - int32_t m_combatRoundTime; - int32_t m_creatureDisplayID[4]; - int32_t m_presetSpellID[8]; -}; - -struct SpellTargetRestrictionsRec { - int32_t m_ID; - int32_t m_maxTargets; - int32_t m_maxTargetLevel; - int32_t m_targetCreatureType; - int32_t m_targets; -}; - -struct SpellTotemsRec { - int32_t m_ID; - int32_t m_requiredTotemCategoryID[2]; - int32_t m_totem[2]; -}; - -struct SpellVisualRec { - int32_t m_ID; - int32_t m_precastKit; - int32_t m_castKit; - int32_t m_impactKit; - int32_t m_stateKit; - int32_t m_stateDoneKit; - int32_t m_channelKit; - int32_t m_hasMissile; - int32_t m_missileModel; - int32_t m_missilePathType; - int32_t m_missileDestinationAttachment; - int32_t m_missileSound; - int32_t m_animEventSoundID; - int32_t m_flags; - int32_t m_casterImpactKit; - int32_t m_targetImpactKit; - int32_t m_missileAttachment; - int32_t m_missileFollowGroundHeight; - int32_t m_missileFollowGroundDropSpeed; - int32_t m_missileFollowGroundApproach; - int32_t m_missileFollowGroundFlags; - int32_t m_missileMotion; - int32_t m_missileTargetingKit; - int32_t m_instantAreaKit; - int32_t m_impactAreaKit; - int32_t m_persistentAreaKit; - float m_missileCastOffset[3]; - float m_missileImpactOffset[3]; -}; - -struct SpellVisualEffectNameRec { - int32_t m_ID; - const char* m_name; - const char* m_fileName; - float m_areaEffectSize; - float m_scale; - float m_minAllowedScale; - float m_maxAllowedScale; -}; - -struct SpellVisualKitRec { - int32_t m_ID; - int32_t m_startAnimID; - int32_t m_animID; - int32_t m_headEffect; - int32_t m_chestEffect; - int32_t m_baseEffect; - int32_t m_leftHandEffect; - int32_t m_rightHandEffect; - int32_t m_breathEffect; - int32_t m_leftWeaponEffect; - int32_t m_rightWeaponEffect; - int32_t m_specialEffect[3]; - int32_t m_worldEffect; - int32_t m_soundID; - int32_t m_shakeID; - int32_t m_charProc[4]; - float m_charParamZero[4]; - float m_charParamOne[4]; - float m_charParamTwo[4]; - float m_charParamThree[4]; - int32_t m_flags; -}; - -struct SpellVisualKitAreaModelRec { - int32_t m_ID; - const char* m_name; - int32_t m_enumID; -}; - -struct SpellVisualKitModelAttachRec { - int32_t m_ID; - int32_t m_parentSpellVisualKitID; - int32_t m_spellVisualEffectNameID; - int32_t m_attachmentID; - float m_offset[3]; - float m_yaw; - float m_pitch; - float m_roll; -}; - -struct SpellVisualPrecastTransitionsRec { - int32_t m_ID; - const char* m_precastLoadAnimName; - const char* m_precastHoldAnimName; -}; - -struct StableSlotPricesRec { - int32_t m_ID; - int32_t m_cost; -}; - -struct Startup_StringsRec { - int32_t m_ID; - const char* m_name; - const char* m_message; -}; - -struct StationeryRec { - int32_t m_ID; - int32_t m_itemID; - const char* m_texture; - int32_t m_flags; -}; - -struct StringLookupsRec { - int32_t m_ID; - const char* m_string; -}; - -struct SummonPropertiesRec { - int32_t m_ID; - int32_t m_control; - int32_t m_faction; - int32_t m_title; - int32_t m_slot; - int32_t m_flags; -}; - -struct TalentRec { - int32_t m_ID; - int32_t m_tabID; - int32_t m_tierID; - int32_t m_columnIndex; - int32_t m_spellRank[9]; - int32_t m_prereqTalent[3]; - int32_t m_prereqRank[3]; - int32_t m_flags; - int32_t m_requiredSpellID; - int32_t m_categoryMask[2]; -}; - -struct TalentTabRec { - int32_t m_ID; - const char* m_name; - int32_t m_spellIconID; - int32_t m_raceMask; - int32_t m_classMask; - int32_t m_categoryEnumID; // unconfirmed - int32_t m_orderIndex; - const char* m_backgroundFile; -}; - -struct TaxiNodesRec { - int32_t m_ID; - int32_t m_continentID; - float m_pos[3]; - const char* m_name; - int32_t m_mountCreatureID[2]; -}; - -struct TaxiPathRec { - int32_t m_ID; - int32_t m_fromTaxiNode; - int32_t m_toTaxiNode; - int32_t m_cost; -}; - -struct TaxiPathNodeRec { - int32_t m_ID; - int32_t m_pathID; - int32_t m_nodeIndex; - int32_t m_continentID; - float m_loc[3]; - int32_t m_flags; - int32_t m_delay; - int32_t m_arrivalEventID; - int32_t m_departureEventID; -}; - -struct TeamContributionPointsRec { - int32_t m_ID; - float m_data; -}; - -struct TerrainMaterialRec { - int32_t m_ID; - const char* m_name; - int32_t m_shader; - const char* m_envMapPath; -}; - -struct TerrainTypeRec { - int32_t m_terrainID; - const char* m_terrainDesc; - int32_t m_footstepSprayRun; - int32_t m_footstepSprayWalk; - int32_t m_soundID; - int32_t m_flags; - int32_t m_generatedID; -}; - -struct TerrainTypeSoundsRec { - int32_t m_ID; -}; - -struct TotemCategoryRec { - int32_t m_ID; - const char* m_name; - int32_t m_totemCategoryType; - int32_t m_totemCategoryMask; -}; - -struct TransportAnimationRec { - int32_t m_ID; - int32_t m_transportID; - int32_t m_timeIndex; - float m_pos[3]; - int32_t m_sequenceID; -}; - -struct TransportPhysicsRec { - int32_t m_ID; - float m_waveAmp; - float m_waveTimeScale; - float m_rollAmp; - float m_rollTimeScale; - float m_pitchAmp; - float m_pitchTimeScale; - float m_maxBank; - float m_maxBankTurnSpeed; - float m_speedDampThresh; - float m_speedDamp; -}; - -struct TransportRotationRec { - int32_t m_ID; - int32_t m_gameObjectsID; - int32_t m_timeIndex; - float m_rot[4]; -}; - -struct UISoundLookupsRec { - int32_t m_ID; - int32_t m_soundID; - const char* m_soundName; -}; - -struct UnitBloodRec { - int32_t m_ID; - int32_t m_combatBloodSpurtFront[2]; - int32_t m_combatBloodSpurtBack[2]; - const char* m_groundBlood[5]; -}; - -struct UnitBloodLevelsRec { - int32_t m_ID; - int32_t m_violencelevel[3]; -}; - -struct VehicleRec { - int32_t m_ID; - int32_t m_flags; - float m_turnSpeed; - float m_pitchSpeed; - float m_pitchMin; - float m_pitchMax; - int32_t m_seatID[8]; - float m_mouseLookOffsetPitch; - float m_cameraFadeDistScalarMin; - float m_cameraFadeDistScalarMax; - float m_cameraPitchOffset; - float m_facingLimitRight; - float m_facingLimitLeft; - float m_msslTrgtTurnLingering; - float m_msslTrgtPitchLingering; - float m_msslTrgtMouseLingering; - float m_msslTrgtEndOpacity; - float m_msslTrgtArcSpeed; - float m_msslTrgtArcRepeat; - float m_msslTrgtArcWidth; - float m_msslTrgtImpactRadius[2]; - const char* m_msslTrgtArcTexture; - const char* m_msslTrgtImpactTexture; - const char* m_msslTrgtImpactModel[2]; - float m_cameraYawOffset; - int32_t m_uiLocomotionType; - float m_msslTrgtImpactTexRadius; - int32_t m_vehicleUiindicatorID; - int32_t m_powerDisplayID[3]; -}; - -struct VehicleSeatRec { - int32_t m_ID; - float m_field_3_3_5_12213_001; // unconfirmed - int32_t m_attachmentID; - float m_attachmentOffset[3]; - float m_field_3_3_5_12213_004; // unconfirmed - float m_enterSpeed; - float m_enterGravity; - float m_enterMinDuration; - float m_enterMaxDuration; - float m_enterMinArcHeight; - float m_enterMaxArcHeight; - int32_t m_enterAnimStart; - int32_t m_enterAnimLoop; - int32_t m_rideAnimStart; - int32_t m_rideAnimLoop; - int32_t m_rideUpperAnimStart; - int32_t m_rideUpperAnimLoop; - float m_field_3_3_5_12213_017; // unconfirmed - float m_exitSpeed; - float m_exitGravity; - float m_exitMinDuration; - float m_exitMaxDuration; - float m_exitMinArcHeight; - float m_exitMaxArcHeight; - int32_t m_exitAnimStart; - int32_t m_exitAnimLoop; - int32_t m_exitAnimEnd; - float m_field_3_3_5_12213_027; // unconfirmed - float m_passengerPitch; - float m_field_3_3_5_12213_029; // unconfirmed - int32_t m_passengerAttachmentID; - int32_t m_vehicleEnterAnim; - int32_t m_vehicleExitAnim; - int32_t m_vehicleRideAnimLoop; - int32_t m_field_3_3_5_12213_034; // unconfirmed - int32_t m_vehicleExitAnimBone; - int32_t m_vehicleEnterAnimBone; - float m_field_3_3_5_12213_037; // unconfirmed - float m_field_3_3_5_12213_038; // unconfirmed - int32_t m_vehicleAbilityDisplay; - int32_t m_enterUisoundID; - int32_t m_field_3_3_5_12213_041; // unconfirmed - int32_t m_uiSkin; - float m_field_3_3_5_12213_043; // unconfirmed - float m_field_3_3_5_12213_044; // unconfirmed - float m_field_3_3_5_12213_045; // unconfirmed - int32_t m_field_3_3_5_12213_046; // unconfirmed - float m_field_3_3_5_12213_047; // unconfirmed - float m_field_3_3_5_12213_048; // unconfirmed - float m_field_3_3_5_12213_049; // unconfirmed - float m_field_3_3_5_12213_050; // unconfirmed - float m_field_3_3_5_12213_051; // unconfirmed - float m_field_3_3_5_12213_052; // unconfirmed - float m_field_3_3_5_12213_053; // unconfirmed - float m_field_3_3_5_12213_054; // unconfirmed - float m_field_3_3_5_12213_055; // unconfirmed -}; - -struct VehicleUIIndSeatRec { - int32_t m_ID; - int32_t m_vehicleUiindicatorID; - int32_t m_virtualSeatIndex; - float m_xpos; - float m_ypos; -}; - -struct VehicleUIIndicatorRec { - int32_t m_ID; - const char* m_backgroundTexture; -}; - -struct VideoHardwareRec { - int32_t m_ID; - int32_t m_vendorID; - int32_t m_deviceID; - int32_t m_farclipIdx; - int32_t m_terrainLoddistIdx; - int32_t m_terrainShadowLod; - int32_t m_detailDoodadDensityIdx; - int32_t m_detailDoodadAlpha; - int32_t m_animatingDoodadIdx; - int32_t m_trilinear; - int32_t m_numLights; - int32_t m_specularity; - int32_t m_waterLodidx; - int32_t m_particleDensityIdx; - int32_t m_unitDrawDistIdx; - int32_t m_smallCullDistIdx; - int32_t m_resolutionIdx; - int32_t m_baseMipLevel; - const char* m_oglOverrides; - const char* m_d3DOverrides; - int32_t m_fixLag; - int32_t m_multisample; - int32_t m_atlasdisable; -}; - -struct VocalUISoundsRec { - int32_t m_ID; - int32_t m_vocalUienum; - int32_t m_raceID; - int32_t m_normalSoundID[2]; - int32_t m_pissedSoundID[2]; -}; - -struct WMOAreaTableRec { - int32_t m_ID; - int32_t m_wmoid; - int32_t m_nameSetID; - int32_t m_wmogroupID; - int32_t m_soundProviderPref; - int32_t m_soundProviderPrefUnderwater; - int32_t m_ambienceID; - int32_t m_zoneMusic; - int32_t m_introSound; - int32_t m_flags; - int32_t m_areaTableID; - const char* m_areaName; -}; - -struct WeaponImpactSoundsRec { - int32_t m_ID; - int32_t m_weaponSubClassID; - int32_t m_parrySoundType; - int32_t m_impactSoundID[10]; - int32_t m_critImpactSoundID[10]; -}; - -struct WeaponSwingSounds2Rec { - int32_t m_ID; - int32_t m_swingType; - int32_t m_crit; - int32_t m_soundID; -}; - -struct WeatherRec { - int32_t m_ID; - int32_t m_ambienceID; - int32_t m_effectType; - float m_transitionSkyBox; - float m_effectColor[3]; - const char* m_effectTexture; -}; - -struct WorldChunkSoundsRec { - int32_t m_ID; - int32_t m_chunkX; - int32_t m_chunkY; - int32_t m_subchunkX; - int32_t m_subchunkY; - int32_t m_zoneIntroMusicID; - int32_t m_zoneMusicID; - int32_t m_soundAmbienceID; - int32_t m_soundProviderPreferencesID; -}; - -struct WorldMapAreaRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_areaID; - const char* m_areaName; - float m_locLeft; - float m_locRight; - float m_locTop; - float m_locBottom; - int32_t m_displayMapID; - int32_t m_defaultDungeonFloor; - int32_t m_parentWorldMapID; -}; - -struct WorldMapContinentRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_leftBoundary; - int32_t m_rightBoundary; - int32_t m_topBoundary; - int32_t m_bottomBoundary; - float m_continentOffset[2]; - float m_scale; - float m_taxiMin[2]; - float m_taxiMax[2]; - int32_t m_worldMapID; -}; - -struct WorldMapOverlayRec { - int32_t m_ID; - int32_t m_mapAreaID; - int32_t m_areaID[4]; - int32_t m_mapPointX; - int32_t m_mapPointY; - const char* m_textureName; - int32_t m_textureWidth; - int32_t m_textureHeight; - int32_t m_offsetX; - int32_t m_offsetY; - int32_t m_hitRectTop; - int32_t m_hitRectLeft; - int32_t m_hitRectBottom; - int32_t m_hitRectRight; -}; - -struct WorldMapTransformsRec { - int32_t m_ID; - int32_t m_mapID; - float m_regionMin[2]; - float m_regionMax[2]; - int32_t m_newMapID; - float m_regionOffset[2]; - int32_t m_newDungeonMapID; -}; - -struct WorldSafeLocsRec { - int32_t m_ID; - int32_t m_continent; - float m_loc[3]; - const char* m_areaName; -}; - -struct WorldStateUIRec { - int32_t m_ID; - int32_t m_mapID; - int32_t m_areaID; - int32_t m_phaseShift; - const char* m_icon; - const char* m_string; - const char* m_tooltip; - int32_t m_stateVariable; - int32_t m_type; - const char* m_dynamicIcon; - const char* m_dynamicTooltip; - const char* m_extendedUi; - int32_t m_extendedUistateVariable[3]; -}; - -struct WorldStateZoneSoundsRec { - int32_t m_worldStateID; - int32_t m_worldStateValue; - int32_t m_areaID; - int32_t m_wmoareaID; - int32_t m_zoneIntroMusicID; - int32_t m_zoneMusicID; - int32_t m_soundAmbienceID; - int32_t m_soundProviderPreferencesID; - int32_t m_generatedID; -}; - -struct WowError_StringsRec { - int32_t m_ID; - const char* m_name; // unconfirmed - const char* m_description; -}; - -struct ZoneIntroMusicTableRec { - int32_t m_ID; - const char* m_name; - int32_t m_soundID; - int32_t m_priority; - int32_t m_minDelayMinutes; -}; - -struct ZoneLightRec { - int32_t m_ID; - const char* m_name; - int32_t m_mapID; - int32_t m_lightID; -}; - -struct ZoneLightPointRec { - int32_t m_ID; - int32_t m_zoneLightID; - float m_pos[2]; - int32_t m_pointOrder; -}; - -struct ZoneMusicRec { - int32_t m_ID; - const char* m_setName; - int32_t m_silenceIntervalMin[2]; - int32_t m_silenceIntervalMax[2]; - int32_t m_sounds[2]; -}; - -struct gtBarberShopCostBaseRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtChanceToMeleeCritRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtChanceToMeleeCritBaseRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtChanceToSpellCritRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtChanceToSpellCritBaseRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtCombatRatingsRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtNPCManaCostScalerRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtOCTClassCombatRatingScalarRec { - int32_t m_ID; - float m_data; -}; - -struct gtOCTRegenHPRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtOCTRegenMPRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtRegenHPPerSptRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtRegenMPPerSptRec { - float m_data; - int32_t m_generatedID; -}; - -struct gtSpellScalingRec { - int32_t m_ID; - float m_data; -}; - - DB_CLIENT_DB(AchievementRec); DB_CLIENT_DB(Achievement_CategoryRec); DB_CLIENT_DB(Achievement_CriteriaRec); diff --git a/profile/3.3.5a-windows-386/include/gx/font.h b/profile/3.3.5a-windows-386/include/gx/font.h index e4c0088..41314a3 100644 --- a/profile/3.3.5a-windows-386/include/gx/font.h +++ b/profile/3.3.5a-windows-386/include/gx/font.h @@ -20,7 +20,6 @@ DECLARE_STRUCT(TEXTURECACHE); DECLARE_STRUCT(TEXTURECACHEROW); STORM_TS_LIST(CGxFont); -STORM_TS_LIST(CHARCODEDESC); STORM_TS_HASH(CHARCODEDESC, HASHKEY_NONE); diff --git a/profile/3.3.5a-windows-386/include/gx/format.h b/profile/3.3.5a-windows-386/include/gx/format.h index 4b81eca..ffae7b4 100644 --- a/profile/3.3.5a-windows-386/include/gx/format.h +++ b/profile/3.3.5a-windows-386/include/gx/format.h @@ -23,21 +23,23 @@ enum CGxFormat__Format { struct CGxFormat { uint32_t unk0; bool hwTnL; - // TODO: verify this name - bool hwCursor; // 0x5 + bool hwCursor; // 0x5, UC int8_t fixLag; int8_t window; - uint32_t unk8; + bool aspect; // UC int32_t maximize; CGxFormat__Format depthFormat; C2iVector size; - uint32_t unk1C; + // set by CVGxTripleBufferCallback + uint32_t backbuffers; // buffering? buffer? framebufferCount? uint32_t sampleCount; - float float24; // multisampleQuality? write at 00769693 + float multisampleQuality; // UC, write at 00769693 CGxFormat__Format colorFormat; uint32_t refreshRate; uint32_t vsync; - uint32_t unk34; + bool stereoEnabled; // UC, 34 + // something to do with fixed function? + // write at 0076AD4C uint32_t unk38; uint32_t unk3C; uint32_t unk40; diff --git a/profile/3.3.5a-windows-386/include/main.h b/profile/3.3.5a-windows-386/include/main.h index 9614919..ede534b 100644 --- a/profile/3.3.5a-windows-386/include/main.h +++ b/profile/3.3.5a-windows-386/include/main.h @@ -15,8 +15,12 @@ #include "bc/file/filesystem.h" #include "bc/file/stream.h" +#include "bc/file/processdir.h" +#include "bc/lock/do_once.h" +#include "bc/string/quicknativepath.h" #include "bc/systemfile/stacked.h" #include "bc/osfile.h" +#include "bc/time/timestamp.h" #include "camera/camera.h" @@ -125,6 +129,7 @@ #include "storm/array/uint8_t.h" #include "storm/array/uint32_t.h" #include "storm/array/float.h" +#include "storm/array/c2ivector.h" #include "storm/queue/timer_priority_uint32_t.h" diff --git a/profile/3.3.5a-windows-386/include/storm/array/c2ivector.h b/profile/3.3.5a-windows-386/include/storm/array/c2ivector.h new file mode 100644 index 0000000..85af6b7 --- /dev/null +++ b/profile/3.3.5a-windows-386/include/storm/array/c2ivector.h @@ -0,0 +1,10 @@ +#ifndef STORM_ARRAY_C_2I_VECTOR_H +#define STORM_ARRAY_C_2I_VECTOR_H + +#include "tempest/vector.h" + +#include "storm/array.h" + +STORM_TS_GROWABLE_ARRAY(C2iVector); + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/system/detect.h b/profile/3.3.5a-windows-386/include/system/detect.h index 6d164d3..e054f6b 100644 --- a/profile/3.3.5a-windows-386/include/system/detect.h +++ b/profile/3.3.5a-windows-386/include/system/detect.h @@ -1,7 +1,7 @@ #ifndef SYSTEM_DETECT_H #define SYSTEM_DETECT_H -#if !defined(IDA) && !defined(GHIDRA) && !defined(BINANA_GENERATOR) +#if !defined(__GNUC__) && !defined(IDA) && !defined(GHIDRA) && !defined(BINANA_GENERATOR) #error "Preprocessor mode not detected! You must define either IDA or GHIDRA or BINANA_GENERATOR" #endif diff --git a/profile/3.3.5a-windows-386/include/text/font.h b/profile/3.3.5a-windows-386/include/text/font.h index bed1f9b..eaa0c2e 100644 --- a/profile/3.3.5a-windows-386/include/text/font.h +++ b/profile/3.3.5a-windows-386/include/text/font.h @@ -5,6 +5,5 @@ DECLARE_HANDLE(HTEXTBLOCK); DECLARE_HANDLE(HTEXTFONT); -DECLARE_HANDLE(HFACE); #endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/bc/func.sym b/profile/3.3.5a-windows-386/symbol/bc/func.sym index 0cb98f9..e9960bf 100644 --- a/profile/3.3.5a-windows-386/symbol/bc/func.sym +++ b/profile/3.3.5a-windows-386/symbol/bc/func.sym @@ -1,14 +1,69 @@ +Blizzard__Memory__Allocate 00401010 f end=00401067 type="void* __stdcall func(uint32_t count)" +Blizzard__Memory__Free 00401030 f end=0040104B type="void __stdcall func(void* ptr)" ; void operator delete(void*) +Blizzard__File__Close 004270F0 f end=0042712f +Blizzard__File__Delete 00427130 f end=0042716F ; Blizzard::File::Delete(char const*) +Blizzard__File__GetFileInfo 004271D0 f end=00427242 type="bool __stdcall func(char* name, Blizzard__File__Info* info)" +Blizzard__File__GetFileInfo 00427250 f end=004272B8 type="Blizzard__File__Info* __stdcall func(Blizzard__File__StreamRecord* file)" +Blizzard__File__GetFileInfo 004272C0 f end=00427325 type="bool __stdcall func(Blizzard__File__StreamRecord* file, Blizzard__File__FileInfo* info)" +Blizzard__File__GetPos 004273A0 f end=00427406 +Blizzard__File__GetRootChars 00427410 f end=00427466 +Blizzard__File__GetWorkingDirectory 00427470 f end=004274B5 +Blizzard__File__IsAbsolutePath 004274C0 f end=004274FF +Blizzard__File__MakeAbsolutePath 00427500 f end=00427551 ; Blizzard::File::MakeAbsolutePath(char const*, char*, int, bool) +Blizzard__File__Move 00427560 f end=004275A8 ; Blizzard::File::Move(char const*, char const*) +Blizzard__File__Copy 004275B0 f end=004275FE Blizzard__File__Open 00427600 f end=0042765E Blizzard__File__Read 004276C0 f end=0042771F Blizzard__File__Write 004279B0 f end=00427A12 -Blizzard__File__Close 004270F0 f end=0042712f -Blizzard__File__Delete 00427130 f end=0042716F ; Blizzard::File::Delete(char const*) -Blizzard__File__MakeAbsolutePath 00427500 f end=00427551 ; Blizzard::File::MakeAbsolutePath(char const*, char*, int, bool) -Blizzard__File__Move 00427560 f end=004275A8 ; Blizzard::File::Move(char const*, char const*) +System_File__FromNativeAttributes 00427C70 f end=00427CBC +System_File__ReadP 00427CC0 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__WriteP 00427D10 f end=00427D5C type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +Blizzard__String__FindFilename 00428500 f end=00428538 type="char* __stdcall func(char* str)" +Blizzard__String__Copy 00428670 f end=004286BB type="int32_t __stdcall func(char* dst, const char* src, int32_t count)" +Blizzard__Unicode__ConvertUTF16to8 00428940 f end=00428AFC type="int32_t __stdcall func(uint8_t* dst, uint32_t dstmaxchars, const uint16_t* src, uint32_t srcmaxchars, uint32_t* dstchars, uint32_t* srcchars)" +Blizzard__Unicode__ConvertUTF8to16 00428B00 f end=00428C94 type="int32_t __stdcall func(uint16_t* dst, uint32_t dstmaxchars, const uint8_t* src, uint32_t srcmaxchars, uint32_t* dstchars, uint32_t* srcchars)" +Blizzard__Time__FromFileTime 00428F00 f end=00428F56 type="Blizzard__Time__Timestamp __stdcall func(uint64_t fileTime)" +Blizzard__File__CreateDirectory 0042CEA0 f end=0042CEE9 +HoistAll 0042CFB0 f end=0042D43E System_File__Stacked__file_init 0042D440 f end=0042D4F4 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Close 0042D620 f end=0042D64F type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +Blizzard__String__Format 0042E670 f end=0042E6A1 +System_File__GetRootChars 004325C0 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__FromNativeName 00433590 f end=00433650 type="void __stdcall func(uint8_t *buffer, uint32_t buffersize, const char *str)" +Blizzard__String__QuickNativePath_300__QuickNativePath 00433650 f end=0043375A +System_File__GetFileInfoByFile 00435580 f end=004356A2 type="void __stdcall func(Blizzard__File__StreamRecord* file)" +System_File__Exists 004356B0 f end=00435781 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__MakeAbsolutePath 00435790 f end=00435889 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Move 00435890 f end=004359B6 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Delete 004359C0 f end=00435A57 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__read_overlapped 00454870 f end=00454904 +System_File__write_overlapped 00454910 f end=004549A9 +System_File__SetWorkingDirectory 00454A50 f end=00454AB5 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Create 00454AC0 f end=00454AD3 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetWorkingDirectory 00454AE0 f end=00454B44 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__ProcessDirFast 00454B50 f end=00454CAA type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Flush 00454CB0 f end=00454CE2 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetFileInfo 00454CF0 f end=00454E6A type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetFreeSpace 00454E70 f end=00454FCE type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetPos 00454FD0 f end=0045504C type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__IsAbsolutePath 00455050 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__IsReadOnly 004550C0 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__CreateDirectory 00455130 f end=004554B1 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Copy 004554C0 f end=00455727 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Open 00455730 f end=004558E3 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Read 004558F0 f end=0045590E type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__RemoveDirectory 00455910 f end=00455A2E type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetCacheMode 00455A30 f end=00455B07 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetEOF 00455B10 f end=00455B94 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetAttributes 00455BA0 f end=00455C9A type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetPos 00455CA0 f end=00455D13 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Write 00455D20 f end=00455D3E type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__read_locked 00457820 f end=00457904 +System_File__write_locked 00457910 f end=004579f4 +System_File__detect_io_mode 00459910 f end=00459998 OsCloseFile 00461B00 f end=00461B09 OsReadFile 00461B50 f end=00461B88 OsGetFileSize 00461BD0 f end=00461BF4 +OsCreateDirectory 00461D10 f end=00461D3F OsSetCurrentDirectory 00461DB0 f end=00461DD7 OsCreateFile 00461FA0 f end=00461FFA -OsCreateDirectory 00461D10 f end=00461D3F \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/bc/label.sym b/profile/3.3.5a-windows-386/symbol/bc/label.sym index 7926e40..fb636ec 100644 --- a/profile/3.3.5a-windows-386/symbol/bc/label.sym +++ b/profile/3.3.5a-windows-386/symbol/bc/label.sym @@ -1 +1,9 @@ System_File__Stacked__s_manager 00AB90AC l type="Blizzard__File__Filesystem*" +System_File__read_func 00AB912C l ; type="int32_t (*)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__write_func 00AB91B4 l ; type="int32_t (*)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Stacked__s_nullstack 00AB91C0 l type="Blizzard__File__Filesystem" +System_File__Stacked__s_basestack 00AB92C0 l type="Blizzard__File__Filesystem" +System_File__s_read_init 00B38A5C l type="Blizzard__Lock__DoOnceData" +System_File__s_write_init 00B38A64 l type="Blizzard__Lock__DoOnceData" +firstByteMark 009E537C l type="uint32_t[7]" +bytesFromUTF8 009E5398 l type="uint8_t[256]" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/client/func.sym b/profile/3.3.5a-windows-386/symbol/client/func.sym index 2d19edc..7908d27 100644 --- a/profile/3.3.5a-windows-386/symbol/client/func.sym +++ b/profile/3.3.5a-windows-386/symbol/client/func.sym @@ -1,5 +1,3 @@ -operator_new 00401010 f end=00401067 type="void* __stdcall func(uint32_t count)" -operator_delete_array 00401030 f end=0040104B type="void __stdcall func(void* ptr)" ; void operator delete(void*) SetPaths 00402B20 f end=00402B8B CommonMain 00406C70 f end=00406D64 InitializeGlobal 004067F0 f end=00406B67 diff --git a/profile/3.3.5a-windows-386/symbol/console/func.sym b/profile/3.3.5a-windows-386/symbol/console/func.sym index 55ad12a..6b87528 100644 --- a/profile/3.3.5a-windows-386/symbol/console/func.sym +++ b/profile/3.3.5a-windows-386/symbol/console/func.sym @@ -65,8 +65,10 @@ ValidateFormatMonitor 00769E10 f end=00769FF0 CCGxRestart 00769FF0 f end=0076A12E RegisterGxCVars 0076A630 f end=0076AAA8 ConsoleDeviceInitialize 0076AB80 f end=0076B287 type="int32_t __stdcall func(char* title, int32_t multithreaded)" +SetDefaults 0076B3F0 f type="void __stdcall func(DefaultSettings* defaults, Hardware* hardware)" ; void SetDefaults(DefaultSettings&, const Hardware&) ConsoleDetectSetDefaultsFormat 0076B520 f end=0076B53D type="void __stdcall func(DefaultSettings* defaults, Hardware* hardware)" ; ConsoleDetectSetDefaultsFormat(DefaultSettings&, const Hardware&) ConsoleDetectSaveHardware 0076B620 f end=0076B7DB ConsoleDetectDetectHardware 0076BA30 f end=0076BBE9 type="void __stdcall func(Hardware* hardware, bool* hwChanged)" ; ConsoleDetectDetectHardware(Hardware&, bool&) ConsoleCommandHistoryDepth 0095BFB0 f end=0095BFB6 type="int32_t __stdcall func()" -SetDefaults 0076B3F0 f type="void __stdcall func(DefaultSettings* defaults, Hardware* hardware)" ; void SetDefaults(DefaultSettings&, const Hardware&) \ No newline at end of file +ConsoleGxOverride 007696D0 f end=00769804 type="void __stdcall func(char* list)" +AddResolution 0054EFE0 f end=0054F046 type="void __fastcall func(TSGrowableArray_C2iVector* this, C2iVector* resolution)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/console/label.sym b/profile/3.3.5a-windows-386/symbol/console/label.sym index 14a364c..17a4299 100644 --- a/profile/3.3.5a-windows-386/symbol/console/label.sym +++ b/profile/3.3.5a-windows-386/symbol/console/label.sym @@ -1,3 +1,5 @@ +formatToInt 00AD87C4 l type="char*[8]" +g_gxApiNames 00AD87E4 l type="char*[6]" s_rect 00ADBAB4 l type="RECTF" ; RECTF s_consoleHotKey 00ADBAC4 l type="KEY" ; KEY s_historyIndex 00ADBAC8 l type="int32_t" ; int32 @@ -48,8 +50,10 @@ g_commandHistory 00CA3A28 l type="char[32][1024]" g_commandHistoryIndex 00CABA28 l type="uint32_t" g_defaultCommand 00CABA2C l type="COMMANDHANDLER" ; command function pointer g_consoleCommandHash 00CABA30 l type="TSHashTable_CONSOLECOMMAND_HASHKEY_STRI" ; TSHashTable +s_consoleGxOverrideSet 00CABAC8 l type="int32_t[9]" s_defaults 00CABAF0 l type="DefaultSettings" s_hardware 00CABB38 l type="Hardware" +s_consoleGxOverrideVal 00CABB7C l type="uint32_t[9]" s_hardwareDetected 00CABCBC l type="bool" s_hwChanged 00CABCBD l type="bool" s_hwDetect 00CABCBE l type="bool" @@ -60,5 +64,4 @@ s_desktopFormat 00CABD40 l type="CGxFormat" s_fallbackFormat 00CABDA8 l type="CGxFormat" s_lastGoodFormat 00CABE00 l type="CGxFormat" s_formats 00CABE98 l type="CGxFormat[5]" -formatToInt 00AD87C4 l type="char*[8]" -g_gxApiNames 00AD87E4 l type="char*[6]" \ No newline at end of file +g_videoHardwareDB 00ADBF88 l type="WowClientDB_VideoHardwareRec" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/cvar/func.sym b/profile/3.3.5a-windows-386/symbol/cvar/func.sym index 440550b..5bb23a3 100644 --- a/profile/3.3.5a-windows-386/symbol/cvar/func.sym +++ b/profile/3.3.5a-windows-386/symbol/cvar/func.sym @@ -17,4 +17,3 @@ CVGxWindowResizeLockCallback 00769890 f end=007698A9 type="bool __stdcall func(C CVGxStereoEnabledCallback 00769C00 f end=00769C2B type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" CVGxResolutionCallback 0076A220 f end=0076A57F type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" CVGxRefreshCallback 0076A580 f end=0076A62D type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" -CVGxVideoOptionsVersionCallback 008A1420 f end=008A1423 type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/gx/func.sym b/profile/3.3.5a-windows-386/symbol/gx/func.sym index a543b90..2b65981 100644 --- a/profile/3.3.5a-windows-386/symbol/gx/func.sym +++ b/profile/3.3.5a-windows-386/symbol/gx/func.sym @@ -24,4 +24,8 @@ GxQueryCreate 00681630 f end=0068165B type="void __stdcall func(CGxQuery** query GxLogOpen 006817C0 f end=006817C5 type="void __stdcall func()" GxAdapterMonitorModes 00681210 f end=00681219 type="int32_t __stdcall func(TSGrowableArray_CGxMonitorMode* modes)" GxAdapterDesktopMode 00681220 f type="int32_t __stdcall func(CGxMonitorMode* mode)" -GxDefaultApi 008C8DE0 f type="EGxApi __stdcall func()" \ No newline at end of file +GxDefaultApi 008C8DE0 f type="EGxApi __stdcall func()" +GxApiSupported 006811D0 f end=006811F0 type="int32_t __stdcall func(EGxApi api)" ; 00005410 +GxSetMaxFPS 00681770 f end=0068177D type="void __stdcall func(uint32_t maxFPS)" +GxSetMaxFPSBk 00681790 f end=0068179D type="void __stdcall func(uint32_t maxFPSBk)" +CGxMonitorModeSort 00689E80 f type="int32_t __stdcall func(void* a, void* b)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/gx/label.sym b/profile/3.3.5a-windows-386/symbol/gx/label.sym new file mode 100644 index 0000000..cd8e9ef --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/gx/label.sym @@ -0,0 +1,2 @@ +s_maxFPS 00C5DF7C l type="uint32_t" +s_maxFPSBk 00C5DF74 l type="uint32_t" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym b/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym index f0e36be..63d0487 100644 --- a/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym +++ b/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym @@ -30,6 +30,7 @@ CGxDevice__ICursorUpdate 00683610 f end=00683632 type="void __stdcall func(EGxTe CGxDevice__CursorSetVisible 00683640 f end=00683650 type="void __thiscall func(CGxDevice* this, int32_t visible)" CGxDevice__CursorLock 00683650 f end=00683657 type="uint32_t* __thiscall func(CGxDevice* this)" CGxDevice__CursorSetDepth 00683660 f end=00683670 type="void __thiscall func(CGxDevice* this, float depth)" +CGxDevice__LogOpen 00683670 f end=006836A4 type="void __stdcall func()" ; static void CGxDevice::LogOpen(void) CGxDevice__DeviceSetFormat 006840F0 f end=0068416C type="int32_t __thiscall func(CGxDevice* this, CGxFormat* format)" CGxDevice__DeviceSetGamma 00684170 f end=00684189 type="void __thiscall func(CGxDevice* this, float gamma)" CGxDevice__DeviceSetGamma 00684190 f end=006841AF type="int32_t __thiscall func(CGxDevice* this, CGxGammaRamp* ramp)" @@ -83,8 +84,9 @@ CGxDevice__XformSetView 00689050 f end=006890C0 type="void __thiscall func(CGxDe CGxDevice__destructor 006890C0 f end=00689460 type="void __thiscall func(CGxDevice* this)" CGxDevice__scalar_deleting_destructor 00689690 f end=006896BB type="void __thiscall func(CGxDevice* this, uint8_t __flags)" CGxDevice__ShaderCreate 006897C0 f end=00689A49 type="void __thiscall func(CGxDevice* this, CGxShader**, EGxShTarget, char*, char*, int32_t)" +CGxDevice__FindDisplayDevice 00689EA0 f end=00689EF0 type="int32_t __stdcall func(PDISPLAY_DEVICEA device, uint32_t flag)" ; UC CGxDevice__NewD3d 00689EF0 f end=00689F14 type="CGxDevice* __stdcall func()" +CGxDevice__AdapterMonitorModes 0068A4C0 f end=0068A589 type="void __stdcall func(TSGrowableArray_CGxMonitorMode* modes)" CGxDevice__NewOpenGl 0068BF20 f end=0068BF44 type="CGxDevice* __stdcall func()" CGxDevice__NewD3d9Ex 0068C220 f end=0068C244 type="CGxDevice* __stdcall func()" CGxDevice__ITexWHDStartEnd 006A5EF0 f end=006A5FDF type="void __thiscall func(CGxDevice* this, CGxTex* texId, uint32_t* width, uint32_t* height, uint32_t* baseMip, uint32_t* mipCount)" -CGxDevice__LogOpen 00683670 f end=006836A4 type="void __stdcall func()" ; static void CGxDevice::LogOpen(void) \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/main.sym b/profile/3.3.5a-windows-386/symbol/main.sym index c1acae7..8ebc725 100644 --- a/profile/3.3.5a-windows-386/symbol/main.sym +++ b/profile/3.3.5a-windows-386/symbol/main.sym @@ -1,5 +1,5 @@ -operator_new 00401010 f end=00401067 type="void* __stdcall func(uint32_t count)" -operator_delete_array 00401030 f end=0040104B type="void __stdcall func(void* ptr)" ; void operator delete(void*) +Blizzard__Memory__Allocate 00401010 f end=00401067 type="void* __stdcall func(uint32_t count)" +Blizzard__Memory__Free 00401030 f end=0040104B type="void __stdcall func(void* ptr)" ; void operator delete(void*) CDataStore__FetchWrite 00401070 f ; protected: int __thiscall CDataStore::FetchWrite(unsigned int,unsigned int,char const *,int) CDataStore__IsRead 004010D0 f ; CDataStore::IsRead() const CDataStore__Reset 004010E0 f ; CDataStore::Reset() @@ -38,12 +38,65 @@ SFile__Load 00424E80 f end=00424F46 SFile__Open 00424F80 f end=00424F98 Blizzard__File__Close 004270F0 f end=0042712f Blizzard__File__Delete 00427130 f end=0042716F ; Blizzard::File::Delete(char const*) +Blizzard__File__GetFileInfo 004271D0 f end=00427242 type="bool __stdcall func(char* name, Blizzard__File__Info* info)" +Blizzard__File__GetFileInfo 00427250 f end=004272B8 type="Blizzard__File__Info* __stdcall func(Blizzard__File__StreamRecord* file)" +Blizzard__File__GetFileInfo 004272C0 f end=00427325 type="bool __stdcall func(Blizzard__File__StreamRecord* file, Blizzard__File__FileInfo* info)" +Blizzard__File__GetPos 004273A0 f end=00427406 +Blizzard__File__GetRootChars 00427410 f end=00427466 +Blizzard__File__GetWorkingDirectory 00427470 f end=004274B5 +Blizzard__File__IsAbsolutePath 004274C0 f end=004274FF Blizzard__File__MakeAbsolutePath 00427500 f end=00427551 ; Blizzard::File::MakeAbsolutePath(char const*, char*, int, bool) Blizzard__File__Move 00427560 f end=004275A8 ; Blizzard::File::Move(char const*, char const*) +Blizzard__File__Copy 004275B0 f end=004275FE Blizzard__File__Open 00427600 f end=0042765E Blizzard__File__Read 004276C0 f end=0042771F Blizzard__File__Write 004279B0 f end=00427A12 +System_File__FromNativeAttributes 00427C70 f end=00427CBC +System_File__ReadP 00427CC0 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__WriteP 00427D10 f end=00427D5C type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +Blizzard__String__FindFilename 00428500 f end=00428538 type="char* __stdcall func(char* str)" +Blizzard__String__Copy 00428670 f end=004286BB type="int32_t __stdcall func(char* dst, const char* src, int32_t count)" +Blizzard__Unicode__ConvertUTF16to8 00428940 f end=00428AFC type="int32_t __stdcall func(uint8_t* dst, uint32_t dstmaxchars, const uint16_t* src, uint32_t srcmaxchars, uint32_t* dstchars, uint32_t* srcchars)" +Blizzard__Unicode__ConvertUTF8to16 00428B00 f end=00428C94 type="int32_t __stdcall func(uint16_t* dst, uint32_t dstmaxchars, const uint8_t* src, uint32_t srcmaxchars, uint32_t* dstchars, uint32_t* srcchars)" +Blizzard__Time__FromFileTime 00428F00 f end=00428F56 type="Blizzard__Time__Timestamp __stdcall func(uint64_t fileTime)" +Blizzard__File__CreateDirectory 0042CEA0 f end=0042CEE9 +HoistAll 0042CFB0 f end=0042D43E System_File__Stacked__file_init 0042D440 f end=0042D4F4 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Close 0042D620 f end=0042D64F type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +Blizzard__String__Format 0042E670 f end=0042E6A1 +System_File__GetRootChars 004325C0 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__FromNativeName 00433590 f end=00433650 type="void __stdcall func(uint8_t *buffer, uint32_t buffersize, const char *str)" +Blizzard__String__QuickNativePath_300__QuickNativePath 00433650 f end=0043375A +System_File__GetFileInfoByFile 00435580 f end=004356A2 type="void __stdcall func(Blizzard__File__StreamRecord* file)" +System_File__Exists 004356B0 f end=00435781 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__MakeAbsolutePath 00435790 f end=00435889 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Move 00435890 f end=004359B6 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Delete 004359C0 f end=00435A57 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__read_overlapped 00454870 f end=00454904 +System_File__write_overlapped 00454910 f end=004549A9 +System_File__SetWorkingDirectory 00454A50 f end=00454AB5 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Create 00454AC0 f end=00454AD3 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetWorkingDirectory 00454AE0 f end=00454B44 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__ProcessDirFast 00454B50 f end=00454CAA type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Flush 00454CB0 f end=00454CE2 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetFileInfo 00454CF0 f end=00454E6A type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetFreeSpace 00454E70 f end=00454FCE type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__GetPos 00454FD0 f end=0045504C type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__IsAbsolutePath 00455050 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__IsReadOnly 004550C0 f type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__CreateDirectory 00455130 f end=004554B1 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Copy 004554C0 f end=00455727 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Open 00455730 f end=004558E3 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Read 004558F0 f end=0045590E type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__RemoveDirectory 00455910 f end=00455A2E type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetCacheMode 00455A30 f end=00455B07 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetEOF 00455B10 f end=00455B94 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetAttributes 00455BA0 f end=00455C9A type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__SetPos 00455CA0 f end=00455D13 type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Write 00455D20 f end=00455D3E type="int32_t __stdcall func(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__read_locked 00457820 f end=00457904 +System_File__write_locked 00457910 f end=004579f4 +System_File__detect_io_mode 00459910 f end=00459998 OsCloseFile 00461B00 f end=00461B09 OsReadFile 00461B50 f end=00461B88 OsGetFileSize 00461BD0 f end=00461BF4 @@ -858,6 +911,7 @@ Script_IsPlayerResolutionAvailable 0054EBC0 f end=0054EBFB Script_SetupFullscreenScale 0054ED80 f end=0054EE58 Script_GetVideoCaps 0054EE60 f end=0054EF87 Script_IsStereoVideoAvailable 0054EF90 f end=0054EFD5 +AddResolution 0054EFE0 f end=0054F046 type="void __fastcall func(TSGrowableArray_C2iVector* this, C2iVector* resolution)" Script_GetScreenResolutions 0054F430 f end=0054F49D Script_GetCurrentResolution 0054F4A0 f end=0054F561 Script_SetScreenResolution 0054F570 f end=0054F684 @@ -2135,12 +2189,15 @@ WowClientDB_Cfg_CategoriesRec__LoadRecords 00659910 f end=00659A03 ; WowClientDB WowClientDB_CharBaseInfoRec__LoadRecords 00659B80 f end=00659C82 ; WowClientDB::LoadRecords(SFile*, char const*, int) WowClientDB__GetRecord 0065C290 f end=0065C2B4 ; 00005410 WowClientDB_AchievementRec__GetRecordByIndex 0065F520 f end=0065F55B ; WowClientDB::GetRecordByIndex(int, void*) +GxApiSupported 006811D0 f end=006811F0 type="int32_t __stdcall func(EGxApi api)" ; 00005410 GxAdapterMonitorModes 00681210 f end=00681219 type="int32_t __stdcall func(TSGrowableArray_CGxMonitorMode* modes)" GxAdapterDesktopMode 00681220 f type="int32_t __stdcall func(CGxMonitorMode* mode)" GxDevCreate 00681290 f end=00681301 GxSceneClear 006813B0 f end=006813CD GxTexUpdate 006813D0 f end=006813EC GxQueryCreate 00681630 f end=0068165B type="void __stdcall func(CGxQuery** query, EGxQueryType type)" +GxSetMaxFPS 00681770 f end=0068177D type="void __stdcall func(uint32_t maxFPS)" +GxSetMaxFPSBk 00681790 f end=0068179D type="void __stdcall func(uint32_t maxFPSBk)" GxLogOpen 006817C0 f end=006817C5 type="void __stdcall func()" GxLog 006817E0 f end=006817F5 type="int __stdcall func(char* format, ...)" GxDrawLockedElements 00681A60 f end=00681AAB type="void __stdcall func()" @@ -2239,7 +2296,12 @@ CGxDevice__destructor 006890C0 f end=00689460 type="void __thiscall func(CGxDevi CGxDevice__scalar_deleting_destructor 00689690 f end=006896BB type="void __thiscall func(CGxDevice* this, uint8_t __flags)" CGxDevice__ShaderCreate 006897C0 f end=00689A49 type="void __thiscall func(CGxDevice* this, CGxShader**, EGxShTarget, char*, char*, int32_t)" CGxShader__Valid 00689A50 f end=00689A6F +CGxMonitorModeSort 00689E80 f type="int32_t __stdcall func(void* a, void* b)" +CGxDevice__FindDisplayDevice 00689EA0 f end=00689EF0 type="int32_t __stdcall func(PDISPLAY_DEVICEA device, uint32_t flag)" ; UC CGxDevice__NewD3d 00689EF0 f end=00689F14 type="CGxDevice* __stdcall func()" +TSGrowableArray_CGxMonitorMode__New 0068A090 f end=0068A0ED type="CGxMonitorMode* __thiscall func(TSGrowableArray_CGxMonitorMode* this)" +TSGrowableArray_CGxMonitorMode__SetCount 0068A0F0 f end=0068A165 type="void __thiscall func(TSGrowableArray_CGxMonitorMode* this, uint32_t count)" +CGxDevice__AdapterMonitorModes 0068A4C0 f end=0068A589 type="void __stdcall func(TSGrowableArray_CGxMonitorMode* modes)" CGxDeviceOpenGl__CGxDeviceOpenGl 0068BBC0 f end=0068BD15 type="void __thiscall func(CGxDeviceOpenGl* this)" CGxDevice__NewOpenGl 0068BF20 f end=0068BF44 type="CGxDevice* __stdcall func()" CGxDevice__NewD3d9Ex 0068C220 f end=0068C244 type="CGxDevice* __stdcall func()" @@ -2516,6 +2578,7 @@ CVGxCursorCallback 007695E0 f end=0076960A type="bool __stdcall func(CVar* h, ch CVGxMultisampleCallback 00769610 f end=0076964A type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" CVGxMultisampleQualityCallback 00769650 f end=00769693 type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" CVGxFixLagCallback 007696A0 f end=007696CA type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" +ConsoleGxOverride 007696D0 f end=00769804 type="void __stdcall func(char* list)" CVGxOverrideCallback 00769810 f end=00769823 type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" CVGxMaxFPSCallback 00769830 f end=00769856 type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" CVGxMaxFPSBkCallback 00769860 f end=00769886 type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" @@ -2582,7 +2645,9 @@ CSRWLock__Leave 00774660 f end=00774675 SSyncObject__Wait 00774690 f end=007746A4 SEvent__Set 00774720 f end=0077472A SEvent__Reset 00774730 f end=0077473A +SLogClose 007754A0 f end=007754F2 SLogCreate 007757E0 f end=007758D6 type="int32_t __stdcall func(char* filename, uint32_t flags, HSLOG* log)" +SLogWrite 00775BB0 f end=00775BC6 SRgnCombineRectf 00777420 f end=00777588 type="void __stdcall func(HSRGN handle, RECTF* rect, void* param, int32_t combinemode)" SRgnGetBoundingRectf 00777590 f end=00777897 type="void __stdcall func(HSRGN handle, RECTF* rect)" SRgnDelete 00777940 f end=00777971 type="void __stdcall func(HSRGN handle)" @@ -2690,6 +2755,7 @@ _luaD_precall 00856370 f luaD_call 00856760 f _luaV_execute 00857CA0 f RestoreMouse 008695B0 f end=008695FB +OsInputSetWindowResizeLock 00869620 f end=0086962D OsInputInitialize 00869720 f end=00869757 OsInputDestroy 00869760 f end=008697D3 OsInputSetEventPollProc 00869D90 f end=00869D9D @@ -2702,11 +2768,14 @@ OsGetDefaultWindowRect 0086A1A0 f end=0086A20C OsGetAsyncTimeMs 0086AE20 f end=0086AE2B OsSystemEnableCpuLog 0086B0C0 f end=0086B0CB OsGetProcessorCount 0086B240 f end=0086B27D +OsIsRemoteSession 0086B780 f end=0086B78C +OsGetAsyncClocksPerSecond 0086BBA0 f end=0086BBD0 type="uint64_t __stdcall func()" OsGetExeName 0086BBD0 f end=0086BC2F OsPathGetRootChars 0086BC30 f end=0086BC9E OsPathStripFilename 0086BE50 f end=0086BE9B OsGetExePath 0086BEA0 f end=0086BEBE OsGuiGetWindow 0086C6A0 f end=0086C6CE +OsGuiMessageBox 0086C6E0 f end=0086C7D0 OsIMEInitialize 0086D0A0 f end=0086D0B8 OsIMEDestroy 0086D0C0 f end=0086D0Df TSExplicitList_CGxBuf__LinkToTail 0086E200 f end=0086E25F type="void __thiscall func(TSExplicitList_CGxBuf* this, CGxBuf* ptr)" @@ -2715,10 +2784,10 @@ OsCallInitialize 0086F760 f end=0086F875 OsCallInitializeContext 0086F880 f end=0086F902 OsClipboardGetString 00872280 f end=00872297 OsClipboardPutString 008722A0 f end=008722BF -InternalClipboardGetString 008726F0 f end=008727BB -InternalClipboardPutString 008727E0 f end=008728B8 +IOsClipboardGetString 008726F0 f end=008727BB +IOsClipboardPutString 008727E0 f end=008728B8 CShaderEffect__UpdateProjMatrix 00872C10 f end=00872CD5 -CVGxVideoOptionsVersionCallback 008A1420 f end=008A1423 type="bool __stdcall func(CVar* h, char* oldValue, char* newValue, void* arg)" +return_one_byte_sub 008A1420 f end=008A1423 ; known names: System_File::Shutdown, CVGxVideoOptionsVersionCallback GxDefaultApi 008C8DE0 f type="EGxApi __stdcall func()" return_zero4_sub 008E5250 f end=008E5253 ; Script_ToggleTris ConsoleCommandHistoryDepth 0095BFB0 f end=0095BFB6 type="int32_t __stdcall func()" @@ -2940,6 +3009,8 @@ nullsub_147 009DE1A0 f nullsub_148 009DE1B0 f nullsub_149 009DE1C0 f nullsub_150 009DE1D0 f +firstByteMark 009E537C l type="uint32_t[7]" +bytesFromUTF8 009E5398 l type="uint8_t[256]" firstByteMark 009e9ec8 l type="uint32_t[7]" s_pixelFormatToMipBitsCache 009F1074 l CGxDevice__vtable 00A2DDC0 l type="CGxDevice__vtable" @@ -2947,6 +3018,10 @@ CGxDeviceOpenGl__vtable 00A2E198 l CGxDeviceD3d__vtable 00a2e718 l CGxDeviceD3d9Ex__vtable 00a2f500 l System_File__Stacked__s_manager 00AB90AC l type="Blizzard__File__Filesystem*" +System_File__read_func 00AB912C l ; type="int32_t (*)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__write_func 00AB91B4 l ; type="int32_t (*)(Blizzard__File__Filesystem* fs, System_File__Stacked__FileParms* parms)" +System_File__Stacked__s_nullstack 00AB91C0 l type="Blizzard__File__Filesystem" +System_File__Stacked__s_basestack 00AB92C0 l type="Blizzard__File__Filesystem" s_zorderlist 00AC1B9C f type="TSExplicitList_CILayer" s_cursorNames 00AD2808 l type="char*[53]" g_achievementDB 00AD305C l type="WowClientDB_AchievementRec" ; 0xEB @@ -3200,11 +3275,14 @@ s_unitDrawDist 00ADBEA0 l type="float[4][2]" s_smallCull 00ADBEC0 l type="float[4][2]" s_distCull 00ADBEE0 l type="float[4][2]" s_farClip 00ADBF00 l type="float[5][2]" +g_videoHardwareDB 00ADBF88 l type="WowClientDB_VideoHardwareRec" g_lightSkyboxDB 00AF4998 l type="WowClientDB_LightSkyboxRec" ; 0x15F g_lightIntBandDB 00AF49BC l type="WowClientDB_LightIntBandRec" ; 0x15D g_lightFloatBandDB 00AF49E0 l type="WowClientDB_LightFloatBandRec" ; 0x15C g_lightParamsDB 00AF4A04 l type="WowClientDB_LightParamsRec" ; 0x15E g_lightDB 00AF4A28 l type="WowClientDB_LightRec" ; 0x15B +System_File__s_read_init 00B38A5C l type="Blizzard__Lock__DoOnceData" +System_File__s_write_init 00B38A64 l type="Blizzard__Lock__DoOnceData" s_mainThread 00b417c8 l type="uint32_t" s_interactiveCount 00B417D0 l type="int32_t" s_messageRecycler 00B41850 l type="CDataRecycler" @@ -3219,6 +3297,8 @@ s_cursorItem 00C25DE8 l type="uint32_t[1024]" s_cursorMode 00C26DE8 l type="CURSORMODE" s_cursorImages 00C26DF0 l type="uint32_t[53][1024]" _CURRENT_LANGUAGE 00C5DE9C l type="int32_t" +s_maxFPSBk 00C5DF74 l type="uint32_t" +s_maxFPS 00C5DF7C l type="uint32_t" g_theGxDevicePtr 00C5DF88 l type="CGxDevice*" CGxDevice__s_uiVertexShader 00C5DFDC l CGxDevice__s_shadowConstants 00C5DFE0 l @@ -3271,6 +3351,7 @@ s_cvHwDetect 00CABAB8 l type="CVar*" s_cvGxOverride 00CABABC l type="CVar*" s_cvGxFixLag 00CABAC0 l type="CVar*" s_cvMaxFPS 00CABAC4 l type="CVar*" +s_consoleGxOverrideSet 00CABAC8 l type="int32_t[9]" s_cvGxVSync 00CABAEC l type="CVar*" s_defaults 00CABAF0 l type="DefaultSettings" s_cvVideoOptionsVersion 00CABB30 l type="CVar*" @@ -3279,6 +3360,7 @@ s_cvMaxFPSBk 00CABB6C l type="CVar*" s_cvGxTripleBuffer 00CABB70 l type="CVar*" s_cvGxDepthBits 00CABB74 l type="CVar*" s_cvGxColorBits 00CABB78 l type="CVar*" +s_consoleGxOverrideVal 00CABB7C l type="uint32_t[9]" s_cvGxApi 00CABBA0 l type="CVar*" s_cvGxAspect 00CABBA4 l type="CVar*" s_cvFixedFunction 00CABBA8 l type="CVar*" @@ -3295,4 +3377,6 @@ s_desktopFormat 00CABD40 l type="CGxFormat" s_fallbackFormat 00CABDA8 l type="CGxFormat" s_lastGoodFormat 00CABE00 l type="CGxFormat" s_formats 00CABE98 l type="CGxFormat[5]" +s_WindowResizeLock 00D41580 l type="int32_t" +s_cpuTicksPerSecond 00D415C8 l type="uint64_t" CShaderEffect__s_enableShaders 00D43020 l type="int32_t" diff --git a/profile/3.3.5a-windows-386/symbol/nullsub/func.sym b/profile/3.3.5a-windows-386/symbol/nullsub/func.sym index 59c8da5..6188cb2 100644 --- a/profile/3.3.5a-windows-386/symbol/nullsub/func.sym +++ b/profile/3.3.5a-windows-386/symbol/nullsub/func.sym @@ -155,4 +155,5 @@ nullsub_148 009DE1B0 f nullsub_149 009DE1C0 f nullsub_150 009DE1D0 f return_zero4_sub 008E5250 f end=008E5253 ; Script_ToggleTris -purecall 0040BAA5 f end=0040BACF \ No newline at end of file +purecall 0040BAA5 f end=0040BACF +return_one_byte_sub 008A1420 f end=008A1423 ; known names: System_File::Shutdown, CVGxVideoOptionsVersionCallback \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/os/func.sym b/profile/3.3.5a-windows-386/symbol/os/func.sym index 221fcf1..333050f 100644 --- a/profile/3.3.5a-windows-386/symbol/os/func.sym +++ b/profile/3.3.5a-windows-386/symbol/os/func.sym @@ -5,23 +5,27 @@ OsInputGetMousePosition 0086A0D0 f end=0086A130 OsInputSetMousePosition 0086A130 f end=0086A194 OsInputSetMouseMode 0086A020 f end=0086A063 OsInputSetEventPollProc 00869D90 f end=00869D9D +OsInputSetWindowResizeLock 00869620 f end=0086962D CenterMouse 00869DB0 f end=00869DF6 RestoreMouse 008695B0 f end=008695FB OsGetAsyncTimeMs 0086AE20 f end=0086AE2B OsSystemEnableCpuLog 0086B0C0 f end=0086B0CB OsGetProcessorCount 0086B240 f end=0086B27D +OsGetAsyncClocksPerSecond 0086BBA0 f end=0086BBD0 type="uint64_t __stdcall func()" OsGetExeName 0086BBD0 f end=0086BC2F OsPathGetRootChars 0086BC30 f end=0086BC9E OsPathStripFilename 0086BE50 f end=0086BE9B OsGetExePath 0086BEA0 f end=0086BEBE OsGuiGetWindow 0086C6A0 f end=0086C6CE +OsGuiMessageBox 0086C6E0 f end=0086C7D0 OsGetDefaultWindowRect 0086A1A0 f end=0086A20C OsIMEInitialize 0086D0A0 f end=0086D0B8 OsIMEDestroy 0086D0C0 f end=0086D0Df -InternalClipboardPutString 008727E0 f end=008728B8 -InternalClipboardGetString 008726F0 f end=008727BB +IOsClipboardPutString 008727E0 f end=008728B8 +IOsClipboardGetString 008726F0 f end=008727BB OsClipboardPutString 008722A0 f end=008722BF OsClipboardGetString 00872280 f end=00872297 OsCallSetContext 0086F5A0 f end=0086F5EA OsCallInitializeContext 0086F880 f end=0086F902 -OsCallInitialize 0086F760 f end=0086F875 \ No newline at end of file +OsCallInitialize 0086F760 f end=0086F875 +OsIsRemoteSession 0086B780 f end=0086B78C \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/os/label.sym b/profile/3.3.5a-windows-386/symbol/os/label.sym new file mode 100644 index 0000000..527aeeb --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/os/label.sym @@ -0,0 +1,2 @@ +s_WindowResizeLock 00D41580 l type="int32_t" +s_cpuTicksPerSecond 00D415C8 l type="uint64_t" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/storm/func.sym b/profile/3.3.5a-windows-386/symbol/storm/func.sym index 96b638b..98bb27d 100644 --- a/profile/3.3.5a-windows-386/symbol/storm/func.sym +++ b/profile/3.3.5a-windows-386/symbol/storm/func.sym @@ -46,6 +46,8 @@ SSyncObject__Wait 00774690 f end=007746A4 SEvent__Set 00774720 f end=0077472A SEvent__Reset 00774730 f end=0077473A SLogCreate 007757E0 f end=007758D6 type="int32_t __stdcall func(char* filename, uint32_t flags, HSLOG* log)" +SLogClose 007754A0 f end=007754F2 +SLogWrite 00775BB0 f end=00775BC6 SRgnCombineRectf 00777420 f end=00777588 type="void __stdcall func(HSRGN handle, RECTF* rect, void* param, int32_t combinemode)" SRgnGetBoundingRectf 00777590 f end=00777897 type="void __stdcall func(HSRGN handle, RECTF* rect)" SRgnDelete 00777940 f end=00777971 type="void __stdcall func(HSRGN handle)" @@ -85,3 +87,5 @@ SBigDel 0077C6A0 f end=0077C6F6 type="void __stdcall func(BigData* num)" SBigMul 0077C700 f end=0077C71F type="void __stdcall func(BigData* a, BigData* b, BigData* c)" PowMod 0077C720 f end=0077C97B type="void __stdcall func(BigBuffer* a, BigBuffer* b, BigBuffer* c, BigBuffer* d, BigStack* stack)" SBigPowMod 0077C980 f end=0077C9A4 type="void __stdcall func(BigData* a, BigData* b, BigData* c, BigData* d)" +TSGrowableArray_CGxMonitorMode__SetCount 0068A0F0 f end=0068A165 type="void __thiscall func(TSGrowableArray_CGxMonitorMode* this, uint32_t count)" +TSGrowableArray_CGxMonitorMode__New 0068A090 f end=0068A0ED type="CGxMonitorMode* __thiscall func(TSGrowableArray_CGxMonitorMode* this)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/x64dbg/game.dd32 b/profile/3.3.5a-windows-386/x64dbg/game.dd32 index 99b9f3dff574ee145835ed664465491200d28a7c..cf0aed8b1324f03277138bdabf5c2d3a993b0cbc 100644 GIT binary patch delta 47682 zcmY&>3wTu3wg1eS$t0QA2}uaa%p_+rU|pP*hZWBU;2qDO#&sYALmrzfx_v8CAXRovO+Iz3P z_F8MNwf5oLH+=7Y;`33pZI!P-{)~_JWCuy<-QjjtV)^uZSDfAx4h}_O5tWqK#ojpn zE}}vW61&8gkvNt==3*E;hXzU9Uqficr-bu|L>~lJ23Byd`^3X}dd|Z4grPT}eTx=u<suIx&CrI+hVyE6QS0Ex`;({#WHI^2*K`=~P z(H;-8FCdBezH`A;pi$O$KxUmwG4=8h45Itj zs!+*DFQVe~YgMF!PYwA6V~6}8k(f5P z+sk`Noi#=l6PR&4#}8!L2>HddW%Vvwu_CF)b~j<_V3EVr^IgH>kLwA5kpFmnuvJn` z2r#m#=euHz`H3$$0U)dseMhA;UBMmjPc9=(um$L1U$9Y9Ck^!HmM}(79%!%emQ&A{ z*>`*6V-NPt;f^usgMEYJB`u9j)w9~AL3F3FVECTy*moIpr?H?9qwMf7NsYa=G-zM+ zRwYghae80u^$*f8@rO_eBs|Mm$11m|IXnx`EHI1Lq7o71X#spA`MlvO z3ENxJB<|aa{1OBMkjK(&afc^PKiWV#RDL@IwwR_Ga`{8ncem&zFIydWx{4&aw{P zk0^hszOusmhsF%v2*U~(MqghMnt%efD+4u9OG7Y6bc!Pt&_gZ#L4W%hUs-kp3y7Wq z;Te4ti#h1JgZZ&0hxUu8Ktvx_kkNG!;tzFN8iEayKB@_=EOUvEv}%G*A>zVFu{s$b zByhx##EfL5_(c@M7>bA*#z$1rNWIHAXg!p_!AL|G-*f)(Q6 zGGMu3FtD)f;{jl~VQ^?X3fvA)i$NGD&aktpz==jHoiVr+PZ~ihR&fXWq7kQpoP_3> zf&Exv|7;beZU|(LGe#8`ib^}{01)NM5{BMc7jDI~f+30)ws_JI7g6DeG$xQSBv~gD zm!LW$hW9eGk<>qhfy8@RXqaRWb*Y#Twn_3Bj%u($If5Fzd`4 zdk^ZCfgZ1=mlcI0#^GupG$A14^xWpyz z0EftsR@CvdZxKbWlk(dx;6FJSI8^Kk`=7;pIT3~64IcnY9!OqEN|w_gra`hDKwaSCsmA5r$nz=$Ck#Uk=3FivGf4mJmVus`!t zDo&_u<>g+qS6M}uJvH`~!6AdNA}S}s7;9R|wzSNKs$h5ROV9^|Qf`2^IqTT2?V@!2RV zEe#n+V@w$)cS}QPyrIYjl$@drug`BCf2q2)*h~A9hT1tW-eRcOo?&WR25ZO&L=^&z zcB){(7*!P=j8&6Vg&Scs87gcPL)Bnz#c6l{P{L4OG7BIdHRZ42QU^ce{vb`6*vEGF z(Ws->*k+$rU((W^m=d?2?=znIw!)@L6Y?FEc_s~1rJ>R+oh8DZNy9E^uylD5ktB{W zD=!L-$1{g1=-jWD+H*?fDq`jdsvc~$bWsF9h_D24wE53y`-##>0VDryCS$)}Iz6bom@$o(3DIcE ztaE^oO9tD|mJJ=)Vk$BjfkH!^n(vK5Lj}fVEscX;#2mSVl(7lzit>5HGKr|Wi(5<; zW@#;L-(Ei8>ThpG4I@Qb5W}TpFez$}6vpWrmxWsKtV8FTvxoNxIzQB!Wm+bgBji;m zaNpRBWu^2R2G=mwePhGpQ7{Cz?e5De4VJZgNy4&T9zxevIPz~1<&RiX#1_j^C-#Xm z))HShYCTktu~Y-{EKWaEfUVKoX?OOGP5Lg2{y}WnL*FpiVM`Ac@b{aJ?sV;7Ur730 z6GFhg^hO_1fkrW8prwD%KR7;}N(uYu41T1v!FaB8(X!kAUEh(7L+)S*R2f(2R8l7u zwxg&S&7el5H`GQ7i(r^bBWvst6>;juwYF9;Fo!5sJNhzK&+;X_SuRSYD|$mxZf0N-mmO6{gTw}i|l9mb+G8#Qsj*| z_gZT!N#B;z3~3^XK0v;n9hv}$`Iet7pi~NVeSD+cR+*?`tOpl_TGJTn)&QA|_Engn zFuK+Dy2@!(<`?!KDtW3SX!ohA$+n{!&mPCx{v&*^b8o8zufaDX?-i?_fE zB(L_sAWEmGdZ#dLm@^erD!%VBf<{Si4G`k->LORTO0g28nsVFK`D#J`i-J>4+6`L1 zB!rsM=~jDh61RwPlt=qCmT?K>k;>hw1IvB<1&q%lYa zX)SUw)}LGLl4ykDp0Jyu)dRN%!m;#JEGf%z=V4H#|JEP$NvBz(PbST?>>^BY+Ss6d zeRO(pDMkDD3Fy}TFdCngehg1(c~eO(%{>+d`n0^7V&wk!I|DDJf-$+2O3GGE-*_^O zM>?utlxbz*ZM`$wd_O^V-3^Yw4_4JZ?J*cUn zdf{=xP9M*37-*3z6u2eKq)Q))J2j8>2}jbK>p{1)kv;ztO5qub{&A19 z+Gi*`Ts_l284`fM=3d~pyQ&+r4Bz!&XgI1;!3-~oDk#J7FJ4L5ix;1~tOb9yf?9_E z?}rJsc~LG+^3sGyo%tQ~1S0(8k?56|G_V*W?JEj5^3sKp7G6%19YtYWe2{d;%X2D# zCVa1hM%D@#zU;oZrwVMi8=LB;m86dTMdRXMBFs=xIV|{Az zcTdQc7{Nz+u71^C%G6QgitKGnELK+%ZW5H;u&*__6rJ8Vm~{I10@A7d5hILbR8)xw zXWt1Vz7QQb*rVi#k=!WDx~@Uy*%9dG2&GX+9fZeS!C+0_q$u6_WWIw?pd*+Oagdn|H=eX}7|@H7xyWVTR9iK> zQIx^%qVl&lo!W#Zk4+(?QI%)QF`CDxkfDnz_K23If`FV}?u<{Xh$KbLs>UeB9M3_v z1^{_-Ngk2?|7r(Sw@9h<0B}Tw+A&foC6~f~k*bf`d?I!E87j~yaVHCtk}zW+ z;M~!Ia7_AmP(~6>NGlk1#rF~Pl03i*SBHwN9;e@G!NN$to?-7u+!jMAH;!D zt^eFs`rqttR3Sx^s(kAg_N)CXsgFOkf8W238grTL9#Bq=`Muq50283EzMtS#wJ>A1 z44C3;QuR`bvF{nsba_&>uKK{429XcezM`b1{#Xx7WX=RSqW7PrQ?OSxl^R(KV+ed4(Y_&UtmzdIG&;AyX+$QhbH8``^{%FZemhjx5CNOe z>x${X6EBl_TJpZ4IQ`Vi;YP@eOr1n+^xEs|I@zNIIH#Zg6gYL|i-#Q)*to$Lnqbn5 zOfdQjO>_)TjQ-+(<<*VdIIw0=Ovh5|Mp3R)Y?R=q6LF4L`EIzKbweu%ml}oF_*RtJ zO9qw?hL~lHqXl#@p=BT<)%S+L;oGo=4BkkC*6iN>`DF^k4EyPUG0cMY+aC>#_m3F= z`6C8r2;RzCxQf^J4L2HsR)EJ7K?3+H9Jc$^rH?RF<<&&`-R>g;yY+YUKo#fA;Mpk@HGzOU_>NuaVWWBNdL} zqrL*qu_8Mor#A_?7QE*`V$D6|vRfOcH)L3ihq)38VhpS%@PuhA>*!WiPh-X4sratd zsSkzpPGeoRk(HXUjuh5JXZKDDHL&`@M}b#oj|;t2g7VY3q0>MmUHgDgN#}+HGC0&I z#4d`ymID#S;)sMNZ^JPiazQs(fowjob41tQ#d_$5ysjATkxRDd~PHN!yQx&80+Z>xNl}qWE7A#}5Prl8woP7hkGD?jM#ke2qGn~#TCvjZ(v7VlQXGkf= z4sgxXqYd^1ZcLOhD-U3OIFkn#n?g~_LB1L>9Mk?a$4zYDQ#XFooa> zo=-_uDV5< zWSIc40dswG}B@S~Y?HD$KbfW~F z7Zd%3jCjivwJ^Z_g>+OLw-gqbW#BlF6wTG}H>%hMzJ&U&tt8;n&M-{rRp{N>5gEGQ8#vmCjbVG&+PwR zp6o8YHW7|OG-r5SPOS!C$*b+Fht^>C$UAWyvu_&8Qq6ArsiAd6=*ZAZ-izBOhsHxm z-ni)-EG0l+GIsH>0YynOZCrs-*qC4yHWJFBFWhLROQ}-x{(HdSHMC2x7Y|dInE7cX zW4^HfR^WxN!>wuF)V^Ue_{*(_;ceP)4x65B;!Ud>{*kY~%rjshYE3_g_~XIFAQK+L zt-Qs9O-ilt&(K;yjIm~ZjJa8Ygt>|5mO0HJo}(go$AZ6yP{rEzGpwd{;3_PytnRA8 z;p)Iu1aj~pKon^JIe>+K9&XI?*3%aHIa-il@Dz>-GY)5jv?Lr!I15@z`5T4w&PNDL z-h;4=qc%eR)f9o~*w{%SEk6^UfRcd$$uEz|&m$PP^B&ZZEn+5v$RXf4dkr9pNlr^= zuL%P%HA@4cI;XYx3@xsRVuZZ%O?aGzSzm zP!cE|=)N9hBXugbfr#2#*GwP+>2zH)X|ie_0YDbi(yOxb$j}X9>KXb$Pc37VheL!2 z2_gOdjr6{vXnr8n|1K%0Kx8d#>6>FcWAPtGtSoJT%M$e7Dl)^@1||jeypk7nfhc=o zWJX|lZZ!o#&XrQ(MwW+UXN3hv;^ak^KMq~A=_x#m`iLBTG3bbLsth2-s4L0$6$~6n z0Ai+y2xE^VFcJ2FB!S5J@j!M3>SKUdtWyUEqE-~RgPsg)Sy&uIY0jV-$D3gf30hB^^aoc}^S~`m{B?S~n!!QGoAvn0E-iVU~ ztlA7`re)II$wIn;GoQQ+RV;qSKvLCYce}%Zl3x)J>eOcGl3x)#GD4F)P866No&n*v zA%4iGMdBF1Gl6XH4+!V*EnSbp^mV_x!vI`YOLLkMiNh?XIq>!xiA(08LL`LUw~ODKpX;~V3xJ?&>8}G`aS?u zsM%Wj>H7#^&KdwT5V@9q^0IJ3;3quigOSS{vE9yoI0I2xhgIfH0bE8OKaRB#(&oA> ztQ>CmmY%&2N|c8I*>Fc3XSOpB0=3Yz5RbQv?w!Cbqfy@Xxl<<6HH--gk&p7_P!RT` z^xpfVy;Th&2{66|dDpbwZCU?PMu4&Y|P>-X(oJ>D10ImtQgmG*-E}&vU zvoDT_XMeb-MUX_;p^WsyJs6jCw1AN=PI3B#ZiwPJg9yG1K0&zm;uN%;eh^KRx)L;5 zYJwEf#dD~lDqvGIJx3r{qyf7D? z<3w3Xk+I0xBL2W1^?%MLCW=-v9tEt|I^q4H!Iw7}nhj0Ws2qF|4)rw9zT|0ekIews1`( z+$eGv>{mu7vRxV987j%Cmsm{PS~eqcn&gO>ITOMOk(*Kg4-=yg__T+oBYI~gDj`OX z{kK{o_$n^|V5P7j83RtfRusVUNj^2Z#c2imKFXh4mJ#`sc5Q+oztST6+A$U7+V4?F z^v(Jvt@1r1P zmich{5>opj|iWO@KC}#!nd@>XhPmxLjOuhsS&p@t? zXq|A{9C$Sx6RoK&qG-a&KwDF3pxFA~Xkc-~0TqJkZ$*LM=w-yW?CZxSv&Kzug`_Qr zaz-?6LVYRL3<#Ho3CrLagODD22JVykmz<#!tqCb1O1w#|K7dJ$N4EeXq=_bz_$Mz5 z!HcqBP*RkScI6ud5Lr8UeMXce5tcLgQvKOrM+)6_%AtK_?V20A=qB1f&o~z%v*@Vful-8HM8VBQK{84mPN1Tqa3*XbA%2I0oyY{Z2^6vEf&8Kb1F5zaQGqKDdotBVnn)TX zqP*7rQD7v81O7kYQPM<+`0)k*MycmZatAb5bZg@NFVAZ$@lU28DMim|}v#7%r zr7$(bH~|x3MZgEc9|Pf3k*u;h<1S|f$T?@mT`i)jHsjbl<1T{c(}}=1`Jo<;44m&w zi0V5Vh#^TI`~<9^ZaxR3dTK-nNH?DgH;F2afU16XjylcmY%uWki>N{jrZ`=Cg0wjY z_EAlqY;HW0HgG+v=75KtDH8TM`6&7s-Jf1fRnsRQB{fc!c{0C)%&nmhdgws&bs14h zsl@rG8c$=S+NZYyk~Ux&Gk6BXXdRys4WY_m6yw$l1T_720&?hYbl4lmRk+vKkBsAz zYqz(EW(w!Uqyf)WIBE`Wz=`74Yru5oF+xuhR-g#W{p$!KIJeq`?p z!)x%CQ;1G9>(|-M;|FIyecqW2%!=UII#it94X@u>9O^|=SE*pqG{(%%uV|2}o$323 zjG!oXEU_TN!E?KT(6Y!5UEP5mESPwrmF8BI#bNBPD@Fw9a}y9&+DRfGpF_Qg*6Bt- zIM|1PRGx0c0wc+3HI=lu6@PKM!U;0AxwX9Z>lZO};t!iVgqC(LnwWrx~^41aHHFPAp&%t$<8<663TXShiMm*e1O zIT4SI-f*c{Jip)qIu%(CM^{FC)V`r@c=oF=kY<-Z&jTL^sNO$$PdsG39>L-aL_YZ?@l_IExzdOFKTP zzk9tsW>SN@+wPi_7{niQ776BDL~f`@I_E7bolz6}?v|BE^VDS`(1cs;gOgJ33-;e8 z)xlFPeb+Z+S7xfKc75m6CL8b6%?Vjdw$dBDFw{=jlQR9vt-ohv(QpumWBxbXD2q+M zwQtN^?Otntlo?Td=h1LX-Z?CTTuGG}6+4Gv+;Yc?q%05FV-J~J6*~6?UMe_PB4GHo zJ$>>Z_i6i<$zz(n|EJR}IU6Vs7)e>_e7+Wc-+Lc@D0eSxmlaVZf|OCP(BDk1Ydrlc zyuKxzpilpbZX!=f#rSk$p0$JI7$hr(M*2Brw@j(1vtCB-YTBVDxV=$UziUm%>c1lN zh!D>B-?gG2)py>$Y03a<-uw20Q&Pc2JJ3Rfh^(a-* zs=@p4KjH)r%mF&Ew+eu*BjQM?CFYR!zb3YUj9T6g@a#z(<19Q?$**@+mojatUvT^ zLe{TqK_DzfANrQGSk(x~Z67!?_SU*kOn&;lGWp;3j%m#3vu^`Chk#w2KKnLEuj5dr zb4a{|y>#4F5;$Bzzjio5>Oh2r1C?ZSya4tMg zZ~84MJ4Yw*)UfF+75<0aHGNdk6(6FNG46Bw#p#3G-`jth-dN!~5AqmBA3A1yHlWlP z`~{4s7-RRp>W<*Cr=4k%6YMej;8lFXH`_A`A`86^hd?ylc@`GJiN|Zn3!EIofzLJq zaL}%tF(hRhpXc*dlf&9P9U!rv0kD7=V6BMiG+ z!eKyWpG+$J1)IJ4!EEAa?+_4&QQ*=7u^8dwLE$DvAiiib_JzX_7-VoyC?lp)ur}lL z%0oaT?yAWsVw%tU#h~M3BD~&Wx?yu1mc~Xe4W2>`R<0|F)4_2t>$kjvGN<|BMBMTY z9kZv-99DebRi_7diSM2{u9VbJO~=c(<(+UsQJ2~0X3mYlo4f@HD-hVkgw?kl$S68o z#1K#VHhaM=u7Y??ei+=M=o0Z~=*?m{rnJ3k@0*o!ueAR(Yd{;axREmGLfQ{Yd|$>3 zDz;%orWSu+P%#@k<1v52gfSNUzP3zxCr;P&jnUuN(oKr7sf47gkR!A`eRe%H>{a`g z*|$srKO|Lg)TCPcJz~FeZGZpEV?wQ} zXy``^?C-8^&N?T^Rr8Xngcu?I-pz**4|}00qe6HSZ<}PoOBa<6e~p(2;NkD#uft{P z4bS@4_l5AzOCdtL6Dty`%nhc$WE|5TMth^oBFrbV)Tua0(t;YI{U282kz02LkuFsw1Qg z|Bqd&PNLQo+nRcJX!^Gq)j%3=-#9(}Tf0EJsy5Xx95WBZGo~dw+BjGSV{7s!85P+u zBxbgL|4rHkHv>PEmR2m$=M0Q!v3M;YIhFq25PN_zj`CL8oyMdHlkS`dnaavnB5atF zFXo(UM5ov%j5u}NWuG@LmSi+BoqFq}gU)&9v1;*df1NeJO}*vc-!^}nyO2>2%Hc9? z|NmQXm@0T^b+}2}|NM16H}%Yt{jYZX((R=$uA}W~opn^x1N(34+~B6V|FFMs3G1ak zxZNJs{X`7sa^gpngJq#cgPZ(G(%_n}bBNvS-tSpH(Cv$eEHcFQCs#;R6Ot!z)}$K^ zFfPgGSA#u+P?+pnx%4x*!kaVfz#L#2R!N~}S*(+v){DsVk#SY)#i-{!6w%mcwRPy<1?TA0msC73EpNXqIK zF+$m$pM~1ci-FN26h-onuxXbg(5AugKD!$2wCP@+#V@&^+5QjAy>Y?j5)S|h`@ASp#4YjZaNRki$;&*+W(Ze+K z@410gx6UA4H&0{O$JUHFq+<(x(gD(o)m@mNYo2vRo<)Hnu>rb%9ib$bf~k+cDz+1T^6B>wsFXPlVx8gMddz7=jDx#*bOpaC_~_8>4q8P25h|3RCFArl z_@v#sS5J~v^(^Oo6+OIs-p@;go+{XLz11)`-XfDn8ZsJ3yma~@lE4+) zO{Oo2yWKb-Baat8TtvciFc`9uw6r%Iog;}PBN&_~NfrhS;z`oB13jBAs`v{_C1yIk ztsmgCTQDG8z9Qm#=7Qc8ncb3+ao2#HFPeT!C@aIRz$TM$!oXcbSdGE0%W=3%apj{S znB}I0ps%uP8UaD_z`(it0Ww0x?%r0Bwf^pO4yLb$j|^JdDH7_!s8&?S2qH^Sj*-B- zx@l|=&qd9RUJukD4!^iAg7n0Q(r^*vR!p`(%vOHa;^G7mLO`Gh=Xhxbi;27=bE(c~Ivq7_B zxtJ_0=ZKE8H!JJJRATT%SZlLMue2x)S79r{Ft=*9Vz?Q8No4k8H{of(49uVHN2M;xwft5J29b$r zDhjegokYywH}laz(K>>0`kVRm1U&25vg({QJq-erW!$8A;tl7>XZqd@4aZ3Kgp#I4 z!VY+%8%+&48>Zns%Vc})H2BU)!bZv>mb4N$! z<78_s5*TRTMAAYwTsVfujHU3-NH@pmK;;FXv{a-loo5C=*MsjUD6$KmvqI-PCIC`h+Pe2j=+;?VS^=g%k8KkvtC>{%GlidvS2e1bTgI2vvxg>syoEfV@jAgYVQw6(1b08=1bV|D)lvqcF> z0hX!5ghAd3IsWeOgv;&rik^+u*8w6a);Nz`(F9B zBN<3LJfj`w94X0LxbBhEpmH4lR?bW$JMpWPfbeM&8sxrO8BVC2YBm+@3AF%9IEW`l zQEuPTG8Ius5~Sl+{R$@ljygqfOEd1Wf4L)?y`z62#J=hzE+FEH!QhC5q)(3c;g`&! z0r+8X1~CH1*yN5c!dMV|Rr$1us0mqLa!?|nYL#apWE1rC$)QG-|8Xt=GEXMSH@p*S zV%4>5Qsp;|b=ZUuaD89Yum|mov~Sr=PUudcT@ZUy_yREjG#8YjT)rsby>(w;=z@}G zbwC1$@~F5WOqgNq{O|-k!(qUv&DS|A4Kn$+|BwCfPA)so83EL-LhmZ|IBCRgggK-h>jU9G;*a)*2kWx4 zTWT|KE#goe4#a1WN2F=t#5cShJrSEpRr#%Z9JzYX6AXS8#rR8=Bry-499)@(Fs=w{3+VicnU0ir56 zaxm)pzhd91ss$rPwer%LBpMtST2u|8BUFKYYf!aA-vW=u25+{PJv26(KjRQz2QtZ2 zoUBPqPZKsz2{ozOsj{Rd{*=WNoJuD(>0EEVBV3)x%QawcL0xQX3q{o}(6Fi|--^q( z;5owo)_(!3s=~L$XzVY*|K`}kKICVc^30EMB|>_5Xx6t8(9Cu8dAO-f-$rnmX(A~y zX{GmF?%)CM1`zOLRf_}PF)9Lnn5)IXiE4>?HbY+#aV?urt!e)cM=PX8?fxC1h$X${ zhy3rnwP!>@3>w!?I2Km@z*4F<*9w)28}1XN8`c$&Vb3nxOSk5;JCusnfAq9 z1LaSj2Sj#q{2+C-~GBC0xgGr0tiEzT`W-51LCWHKD zz8!nCmfC;PZh15@5GgQV43YS}C8XyxY7)!>K#;}>_nYwsN3JPmpR(6K+Mk;9wf)4S z{j!LOBL4F1EvT%wj&IR)*l#eDTE_!mv~7TWl@j5lV(^R^gB<{Xncz%M1eW9{uZ5;$XV^*YU(R z^Buww{cnlk(FFLrSEO~q#(%y7IR!WX@1_ngK_cRNCXh`a|3ys(UUx&tACv-4~_C!|=Cs6fx| zw);Icn0n`V`-;cnMPDL4j}t$(?as#*^PQ-`0+zsLO*1m^%slK?fI?d$iXQ}ed=B1DEF-U`8eJqQCx zAmb$&Y5ow<2gzNU=?CqP_Y5L&tbgx`4_tZ3sR^fd1ZhcVEO57s?nMV(LLlpw*<&7W zj2!qrGyz2t?iMWh8K)L;O(074^T(M`WP7NM6Ga5|=(Y{^bB_nI9i# z%h%5D#rxf}z$>cjv-X(1jeYCawR1>uAZ8%GB@ipdy^Hv3_S(IP;w$b$J&7wlVL!FE z|Af=O%8xbZhZB<%<@DWr9%UdPE+G)&#Lpiu{Bzc{0MaosfBqn;>kKl-5{&%WdAs_F z{?ws^_NXVWp}t;g?|7oV7^#z-s0au}efUI%+Hi+m`($mFc>fWDB`668oE(mkDl$uA znRkq9}R8-)PrDt+kr)TWe7)j4G#9Veeaj@+xVvOCQgVZ25Rg|SEg2TFH zWe<(uUuM*|TJp1p@^o~XguD~nI(c?{XgDXTNcU4k*3noCY%(2H#JO8lUmNI%lIAQ{ zck2ishWhDYsQ^T1DMb!y&z8p+?PVId*7dO#O@M^}l~Dn4!-+Mmq>*&!c4st%N!XbL zqQQlVOCJ709B`O6n9~`PH*oceq03i>(Z4C6e^VH;Jl8G@S!W`Jh`d-WOwYvqu;9=D>bRDM0Y|Xn87HYpJ*W0i0LHC}t2q#E^u?D5!A(3f z>I+RhO2At0$Ujoxm95!*bWQfNS!iIT?#%6F5|2lO z)FN(g2acFk#2Pc3Jf~0Lo*bSDp&SWdrMLYoH(?NJ?R-*)3+FZ_q)ZUWlop>Rp#=KF z|0096Fk|||sXc5N6+f*^W-VNQtA%>qs1O#j;6Y%-L*Moi1;=$jCGYe3(T9RKqdGL& zv?@#*kXsFMthuK_U?zvjsT^Wnj5Vr?jv<2y2PC5phTb_b)XL#j6b{k&3$j3_XLE-g zDTM@8DW#Yvd;Pi%Q}DN4g%tm^viiaN@Ni*; z%1CJ)*9shkfj~}#{qi5E#A=@nfSf=93@Z_*QIeBB8_++$a)Bm}cuf?X5nCkkNE1hu z#3?GDwCR1d*}UKa!T>JvaQLFshSz#%0>3+Q7eqLppzv40e??v+JBIkv@`MTbabE&Z zXr~1IbUM_AXR;i5S7VwN&-$1TkhE$BaVdpm(>XR6*Q;qb4eA@49hjrAAe0xTj5Iq`er)ic)4+yzGrBVv7+CB(C29N0+mGa(9+GfK57d+F`{^VyJ& zc*N%epvh}#-vBJAKKmp_r;Ep)&Ql>!s^6>>z}*WV()SU*M#fWT?1%Wx2zxK#4ofwn9=Gha36$MW)U6d5^^ z5^)5Z8L@p9(XSp81_{!D@NHN1bP!R7HvpuVojqD8REz@&AlBJUOp;G^JRZhXBtu8g zj{G2YlCxd>4QVme)(?>jQ9_b-u7i*t-psW4>{s@^&&LzawIfA7e!S;xF?KeeR^*4C z$^Cw5fBt+`cB$Ep@CS=%U;c)8ppjewfg@(=PaXyA5meH8M;Y`tEo=bLZieKc|W$+gXJlNW6*=%S$0U}C?ANdjkW7U5gNW4dw zBOLk|y41GM>}4#t7y!`nTuk^8x4{50n|J2t9Q2>M8Pn4&-2KW+7k>k999&!gduM&$ zh)1;l@j?aro=(an1zq3P52NG_Y_!~wvzi|I3c0CeSU*9w^$Xd%Oa zx;6Clr~~2N^5^&^$fZh8Ey#>Thq_r(YaQJ-Wp%JD5abAUY95 zxJi4ug^U11LZVj=5=)ZjP!JN1hg}Ot9HBg}1T~1t=cyLJu)%VR5%gQtq!JP@de+_# z9}(sL;VEH*|2vCwwFEplOzK_L_s=WT80@wvcs{xXcCLVm1A zXX?7JOSl#WE2-wx3RX$b7ywB#{?!A*;Q$?Knob;P8VRtF62!Qs_Zo0e z4q4JnA2F)8S>0&@G3&Bp^B@xHh9jIv%40W?nIJcd7j+Sl64E;%fKGP0NK!#?(Gy2e zkV#&R-f_)a^n(vXX;`PRkb5vhZL*-n0Nzr07X4AM<H z7-V1nN>%o&CkRl`_Jn#nAX(wUm(xiHmN2R+hyh!IzmOCWSx(SHr-dev=Yt+k--)@a z6-ZAcwL~0p@PkZ!XB;qK{NN%2K?pm)Vt)A60a4aChnOrOGSLqN#O6NGK+b&lUV!>g zsWSuxA6+8IHGFLaKl+i^^OFQ}d=wJ-Z3xBWkYm56KAh^nK%k$NzD2~x@(4Cm9)K^B zipYM&Ga?r~!L1${B<5nAd*G^n1E8bvlbfpaf1t=f=uCXouEIR z7@R;}gUV@Sm*@MY3NLt{Ehp{LxKPzYJ=}N)0QnX8;?g;MbO^7JWY&VexMjwqQ~kgU zP9d4*>Zdr(h!F_42f*AYmkmDko|`O|0RAdae3uT$&JMTvbZ;jt|=bQR?3VFW}?wL0cJjmJkkC(|NTwxs>-GNB&}sIT*XyRw+e+S<$XxGPT-;_MkQF`tg-{Se1-B6#d}d-W zzF>;iBSM%_>4W)YanemJe5)ZT$WOjyhu?@$*WPJ2yb=kds$9>m|jtm1SeLXLrh!ckK$7hkO-UGrd=ThTa zz6geE}gg9Natx9feE2ipKpclxN8Zm>7LSy{5-pFP-i`e?szmYq3L zF}kKNL45bZOJD8#{E|{c{b@R+-PAEXFLO=D%(m&bqRpwl^?*sGZ3iwb$!BtJ#8_#I?dzg<#OdCjE=w!d*{>AYfpifRWBhwS^_ zViFf$>cLJtGr*2R1@&j47d!R1oq0P#J=$)cdOMoj^~xov0#`=we)&(AppTIkKcS=U z-CHPL3hyq03ITJ1|`QE&=ba;aO@?p7c(^HoK14{ZZdl+&|~O_KT=G5LEhsS+_SWvXzX$h6(>F0`ZXmduWrdv5qYHMh_F zKgDmhUsCi$7Z%}zE%91pIxWO~a(rrZr;l_@_A_DU&gXNrtLYW{?BBkd7<}x{KQ*WQ z;X{{{V(I_GBL3aKvlH(%lx+GxtMZ<1&v~ypcylL_BWohH^u|v6_V=zFpXfGMb|;1= zMs+M)wMt!Tw6{+*7k4eavAum{M@N^gcAJT&1dhQ=&1K6_EwwUz-ypxU`d)E?ksoLGOv|U}cY~lP)!&O9=*!_;ishZ`sa&&MTBmcwip&xS<|Jyxn zfohmbM|X8D>sC9vmrYB1lQKKqRnt9n8AjPYdaf(@9~Zsr6%YN0tC*VNTD-8cn`7H| zx)|-HAVp_f_LE1O-23c59Brn4LD|vwqwY>ydcQrAL>BH25B-okJn^c|j;=k(#!V@z~ z%+50yMPapXaFF`eMQ?J$>zNwhi3Ml4CXO*X%-*Q@gsd-J=(%OXs5NYdkS} zuFLhK`|7Tx*DdUvKW5=lQwK?JG+gwsqFB&y?HIpoq_(W9V|n*1A2Nrw`~_boboa|l zRIf8tmmi;lMNg`$a!A*TkskW9^B(#tSHI@bT}u|ZY0ukEiQejUGt!1za)oZ6o5@On z{khV@5;s1;ui#s_(eJ2fH!kZo7q?%ru)}O`zhY_E;@02;BfGnoF4UHHj}H{<(5@ zS6b9v^qrXEhweh3?)s0Luy1aZq>JebSGisE!hs%8vybPpqR~rDwfmtUy|=(ckNysy zF>@6z9@n*SS@+1lgcvrvqSH%{cNG?&pe|C=x>fx;6I<0H^Iq7w@D#q{Z}9xzJoR*A zF~t~BBxUY*75ZLudrwevujpF3Sl#QQwcEV(ET9Ow=~oN!9eaFL-{-FP{oPwL>CYa9 z`*NR`KHw@0)9$HLmM_$=n^y1(vKQOARI0Bl8))%lI0WK;>#8rj+COL1jhMqo57KD% zz2%`#0PCG@>Y-q8zbh$-Hx$N-v8l5~PNuEW$6ZgaE^?vn)Mq`k*IiEc2_j3^`rL~> zUw#(zHrl&D$PRVM5_2q#^vdk>gev9jH;_fT)>TaJ&xUJ?UUf6m+<`DYiJ%H^xa%hp ziv28v>L(xe&}Hs&=E~<>edw~PSn=B9&kRELms1&xeWT#E@&^$$2ih5Wwm9(*!R{_--4-s>u- z?kR-i_R>1laL6#bv2EKIcC{}a)(@FEb6nNg%(BrPUCYc#7`T`|8>;TgI3oOBzblg! z;T(I^9qpf4cECr!Ugg4BL^CGgtMlUv@IAZqw36x%GDI+rUcPiG#C4mu0MKVPc<9ko zp%+SEv>Q&!hQ2ZHoLH0Vu_{`^Ac$b9v{u=)?fXE%kY{d6_yPPk4(jyUn!?Gh`zJ5&ZeI=wEzdx1Yt3U`x{@mM&U6h)i?blGum9GAoe`yr z;x0Ii`5{tj2Ruxp&!X>^#;e$XD;YfyX8KlDqbNEyc0 z^3S@W)V;3uG0T^9EDQ{Gp+@bG9{PS);lGPVcXcf_py|6!aL34HOTcwg)$WB|qujW} zoTNbaKFpP~TtWKFc+9uYRWQr-%h6qnq1TqF+XfM0TIM`g)L!{fB>Uze4?V$M=pFC6 z{OW~9TOFK@8%nFalU#GhnG5GHc%=Z>m2URLyh%5@_R^n}#qbV~1+>=}`_T=Nuw)uk zqTUU`4YLR8GS*PtNx)Z{<6MmHDu_|rT(CM^^qgQUF?IB*0(xf|6skV%vg#RQ8&-g^ zHw_8xa4}ZW9cv#;%Hu+~S0N0pp6ZnDqdgzELm$`KV?Q3A9F#&5%c}~uvbT`h;oiG! z)bj4`uFf%CH*87bO{%WiGu72H!Mri!qUf!Ev!D97qVjzQ&6MTla&vOm<@nDA3@-hR zJN`@ij~@?6Kh1*n#*T*SShOdCeSC@SkeFf*;6Q?g&YJS^<`*FkiRqN2U*q|@^lGD3pxbUIo z|JSeD|EOy;5x=@S_@bMsGhZ&O4!GTI1O$a^#eIpBW4b0nIIHu`wl1uRi!KS;)yMly zr&kTA7AJQt8(lCL=0@lIDG^+>`(3>Hm*dB-=pNs>WO-L{0sX^gP>!BJhLlVEMU3@B zw7TFC7d_Tj%vdYf>LOUBM~eF}){}v1PwOE2j^j;P*Z*(py~CrZ-u~e^XSSv64kV;N zc6LKDN$BZKN=PS=WJ5MUD9N&AQed+ivl|GgETW)vVU@uGsE7rm2}+at6+2+T4uV*) zVHXh;exI{^AD-uWulJv1=d?L<=A65J?t2nN^)nnlk<&x|%t{wGumMA>{1oL`5_`uc z-dw^84(A=R&ha?elFC+pnuJvLThVzNr^*aBa71VTZ1_aD8pQ)4eLlfQg#R0Qhu1h> zn3W=`uW`%E+I^jN(1L56+5U_=kzOMc@S+U^2cy$wkxfMS10Pf<$Z%yp1uD18u-xW! z%XUw9=XFk)q%+;%Fu9PdivwH>@%)`39J;<7EvhGQ!X~0NXRhrhs_TPmK1j}AM$)qi zmr&!%${r9=2$a>>Oz-l>`q1_I0{vRR&93pnDPHTT>?!NA&xU>L>Ga?)AM~Mr^$%)3 z92%H{_?LWprk)HkS2p7y?(QpwzsxNg)9#WR+S+|!hWTJ0|51V!PR~}+*0{;#d zSs598^`jJ8E(b4tl;2CR7n;&7o_&4Ls$gTH7%cqQZXUmY7nV^izlr-Xqyp8nLo9Js zb+kSMAMxMUg8M!;^-il61MChZ?#^m#3gmG9_TwRe*$Y*|Y7${9VT|`~9;`y1uM+CG zUVW^wDTeM0vm>lW1&yWG0=(EsT@ZKXgbBwI(M}KPu9=Hk;bH2DT;aV4q<-Puu|{o1 zweU_glFG_wio_eL(o!r)m)*u5y1NqsxZA~+w^cCGCayjZDoqL(megn%94&7emn!Vx zfS|}|B}R1&;lsGd7G8Mmca>nET4op(c;4JHIzjx0l-7G(R+$Nv7zIDR?1!-7Q5sRZ z!m-_{)oF)RTADpk zJ~=)(^wYRN8(CkPGrk)S*5z3fj}e+OMRm#eMIGI4e|x8UPT6=(IH!k*vZz=TS~!lM zO9YwInzJT^i|VnQKEA%Z1C;g)F7gCt&bs#~FFZ=)Or6?l3(MwTOjDbxm>mA#xMZCo=E#QBXIgRk8YPbjf9HHBYyQ%KT-QS`G>3b`WYkg6nA;MJ+3JS zh&g+GtQa|!i$YIhBP6=)pzgE0VslPXoKdw=4Z;$+BM$>SRV7{~4c5vo?`*rnEi<`b zj;)0&!pcq3BY9`eIJ1~jnw@=ZqWXqPh5WmBf0jUxa>4bVnPY3BvDMSUOzI|X8Cz*5 zM9z-~1mFK`s_M>Bq9&Mk=5kSqEwUOk`RA{BVPJ%opTt4lgcjQ6ubev+UtU;RAZo{R z|Ej%Ez;Q;sRxGUSEt6a9-R?)mrn`bO&l>w@foFP*j)zH>#65?A&eN-ReM`op#_z;Wz-_~{|e|zRxY;M+u^Y9ha2IGUPxQ7sWk#eu6M>X)?CUFP+Gq(1{032oY~(C04p-rJk`T=KygEQj$7s$F zs5Bbkfyp92or|{?QsGb?THz}Ju_P%BQqYug_|~0HohZD3BlTS}hIOvn#>1Xq2;0R8 zUzk`ye4{Ar=7_m^b0tCNyu3D&egX;^6A0~2zuj>P;fJ|zLcSvj=CVT|%BuJHfH0Ly z7-ntjkDUBYd^m%o3;R^zX6LKpO~MCI!uF~3h?gE{D&G=Kl;7)&Oa;!$*%~Vvrf^M+Ow4{F1A{yBJ|s!n-5fuKODdVO%%Fc6 zyr?e0L|^7kVV3?XpOtBs&b@fTyZRaVC=y(APKwrS<9Nt~9~!U%^5lsoI*|*$b8b*f z1i{Qz!lhnDy@LpQAwn0N&<2I`+cj_I8hIxP9z8$2e>x{@zm+m$OSAREx&eR3p z`K~rxcxb+fe$J<1cSzq4q~`_)E#D^%-5tcZRQPb@0Nqp$b_33wd&fo`5wbo+(mcL4 zZ*8nO_dt`#Te;w4-=Cr1J|3L=Lqp8EF?JjR=S+|MPc9}uf0dcONrGSeFudQ$XGPWB z{L1cjw+kYa<5(0Cu3l0JCA|#6oFC_9X|O`2-mXrcTrWGByA5 z*kEe0zx+~g=r1rh$OY|}GgRu*;X-ij<<#)>YI`-W5jJ;A!M83;q;c0Tmpz1PuLP%GvCyx6 z3hum;V`My_#NOqQyYL8|R{xySU*KdS59k_o^6I~b4G%Pc6S_;iRlR}Zx)CGMzx!w$ z9L_i=tO-w^SlkIF-N@CTqxb)j<)kD0ch&-j1EqRKda5R;tY< z+s@G7k!$I_V=Et;AEJBoqDdP=HG5Y7Gdxk%Z;9H@8TLYWZIHqsEZAVXeX3bf4b;)O z(T10T&HoIJ;O~soPy7=1&(8=xhz|{A{BF|4YXt`vEmZuo>%u=VL}zvk|H(uL(BQxS z+QZVbow?UVzDgBrxju+Ch{4s@Q)vth?!P|TZYzcH$^W?yOLAqJq>ZD(V?{`VoNKLhORw_1xd|q`%#+I`*iN*Ejtln; zMWk8gs?k#D;5-@*qZl#`kL8oJ(>eaaQuCanppMerH>;20cptS$s8U|glBmGqff7Ve zweS|oOZsD4oHcYf-rxklB z!k2kc^0<=oMEG45DO|Kl8oZG2k$1#3Pn)cn$`xTr=AcKhQA!$Da^XLLbX(=NhuQOt zYL|2nTOU6q7^3jq(9D)G>eL83S6l1#x36D^2KOdQT2WPG?RGq`jxcAvRVWEAOnNF$ z(~%@tHCXtAhMTi?J|tb|t>D?tw(5#X+-U>q~)1~TQKItlq>=ntd$H?@Xhn6tMmk?04M4Y&ty zJ?XBrLaf9d4l*`2H%+dn@>O{baE9JQm{FBR18ti3bfK0@`%0xu5>?vi!4lz(Qe-^H zRiY)09o9Se=eqiqGDCGij*leivcrTyVYpYI+#taiYlD5(KgW*KF?7=ab%RQE@U&2{ z6q_f{nJnq3ie?s@U3T36;WCL&H=e`e)w%6+;1P_Oh zja6Twp+i1Y-AnZM48>TVq)QZn>Dwy)Zo){wt_f0LC7!JTmb=dR{jrjH??y}XF10sg zzj4(-QOM1|vOu!1tsNTyYekGYO+A9ApZp|zLP4cZR!a0XzJ$$UiYWXQ!wcg#4B$bu zhC)TpFFhgALxlIz=6ZRyz3UB!Ik##3_R0v+Xr z?s@FC0cD6$=kRCuIVnivwFf2Mla zX~pYGD;oCg?q-#n^~l4fjweky0On(stjENAv&RT6#Oz#ljoa6!^_&Mbat7EYz>zREOy zAE(cPaiQRTKAC@ROA++FA0GoX9e4Wx=zyHzMNZiNom5oc?a{%`)Y7Ds=}B~2Mz^F+ zdxg5GVJ9c3r%CUJp2Gqetcxk2RDT85{)`8ed3q8Tc;j<82eNWoKH`&Ntc{$03vA$r zBP9*Yd{&q;^0H6GN=$ed6i#q)W`+byg7ExdR`YRcsOBhT7vH}v4F};rObz>qFr*|c zq8~3Dg8}>cD9LaD%Ux1&LgUD;$H#=zXs(n_pks71*u2#vYu zPSM8F^eU$nnqFSsms1&y=MBU#n+jDODe9xd;&I76g;RNR-kpVE57piIK_SIFJ#yg`s?!AZeXk zLpjswArf39g7l)KvvVmu?UUY8a(j^>fmQ3Ni!&VMgt&(o?*@PJ&b0fdL^}<-{Zuh;w7SDd>gcRPw z(e5>Lxl-Jl42phkPm0#V@dYWWF3!TpT}8PvuQw6Nr^;i!i8OF%vxNF`Hn#{`Qv;*( z`-fPTTt{Mf(k^CQg1QV7zgtnhL$5x*P1yV{bN@65EyGGJziG@ai_$NO^vf#qqvF0~ zDXQ|7U%faCkZ;}v!FCnhFVX(vHBFp88u++HpJ6HHGjXqvM`?*7>9O9<0iYw6DmdZK zrQrq3!-h-zT4hTV$to(Wkv25I=U?S&TAGzE&S0k-@JQIhH_ zm9W$ZvOoCB0Cg&Fzy{xxD5)2y1P5gB{LBT)sc14H;Ql3rHiW5nhY4%mfm;cI0vecV zW=AyFb-|Jah=IdnNan>asK1wR8$_b~tleB%9tiEO=k#~S;_{g>lIHD=n%-Px<;6Qo$Yi2)DIK)JT$Cb2P6Adp}d5H}NP-`;fl+Z=ce? z1w-Q^t3-!wRCe|ui8WumjcI285)XnW;ZoTP#qgO5Ne!#}CtFPR z8Kr2rFhZjDy%<`h4a22WxRZGO5o*pk6(#ZNR}@nW5tIKofFW~)r4ldlbhE|)>(M5S zWMk~OEaxrMi&7s;2KQ+`4rFLf z?KWuxb1A?iVsCF(R>hKmy=Fd{Lc;|9H4>QzCxY&Z@@6c_C&v{UM~0AXN_reg#nr?( zGMN0REQmwhlgj=$QWiMrh9v23KXsuVlW@t0^@dl8a5*}ylwJ0IQFtFhR`8U>4rw0} zCd_?FvXsKLo%AMRrtALphqE(^lq zAB(+P@cVsfE7^tB?e*_a?u;io+xL4d?8*a#(eIThYEbIYH(;JA5U(+oW-c8EpJKs+ z>{JVLsy}{!ASG^rBUhaSd`v~VuMI25h;Mpka&o2o+L`TabV$dpcGugVq2og3%XlIY zMbY&oDXKsAslHJ%`w}^RJqT$*;UHj-r*ZJf`rsgH1ONL&+18izBd3%%`jTWiY?*^nZxejlu541<*%k=e9c~_3c!sg9PS%E(N4uXk%R)+(~ceq){VZG{&n;Pax{B z6DJ0hKoWD!Q9KExJSAh%02^qZ&tDs>F*~nLl9I-EzuK`9YZ?;R63*c5yr+B&PY?M* z(HTj9;#CG2NmgRUOA?PPYI{lg`0l*V;6igoWv8tU4aM}2Y08~Ol1XgJHX|9RRvnV~ z&B_@gvGl3_+0a#w#IptSL)snLrb#bQN=1@ieCb;$%DVk0VaQWRKA*9#m!#Un3B7mV zONbdu`$-^4s@A0j*aoi}BpcgrGEX$ZTrk>gAx%&CT{$3<mr3~bCoYTX1nwz#E4dygH2rL++r^4J_ zN{X3$Ozu&xn@JWqq+})%f6NolOQlwr9rtiFcY^SV4|BEql>LdMJ&vxEH1R};)M$iz ze@qFV%HdepeSa#q^(XnlM^B|_e|}b*NSI7z_)?kQpOlk;@@jvgkV{H)5}Bom`~o!Q zlJaR18QgE<^Ss55ZytU|lO}{7_7G>t29CY*h+y;i6y%Q2w1 zW8Rlkj=dX7!BwG?%N-AW$HQ%B*GmBypBN-+Hq{B$?<#MllF1qGeU1F`g&)u~I*kYq zJHe<60|@p%`X!VLLpTw3YbD*xFJUcF3!eofU7OO7M*2t2yucbB)6rUxoOj_wto|8cIAJg6b&GM)0j(pZW~CF329WC2N4SyuWTDc z0%X&kVS~v;LZ9i{vuFs3B4my7@KE9=zbcwxs zLiW_<9#Qy>M47Yd=8E)5VqvnwWuh@>MTdzLfSt>*zhpgpw+IMKIje&tab0cB+TUN~ zr>ZS=Fk9*S!iHba-cNaF5{VDA^fkd28Ydi68}*a94t8weF-!&=bj?0dKLs97W?uEl za1?uBdqTS3hef@E8;RGqk2hzLXi-0rJHbSuo2GGV+sPKJe3t8x7$bDyQ&o6DRlZ5k z=e)C1!r@7lw=I7I-Zurra)<)7ha9<_EpIT3f+Lt+BslC$&(x3SOQ-qG~X03%^ zK$UFPUMTp&DMn1teH%b0%^C0>N1zA(ux2(SQLkK z&;HL6QA>y|1Vi|9Bo6G@=S|v)+zsyk1Er1E18w*M{Csv!JIpHoi8P;Uy&|}-R`@5L z4YdC@k-;B@1(1I3w}@H?7gYsx+hCyUvUBG|7!3hD?+RWmG&YIaDIDD$a=pHw!9Y9i z5cMz`yanZOdXK1wj~XwhOz!-v0OO{%g;wgM0S&9tL@kt@$5kuPAcT;F2$HifD8hb8 zYAWp=9ls2M)Y36o1dZq`?CfpSgIY4&UrD%bpb%JS(%ZS!=vxmNTkhifL-aRid6SG# zFvwkS#%RTwFJPcGLArryAk{Vayo5ZmSt z9WIN03vHoYF)&{{7aP(5U*Lr?{f)ha$KhA$nJNNJM;}nDtWHIqO3dPf2ccA{CTRe= z&{i2+mMvNopI85qs z*qAn3V++m$-XhGGGvtT&vZ)kijM0QpzpG^|SK*TbMD1Q~g^Qi~Zl{0qASJJf$gkgvo1c=Gn@~n2JaR^44`=O{!pv|@N?6U0T8hoy4 zsHi_OI4p+L+HkNIMw#tnibS9u;JO+DaFPABJ_Cf~sl8d2wQQq$0Rd%|J(cdAD#U{5 zhX4=lSh+-0JMaYPK6@g#*txgF@QGYgS+=XN{NJGvcJ4|OVSI9+z-FuZfoC;UB>=3- zA07}Rrg7PL>Jdq`Fne^YN;1oL&lQdP}6Fy}F!NS)YYG+u62-qt}Uuqg= z@A!lW^NYpsCXT<6as zbBuvdv7qFMY|Edul zqfFG*Pg8{HB(|XSZV`{Ii6Y{}?}3@PZL2AK8b_yc9d*E&7T496r5Co8tO_k}O+*be zw9ZbzJnh9w({v){&o`-2e`QGOsn7$lKGycR>-u6oEnnd~u|C3|B*1&9kgzes*`OLo zk4Dlx$CaJaNp!<1+&YDT*wBQb`iwrv$!D0%ZY1oDXCF&CzKl_B&Q$($C$4N8MJO^M zq5BOTz+D+(JEAqPt_xtVn%+mYG6l*X?EK4((T!67K!0eWFAUDm*r)f(zEQZ)|&8+ zy;UJWE4nvDtM^*ih9rUofeqRB9TvkuZ!hLx;@KY=>}+bn9uf1*-g8JfWhVpakFs*r z4o3U;OJd|cZaLfi0M%K3M}oeq!_sJiVI}rvvAeU)j`JcEC8ogqtID7&U;~o75DIgU z6OKPCM#dABgKG{Exf4W)9+Ji%VX{V7Z@@T*DzwSn#qKeuyh!BFXJxX6xK> zSlV3cs8pIqRUh`RWgxYGU>CQS2!mHMn>E|1?hg`~vG%w3m8%Yt*?2Bd438zk=j9kS z|JpWoK*E>Nq$0MiJoRa}yCK#l* z#PEp5Y!{s(+p8)iXA=Vb?%{4|3Ms{p`TlwBa zCM9ktf=c6P$}z2k+{Vya?%@cPa5#ILRDf>}uTbnVNt3?($h4xO+wHctb+ylQqr)pc zv9z?Ly6#i0P@tP>9o13)#L5DqZeA&R*U>*Mx4`Yx=;1uP;xe0)Ii#M z21w)k6i+KjqWj8~)vYAM5cH(F8q8sLOB?sJPr zZt&vI7&!pBejkUN1&;tcHibKfR{)X)GZYZl?LQae#biEaLWLL8fXM#Hc-+I~86sYX z(%Jn#7*Kh9H*{}TsrSY>)Ee((E6txtD8fju+{q!6VvDn#CTTkR3$w?ofLq;7BwCw@ zSQV9-m)GB`+}}=;bqgmU>4ltPRd%(L%D8@3Q9XtG2|K=`3y_fR4xoHIy7!dcGssx_ z^em-m1~FzYJ1uG!L`Ck7Mmogo+`Ds)*l&^7j;Ckmv`#be@9OA#tImN2!{qJ12~aG2 zPI+zy%n5t8DzDEVxl>G+QhS&DStPpk`_=@1EO3uMK<=J!(R8*P zK6&8xu@`_w3G_pgfeEJQ%74_twQI_GH;FYo*CI0DF{hbk`sr3c5Le^%vrH2Hax~z>4;RDrT6!-K3gF4a4qHR(eQo!nRJf(S<*o2+}p? zzo<&7_0H_>Tn7;94CS1M#1@@tGE3Y@RD}FZ$XRV z^fQrz~tTA_hJ6CWV*2ej+3U&g=`JKMf)2)nbZflH?E z)(BI>)%cG3d{N~bwJoGP`>%53O zM2el~HHm?GIfN0q7JzZae*Yb!sxD0UovMXVqs+9L(kn!0iO`wtZ!8PVGGZKicn4x8 zMAg$=B@17J?%zoDfbu#Tb*8ZCToGRQWT4^hA8rOJk-|U79D2tpfp51WtQn75COf)Y znK9{wY|Qm#r)e1~0v!y&JHw0N_T-L0$vq#N-6()%=I=KrOj`14)QO^X@B{33{@s{!r^;{^9vzqRb{CKcw?~WgDGKSzYxnlScMQW! zZzBSPsZ9{6x@8NZzA}Q9;!5C5TiMC8z<{@-O}u0+@9M(JSHo0u)Ess0T;Pe7saFW4)e_5bEQRF!JIk)4%!vD=B4hH4{95og);@ zRo>&2L%w?-=vG$8o2DFi^LKF_#a*q{?Y?K>mCBAJmqRk3RYR5m3V9lmRQG0JGQhJuNP)!HW6+lRxzv}cy+ zwT5E6UNK>QId-HSf(i50&_&%~(PD)beJTxAxkI|d5_a`^wmutpkgZx%5v~C4LEYOn z@h5A2D?)8L93bcQ0onO+1U}T!TqnZZh6X>Wzu2?3h_Cx9N3ygUlb1Nj@< zqD+DGj!sJqc7VNlp}3B*Es(i7@9N$tdHISdsib{Rj^SH;HqE{_M_h^VLiYMU)Zu3P zEVn2GNxWHpKGMkSm=DguF-HQ%r!+?G1g^FLhOk0NqEBj#nn^?zj)QMsE0BCd;ibHC;ziq+*j;upQ;}C22Xdk=CF4v2-vfttXG|SODO-#48 zy@z4$RGSRtea!id;~`KZdK~(ReOMA=4)a?~B*DUpCiKRRbQluEqz3O=ZWOSv1{_pm zRs1AMEW(4Frc@Y<&n|h{BDMQ9h~Le3d|6>)b@#yaxFic?jT7zzN&WO@DUeA*(m7Fx zz^1jYRD-&pX^rWrKy7S(xY11n;7u89myryBI@_HdCOUHF?i z6uwdJ>1N?Xe%aFP@9g%UHR_jynO&!iW*`X(5YL_P&C4AF{H{Qkty3QDhCx^#NOY$sA^5JbXbi zEFb|;WZ;>79l*+6E)@fsp9u|;S_JfT=R)i(ps7Y+o0+;(uct4 z<_`(0$$Fem4(}qu+%kOWDI+J-0$6`vBCOb_boG$btb=drk0IVIyhdaQ&>fuMgl^$_ zae!zI1;jORs)2E|qYsVYkgEeB$e(Xg-t2+1_a)_*9uhz1x4|X@yd1H8bVxH;Silc9 z!kA7p|H+~&2tCgk-bP5uB2nk&1kZ3Dh~r4!q?^Fe=eT;C4QQqPoPIZlZ`K@8>gEt* zQY!T9$y|)ED%!+m6Q@G#>FF2P7pfe&Tf>w22kMm-bI9=8EyXPFVK*<*FrMEK0erMt z@Ry5_m-y+#)b+ts*26(a@`E5vq37^D+TSL-AU$*gyyW=HDXy@&yY04CXeHN`xVa=T zIz1iVrgAy|AVyE9%AfJ3G8ProC@F6IH+(x&b2RomqI(-h4eBsK8hEO8whzs%-u>q5FLq&Up_G{Q)0 zxF#t7PJ0V_<>qBCLdb8Z)i{_PzDgGZ>}sM-wpLKo=Q}6!M&7)snnjLI7R@3S$ z&-w@98t`~{OA+28cWna2e&#okf0{E@+8BhYb&|+eb4gY?Zk$kh6mJE25EYUfT?yQV zdmKRLd8c|z5!;x(5rBv`G1ua&{54N?l^Q-aSdjbB9!|u-S-g>AAA(+4%xTSw2 zI0De{`4OzOa}zcF%*r9Dw0DM*b36yFSbIQJ{RIjRU=$k3<;0xR-Cj9LqyL2nf0#@^ zV*Kv*{{|VCc$1NG6A2RIbw(TJSyO(GMkl;xH-#>=<#%h;!hh__g*!=7;IoKO;zLSA zn6%vP%12H9DdW+(CHGHaV(v8e1OySZNMT|m(mHGbaV)?`LSC^TbwYcm!wXrt@_lEd z6}&SG3Ow9j=DN#`_!c#C9Zn*~xGD%aTR9y}1-*jMmb@i{UnIU8pe=B?DRe zS%(~Nm=PWW79kk|>CJpOR5}dbphx7{(2_ZelUYITX(YC3;)L6$u(`M7-ph+D^w28b z-krXY;h0-;zf>9Zy@(2e#RX@mB=2jr5x3MCIKx{+81$$~3r*_Pb@8lq{)zw{G>^># zp~KJ~;-`o@fh5~(?|u{+#j=026t3&VZsENdh--O|tx-#189#{rStT5R#QSrX7#>Yv z>SA6&7QAOg!BlQ#$f*ix%rye(Ad&sh+Q$fgi*S-K{t2@;>+2dTbJpyQ2AAo*?HtIJqv_GA1&VHP9{Vpfg>;Hh37BZln=IYY-q zhi;Qs7GsQ@!i}o1JLOPX#k{$iflLoVknV~`Hb(w-Ziwm~P2?mPy0)j8BEyIZit!*V z!S{*_;0hT`cdLPI73S0aWDwpX|np+^}byI(J31K2NV2Okuo1`>xkoc&B%ecScjpfK%3nW&7wg$bM0nVeGDQ|XS13tjJkjx2;N z5259(-tND#H41VI>bbP)nr>hFZFTIjkWgdfQ=CvR9h(Z5&vMBY>p%c6p2aIa4N2lz z?n(6ZxNIzfacTk|mA0NGEby0gwap%=q8fLCL^1IbDJvEm*w|5 zLJ-~hE)I*IQ}beDeP|}{6T^9MlPB~>9)|QE^Jw%K72j0=G$T|}RWdBw^zSc~{tJjD ztsz+yW}^5sjK%V4I#hGdup6YN9YE*KHqam|QfJxSd(JA#0+J>5E);LjGW(obNc~Wc z%4#d!Fj76=f|GA|WrS0s>c}0+r3GL#Cr_JH<%C+pt)KVJ zy!EqX`mLW~%_7D!XS2o|{9>;GGN^#vv4UQ#@H{3TKKIyhG7X1#B< zTruT;ewrOeRMO3QcR<7ngywZD`2SPCXVtCx=bDu_?j?h?F2o19%10u0><*3a<&UDPQKW#1w)wQ1f~QPoNjXv^`Okb0ImBm~04 zRq=*OLMcUQ+#XT=2(sabI0tus6Ka8Ce6NOj#5W6dCWRQrIuEysC%wF;E0wZ8YJo>{o;3zrW1#r3^L>3gK$L_}`!Zw|mYp z<=^|rgqDAoikbu(x^-jmty^DTFRJk%pJ2*zdG)R0xc#?&20y#?)8e`H^R0hx{k#ym zYiQsFuPS@*2N*gR`SAZ3)b9inCVU|^7q%&4lXJ5R3oJ+mx1NhADwLfTF5x%cXX|7x zyPIad1}{)fLmn97Y+G#g=C&ZBI;V;2r=Itw#b%r3zcd{%_AFzJNp0m+Gk#>e+9E>- zd7euyf8cl)yBgp z#mtc>qPz1+w3H_j6OuOA>nv4OK#6V+XO?VR1Ir)i8Oqw#r@OQItD^ zn9i{bJ2Q(h{5XVdH7+4BbX1t)T|&xZes=uds9yJVFu1W7mDiV$8ai8}#4RN`L$_W< z?nPc$371(tw}B;*fU@7xUJkRxh!T-b0KT%_@BSH~AK7Cfl(|cZG38pg(b;Nqf^UuR zvCd}4M3T6HL1bF+kp9`gO24v4Ik1!r9`(u?p@IM@lv6=W4E{R13eqhip?euOVgx)3 zvmh+Kwvs8?a9eeq&>{A3Y3lSw?P)`(?hk9i2k?!<=&-4%3)( z3k^n%^29PSI67?;u*g){K0=IXy<<{xyJN*9<@04k?5zcZV2(cf5IqZSsN)s=a*`hY z=Hp0shM0hjaZ1H=u+@N zA7$rqVx(*ODyNpiY4QFp<=S$R6sZx7j#gVMc=3o?%D@$5L6`@=KsT6 zEGD(u#_gvkUA8i>*JU4xm>YnZOn_VQi;pW2E1|OH9JL`Pw%wBx4dBv9rEn!lr?1Ud zW~_t*B!8;1d?i^*-+N5y_W&6|?<-ImA0TCPaK5ts0a8uh&sBbWfTYn~Ta=hp#7w(# zl)P1>o9bRuwyq*^wDPL*>MD{!mv2$7tOB_`HcT13niSGg|0*r3$!!VQJtBOF{HN~- zPay|nPF6&WDcZYvzp&U8rW{&LDiaGoL3$wo6x1=M4V?f*!NB76+;3EybJ8+JU#m@# zg4kNh4~j2Hy7f+|-SA=`m@hodQRPaItf%WgRn|U8CdV3{61}Z9q(SO&qMI+ZP=yoYshk1DJ!ejkYb(lGq!wxu2nu;gJ)RmQ1l8Zp#$v7 zc!dm(8#c(a$cw`hYGoa?whJu*OE#)cCYf-S~7ra+WL&%LWYv7uH8peum8pP<9jdg~9-&OWM zOpGy0EH^lxjpY^d!>$*CTD<#}^25UuLF8(X}7pp`3YSEHJ`GsEuV;{hFL6rZ~GZxJrFUDmgIQT zb~k%s>&!V0@Ayol{m3aSoTy6R#{xaXG*=@-{?XWUf3Pb{$?t%{!bW?p{XFhmvL8V zB^(kptftR01}EhIs;bz(qhUkUgm(qI0=ndk=YZDzp(TZ8}H<*)sW z)ws53L;i?r9SvRH8)1ajCv0X29+KS5Iy4M<5s=yMmY7seaW>|w^vhdAqq?5cnKTwe zd_ydai4CQogTK<8SIec;RCU-}H|zFd%skiq<;oP8eF9>1$FT1V5GPyqAz>W^ps~2i z8ZM!s74|6k*(R~>;j{Q^w`-SHR9|j7##m%`JA+8eJ-qJEG$*2V%U_*p}IFTd(S5V7-!C2ewt8(2q zXf9a&nE5caH8__ajK2-RS(XCe{HOJ193*lyKrETJ4HU68odCE!@GqVjwNJzv`G+_Q zI?SG~VNEipi+zBp{e+usbgPg@N`BD(Loj05Om1*f=#~&?4?gAk<>H+JpdEv3vqv6Gk~@G9ty(%4)eK zly`S=pU?vqy89b}ced1HsHrfuPbQ)lY`V+ZIsb{94c4a`)pb<(J`z}-%tFUCPHcv~ z#qTSO2@QLDtkDyCvHm?zgbLP27z20!mPfWg!wV}0iZtV&Qyna)?0*v~r>Ky2sjz?; zRdcT4W7~;;+`Q3GVa7r*>j!u0H$e}2qj$&}md*^hhTlw= z#H-f4U~vC{+dAxn3XS8i7iRhX6t)Dgfj?52Qk=71`yD9>iSQ>$0GvS8?<%0jKys^0 z1D&&4|3)qAHJPD11tq~qpXD_B{=^a^0*5mvjhVgi z_fW&DTz}QIzcCyUhSUB{A;v<&t<*{ zkGXWHsJTE4PefVl4hLeo#qG{n2xfr&%PkKxsLYPm2M~`CU@;q=emKn5g7rEoqD>oE zvk+EbJT^-iF-3k#%@d#3V<{aKLyWN08?yFee%(h*JkWN&&eLJ&_~9@S=g2uLT8QA+?ag;xSu&J^rIKbtaz*8+5l zl+n|x{8{p+q_CEn=*cmw{3Vl77ST*8^b;7f%tM!)>DNr4UY1nGxS?uubs?TjepPR! zlb&F;iJ1dr{;53QE?8|R`T=CyV@vX&5>?jBonC*bhv`R0D6zNuTsZ+O^DL=hZYZbQ zWX;07DHjxDExMSV3=rnTloYaLN}@MdZTTqD=%lBHSr?!iWbNyIzTOthH~qp5n(d={ zd#GW2RA`u<-d*5KFOKIPDC!+6#%3NUqFZG>W4uQ7wya?QX_IwM`OoMaI-d-X3XG`t z`q*YXt}YCs7LP3=Bb@ZaSbnEB9OYl5SpIv}?hH=?Y1h&1sHJnO3v04?K&Rmn#v5?X z6|>Ws06>C#(i3NxKnT4Fis)??MSCU1vV!6Z2i(@8WnfR4>u6F%(ocF)lJ$1L#pO=m zK-w5aHy0xXmH~T4n#10`8*?$Uk_yxt>DQ=~k&c$JS-ix?h65lcBQ2Stw-zr} z`9l%oQDDtT%h+;2ei3#1QLr@ho4`h)#y?`HVWhDutnq0Ki!+QIhZ@G*0r{bVQDY@W zl1>++6M%7;j87}k%C=S)l2(Ev%L1tWtvCa46S=merWHZdO@lb<^K0NnzH^NV5QmgG>R*;82sD5=P;)dfr-&!Sm_Ptx^@oGa~R#x+bC?Sz@J zEv!P0q+%-Ro!*qGG&Z^0srUkA)|b8l970RuGbce7SYfDM&JJeGu#{@QGBDJlaT54*QsWkK%)LGrd#Ko^aWalGtAhHS!qO4LiiTu0Ua}OQ z+to5pV3?ArD$QyN#~&G4i@zD5CKUKcbQYHmDr(jga1>B zM3SUT6zEpnQVsA^OII*@ZOT%&M(BFoYHi8tmZ7Y6#Wv(&px!coG0SSMXUQ9vlu*d( zc3Q`b+&A<{ly-WvcACi7+7u~-BF-oM8v6Y_=nCVNR7s1GQGqU}zKo@R9P8VjM5QyQ zY*161k+Jh)ZyCg%y@{vm4emO+w;G57d?;yfZ_ECsOJbIvUQV|f9B+!w6J>SO@`27< zWv#`n2G1)#%I7qcN0My@FMx6PNqpf8tkK}9D|@?*G1QgLvho?jvZli6WpsXj=#u3F z0pW!o$7;zN9H>yWQbyz1d8a&D+-52oFM1irThUN+#bj_~75Fe!39DvPs<^v=ZZ%Z} z`{lG$B#NqqL}jz7IjbxBLt3${cpXjGo7#tESyR(N-*Lt}FqAa4<1GCGYKCN`#>R(;cY8#yBqnZsKW5ii* zi%d@jcL6V9W-oTiDisx+lohAUq1$Xjg6vL7CWdAukOF~#rKV)Cq6BkOC7ra5`qo0! z0q2R=I-4t(PCi=-W@Tt=TyY02B5HsU7>`=+RH2gu!TQWc)8L54@Y>KQ+aNlmRos?; zABb2#8`^AJ(j9TuNe!s0WUaN+LJhVBeqjOk1TRWU+UXcDawtgg&Lo?)EtNmNp&dsl|gv%&i)=Gx(X>Jjyws>0VOX7wr;0OdF^Y9P8bOrjpM;L>z!CY=@!Fj@SO zGbZbsdWE&Od%R@+~DuH-K_Kk%Y<1g3s({rf8*jjEL2iZgj$0A$Mw$7BF)s>Mb7(?8B}PK zBS%xzZ6RlQv?GNIw%Xj&*Mx2Yvyi32IBUnNLX+{*dMQA5OfJI~-f*2$7)w^AY`X-)Q_I|W9%BSIDf_c)Ai;L+P%;?f9c+b_7`pNI2!8t5rKmx>3J()uqnM zsFW)2@g|t(#86`<(^ipnuC7T3+@|&u6)ff4U(*v{^_6RY?o3*D*xF=*xu-rv=3yT4 zrA+ORFTvE6hOxGP-azV@TVsw%XDK?So~2mz zlqX4k7`h^y%50AhjI#QU_3q^Mcxe}ClrGI<%NY|NfZZ{4eXBptoE{X$_=W)jGBX4R zw+$s@nA}Pav#vbBW@e8eNXnRH6l>0Cztra&bT(tj#vX5+d4pymnTLJ?WM^#Ut5VE! zXe^w>N@oQ0%JxQjg2t@^WQWjMvQsjw=Dx?Qp<*@()4)>1;-&s$#$N2gE?jnyD1fzoUS)wKU z^}cLIOq>2H@ZoRwIW0++3bW3NJ!dR00=~M3LIE{2||Ewgdpu#v)+n;HW`41HuJRT7&(HEwrK$Kc5DwhBz;{k85?^z?v~q}w$Z@1I9{Av=PA>|gB;c*y4* z96YQxC8t9-<<}pK$Q|vNl$=(|5_mDL+WGh3v>$XIbw<=xv3dcNuadh+U$QdDpOsY& zbBi-CHHV{_6HhpH-7Vp-pw#gO$e(4k-yhvR=Oqi53R zO5&{UaVbI1+&LhnXU;VxSpCD3WPy6-ES1$cUTGrsjQv9w#x1H$>HPZ*sI_Yp6VV^~ z-z=5MIP|bd3s=16E^k+1uu+%6pvzuy&+1A~D5#V{b+t8eJme-X6F9m9%hQ!tYZ574 zIZzyq>HDCVs-l1?GW)8T23=LkQo2TsMFsUp)Ol=JbvR|%XUZ|(g|~znFytG<>Z>+_ zPPUXVG5r8^V_N|d;>>|!Cg?=!W$IjsGpoKc*HRp8Fq8-D%Z%OE;CRPUhVoWA95IZa zG=o)9W0S1$Od}J+6Kg#CKYi?l-dzTZ{^HOCYwRw=+l?}cD@7DH%1p$VaRU%&nA(zL zoHgDlLWMV{rp&bTcz%b2G4pr<079x?g2f|4%EW+Azfy z;FLs6=dOl$yulO$MJZGCS0(U!Q~z+xER*r{294gzWX5@?Ax-Trb4nYdRD^SeH&#&x zik(S~T*bCh_jKYU2RF)Dj#Fj4_)()w?W=Z?;W zKvCAr@KHsib>6jJ>>sliKMxU&Ioi}H}l z22U8d!H)=rW5$+}tYLB@G$Pj6IgoT~{I(s9Oa-e-8Rkck&}7bFOcm17`gox`)E=+X zn!YB)nk`pg&E~PEF^Y3EePuyZfMj>dGQXrctDOJM{E+&p)LF{?Fh|{ZxDc{S6h_v% z9jx@wRKbl!kkF#uLFZXH9i&^byeNrz#R!!GwGdPQmHwo!8QoIMiprz}p#toA;IRyv zDB?!=YNS!&dR`1X*Nzq{q-26sPWB5m@Zu5n`>3R;gZvOmZ&rl?+BdD47maPDy~}aF z$8W27V{Dd}L`Z4u<&h}5lAb$&!6ixjCF^t2!Ypd;5a;`XMZH?%d@RhM_J*8hF+#n$ z*;y#oQU1-&_r&p(d8PBRI5hZGDOhIRM0BD#UyGUY`)>+2@;Y74>VNpurLv8b(+=Csd^@s952cwJDOa#Nu?knYRS6 zu%NSA=BG9YX(IX4qBh;Tw&?=;5d%6!$#avh3hv0}(Mgc^m1&~ulh0ruG8W6bB z0MV9?2s!8E_Gn7TOjn>*WGZijK7;4103`>S37c_NC`+lE69<2%)O*ofFt5xCg2C^r zW*ute^i)c)-*0e{N{(0E#H=8uvFZ5<1f!x0%A_e8TTwUB**tREi1TDy%zjK%-2W2l zTjIxcEL5jc_hM}E9ZXNOAp{bPt6YiBwilq2yZ{FS zPmhig`KUT_Ru-B!Q8QDjwtQHqUQpXV%4PuDDCegbjHw%`tcnvtc)n9L`UkNFL0kP| zQqUG2WIE^=tKp2c30m6PQj*dR{$liWZ}~kbjA5K<$qI&&CWJ?gb=aobLgu9&27^y% z;wbRf^-Xmp?HR!|)TJX>=fS3UFpC1%2owA$;{0#Zpc42HMQ{U_b-rzi4+U;X7t}IB%2Artn&A15nlpm+!g4Iudb5g&;xQ{&I!|`Z+15Ne*C5y*JqzSd zU*(<*=7_gn9DRt=GsiTUQrAuMjh~F%-dpJlk4SNgz-alFYbj(s1sOl*nyW`*yFM z;}-<7A}8?RM=6en4&J~C=lzgV7k?8cFQBD_gLRMMQ8M1h_3}_mJElUYtLeYH*aQcq z!2~!f4Q$4lB}puU6H;hnDf!6|gdd3lVsko-I1Zez4F&!Xn%OqCCeEDvE1L1gMr1`k zlbH?@z%zktj}eFj+b@;lGt(Nej6BR3hX4^)T1EwmaEFd870vb>d1$Z$|(>Uj&2Rpe~}tN?#4ZjUz{eDF2`LY)Nj;BBOvll`)ykP&P9 zvpF)_MvNw;2N0MKuzE>=>c&-x9lOEMs}i!ER^B&zsH6fa-y(}bV8KB1hZ`-sq$(K0IE10 z2I#9b1aReD0BEj(cja9K@L3K39XL)fP#%(^@aHEAA;AUnz(elbU<(Hi??)X=BxdZ& zQ`j0YV@>y^ME-Rre_p^-H{OSifTfoLV5A%GL)YR9%VDThjL(x39jq8n47a!P3!;Pf z&qDdJSNj%7pYpKs(i2#pcp(N9iBPab1&RbgkxL?nvLb}4D?yJO3Xeh%4|FCahxd+< z_5|tApU;YtK(?M0KYyNS5T)mbBt>cL07fZ`!MQgC^OD}2ib|?+le2R|ymrT43fuCG*0=JJ1{XBwxqm$hCAw6>^Gj1qFi%; zIpm9x7ijs>vuL8$K?2Lg7BD8OJjA1{sV;SGKZj|^Z>6)MteZq{!!zl3K_DfY?;UX$ zTt?CKSEXh01KV>T;TqSRQ6&MU&UIw`92i!n}&MFDNp+P18y z3N{ThBZmT(po(cI#H#pCQG!)BWiekBT9dl`Wfu>F{19Vp6|DN@ahT_LVq)s-Xi7_e z@CZ1CYUAvO=<{k;)Y3Y!Y0sl`uX9>pXr#e^t(1U+- zRzzHEL@*9dYHUqtGDfuCO6Cf(MCatSds6PM z686AHxU9tMvdhIHTsSH5GYX0@A>+^=`e;33Y_3Bk(Vyj=?V>;w}>&1$7=&R8jQUKfe;!(LP$beYwv-B{%n;O>IKN2XnD(> z16(0A{oSl22?~W!rzD+3f`BA7t{@=n3=US~if~L?N9u^N4w&6HoF z#)TQpl4K3?CzuN};Qf$Byo(k#-vmJj{h$rc!d5>kEpW1}soYl^;2I$gFeGJswShQG z4qO2UpCS4zo-qemc|0Y_M-I6&C;axvA=H2(4IL0*Qe*UOfQT6)>ttd7U@TWzJ`8bR zy(`}+h&Wo$HCaiKC1}y)FLWO!cxbkdRbUOEDzt61QYPV@q7#);sr?X>RnyujPfE?a zH`~S19_*C*Q5G&6j#J8jCKS+49rp|Yse~@nan6jk>d7lt0>Z09z4>x5s+r%(N*V`; z8#%%)IKmnTLgQaw5>H9mR~xV{t$sVI2zZ%89lm2MFsmIq0hq)Gut9hRjx>pEsP^$T z7ui@@@Z)XGlBPAmaQ=83>85ikdOUkyAMFLVb|xil@y*1O!A$=HGg;Df_^Oe@FeZdf zhn@>JN*Z0B(u~G?-03!Xb98Xivly4?PjP0???EZrxh4QC0o;MbGid{Ng=QVvoo_=2 zdmh9%;|D^t*DyT~k{V~qeSbX#bku_5Gr?2XBt5OcMapVlJ&Kv?otpv4m^bx@kEU}o zAZA-@7AY5LmnKjkppR}OAcB9^q|OisjBv@6(r`L6$3_52W~KAJDZCxo*(_OU7#}Iq z29JzdqwA5JQne5SXPMtYLu(7xU}az>$63G$WRC<0mxczCvf$1NH(1=5P|D)x9>um; zPkm16EZT%RylaqJN51dGrVh__KJBjhkS|DoT!)J1*1%!-aUIhpS%wDbWSOVuyEVWb zsHd+g{2+{QCk`=dLa@+V_Mk)CCWp4H10&eb3?)0muPcuu0=k8y8+2QMaPlq^4(YZ? zo%b66;h|LmQu%%Z0i8L}3=jo*i$~zwIWx5)vFTaNoH#rh&|E@2hzy>m3OnVYTEzgrXytJs#U=#7oMG!IUP=G=#_I9p*2_9z{j@AKraVGgZGD;R6{hn zV2q#cYvzd{N-~4|;TR8Q&FlC7!ufG_k@tG%lkAAmOLtr%=2Q1(Wr0w8f`QH1DC01| zw6k4z?^b`fOuE-DfIC%|IG#9Pq|wg2>7#SkzlSU#)n%;uxbLAE%m`Nh;61n7>AqkT z&na2IxEQG+I2g!!d75V|52?T1D zZ1WJBfPDTufxMiAzTuS5h?U>}3%o}g~aNeQLgEQt+ zr?)!ZnFGDG&fuB#$jh2OGdb+o33rdcQzA6W7%(|jxu<DXKhJE z`#Qpm3BeKYSsTXDcK)BUaLyp=%j3=sbJDcuUbN6)oh2BL^NTq(-tEqx=A@~!_c@`t zwcdKCac)iSlbu;bHxb}UGRv1Bdqp=zC~x}ym-4Hj;nGU!=APf@HzgGGS2gRV%YE0C zhZ}VB{#v}h|Fbyh$8{j=s|H}ln0QLjiN>T)xD~G~E=C;b6K)MB6@Ak3Lei@>`%~xT zxeZrr-j-F2vtN)!5RMQjER(`Y=py`lMMgGO>~bv&l(c zHDu`QPm_vqbu%JkF=qCsq{W5?K&oGHdGY4DP)xb^PN9AKb<$sd$aT6yoUZe{}1Rf;Z};7 zrw1YPYxh}{9sm3v(&l5A$QO?8`9l3i&t}z3THf2|rU*te{*R$Ebo@L)Uchb$2TyMW zV7l|~`6EKFzYM5kfhRGqzw8JLrcp;fa&BCZpw^W;4=tEhOP7ZlRN?w?Ruv@Jn$Y~N z4~GFc_jXDZwmIbs?_2cD?=DT@^;UCgaZd4_(EGc7w%fO3Ox~PJ#{|&0}I%GUk@1z$sl}!1iOJ0aJ zUAw5IjJ(z?;`C$ce-losT8Z=8qQ%iH(qdq%B%q7~+v%s^8RHDXi;T3>wwND4EH2~A z;mxW6R}d7_CJFO>?}+0pPJ6@7ON$2~{2-j~bVq^f(ii^V--E1eJ7;tENIY#+WyWX+AsuHEe;`SO*Aax=`lGF8vGB&$92x9 z+T9VNBalcGvlqulTJmK|lg3R$BuiT2JfsgShF%O6;E4+7l-`shQB!%t(v&76W{BV0 z1ti|eFzhsNYNBVz>;FX{i$20jg!y{KA59~6BHMX(L!uMu0c8q59PR>`X7U^B!jqA7 z1sTI~JKnv7Fy*~}AqR`+h)Se9(->~l6z3;KS%v*ifMo?{BV+%QK}%WP;~X+(^lQ|h zv!+yj-GRRCtu+U5Db*-`CEqC>Ed5DV!;TThwtDjyn5qizfTkjR)+dK|1f6B3c*RQ5 zB{`xa>un!oHC;8#esKiHKw~juCc_%~NMHa@2sLp7q3$*QZ#=6RY51H%&L7QaL2@|T ztU2e+X_Q{zv{<)?KKdl9nX(QvF&};6{N0+9Kwvs%Jr&Pdw&F_Ian(?(rvCxq!?Xd1 z5L0_lvv2lNk7b;HEQ?a{gcDfaLOs*y%w9e%lFC?6pQ9YKe4R@x7h)`OAMKgokR@Q)ATJ!V2l=b-^cJNwZg*MOckoolQOZBM zo{1g2x2w=gISUUywE9+W0V~}(CG3psuA@Fr9MroppL@)MpRD2h)UU61lItIdvTED) zmk>Pt4=Iyxy4pqOO3%T+uOH$qh)O+0%?GPC$W$Zv8iROUgQ-D4(90|pI)*sDeSLvDn z6HYh(I(xc!f~8MP>cvq#;(CK5E}z~GG<Yfp0tLq5;w)!q5FN zro(5BeBWIa$c6?kGh_C#DNcFtw_(zTho_$3vZoJqLAXK`UWCREUF1f$SLCN4peI9q z#a(BsGMpbVhEzg)8&ib0l%XbmU5I7ykVYg|hlB*CHKK~dpDB0Vy|X&EdMlZTR5uZ7 z0l#`HSvU^@XOS7=VhRWkf`#+a=z3D)mf_)gMQFMj^aJ-YNnJvLOon7MAUvkPRfF`N z^*`u^Jy8Le=6Zt>M?!E{a~(;Rax=~`%9;dTv! zK5%F^=|6t=izt9cvC8fD5ZsAyHl#$Mts>z^$ni1f{LWY|JRAEfu3QNc7B?(~^&^5y zB^Y=T>lG2+GPIHobi19xY6vv#Y6fI2(wV<#!Vw#tUp4! z&^H|G!w9_#E%X=o-WEAv(KW(mN0Y2rPw)=y56%>uM`BD$v=EVLbiM61qVLTLd1Qic zYA8}Bvzw$@z4IVhzAWwW!bUZqts*<<wM9Z zedjHz28zn$KhI?D8~`{%Uz4G2z=zCgkxR)JBsiwv4gt~dKY5K{R^fLQvdV^U^SuOV zhzvzd^KXm=Ei0ca19nw=CINxxKoOaDH<_TCKJPg9ROE)9%b(I<4cuAGk?*@j5ExDT z-Wu2gIm9T(kiNre`CuWDL!MJ0Y}L+G!U3bczysm>#`^$5b~5qqqd>;d!Ol|n>FT46 zh*9|ow#6VS2y5gjKOwcO4EEB>%(T3j!bq_gbBX4fG5W6PdH>P zH(d=Z;SuNlh2_nPts^a!#Urq7FL;NvL0(Lf#eBmNd)z-R1mN7j2zYvgqYvN$5A>gHM2Dsikg+&O z1Y|p=CD+qPoPrv^?z`}J!{^?cs0+p87S!}S_};4RX(T)5TUU!rRu z46X5sMBHdRtW$J!U7`p~U32pZkkW=JA|DYcn!J7$th)GIq(~y8F$-tCt48uSF2fXG z-~q^3h*S{bBAzb+)TId=m}rvmPX*G1{R;q4z?C4jPrn#yZn6*~n6OtxjcmGh zSq|Qm&z%7e@VUZ4sA!wS`7ag@0!HNbpC)cbyhq3*dM1<7<#$Fq+C%;Mo7zHAZNk4vXUgVY<%x)_${W#(rjaO-{@xEj z!PXZq6xKr4D8;Wh4?i^8e(GkxzFkJriy$;^2ANqF@@i9dX4fcp*FmnqMNgt%n+M?` z4fsj2RvQUf$U%CdHBX9kM7ohn;wJM)P||VRYToN){k9Bs&z5U*&g4C{RmtP-;>fg~ z0)gPV3Q4=V?SgZ|p5bMkn~90L(i3AkHzUt8Q?$)_eovITd9L&Jo&n{HHZ|+KFgprd z@QXI#@@M5IPSL}ICp_4m)dj{Mm>gNvX9mmPlLVn7PVqv3j8kWM2tQxGTMo+7B2 zoa@K#LKV^V8OP^3s~;YsK#j+}X5^VB;2R}5#M4k#kq4PzNJL6U3QI}{4Y{nIFg=JO zUARSeUU@i`+zm&DU?JM>o;h+%BzH_nzmda?QE=jWYswJO>lH4cARjf_`%VcA2VO9x zkALkHJhG_a;&%7^gZcuu=y+k9)3i%$v-ZPwUQBatB3w(ibIT*cscWBbo_i!-OfnUC zY4bMcFOM`(L!Wa>_os#<;|CU~zI4Z>_Wr3Z%8J?Z9`!f}#Ke^N)EHbfqF6z-~XV; z2T~WeJFSmLM-1u&P$Ay%zV6ztZw91eth;97dWF=&U56x+a=vi3qh;sQ&eM-CB&oX< z2ZojuzK9M~vGkZT@j#YZ{{!dt1Bo2&8>AFB!LVmES&pjUDwhi5kO(U{Vi|gSETt+( zpL9nBc?M3OC*3GJU&zlRMC0-W4jG0;x==)g#~AP7*GGCl{bGVN)o3Y(+3Zde7>$uc zNOR*Gq>c|Y2M=KM+_9KpjhQAYL#L}6QN zXf!WrJw;hf;#~PdyfT1DP<1u98C>codkOCeFX`OOUaK9cB)JA1+L{lHwXGt?>cr!# zABi^WqIiKA3r}O6xoGyq`tOb~VF z6cD7HyrXZY1CeE9>ft={LIK>*0s#IWsKBL5$p`|{QjxMby7zV;kw`=F z9SuRk@l7&UW_8G#kH{w(hH9iB~N@q!F}55L^@SS~Nw=-^qIfM84| zahWiL@79EWfF>gRe|?LI$bt!wtNjx1i%BLVL*ZuSGyg%-p;e@g+SuzPAY2LzR@UtQ zVN*Qvp+M2HMy@bwh*`y{TrZv?nty6DUgWhsVp|efh0o2bTzLr_1abJ143WK>xmCp+ zwVT>VB`a`E-_8d%fyn|w5&~HbZdEK-vko(8X_GiI(r^wlz!KCoa_(Rwp&In0DX0bq z6ino&;+OOdTmqH#bY???3n6#%^x8IbuV--o5$a=Y8|j|h?Ls{cj&uavTU-!_KoGtf z1B!E-5*9+3imZ$Nr}OKf1ABHg^Ep|EgPPSJ%Y^G?9oa6ZBelHMx11ndj(%iUb%R?L zvm`lwDMce5c|Gta7ea2Gs_A@+6&VWG4Ny`2{D*z0BRS%@=R$Ut3_}jGtZTT;m&ZRH z#B~QiaEubn$?uST)uH`^*FnMTCFM{6b}yh1s!3cT3*oamWE)v)QDwdc9fLv6+Im;t z0;4u~h;BdM%Z>>pyg`@g-iMi&lTmbKlRHc~!pv}?9!wcW6`@UhfVdS^*t=qAaWI;{I!TvF!oLD zXl2UO(l@w=dZlL!9Z27hL5 zpZk&X<3lxbwyIeZ=~`GrN=K?azE+@zkDymQQxSHjM`QuAX$T0me;l^vivYRL0vAt3FH#A+!TA=_0*9Q9KK-IQO&~&ecHaOIb@?!WV7N}n zgF+<`#DLiQZ)M##*N15*bhx@2+B)I~GF&CSy@dj}s-2PQ-glZ0#|PrJoRCqK8+$J? z0>>p`ww*xa5y4vbRoJ=Va5W{E&d$SCt@rd^yeDknOgRZS=$9ry2R>QW42XYfe$~Ms zjvrD{#XY5>~V@bOnJbA8EG z`OfLUlB-A+ecPk?&glR$#Q?E9_g;eR-iWp6Hc~wDj3Q7km>W9^pk>_DKjPf}iz@yW zos>w9wXvS1+i<@Kho#rPt6@HRHbfxyB?!5ULOW-EF=y6BnN+s8EhW8`YhjFq>H+vs zUw`~d0Rp(k>;p)>16Yt0eQlCDJq5ksz)^QS@7#Q3IJMkyo;{MvZS26vqJ%TkHy50K zKxAYo^+IAP@*JYUz62@P!L2^Rkw7LI4Uh@iow-` zP{WXL0hSyL=mf!;*I~6VE6sj6Bp1)T4%d$Gn<77ne4Tm=4pU@4awH!Rm*hII>5>hr zT99mbqWZdu*hjukK+1m*BxUZ`w14Noc1U~<&X_!r;)Ld)19A8& z3x!X4aYTUOYjg;b%bbi44qQShIlMAQ65j}t39^i*;-oXf1jFxz1?sg7GzdXM`p&Gr zfm;p5gzZZR=?yv`smHf&#HwGnl!cY-+T5*{}m@xQ1$Rd}t02=v= zd{?285oAQ%??!$!?Cj@rMIJyf8#+N$`^4kK8lb9h4YU$U7$xT*>NVym}XbsD4*DCngdd zzJv`F1#`>Djo_02uI- z?~7bllkkzZ-DSA2gg1lyID|u=BhTD%XU&WKR*bIC*LB_gfb*LdUV@w+L~4q=H}>^M zuGvV)W<$)b2!xtm*V2v(lK7uvA3$mg0l`VyOE4i^;9}+5hC2UvF`XOqGg6;qdnK6n zmxe~7K(10rX)Vuh$jT7#2gLOBDTFjJ`3Yp^UoOo9<{@sZ07n21@-u<69eB*7PyW@d zL7V`YlizVcZP)iT3T&BBf+RDNhn8d(O{OQ47BF!$r(bk=55}gLFZ_sn<3;Aps!Q$8 zk!Ber72q=(foq&IFV!x}+i^q*bCHzcUs&E(A1NSA;e6a&kurQ`gvO;I*aj%{S@;+y z3P(IHa%vLMh7g={=OQ3lpAipqI}3hYGiTm%+_MqYTZZ@b8ffw&w5!2SlVr$MJq24p z0EiM^I>3mnp^C3WbEZMMnox+h;g89IczZ;V0ysl|Q#+1A9ihkV~R8L^3w4 zrd@7-)`kYUjWj?`xgsLHzLyiaX%zN?X5_djFaOH<`ed#@OPtM^^ zchtP?La!u@!I6qPHRhnszVe$-<2sM2UExz&0~bYA&QCDm;?fBQ|-{G~?kxV<9VG++H^ zU-?`KG(@vwY;U=SNgfZ4!tk9{mxk)331Hi$u>+&&DFA4@3aRF`&h;->t=N99ueV)= z478NXOZ)%bSE}t#Mv5%!E0em%|9Dv`qWx!qubx0jXvyQ))qtY7Ww z`Io&9JoU@VOK^N0|LrhJAL;zxZ|j>XpY45D!&E*SB6x$TK)F}kddH3JxvXvQna0Z} zd~vbUek@8IIpl0S7AbG-DQc^@e99MQI1e8iMva?BYVjM6UDi<`aLwhVCAaiVBL0Ot z3D^_VsKrk5cY^PYGX>7*-&HqJ2Olny{tG2besy^twQZM|;?G}Rx~a{1>~~6T@4m}` zP&RtkQp0@ko;#?8K_A!-iPF3B&o1vUIAQSRD_{NMWjzJ{d+3?hUH)$Wf=i_WY$GBy z9mk_B?=QUs1@Oz`mz5B4yL_bgFW>3FmNl2v44hi&Xeas)u3>FLAzR@qSpOa@#BU6RqVd=vZ8OzGUVSf@kD|_ z2z0WD4{z=&By%8~gRJ$YCwgnwAV>pk!n87DLcMcz-v?(-aL$~hOFww;KbKLD<%&NP;=r;cR?mQm%iGwZ11gGTF7- z>ehO?y4yRgYm<#hn7!TBnl*TlUY|)nTR<^WJf$a0tHbKC+O_U(?YcSehXXvvQ}j*I z_z7B%HVdt-_Vz2S9%K1c-79*mxgO>Ne06QEr+iiGnwgen&h#)xyc9FjQ@(hnwZ`h1 z;bDgUHB2!xJmt4sxuR3+Sh2yH?P0n;^f9wNML(Qn^-R}#mal2?Fs(bCRj)>>Pe18n zvYz6i_q}(U)|#H~wMI`DMmhbWv+LC;HFvA?i&xd?#A1s1yQiq2)ib!gJ>l=t)~s2v ztkd)qGhV0awK%nGjWhDK;Vmg8(@+rm#y@HOtmT?%b&v1rT+^d<_NUH9;N4@RN z=-1n;vK-9Cxt`?IIh`F{dy7+C=BjQVbI$8L`FgU2M$@%d0 zfw{>H#eC`svs2#jdRXC$yL`ZUcxraF)p^##++S3)c^pu*LF+cJ@G{%HetbG3#Ks5WXcUtNPbeY}R#adaPAToqoTs$gM3VU!WG2 zdZPQXYsPnUt+B3L(XkH(U*@IJ$V>DVb!FY%p6u~4pZQ{`?3!3n5#C<)4wUtxId3lavPNJ{bp7P!^bD@y5=hS)L`c<=f zx>s~A+vj2VIo_eEN!Bw|A>52l`53iji@gj(`B`C!w}CNzK4xj4Cirt;3X^H=oVB87Z2{cvCyHX9 zj9+C=Sx!A)vV$x~E_ZJ9LRLo?AxO?bZN*704daD>)qUsO6@{BdB_vb{cLvbV_J>bc^o z73M>*bMg7=J3IrO%;`$%R?2BTozSlxP}7Okt)67HcvxfjK#Do#Eu!x9FfG{BMRY7V zbNrctMeXh5yH-COhHKLda|07O9!(mhNJF zuXsblE1X}Q9=-I&8bqjrL%`L%^oiCr7W39E;!mAWMjL5I3jJ@kZodtgyG%^?mg3Yf6 z)TAb^TM!2^m{S+~n0LMOtw7+^uC;5dzg2lWXH>P94&&+q?Z&mSak(6vH(HdiH4>_C97N%x{edF7vulZxa2R-9~aKrG@&*EGjE~;S` zdOWn#`Bqi#1%%j&sKQ@*!=U`6#eta^OGs`1OU&Sln83fXjX zJh59_C$8&h?OeUKtE7NA`fES4)ECT>a%lkB8G5^~#{YnanOIoD+OM%S1z&rZmrE*G zdw;OTr?+1x1$@qPCZ10OJovopiN~>jzF^=RPcwG(YY)Do`eae8@L_Mq ziZ!dX9^+c1wx>1oYtJD6Oi#_&eZ^?Aw}y<$e2(u|D`}H|7_9AJ_($zVhoyC{UHxy7 zVy-H#z39VQXRlagb>qNJgE+_YE{Yj{!N+*0;B5EJEHC{KNNPs}{W<@7d*IZ+dQuQO z#j#r_tp|^UjG6)x8(bWl>6ZUJIJCpVgwOhzSG+}?lh#k@)~<#7VR?P*8*2Ql6{}Wv zSTn6G`L<(1UK8Nh~76q5!1TMh|e4@H0u*7pq%L>z)y?n)* z7a?A(ikje4p6smUUDwX@ASXIXHQbu*?CoxI0QcRsyZp>5Z)GmqIlil-t9yy3fHgk> zh4lB9Fdn)a5x)85H6_zLjGO_E6s^3bXZ$R~q2H}5WzA{lea!E@;qg~OAl%&GjD7cq zv#4XES|kaX(YQ+`~vC_Xq&Gp;t>^WFIt_h>s_j{{e+x_?(duFm}6q>owQiGF8F zmuAkJIwgv{HtyE9e9R(G)c2}~eyGGro*7L2c&5{OM(&U4G}ffDozGUFn({J)=f6Bf z&bBiedv_Nkp0~*Nfak5T9UWc9)D^2&TW0I3W@OCBzdh@e{<*f_X0;|qh8fqfdWy%( z+#);8e{QUMvD?pV_XgX?q1Dwl_;B&|@l}4Du+oZIm4h3ncLj@CeU9ba`sd2r{DppI ziKlF9C(+-mE4%*YW34N`^+ARf75xxj!Wc>6nxrzS_FLb04J4wqlf|xGeN|U?hxvn% zi0xRTUhpxGd5WmTo|*2eWB>~-X02Z(V?_{*PkRtEO*;c(W#bol2DZ1Ccxc32Q|{<5yIwhh@h-&4r^#a~l6%Ihtf@3{rMW_pKaSWCSu|4O8$XsP!b z&&;kKB9}VHc6Y7qG#4!NF!xl}&y3q|m! zzTyI>=lw5-+&zV!0^g4FnvY5Pi+opkZh@lSqjmR8dM1T$ng39!DVpK=rqKEEUn~4Q zcNDVD!+(t>u7|J-dBYdHU_TSruf~RA(NnB-)|WE%$8`+f>YV*+Cd`mr5vs7yM zG;JQf_>Zr2S9+5r(3sXuK^)I8iff=Ud6^Ff5@!D)6z>1?g-Z^4m%*2JDU#tW5+k;4;k>hd4ec&KoI-#|RnL*ghy1Sw-0|aGBx( zL1%XU_!}=~(gfV-&BYhejC>-w&a(}>r>oIE7u!Ne{c!FVIB{!+#82nsYX5R|WZ-DM zVGR}AVkN^=&c?QpdB0GIBw5s=*~9TuxumiMD-HUCNOG9tjQm0F1UeX~_BVEPx;@VQ zc(_Pn>HF*lIhGd){nTLfc-);I8#qv;3-WhyNqzl(OpkFAoVJ2^uAfowAkYb@x#)eq z&-&vo-lezn31^1WcW7VfnHb%`g}m5bXP||ezL{sL=`&CDJ#{8A&77Yp8TonSc|1=e zR1s&u?V7>y2?$J2#JEg}w{w z&os!{2)VjP5TE4?dFW3wmsz%;Sw&dMqCvc6ZQq?|qsXDY^=H?lm0+HK!y8m*!|2!A zh=E#^$!^`t0lO4*g2sSDEbpf&51IKE z0@S|7SrMZu=LaSy;{oniCx|xAAf{_{X7|5M@|RwUX znXl>UYdtrZPH6AD@0@ID2(!?iBcO{2I3iOliyGYMexM9KeA!vw4VCz8747@v+yy$n zrSI4;PtyUxzT19H9^dN#}>rd;i^6d)`Y8Qs1HTBj^u&-_`SV zaN6|7eO@J=Tsz<(%zVxd@MxUtAMr>5I8AJZ}A3Nm#=7_H=Z*Dmwg* zBasB&Pp8e6zF8L*4OC%l%DujBKjbARb|&8fsOk?tl$qT}E=H*Rk%gu6M z$z`MN^H|Xq2I|*%MD3r17G{=|q11&c98B*6n?M`_(6j+MIuKvBdW^ zUb9%Rwn#&z$K3_ezroIl&%SCB?NE%2JlxLur^sP(q;K7|EDfD-s03$0-_dI+dP|M{ zJQXLSR0{^~$~BpA&zrA%2yHyQwwG9G)|YEfk-P-9C6?KJ4z~{iVs~R;L8p660>bzj z7bh!O*jPt;nsBUkmTR6xOjft+s*nP1aHoUQH>=>kvrcE3SlW&A|3$8r)jgeR&2hW2 zq?6Q89e(^$d5{oS{MxW&p^>W_(`j$Z-H#BcS%nuds#*Q`7G)qMmGt}<%1lb4>Emi; zE+xB3jFQTebe$Ing+JhRFHkAddD5%SEbAPzhA6)QU+J%Dx|i*s=E9fM$#g^*?^Ln` zGTcJvzDq?S9);e#qe%`+rm9ys!vG>~pCJorT6$}gVUn^!AQ|CwG+#2tI;IK3qr57R zQvK}jOxie&=-{HnZD;n0DiTAOtoFXfq6|?JyOzaNwQmVaQr4+SI<3u7j;KirouO9F zs>x`3T{!@_i+|wR;DHrs(F~yC#uAd5mvx6A3y-ORLGYsKZ;1~hSYkEM^=E&`m%!zc zlF*tvOj%hLRt5|3i53_B|R#Mi6>RqkN|$Cum`;vL~DzAMsjJnr00# zyaq63ZjPK~AC}^iG&6B*t}rin6=&i{i*IDVir43} z%E&rd>I-y09UKdI)$M!JfkL;W$&hwc;@c?nN2088bB&=T^DZYIMfMX>a&UYZ-~!)* za9%44DXa(LG7>Gmp}A3U8R5lm?W`h_`-y7`WXt%nQ$+kjh!B+yWkx>|H|6&PIca=Z z-)ot+D%*qXNq%jYwNp4c;e>d&KVO2_pJP=i;dZXB&Ku~kZbE^4i>#4^lExm#)2eWD z&h5pr=t2*t@%XS&UQoyoFHjwv%as%Tp!(fel$oE?@MUUA&6ujDXpBtGZ&YUI4DK7e zy+&-=If?11&)}9xfRNChK)}bGqj55Qnk!>Tr)b2LFeK?;OFfKI49oHQ?VUx_(b?R; z$IGf1BkxV|mO;ENZ~yxp?Af`C2g-Tnc2Da}PmrmHtsMjMkh*Z7tbLz)A*Qht=m!p; z49ImHRavw)P8GcY3WeJ2{6uRpH=d?ibMDt_nQonYJm3y>v=efxdsVfSMfi**axd#X zz^Jb1VR(StEkPN}UNt;UKgEFCe~GfK#tl*MJ4X=NdA?|wKFJC9^ZLgjhrHvFb(1(1 zPPdtyI1Rt@*#Kx}8nJt%Y-@1Oayush;69a|%D+tM(F}uzi02Aq+D3qdi9Ho~yu7HO z9MQtjN5>cra$@qxRMiiWVk}l!UR}IQKjdwI`T`RpC$paprrnha;a?m?HDbTjvLiI` z6;G>2S$(dDQc&RaN0M#qWi(9XbYjI?Sqp8(GXQfI;XC_ONdQdf#?kyyjiFR!&Y!+q zrXNw(-afqW4{lE_#xU&TAfgMROf6%o{nehAI75FTCRC@=takPLL2an$h=FoB6K2PD zP*0h7Yq^k_pRYv8YCC7cA?EfSEkkGXySJpMT@hk>7=EhKAOrig0S*oCpBx~kRQn@H=plXp5g@-n`6-&j2bZNI+ci%ot3IIS z##?|j=dBnV#Ih;t@VFKnK_^`QB*^M*tWkM4Dw}J0`HRuWnwxwg{ zVtu-bs#5s_oIZz#H`cwpg`fIV3ADvc8?k|2?H&vbk~6%(iL=khB@I0uEy9_!wkUVT zkf_ve0R&aKLxn`aD=P|LM_zbt9-d9Vr3>ar0ZbZ$Xzu{24Eq!9A-J6ri5}{rR?URcjV#N z>km`Ii$wgYG&MY)7mwh?-!)1$yo5~`+v$}|*0;@r`b0kIxNE-rCLJ1WfK#S;!l6OL9rT+bvRF9A1;m zN5Tuw>GSS_<;d|mwdA59akF?3xtre{%(rcBsAbtt{mZZys^W86%PthCwJWD%i7}Wl zTJFV2hD!VajILmPXR;=iW>z~J4X|VsteM6(ciun@^Qd^GGgtHD&aP6G(i2C91j{y4NH4DfUS7kFYn)Wx z+4jIpJh;1-CD1wb1*IO>({!lIz4tw|`Q!t#4)n}_aS;6k@kOnyb8syoSoC3G}3m@v`{Sr1fa$6CAW{(uumK|{H$b8?Gnp{PKDgDYD>&;Dc`dU=g{fyDx- zcGhC>?5mE+x>k;+tfQlpB?C!%)YN^+8V|=8B?~^z%C@^p70RK3L?SDcF9#Ai?duj9 z`IW41;k33EX!o6mK&s4gBR}qb5L{R!InKp%~ z_JoO5@4_qt(zBW*Y37B`sP_Q~QxnAfG+6lKr)Z#`cnf5s!kj%^Y5_J{*Ax0BvABI~ ztgK%6i2BGAn6UuMJ4q6MWrw2yW+S)nR-Jf`S?mryn}X9JTKuU^rbd$FTCndmvEvI^ zlyit#dD}<^>L1*$e;Z(CVWUh>KCGNKlEm5vASM;&{uYNFYo5J(3Iy?Qqh$W`Juu_! zhf@C77+D2GfB91;`>b*lyenL$MK6R#Y0Gdq1!gT?{|YtdorskAy{{=VBqCWJeF;tG zy|P^9C7wR1HUNEkR4v=saa?iwDDnz+DVrrSCcR&$+4Ds@4@;rfms-w_m2t}qB4F?& zD&K&4MB^hU?--?EZW~iwkH9LIxJafabiDwXowIR(WZ5xVt-)wEt;8`}_9B%DCNi1~ zP#!Rm3`oH6iOajbQ{KYt6~I939r4P0CX&|A_;4}}6ZwCUhyoZW4qQ@nW>QGzDrIIe zgxD0XnWW%uotb2iP0A6L*Qi`ElZs%l6EbCI$Kr3x(Fs@THN%?(X3W&k-H|=w2N19- zPRMMHM#H+1u~)V-)7}Sf!MCIEMMFvn@CG{xGZ#*(kqvp6C>kop{g5o!IQ1(ebi99> zpUMtd>??tBn7T#V?@8@tH;tX%z-~@Clt?tThxS|9tp~)2KdO>d*s0H70~%9w{0ckL z%;n=@<1AX5n_^|g{0T3CNQe-_`KqKX)&4OZ{&tKU+k7*#EtV?x{4aO0<{>A$I$R6C zK*a(@9z4+CIor9^@56e_L&c8>MUk8zRvRKh2 z5exn5LnSkbB$GI$If+am1C?D#q%b)5N3ltO(W9U?CT5u7G?F4LzJwVkh)cudBzNGe$)R(jSxnQtNew$xV#oK%6n{?f z;o_9rQdNMCfA|SQ;kfvTT!vpNg`zx(ONF+sPfMgsyS4w zhisOpthA8$utmqx%OH-q(v@8nQkneCU4w7*ur3yw!IepJ(uAHjyLvIQA*t=1FYuD? zPzK5*lRThQ%VZEqRA$R0C-IvXWFA45_LIyBJwJR7i=i_zH}!$g!!mV5ue>aiY|>Bp zRVHbw7hab6X^NCgta1PRV(>K}6lBq2rpet@B}kWD;X(dxb}}T1|VoZ-K%&~NEO+x>`fsn6DtnO<&3iO2B&X=!1n3pRK5`^ zESN2jql)ugiX)YLO7fK9gGmnYDxSe45YzCqT;2%8aUVzXo5j!k=&M~;E)6Cf1D@X~ ztK*0mp;n9eKPT&^aabXC{|;qd8YvX--JYyD`H3cxFzM>>x5~?Dq>^MQd^%CcX62!D zGFScbDeN{sD+4k}MtsxLJOU{c*uS7j&7p@q#2IqI@V$IknVvx|5xvqhguF$pifJg$ zu1(5_p=2DHr`$7?Og9TxCmp1 zgTU=!8lOE6_Mm^>RkWF8O4c2x5j48^BbrL56Y)VOPV(X)e20DCLHRJ~h`2{1YmMKb zQ!4R`psXFJ+@DDXMHs(j1rKW>5C2Cwlu6<>-+iyn#79t-lbK|BlP$P zNgh_p3&>V|??pD1%9;6p)Wv=03&<%-6861cOn#Mv|EQ|wm%8lTIDKlp(B{1O<8n90 zfq-?SQo=b4nBPAelI(qIY#7-uJu1NlUE!XqJ_CvrC$6K$o#1EzvUEe3|A~dX%Fd0@ zGeb4bXS3Gu5GP(5EbXeAkEP;U0Cv%oLM)!_X?AH*)%+T7u+7?iIT{Jq+ofSu^Kajk znNzfK3=Cx8q;wIA^=6nRr_txINBXly=2L>pAO0&{!s5 zWBFl$^htT>w;6uux7qZZVLcAzO^L=(a^la1T22%{l=!n@d_t8NOeI>fXFuiGOd?=QHs?W#IOAxZf->}>I^%Cr) zVu3~{wj`Lsr(hY|JDo>G){%a>5(M*>IzVgoyF?^hbV%WoI2+z?x%X%|-e%4yFRLD` z>1b;YRC;zeIrJ(&UPW^x#3tAo|qKToIl>?A2TygQVcy+TMW0kvU6EQUY#lVy^I z5L<}q5H=D^aK=+6%|z}x_y3UpZja#2xzE8WXy-J;8r>HW-S26Sgp(FPNE~bEc(DZF zLL)APz_YPV(m1%tYD5^tDNB3}yd+?kZ4ZVJ=qz6p! zHuS;3JV_7hH*zZ6-Qh)O_m;NMP#rg*U`vXmfnKv!Sd9VrU_(`nPhzB^5z`8|NT4G^o{z5$7lh|D>63^GEeAPXzp zt?VT}`lRxbgA7U@^tnlN!Z`lyT;NEs3p>nsC3&By1`BU--bSX`c(44a5GNTBwaF=I z1`$lgj;`3TtW@(dCBq5*aYK@%d5-g9bU|E89Lrf*XuW+Tr5A6o*6y1<=3})Qw6h74 z=6NovdIlF&`l`-Q3Ai{iL(PU!LQ`wzHtX!)^xqwASDD^H9L$fC-Z7z~X%fD8Zxky64+h)M|0AnEjK2QUMBT3og zBDr+1OF82rrmt*BCfaP1Tk)>(+5lG0a_`&+_9X(yja8>Y z+!J@WFh0e5QzgxQZncXoZjfIOr74fQNq#VI1_IC7^CL;hj5_zcirg<$h!vM%5)Kk< zer``y=eranVExAssgB$uX-u>P#U|pwhM(oPXW+Mul5{N`{{zBeSn&Jq@1*b+?iq&a*1c%Aptxl*9aT5&be-E1c4A;HM<<4;9`XgdW^Gy zUbvv?=l-CIyl>LI!I`U*2O)InZ^e=hK*ki9EKc=LrXzz?9FnAhSv?{;*%o?u%s%nf zqmmvd+%OCDobJIXlS3JRDN1k67fW$x&*Ng6Y!QWTX*+E zSi`KMeD<37^J;M;Wzy&9DXiZVLLN-pJ|eEsWnf1O7dPNl@8{H!M4EUO*+F80TZ}4{8<3H5BJ`xJ zZez!-2M3^|tpk=xIzQo$6Yx6(gl)@mHVJ9;)d+g_i1=!R3Mu$pGM9sE(7&=?M}LwD z_6~YWhMwRvA6can*{_SA#IjG6TwcaDV$M{VW4pVbTyK=AcZ3jsYwhUzavLeF}aiJ07SdM+2q*W0bE7vu5cY1%eBk6u*cFTIi zPRlBsA*6MMPQmWQd71Xyx9*U1kz^54u+O>=Kb)Ck|7*MnW9qFA2}n`>DN3naY$g-Y zDnNgK@t~x`{;AGI&vSJKTWEoOoPd7jo_$Gqa2Bk1W~cJ{EF7Fe_DB&2xK(V?fOcm^ z=uP{;p{X>%(2F@;+S%Q1$8d`?OvylSg)F)nFpk^TVebU!eECr+B8~_SZboPiJ4VEu z^i=)`XK@G4CNoLkL}bR!YR0GcxSG6Uj}Aoux7!v-;jx5<>5t)kLAtU9+z@M=(+e`~ z`Ag48;Vw=U0oT0|7_j`WNxtC_C%$k%(j5Z#2QtQ-FmvP1u^8HX--r}iK!uCuI>u?c z3TWG2CT2XqU}rX;J1>|R-kSWL^7?F&J$bh|g=WQz_HvAV;jpJAT{qFKq)FADM{+XD zz0Z!pz!XRHO1e%?c#w+clJM)rx7ABHIYHhBf^RS0Rn5jw7)gad5p2jk{%W20<|d`K zlZ>bFFDn~5$x!2sz6WHCL^^!WBo@}V8 z#FK-i3^C6?CzSKjSPA%55F_8@?Z(IA@TB$}5V$6CyQ;hFZSJP3(%hWAf*@|KmB5Ij zNm<(C#IQkaw%5;;)HV*w#Ou##K&_FnCKUjvLF3SQd;b?D%{DO8`Y~GDQoXs>Ivf3P zeEgQOr;AKVJTwxDh~xGgQ!j)wM&arl9)Ux{+215s;WJR7WOzub9Q%=J^_ZT{&c=3M z$L0=HxYR9`mzUMlf36YB1Pai8NVYQ9LmYVv=1S`0M3q5$OB<@n@UiXuIWTB{u~ZW0 zaIoeSbaPSW*7?&Uu^YDYoH<;qI3in#@RE3X*S*SMFG&v09A{G1bCETwyD~dGJ2)W8 z_^7KedD77A{J~QZW#OUolDd{NW{-vl{)pEk)WQRGJk*A(f>9XHp;XCad~o?TLEf}iQS#d1T3U9c@tb#gi*`=i%ST5nxkQ>^sBvTk0-F{0llZ4O?H^af7gvE+zL63St-aJm z1O#lqcRye^bmL(T`1}u}ltbO1$1nX!`J$U7_sV8Mlrla!V@5Y(=JhI7#2{Lv^uC#S%K4XOM9-21aOF@u&^#&A1*kVO+dg2w)Jn4_FoABT~L;T&BZiT_EvKa{QMGC8%?00cUl%TAh1H zlDd14xXvno^RS1=v@TKHg(>2GZ;8_ABNpxUW*#{e6O=_hQZ=A>f~1DpG-`AAPj!!@MoV?*7-^Pv|m@71HYUkEIe9HA{hc{+wYG0g-7jIMwrAy z99IGq?$jBc6|ldcGDg@qbE5=;?7_9NY6}gPy5`zFPIt#Qp(dPzb;gLpA#8r-uS!aQ z)F&LfKQp&rz0ZUr*YAeOv#q^za0G|6?{8J^50I(!WT$d2KyIPU&nam=B%!8mB0l<4 z;5lvTW$bJQ5xw#hMSP@O*MkF%TUZ)vq{av!E${xd(n^+6Zuhyrh(NX4(-<(VE>-~a8BmSWm77m(7&UKan|UqG{Yg`K=HSP#eoK>0=RgNv5y zjJ4osw?F4+*~J?;BY#;XHnQLAH%{7O^?>Hid>I<9vu@=%Hlx5ap#;8R>r?=Sp54oY z5WPOaT=3L%GqrO38FgLde77_9u{e~^FIuiK4Xt)1&Sp2o6;@^1TnHCCZd2}=OOpC+ z=|gfs?u(pM0-oFX+mr)y$sqdPbmhyrB&DS)AkmSejtym{+FUR_&D4leHe2!t1NO0r zYhj+|=!gih4m(9YNqPi!fg9{;Upf!%**U~OVpkt=FF&!@pNE(9OWf3*l7b~`T zBtPMphfQfQdOAVutHKwA%6N8oXSPDqE-jR#I{Hh`i*)fq}Rgz#MANm>df4N##5$XIe-oP>?B zR>Y%LxE(!h4DYe!qOToJ(@K`X*ti79cN9nnlm+=;>5R{(v6I+{Rw9G>>QR6@p3+Ev#?ud&@KPNz>nj47Q*OO-=~j{xY%z0U-Y4cDGMc>2 zp7lp*W^Tdm5vI+oD^1?nZqK*Fk>dQw+=&FBHVabGT5Ikln&`n@``D&9Dh?VTt!Cw$ z;k$4EWbFbHWwfz`nj^bePg)CVRf$sLrB&>@a0&X{Ef~H655but1z9=#J0S2Nf1lzK z>)^~)x}FnFQ4-xwAw7BRM&v^uL)Yn$i;eQ+^q1>;7(xyhFGI`zo(0)W9%l$=^G_@QbGeCTA z5X?%sr3sR)5!hwd)d-xYZ%;BMH3pvWXIi_JT#N#~&$cp5dX%y5V66|>Y~h^#A}{_l z!i-Z?9PU?JmCtS`CQU;etX*fLlxw$>SnHLcb+$?Nj^V&|?g&WUMuwgS=9ti-JUc>; z07dkNZvIJ^${L|4r|0T_#J=g!n7(dkgKtci0~<6j8<6`83wx|ea3P6Jcv~=)Aa{2f z#-{MQNs_e@ccWo`EA&Q6nvpyMEPaN;Uz99rrMUW5ajN-z#-?3v_aH@Ukaq&j!N>S4UV!6{N^WBdDP=603Iuq(=3=&grH z>hm(PiM?_V+C1@(WMv75`(a)<=EqA(P2Tm~D3C*wOIdrx<&jcJS+Jw+LwHN>F_^q~ zBs_6<$W8M~rKtq>cfcgKEn5=mIq@E%5zpU91z|_*{6Z4LanRX&RaoXITI+oS#0&Qu zBvGpCI?aBdHOV05A?GPdGm;Eu1SI*KH;U&4#1MJklsTuT2B?a&@X~Xp87NfY-VHan zh4pw{xceL;p3~ASmDGFZfkR<-auK2a)Lqm%eaMatG7&gm+net8%oXd2C+(vcw4 zBG{+b?#OkXakf5pd$NF5wxdh#LT6}>gs z2!dE3RI}QD_jB-S*t}Ce6I7M&acF|20MOtELV-Rqa^L+hiMl_maZ7v`M^j&@YqEFF zw%{~%wLVMb6Cv_xwZF;kYjfv(iSD+#oVUZ)*!EeH-7{%@4I=@}gTIICTT$Y51R#PK zU%qY$$tgDDt0q}F*>i~HR~R@w-ar}FmmhA)kH1e?PR>@|q62Voe>pyhl9iWj1*?4^ z5kGxFnZ1Oh&pNEzMnem*N9J+zf))7 zADf`uvy=?4J2INZIqTsi8piWm!a)pHi7P4?Wt^W$OunC|vKkITENen~5T3%X8f0_3 zaC-NE%HuFNrPa319=om09oTe5>30W7%ztngKHuVUULZzKC@XO5n=HY779!?)uEp=^ z>2kb)aBhfncA6M@D`)oKZBg8)YPdd2;_JB?a7p#K>Vit&9c1*7;Uy^QE*L!6hz&X7 z;IpASqB9D0oMBlgueg>=EUB@%e@{`a-$7D>PxVNf*e_Su0`0!R&sh=KEa&rZBdz6H zpkX`h3sEb-Aop%!yitmIs@G*oL3TIM=AKnakzeSX!W;SKhijN~=M>4D_foMrXa!ZV zyC<+GSB==x$#%cHgzXNc;}Y zR0SeVL2=SViLc?38r|<#i%VX{OF_&tg;=7hz_v~u2ex&=@_DB4XBfh#5$oEde5=3e zdOoe4W@>0Z$4Y0H@y37P8H{&Q>WBX+bMdV8kHda+_62FF)eoPPASU_Ml2PT|J#CMn ziX-b=jj=IQ<8peY*Oxg5Qx0Lyei>-QL!q6@`Dpoai0haQb(9o&X?}yH64>fhr8M3ktc*sJXnSqbk|Gj_OBK@vLOBVbp3X zM+{MC<`vvw`=8sTDwPB)Y(k5 z=GM0~QUpRsJOwPhXh)dwbryY~qub$ypjp*xk7&fXma{5Bf?3C0|J+1;;}o&XCK02c z9}gd|{^o+e3`RZB<^9-`1`UxS%WVr?l?Wc-3>PL*{d?9j>?N+zXn`iUyMx-}{HFIKe zOc>2KXY;ehisNPykYgRKGs2A5xlp(a9NY^)+=fyTTzG(GLaWvo!yzu5SKlZxmWT+++JDuRVJqsnwHS2z6Ov3}hCFzInr4#?-oy$zDojc?3X~6u} z+?w+ErR}fkiO`+_%<%5FBv;zkpb1+xT>0YdpT8 z(t>@v-TTgRmYTbfPZQ@tE;uMDSMMcpLFX+}*zStDFW8IzS%2)&TbDA_b6c~;mgzBGfo3uy34V;8sV+EgPuFB!V#6KsR!ogk1 zfoD$kIENJWGGXZ|bM{;3BI{h&C0L+KA+UfP&=>ZS7;BdPs>?K$M znH92a=&N|m2z0hgi>9YSDSR_Z688X+t9w!ekv2P+1F3o#W(a(bP0X#5lg2EY!K&oK zb_I-_it9$P5$Xz&a>vZZJ4e*BajG{#f$n z(8gWi>zMnaLwRvI2+NE2N}`|B<^s1_l_#EpGP@RBo!C2GAu-|`pN8t2cU0uyzANQbIN4ZTikJ3!j) zZU@n^5kYM1osWN}e7S<;(02-zek*axEOKFq+g({YM5lRRfw9mbSY5e!j`5tuT*P3| zZh)ohIH`C%=rQk_LWpQq4JY0=#iXj?B9d2wh3zPa=Z)-c660jMifg#!h>15Ye;;U6 zt>+>p_J%S7h=qV+FSAOn;!jy6<&l*nGV6Vyj|fzA3Bt|~0KRc~8JA-lC835hW0$!0_F5dAUP=oO8-?Px_(Lrt0G>eoVa4f&C6laS#5mZ4#`^#HGZlz}xDV590Tq-zQu%FK6h!^HyuO!2KIX%=qne>279 zvHxvc96aUb<>gZ4&}vd*82hFqM1%Sq>hO3ayqB0q&Fj8dEN0JtFU>CYBSoxS_s@WITRsc%%>yo|9c*L%q{NBvWh&_>}s%JCSv&lyH95+3ONTY`*KiqtcB zq78`WA;G89_id;IOHTOb=H;EmxEpV@cw(*4=ZOI_E^%Y%R2yxep8=4I3C z%C-B+i1K2$v*<#4{O`Qq*3Il!H-NGxFL*mMR}FEt@0j4tZ^h@F^IEug)pP%{+H7+J zIK?vyau!9KRE?al`HZsl0U`%q(HZHU>`2?B!~c+ww$4H`_-$}Owzu6f!du_~>)rVx z7r)tWyEPR2qBHz9TLFu=P{&C@_#F7XzPd=b(-gRJin8|7grD1N2;0&Dvk;4$P_gYx zRb;s*5)*=l+3T&OObdtu6uwZxcwXPD91W^>{U`PLh%?wCjtw=jN2s~t?X zd0^u%d0y#SOEOA#jS#4cbuEKDtX zVbLg_LQHTp7xyV2uZ06=YJ_raEx9Fb-9l*>s)ZtAITt(_#=fZ7NKCw9T}Lt^|Fac1 zE)_T2BB_sDv2-{VG%Kst5h?QbSR)LCCGZHSry#kz{vpas>qw^Vo{i$uz!VBs$0!%p zk)it5{!GynD+v`%(aJD|42b_u&$!VI#I$98yB#(Z=4gT{MFXQ0n*zmc$pB@cf?fN* zUCI**Ns2fhZ*;WT+Hf|0>r*~a$kMPWqa-yR{9lU{$9hs^j=Wn+YO`tg(l;Eo3a{5? z9|^|}`@Coq2tNFnSCs?nq3@kPXoIh1hbJ$J7Y_|reppX3Y1cv}?m=MrNmG>J50Vx1 z+x5!7A0#8FuRu|6AQdz=U#ZzZYUrU{Wy1!NYI*H3@d9=hw-Rl-PA~(z;9|%qqW)UD zfA%AoPAxgge>RYwgg1_udfRNB9dmj*T<^s}&C1G)VbnfB_)`fyM6&3n$CMopk!-qi zi1OJ(q?oS!ONrh{ZZYM}m0%#_m3PGLVR*$k;W4HlTqKxJ(K3@x>DWlB%zu6;K1yJ3 zSH+mNbc4bJjlt`=7nFp&Tp`BPsJy!old|9DLrkEqCj?NxKZ-U*`d6%1c5f!n(5)MlnOk7gs@$zSy@jlzIZkEx zR#K`>{Dh76Lu-{gx8gwpGnKttNg0i@DOa|Vi~;E}rbh!T(hBqHFI_%bgqM)GC!mbj zMoOt`x)R(*Zll|$C|9?UD*D?VrSf4imY$rb^gc}LB9=Bw{Gu5Ct62W@oywVq$&6Wp z&a)5^Vt$NS4a4#dKnCwMNKvgrtOosYYk{k%aGlO%Ynu;ZVO%XEvR7-3Wz0MrRd=29 z+nBX50H`g*C|G@pqDFDnC(%YY&XhpTVNnlkVa8E@oA0rm%CnD<0ptIGuZYWGe~cJ= z{We4q0t{PpC#&bMpE4M|ep{>86NvtYmLSF1Un)T%=T?ZM$Zw1_?(*9lps+C0-h_`7 zaXX2n<~x}@fRkuNIv5A{>DRoTMyPd zv!GR+c?bEEx0*KjZT>E(rsX}a?Fh9Z2>7ryI#&Z3bVQ-i1CZNoHCN|Hrv<{c%mIUjSEJ`LVRqcPh~py-&iGJ$d`M2P@ZM9 z4K%Jn`JB-Fa|@ddhz(VgiI0Sr-v}QArL?Q5ncp)B(Q2#(_=MePnjk#dEY_@4o_!Qp z`oxc|MLGGdN7Nzcy+T7nx3|NlIhhlmWYiO4nZaPTrlY$--hAgCldzowz0i+vicf$Y zh`QS}Cbbnl#gI|;F$~KQVUaTz)N#qRjNec&8Knwbiz|#*sja-Zp`o&_$yQTZSJhlv zRcSvDvESt`{troLY6HgO?wcyrhkuH2$F9~QlTr1})FbSm>*;{r4pNC~yI~jH@I)!B zh5O2nV2|E;poRGn4Pi8htNFjUP4E+|>9Tct?_ZBLT3hc+R9@Wy;o4|0)^+%+U77>t zqLb^*C;T=i4y6E2<#u-qCRh=;~T!X8SkLR?JDomDXfv=7n0b5#Ha_}Js9d$@u5_s>ihn5#!odkbOSFqLd6!U zOl9p@4d?VYS5@K#jGW|l-6HFu!#qLx$zUf zgc*x*R)4co|0ooeMg2l3RVG76;auZ)xm)cBA8`LO`X@lFupcm+c>Mt3yJrkvpT-Y5 z>?;e6<1w&vPyY&J3luZKl$2Y%yA@HA^PB=vG)EF0Cup3U(?gel!Qck~tU7c}xqgelcI_opie z_e#WU#Ej_sJ9Jq=%;4ppcp+4y0nX!@R}d!@pUemjF`i^Uggydr?(sMmea~i;!x61B zH_QbW#r?quxCnr2MhA&YUZR;S6kKAG6QP|buMaWox1*ieh$hv|)6FXJb9lvnTrX|G z`7jTY$kPS`pV?K3uQIk5tJNh=hx=h~yy{{&)m^9IhsEG|wEdXMbi8f;|2i%lj