Intercepting resetting of vba editor as well as unhandled errors for safe subclassing

Jaafar Tribak

Well-known Member
Joined
Dec 5, 2002
Messages
8,332
Office Version
  1. 2016
Platform
  1. Windows
Hi all,

As you know, excel doesn't expose many useful events such as when activating excel or when moving or resizing its main window etc...

The way to catch these missing events is through subclassing or hooking excel. Both techniques work in compiled programs but they freeze office applications or make them unstable at best.

Probably the main issue with subclassing is when the vb editor is inadvertently reset or when an unhadled error occurs while excel is subclassed .When that happens the whole application crashes.

In an attempt to deal with the freezing and crashings issues, I have written this C++ dll (about 14 kb) which gracefully removes the subclassing right before the vbe is reset due to clicking on the vbe stopt button or due to an unhaded error.

The dll is not an activeX dll so it doesn't need registration before using it.

Also, in order to maintain the dll code self-contained with the workbook, I have extracted the dll file bytes and place them in seperate vba module so it can be rebuilt on the fly at runtime (kind of a resource).

Drawbacks I am aware of:
*When first loading the dll the vbe is reset behind the scenes. This will reset any already initialised variables and may cause the loss of data. So the recommendation is to install the subclassing at the start of the program.

*The only error that the dll is unable to catch is inside the window procedure so careful error handling is required there.


C++ dll code:
Code:
#include <windows.h>#define DLL_EXPORTS

BOOL bSub = NULL;
BOOL bUnsub = NULL;
BOOL bVBEreset = NULL;
BOOL bClosing = NULL;
BOOL bVBEvisible = NULL;
HWND lwkbHwnd = NULL;
HWND lVBEhwnd = NULL;
HWND lXLhwnd = NULL;
LONG lVBACallback = NULL;
LONG_PTR lOldProc = NULL;
LONG_PTR lOldProcWkb = NULL;
LONG_PTR lOldProcVBE = NULL;
HHOOK hookHandle = NULL;

extern "C" __declspec(dllexport) void SubClass(HWND, HWND, LONG);
extern "C" __declspec(dllexport) void UnSubClass(HWND);
void CALLBACK TimerProc(HWND, UINT, UINT, DWORD);
void CALLBACK TimerProc2(HWND, UINT, UINT, DWORD);
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WinProcWkb(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WinProcVBE(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK CBTProc(int, WPARAM, LPARAM);
void SetCBTHook();
void RemoveCBTHook();

extern "C" __declspec(dllexport) void SubClass(HWND hwnd, HWND wkbHwnd, LONG CallBackFunc)
    {
        if (bSub == FALSE) {
            bSub = TRUE;
            bUnsub = FALSE;
            bClosing = FALSE;
            bVBEreset = FALSE;
            lVBACallback = CallBackFunc;
            lXLhwnd = hwnd;
            lwkbHwnd = wkbHwnd;
            lVBEhwnd = FindWindow(L"wndclass_desked_gsk", 0);
            SetCBTHook();
            if (lVBEhwnd == 0) {
                SetForegroundWindow(lXLhwnd);
                keybd_event(VK_MENU, 0, 0, 0);
                keybd_event(VK_F11, 1, 0, 0);
                keybd_event(VK_F11, 0, KEYEVENTF_KEYUP, 0);
                keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
            }else {

                if (GetProp(lVBEhwnd,L"MsgPosted")==0){
                    bVBEvisible=IsWindowVisible(lVBEhwnd);
                    PostMessage(lVBEhwnd, WM_USER + 0xC44, 0x30, 0);
                    PostMessage(lVBEhwnd, WM_USER + 0xC44, 0x33, 0);
                    PostMessage(lVBEhwnd, WM_USER + 0xC44, 0x83, 0);
                    SetProp(lVBEhwnd, L"MsgPosted", HWND(1));
                    if (!bVBEvisible){
                        SetTimer(HWND(lVBEhwnd), 0, 0, (TIMERPROC)&TimerProc2);
                    }
                }
            }
            SetTimer(hwnd, 0, 0, (TIMERPROC)&TimerProc);
        }
    }

extern "C" __declspec(dllexport) void UnSubClass(HWND hwnd)
    {
        if (bUnsub == FALSE) {
            bSub = FALSE;
            bUnsub = TRUE;
            RemoveCBTHook();
            SetWindowLongPtr(lwkbHwnd, -4, lOldProcWkb);
            SetWindowLongPtr(lVBEhwnd, -4, lOldProcVBE);
            SetWindowLongPtr(lXLhwnd, -4, lOldProc);
            if ((!bClosing)&&(bVBEreset)){
                bVBEreset = FALSE;
                MessageBox(lXLhwnd, TEXT("The VBE was reset.") TEXT("\n") TEXT("Excel has been safely Un-Subclassed."), \
                    TEXT("Oops !!"), 0x00000040 + 0x00001000);
            }
        }
    }

void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime)
    {
        KillTimer(lXLhwnd, 0);
        bSub = TRUE;
        bUnsub = FALSE;
        lOldProcWkb = (LONG_PTR)SetWindowLongPtr(lwkbHwnd, -4, (LONG_PTR)&WinProcWkb);
        lOldProc = (LONG_PTR)SetWindowLongPtr(lXLhwnd, -4, (LONG_PTR)&WinProc);
        lOldProcVBE = (LONG_PTR)SetWindowLongPtr(lVBEhwnd, -4, (LONG_PTR)&WinProcVBE);
    }

LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        if (uMsg == WM_SYSCOMMAND) {
            if (wParam == SC_CLOSE) {
                bUnsub = FALSE;
                bClosing = TRUE;
                UnSubClass(lXLhwnd);
            }
        }
        LRESULT Ret = CallWindowProc((WNDPROC)lVBACallback, hwnd, uMsg, wParam, lParam);
        if (Ret == -1) {
            return Ret; /*abort message*/
        }
        return  CallWindowProc((WNDPROC)lOldProc, hwnd, uMsg, wParam, lParam);
    }

LRESULT CALLBACK WinProcWkb(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        if (uMsg == WM_SYSCOMMAND) {
            if (wParam == SC_CLOSE) {
                bUnsub = FALSE;
                bClosing = TRUE;
                RemoveProp(lVBEhwnd, L"MsgPosted");
                UnSubClass(lXLhwnd);
            }
        }
    return  CallWindowProc((WNDPROC)lOldProcWkb, hwnd, uMsg, wParam, lParam);
    }

LRESULT CALLBACK WinProcVBE(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {

        if (uMsg == WM_SETTEXT) {  /*The VBE was reset other by the user or than by an error !!*/
            bUnsub = FALSE;
            bVBEreset = TRUE;
            UnSubClass(lXLhwnd);
            SetActiveWindow(lVBEhwnd);
        }
        return  (LRESULT)CallWindowProc((WNDPROC)lOldProcVBE, hwnd, uMsg, wParam, lParam);
    }

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        WCHAR className[MAX_PATH];
        if (nCode == HCBT_CREATEWND) {
            GetClassName(HWND(wParam), className, MAX_PATH);
            if (0 == lstrcmp(className, TEXT("wndclass_desked_gsk"))) {
                if (GetProp(lVBEhwnd, L"MsgPosted") == 0) {
                            SendMessage(HWND(wParam), WM_SETREDRAW, 0 , 0);
                            PostMessage(HWND(wParam), WM_USER + 0xC44, 0x30, 0);
                            PostMessage(HWND(wParam), WM_USER + 0xC44, 0x33, 0);
                            PostMessage(HWND(wParam), WM_USER + 0xC44, 0x83, 0);
                            SendMessage(HWND(wParam), WM_SETREDRAW, 1, 0);
                            lVBEhwnd = HWND(wParam);
                            SetProp(lVBEhwnd, L"MsgPosted", HWND(1));
                            SetTimer(HWND(wParam), 0, 0, (TIMERPROC)&TimerProc2);
                }
            }

        }

        if (nCode == HCBT_ACTIVATE) { /*Check if a VBA runtime or compile error occurred.*/
            GetClassName(HWND(wParam), className, MAX_PATH);
            if (0 == lstrcmp(className, TEXT("#32770"))) {
                CHAR buffer[MAX_PATH] = { 0 };
                GetWindowTextA(HWND(wParam), buffer, MAX_PATH);
                if (strncmp(buffer, "Microsoft Visual Basic", 22) == 0) {
                     HWND staticHwnd = 0;
                     staticHwnd  = GetDlgItem(HWND(wParam), 0x00000000000012C3); /*Error Static Control*/
                     GetWindowTextA(staticHwnd, buffer, MAX_PATH);\
                        /* English language office*/
                     if ((strncmp(buffer, "Run-time error", 14) == 0) || (strncmp(buffer, "Compile Error:", 14) == 0) ||\
                        /* French language office*/
                         (strncmp(buffer, "Erreur d'exécution", 18) == 0) || (strncmp(buffer, "Erreur de compilation:", 22) == 0) ||\
                        /* Spanish office*/
                         (strncmp(buffer, "Se ha producido el error", 24) == 0) || (strncmp(buffer, "Error de compilación:", 21) == 0)){
                         bUnsub = FALSE;
                         bVBEreset = TRUE;
                         UnSubClass(lXLhwnd);
                         SetActiveWindow(lVBEhwnd);
                     }
                }
            }
    }

    return CallNextHookEx(hookHandle, nCode, wParam, lParam);
}

void SetCBTHook()
    {
        HMODULE hInstance = NULL;
        hInstance = GetModuleHandle(L"XlSubClass.dll");
        hookHandle = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, hInstance, 0);
    }

void RemoveCBTHook()
    {
        { UnhookWindowsHookEx(hookHandle); }
    }

void CALLBACK TimerProc2(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime)
    {
        KillTimer(lVBEhwnd, 0);
        ShowWindow(lVBEhwnd, 0);
    }
</windows.h>
 

Excel Facts

How to create a cell-sized chart?
Tiny charts, called Sparklines, were added to Excel 2010. Look for Sparklines on the Insert tab.

Jaafar Tribak

Well-known Member
Joined
Dec 5, 2002
Messages
8,332
Office Version
  1. 2016
Platform
  1. Windows
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

Dll usage in Excel

The following example shows how to intercept the resizing of excel's main window in order to limit its minimum size to : MinWidth = 600 Pixels and MinHeight = 600 Pixels

Workbook demo.

1- Code in a Standard module : (Calling code):
Code:
Option Explicit

Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Private Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As LongPtr
Private Declare PtrSafe Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As LongPtr, ByVal dwFlags As Long) As LongPtr
Private Declare PtrSafe Function FreeLibrary Lib "kernel32" (ByVal hLibModule As LongPtr) As Long
Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, ByVal lpProcName As String) As LongPtr
Private Declare PtrSafe Function SetXLSubClass Lib "user32" Alias "CallWindowProcA" (ByVal dllProcAddr As LongPtr, ByVal hWndExcel As LongPtr, ByVal hwndWbk As Long, ByVal VBAWindProcAddr As LongPtr, ByVal Null_ As LongPtr) As LongPtr

Private Const LOAD_IGNORE_CODE_AUTHZ_LEVEL = &H10

Sub SubClassExcel()
    Dim wbkHwnd As LongPtr, pProcAddr As LongPtr
    Dim sDllPathName As String
    
    sDllPathName = Environ("temp") & "\XlSubClass.dll"
    If Len(Dir(sDllPathName)) = 0 Then
        Call BuildDll
    End If
    If Len(Dir(sDllPathName)) Then
        wbkHwnd = FindWindowEx(FindWindowEx(Application.hwnd, 0, "XLDESK", vbNullString), 0, "EXCEL7", vbNullString)
        If GetModuleHandle(sDllPathName) = 0 Then
            Call LoadLibraryEx(sDllPathName, 0, LOAD_IGNORE_CODE_AUTHZ_LEVEL)
        End If
        pProcAddr = GetProcAddress(GetModuleHandle(sDllPathName), "SubClass")
        SetXLSubClass pProcAddr, Application.hwnd, CLng(wbkHwnd), AddressOf bas_WinProc.WinProc, 0
    End If
End Sub

Sub UnSubClassExcel()
    Dim pProcAddr As LongPtr
    Dim sDllPathName As String
    
    sDllPathName = Environ("temp") & "\XlSubClass.dll"
    pProcAddr = GetProcAddress(GetModuleHandle(sDllPathName), "UnSubClass")
    SetXLSubClass pProcAddr, Application.hwnd, 0, 0, 0
    Application.OnTime Now, "UnloadDll"
End Sub

Private Sub UnloadDll()
    Dim sDllPathName As String
    
    sDllPathName = Environ("temp") & "\XlSubClass.dll"
    FreeLibrary GetModuleHandle(sDllPathName)
End Sub

Sub RaiseErrorTest()
    Dim x As Long
    x = 1 / 0
End Sub

2- Code in a Standard module : (Generic window procedure code):
Code:
Option Explicit

Private Type POINTAPI
     x As Long
     y As Long
End Type

Private Type MINMAXINFO
     ptReserved As POINTAPI
     ptMaxSize As POINTAPI
     ptMaxPosition As POINTAPI
     ptMinTrackSize As POINTAPI
     ptMaxTrackSize As POINTAPI
End Type
Private MMinfo As MINMAXINFO

Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)

Private Const WM_GETMINMAXINFO = &H24

Private Const MinWidth = 600
Private Const MinHeight = 600
'Private Const MaxWidth = 800
'Private Const MaxHeight = 800

Public Function WinProc(ByVal hwnd As LongPtr, ByVal uMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr

  Select Case uMsg
    Case WM_GETMINMAXINFO
        CopyMemory MMinfo, ByVal lParam, LenB(MMinfo)
        MMinfo.ptMinTrackSize.x = 600
        MMinfo.ptMinTrackSize.y = 800
        CopyMemory ByVal lParam, MMinfo, LenB(MMinfo)
        WinProc = -1 'return -1 to abort message.
    End Select

    Debug.Print uMsg; wParam; lParam
End Function

3- Code in a Standard Module: (dll creation from the bytes)
Code:
Option Explicit

Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)

Private arr1() As Variant, arr2() As Variant, arr3() As Variant, arr4() As Variant, arr5() As Variant
Private arr6() As Variant, arr7() As Variant, arr8() As Variant, arr9() As Variant, arr10() As Variant
Private arr11() As Variant, arr12() As Variant, arr13() As Variant, arr14() As Variant, arr15() As Variant
Private arr16() As Variant, arr17() As Variant, arr18() As Variant, arr19() As Variant, arr20() As Variant
Private arr21() As Variant, arr22() As Variant, arr23() As Variant, arr24() As Variant, arr25() As Variant
Private arr26() As Variant, arr27() As Variant, arr28() As Variant, arr29() As Variant, arr30() As Variant
Private arr31() As Variant, arr32() As Variant, arr33() As Variant, arr34() As Variant, arr35() As Variant
Private arr36() As Variant, arr37() As Variant, arr38() As Variant, arr39() As Variant, arr40() As Variant
Private arr41() As Variant, arr42() As Variant, arr43() As Variant, arr44() As Variant, arr45() As Variant
Private arr46() As Variant, arr47() As Variant

Private lPos As Long

Sub BuildDll(Optional ByVal Flag As Boolean)

    arr1 = Array(77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, _
    184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, _
    14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, _
    105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, _
    116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, _
    109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, _
    141, 108, 143, 187, 201, 13, 225, 232, 201, 13, 225, 232, 201, 13, 225, 232, _
    192, 117, 114, 232, 205, 13, 225, 232, 90, 109, 224, 233, 203, 13, 225, 232, _
    90, 109, 226, 233, 203, 13, 225, 232, 90, 109, 228, 233, 195, 13, 225, 232, _
    90, 109, 229, 233, 195, 13, 225, 232, 164, 80, 224, 233, 204, 13, 225, 232, _
    201, 13, 224, 232, 241, 13, 225, 232, 114, 108, 232, 233, 200, 13, 225, 232, _
    114, 108, 225, 233, 200, 13, 225, 232, 114, 108, 30, 232, 200, 13, 225, 232, _
    114, 108, 227, 233, 200, 13, 225, 232, 82, 105, 99, 104, 201, 13, 225, 232, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    80, 69, 0, 0, 100, 134, 6, 0, 114, 187, 201, 89, 0, 0, 0, 0, _
    0, 0, 0, 0, 240, 0, 34, 32, 11, 2, 14, 10, 0, 24, 0, 0)
    
    arr2 = Array(0, 34, 0, 0, 0, 0, 0, 0, 96, 27, 0, 0, 0, 16, 0, 0, _
    0, 0, 0, 128, 1, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, _
    6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, _
    0, 144, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 96, 1, _
    0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, _
    0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 16, 0, 0, 0, 64, 57, 0, 0, 96, 0, 0, 0, _
    160, 57, 0, 0, 120, 0, 0, 0, 0, 112, 0, 0, 224, 1, 0, 0, _
    0, 96, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 128, 0, 0, 24, 0, 0, 0, 192, 51, 0, 0, 112, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 48, 52, 0, 0, 160, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 192, 1, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, _
    227, 22, 0, 0, 0, 16, 0, 0, 0, 24, 0, 0, 0, 4, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, _
    46, 114, 100, 97, 116, 97, 0, 0, 34, 16, 0, 0, 0, 48, 0, 0, _
    0, 18, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 64, 0, 0, 64, 46, 100, 97, 116, 97, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr2) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr2(0)), 24 * (UBound(arr2) + 1)
    
    arr3 = Array(136, 6, 0, 0, 0, 80, 0, 0, 0, 2, 0, 0, 0, 46, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 192, _
    46, 112, 100, 97, 116, 97, 0, 0, 28, 2, 0, 0, 0, 96, 0, 0, _
    0, 4, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 64, 0, 0, 64, 46, 114, 115, 114, 99, 0, 0, 0, _
    224, 1, 0, 0, 0, 112, 0, 0, 0, 2, 0, 0, 0, 52, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, _
    46, 114, 101, 108, 111, 99, 0, 0, 24, 0, 0, 0, 0, 128, 0, 0, _
    0, 2, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 64, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr3) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr3(0)), 24 * (UBound(arr3) + 1)
    
    arr4 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    64, 83, 72, 131, 236, 32, 131, 61, 95, 70, 0, 0, 0, 72, 139, 217, _
    15, 133, 161, 1, 0, 0, 51, 192, 72, 137, 13, 57, 70, 0, 0, 72, _
    137, 21, 34, 70, 0, 0, 72, 141, 13, 251, 33, 0, 0, 51, 210, 137, _
    5, 15, 70, 0, 0, 137, 5, 5, 70, 0, 0, 137, 5, 19, 70, 0, _
    0, 199, 5, 33, 70, 0, 0, 1, 0, 0, 0, 68, 137, 5, 254, 69, _
    0, 0, 255, 21, 128, 32, 0, 0, 72, 141, 13, 65, 35, 0, 0, 72, _
    137, 5, 202, 69, 0, 0, 255, 21, 148, 31, 0, 0, 69, 51, 201, 72, _
    141, 21, 138, 4, 0, 0, 76, 139, 192, 65, 141, 73, 5, 255, 21, 69, _
    32, 0, 0, 72, 139, 13, 166, 69, 0, 0, 72, 137, 5, 231, 69, 0, _
    0, 72, 133, 201, 117, 84, 72, 139, 13, 187, 69, 0, 0, 255, 21, 149, _
    32, 0, 0, 69, 51, 201, 69, 51, 192, 51, 210, 177, 18, 255, 21, 229, _
    31, 0, 0, 69, 51, 201, 69, 51, 192, 178, 1, 177, 122, 255, 21, 213, _
    31, 0, 0, 69, 51, 201, 51, 210, 177, 122, 69, 141, 65, 2, 255, 21, _
    196, 31, 0, 0, 69, 51, 201, 51, 210, 177, 18, 69, 141, 65, 2, 255, _
    21, 179, 31, 0, 0, 233, 178, 0, 0, 0, 72, 141, 21, 95, 33, 0, _
    0, 255, 21, 153, 31, 0, 0, 72, 133, 192, 15, 133, 156, 0, 0, 0, _
    72, 139, 13, 41, 69, 0, 0, 255, 21, 155, 31, 0, 0, 72, 139, 13, _
    28, 69, 0, 0, 69, 51, 201, 186, 68, 16, 0, 0, 137, 5, 70, 69)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr4) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr4(0)), 24 * (UBound(arr4) + 1)
    
    arr5 = Array(0, 0, 69, 141, 65, 48, 255, 21, 132, 31, 0, 0, 72, 139, 13, 253, _
    68, 0, 0, 69, 51, 201, 186, 68, 16, 0, 0, 69, 141, 65, 51, 255, _
    21, 107, 31, 0, 0, 72, 139, 13, 228, 68, 0, 0, 69, 51, 201, 186, _
    68, 16, 0, 0, 65, 184, 131, 0, 0, 0, 255, 21, 80, 31, 0, 0, _
    72, 139, 13, 201, 68, 0, 0, 72, 141, 21, 226, 32, 0, 0, 65, 184, _
    1, 0, 0, 0, 255, 21, 110, 31, 0, 0, 131, 61, 231, 68, 0, 0, _
    0, 117, 25, 72, 139, 13, 166, 68, 0, 0, 76, 141, 13, 47, 6, 0, _
    0, 69, 51, 192, 51, 210, 255, 21, 100, 31, 0, 0, 76, 141, 13, 237, _
    0, 0, 0, 69, 51, 192, 51, 210, 72, 139, 203, 72, 131, 196, 32, 91, _
    72, 255, 37, 73, 31, 0, 0, 72, 131, 196, 32, 91, 195, 204, 204, 204, _
    72, 131, 236, 40, 131, 61, 121, 68, 0, 0, 0, 15, 133, 174, 0, 0, _
    0, 72, 139, 13, 160, 68, 0, 0, 199, 5, 138, 68, 0, 0, 0, 0, _
    0, 0, 199, 5, 88, 68, 0, 0, 1, 0, 0, 0, 255, 21, 254, 30, _
    0, 0, 76, 139, 5, 63, 68, 0, 0, 186, 252, 255, 255, 255, 72, 139, _
    13, 67, 68, 0, 0, 255, 21, 37, 31, 0, 0, 76, 139, 5, 78, 68, _
    0, 0, 186, 252, 255, 255, 255, 72, 139, 13, 18, 68, 0, 0, 255, 21, _
    12, 31, 0, 0, 76, 139, 5, 69, 68, 0, 0, 186, 252, 255, 255, 255, _
    72, 139, 13, 33, 68, 0, 0, 255, 21, 243, 30, 0, 0, 131, 61, 252, _
    67, 0, 0, 0, 117, 57, 131, 61, 7, 68, 0, 0, 0, 116, 48, 72, _
    139, 13, 2, 68, 0, 0, 76, 141, 5, 11, 32, 0, 0, 65, 185, 64)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr5) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr5(0)), 24 * (UBound(arr5) + 1)
    
    arr6 = Array(16, 0, 0, 199, 5, 231, 67, 0, 0, 0, 0, 0, 0, 72, 141, 21, _
    12, 32, 0, 0, 72, 131, 196, 40, 72, 255, 37, 33, 30, 0, 0, 72, _
    131, 196, 40, 195, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    72, 131, 236, 40, 72, 139, 13, 189, 67, 0, 0, 51, 210, 255, 21, 133, _
    30, 0, 0, 72, 139, 13, 158, 67, 0, 0, 76, 141, 5, 31, 1, 0, _
    0, 186, 252, 255, 255, 255, 199, 5, 172, 67, 0, 0, 1, 0, 0, 0, _
    199, 5, 122, 67, 0, 0, 0, 0, 0, 0, 255, 21, 96, 30, 0, 0, _
    72, 139, 13, 129, 67, 0, 0, 76, 141, 5, 66, 0, 0, 0, 186, 252, _
    255, 255, 255, 72, 137, 5, 78, 67, 0, 0, 255, 21, 64, 30, 0, 0, _
    72, 139, 13, 57, 67, 0, 0, 76, 141, 5, 114, 1, 0, 0, 186, 252, _
    255, 255, 255, 72, 137, 5, 102, 67, 0, 0, 255, 21, 32, 30, 0, 0, _
    72, 137, 5, 73, 67, 0, 0, 72, 131, 196, 40, 195, 204, 204, 204, 204, _
    72, 137, 92, 36, 8, 72, 137, 108, 36, 16, 72, 137, 116, 36, 24, 87, _
    72, 131, 236, 48, 73, 139, 241, 73, 139, 216, 139, 250, 72, 139, 233, 129, _
    250, 18, 1, 0, 0, 117, 41, 72, 129, 251, 96, 240, 0, 0, 117, 32, _
    72, 139, 13, 1, 67, 0, 0, 199, 5, 227, 66, 0, 0, 0, 0, 0, _
    0, 199, 5, 213, 66, 0, 0, 1, 0, 0, 0, 232, 80, 254, 255, 255, _
    72, 99, 13, 217, 66, 0, 0, 76, 139, 203, 68, 139, 199, 72, 137, 116)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr6) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr6(0)), 24 * (UBound(arr6) + 1)
    
    arr7 = Array(36, 32, 72, 139, 213, 255, 21, 45, 29, 0, 0, 72, 131, 248, 255, 117, _
    5, 72, 11, 192, 235, 27, 72, 139, 13, 211, 66, 0, 0, 76, 139, 203, _
    68, 139, 199, 72, 137, 116, 36, 32, 72, 139, 213, 255, 21, 7, 29, 0, _
    0, 72, 139, 92, 36, 64, 72, 139, 108, 36, 72, 72, 139, 116, 36, 80, _
    72, 131, 196, 48, 95, 195, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    72, 137, 92, 36, 8, 72, 137, 108, 36, 16, 72, 137, 116, 36, 24, 87, _
    72, 131, 236, 48, 73, 139, 241, 73, 139, 216, 139, 250, 72, 139, 233, 129, _
    250, 18, 1, 0, 0, 117, 61, 72, 129, 251, 96, 240, 0, 0, 117, 52, _
    72, 139, 13, 41, 66, 0, 0, 72, 141, 21, 66, 30, 0, 0, 199, 5, _
    44, 66, 0, 0, 0, 0, 0, 0, 199, 5, 30, 66, 0, 0, 1, 0, _
    0, 0, 255, 21, 232, 28, 0, 0, 72, 139, 13, 41, 66, 0, 0, 232, _
    140, 253, 255, 255, 72, 139, 13, 253, 65, 0, 0, 76, 139, 203, 68, 139, _
    199, 72, 137, 116, 36, 32, 72, 139, 213, 255, 21, 105, 28, 0, 0, 72, _
    139, 92, 36, 64, 72, 139, 108, 36, 72, 72, 139, 116, 36, 80, 72, 131, _
    196, 48, 95, 195, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    72, 137, 92, 36, 8, 72, 137, 108, 36, 16, 72, 137, 116, 36, 24, 87, _
    72, 131, 236, 48, 73, 139, 249, 73, 139, 240, 139, 218, 72, 139, 233, 131, _
    250, 12, 117, 45, 72, 139, 13, 189, 65, 0, 0, 199, 5, 159, 65, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr7) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr7(0)), 24 * (UBound(arr7) + 1)
    
    arr8 = Array(0, 0, 0, 0, 0, 199, 5, 165, 65, 0, 0, 1, 0, 0, 0, 232, _
    12, 253, 255, 255, 72, 139, 13, 117, 65, 0, 0, 255, 21, 31, 28, 0, _
    0, 72, 139, 13, 152, 65, 0, 0, 76, 139, 206, 68, 139, 195, 72, 137, _
    124, 36, 32, 72, 139, 213, 255, 21, 220, 27, 0, 0, 72, 139, 92, 36, _
    64, 72, 139, 108, 36, 72, 72, 139, 116, 36, 80, 72, 131, 196, 48, 95, _
    195, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    64, 83, 86, 87, 72, 129, 236, 80, 3, 0, 0, 72, 139, 5, 246, 58, _
    0, 0, 72, 51, 196, 72, 137, 132, 36, 64, 3, 0, 0, 73, 139, 240, _
    72, 139, 218, 139, 249, 131, 249, 3, 15, 133, 236, 0, 0, 0, 65, 184, _
    4, 1, 0, 0, 72, 141, 148, 36, 48, 1, 0, 0, 72, 139, 203, 255, _
    21, 139, 27, 0, 0, 72, 141, 21, 220, 28, 0, 0, 72, 141, 140, 36, _
    48, 1, 0, 0, 255, 21, 174, 26, 0, 0, 133, 192, 15, 133, 40, 2, _
    0, 0, 72, 139, 13, 199, 64, 0, 0, 72, 141, 21, 224, 28, 0, 0, _
    255, 21, 26, 27, 0, 0, 72, 133, 192, 15, 133, 11, 2, 0, 0, 69, _
    51, 201, 141, 87, 8, 69, 51, 192, 72, 139, 203, 255, 21, 143, 27, 0, _
    0, 69, 51, 201, 68, 141, 71, 45, 186, 68, 16, 0, 0, 72, 139, 203, _
    255, 21, 10, 27, 0, 0, 69, 51, 201, 68, 141, 71, 48, 186, 68, 16, _
    0, 0, 72, 139, 203, 255, 21, 245, 26, 0, 0, 69, 51, 201, 186, 68)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr8) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr8(0)), 24 * (UBound(arr8) + 1)
    
    arr9 = Array(16, 0, 0, 65, 184, 131, 0, 0, 0, 72, 139, 203, 255, 21, 222, 26, _
    0, 0, 69, 51, 201, 141, 87, 8, 68, 141, 71, 254, 72, 139, 203, 255, _
    21, 59, 27, 0, 0, 68, 141, 71, 254, 72, 137, 29, 64, 64, 0, 0, _
    72, 141, 21, 89, 28, 0, 0, 72, 139, 203, 255, 21, 232, 26, 0, 0, _
    76, 141, 13, 185, 1, 0, 0, 69, 51, 192, 51, 210, 72, 139, 203, 255, _
    21, 235, 26, 0, 0, 233, 112, 1, 0, 0, 131, 255, 5, 15, 133, 103, _
    1, 0, 0, 65, 184, 4, 1, 0, 0, 72, 141, 148, 36, 48, 1, 0, _
    0, 72, 139, 203, 255, 21, 150, 26, 0, 0, 72, 141, 21, 175, 28, 0, _
    0, 72, 141, 140, 36, 48, 1, 0, 0, 255, 21, 185, 25, 0, 0, 133, _
    192, 15, 133, 51, 1, 0, 0, 51, 210, 72, 141, 76, 36, 32, 65, 184, _
    4, 1, 0, 0, 232, 35, 15, 0, 0, 65, 184, 4, 1, 0, 0, 72, _
    141, 84, 36, 32, 72, 139, 203, 255, 21, 123, 26, 0, 0, 68, 141, 71, _
    17, 72, 141, 21, 120, 28, 0, 0, 72, 141, 76, 36, 32, 255, 21, 29, _
    27, 0, 0, 133, 192, 15, 133, 239, 0, 0, 0, 186, 195, 18, 0, 0, _
    72, 139, 203, 255, 21, 23, 26, 0, 0, 65, 184, 4, 1, 0, 0, 72, _
    141, 84, 36, 32, 72, 139, 200, 255, 21, 59, 26, 0, 0, 68, 141, 71, _
    9, 72, 141, 21, 80, 28, 0, 0, 72, 141, 76, 36, 32, 255, 21, 221, _
    26, 0, 0, 133, 192, 15, 132, 130, 0, 0, 0, 68, 141, 71, 9, 72, _
    141, 21, 66, 28, 0, 0, 72, 141, 76, 36, 32, 255, 21, 191, 26, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr9) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr9(0)), 24 * (UBound(arr9) + 1)
    
    arr10 = Array(0, 133, 192, 116, 104, 68, 141, 71, 13, 72, 141, 21, 56, 28, 0, 0, _
    72, 141, 76, 36, 32, 255, 21, 165, 26, 0, 0, 133, 192, 116, 78, 68, _
    141, 71, 17, 72, 141, 21, 54, 28, 0, 0, 72, 141, 76, 36, 32, 255, _
    21, 139, 26, 0, 0, 133, 192, 116, 52, 68, 141, 71, 19, 72, 141, 21, _
    52, 28, 0, 0, 72, 141, 76, 36, 32, 255, 21, 113, 26, 0, 0, 133, _
    192, 116, 26, 68, 141, 71, 16, 72, 141, 21, 58, 28, 0, 0, 72, 141, _
    76, 36, 32, 255, 21, 87, 26, 0, 0, 133, 192, 117, 45, 72, 139, 13, _
    244, 62, 0, 0, 199, 5, 214, 62, 0, 0, 0, 0, 0, 0, 199, 5, _
    220, 62, 0, 0, 1, 0, 0, 0, 232, 67, 250, 255, 255, 72, 139, 13, _
    172, 62, 0, 0, 255, 21, 86, 25, 0, 0, 72, 139, 13, 231, 62, 0, _
    0, 76, 139, 206, 76, 139, 195, 139, 215, 255, 21, 121, 25, 0, 0, 72, _
    139, 140, 36, 64, 3, 0, 0, 72, 51, 204, 232, 81, 0, 0, 0, 72, _
    129, 196, 80, 3, 0, 0, 95, 94, 91, 195, 204, 204, 204, 204, 204, 204, _
    72, 131, 236, 40, 72, 139, 13, 101, 62, 0, 0, 51, 210, 255, 21, 85, _
    25, 0, 0, 72, 139, 13, 86, 62, 0, 0, 51, 210, 72, 131, 196, 40, _
    72, 255, 37, 33, 25, 0, 0, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    204, 204, 204, 204, 204, 204, 102, 102, 15, 31, 132, 0, 0, 0, 0, 0, _
    72, 59, 13, 1, 56, 0, 0, 242, 117, 18, 72, 193, 193, 16, 102, 247, _
    193, 255, 255, 242, 117, 2, 242, 195, 72, 193, 201, 16, 233, 179, 3, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr10) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr10(0)), 24 * (UBound(arr10) + 1)
    
    Call BuildDll2

End Sub

Sub BuildDll2(Optional ByVal Flag As Boolean)

    arr11 = Array(0, 204, 204, 204, 72, 131, 236, 40, 133, 210, 116, 57, 131, 234, 1, 116, _
    40, 131, 234, 1, 116, 22, 131, 250, 1, 116, 10, 184, 1, 0, 0, 0, _
    72, 131, 196, 40, 195, 232, 154, 6, 0, 0, 235, 5, 232, 107, 6, 0, _
    0, 15, 182, 192, 72, 131, 196, 40, 195, 73, 139, 208, 72, 131, 196, 40, _
    233, 15, 0, 0, 0, 77, 133, 192, 15, 149, 193, 72, 131, 196, 40, 233, _
    20, 1, 0, 0, 72, 137, 92, 36, 8, 72, 137, 116, 36, 16, 72, 137, _
    124, 36, 32, 65, 86, 72, 131, 236, 32, 72, 139, 242, 76, 139, 241, 51, _
    201, 232, 14, 7, 0, 0, 132, 192, 117, 7, 51, 192, 233, 208, 0, 0, _
    0, 232, 142, 5, 0, 0, 138, 216, 136, 68, 36, 64, 64, 183, 1, 131, _
    61, 42, 61, 0, 0, 0, 116, 10, 185, 7, 0, 0, 0, 232, 2, 9, _
    0, 0, 199, 5, 20, 61, 0, 0, 1, 0, 0, 0, 232, 211, 5, 0, _
    0, 132, 192, 116, 79, 232, 50, 10, 0, 0, 232, 13, 5, 0, 0, 232, _
    52, 5, 0, 0, 72, 141, 21, 253, 24, 0, 0, 72, 141, 13, 238, 24, _
    0, 0, 232, 161, 12, 0, 0, 133, 192, 117, 41, 232, 112, 5, 0, 0, _
    132, 192, 116, 32, 72, 141, 21, 205, 24, 0, 0, 72, 141, 13, 190, 24, _
    0, 0, 232, 123, 12, 0, 0, 199, 5, 191, 60, 0, 0, 2, 0, 0, _
    0, 64, 50, 255, 138, 203, 232, 65, 8, 0, 0, 64, 132, 255, 15, 133, _
    102, 255, 255, 255, 232, 131, 8, 0, 0, 72, 139, 216, 72, 131, 56, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr11) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr11(0)), 24 * (UBound(arr11) + 1)
    
    arr12 = Array(116, 36, 72, 139, 200, 232, 134, 7, 0, 0, 132, 192, 116, 24, 72, 139, _
    27, 72, 139, 203, 232, 75, 10, 0, 0, 76, 139, 198, 186, 2, 0, 0, _
    0, 73, 139, 206, 255, 211, 255, 5, 212, 54, 0, 0, 184, 1, 0, 0, _
    0, 72, 139, 92, 36, 48, 72, 139, 116, 36, 56, 72, 139, 124, 36, 72, _
    72, 131, 196, 32, 65, 94, 195, 204, 72, 137, 92, 36, 8, 72, 137, 116, _
    36, 24, 87, 72, 131, 236, 32, 64, 138, 241, 139, 5, 160, 54, 0, 0, _
    51, 219, 133, 192, 127, 4, 51, 192, 235, 90, 255, 200, 137, 5, 142, 54, _
    0, 0, 232, 125, 4, 0, 0, 64, 138, 248, 136, 68, 36, 56, 131, 61, _
    27, 60, 0, 0, 2, 116, 10, 185, 7, 0, 0, 0, 232, 243, 7, 0, _
    0, 232, 138, 5, 0, 0, 232, 33, 4, 0, 0, 232, 120, 9, 0, 0, _
    137, 29, 250, 59, 0, 0, 232, 165, 5, 0, 0, 64, 138, 207, 232, 121, _
    7, 0, 0, 51, 210, 64, 138, 206, 232, 147, 7, 0, 0, 132, 192, 15, _
    149, 195, 139, 195, 72, 139, 92, 36, 48, 72, 139, 116, 36, 64, 72, 131, _
    196, 32, 95, 195, 72, 139, 196, 72, 137, 88, 32, 76, 137, 64, 24, 137, _
    80, 16, 72, 137, 72, 8, 86, 87, 65, 86, 72, 131, 236, 64, 73, 139, _
    240, 139, 250, 76, 139, 241, 133, 210, 117, 15, 57, 21, 0, 54, 0, 0, _
    127, 7, 51, 192, 233, 178, 0, 0, 0, 141, 66, 255, 131, 248, 1, 119, _
    42, 232, 182, 0, 0, 0, 139, 216, 137, 68, 36, 48, 133, 192, 15, 132, _
    141, 0, 0, 0, 76, 139, 198, 139, 215, 73, 139, 206, 232, 179, 253, 255)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr12) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr12(0)), 24 * (UBound(arr12) + 1)
    
    arr13 = Array(255, 139, 216, 137, 68, 36, 48, 133, 192, 116, 118, 76, 139, 198, 139, 215, _
    73, 139, 206, 232, 64, 3, 0, 0, 139, 216, 137, 68, 36, 48, 131, 255, _
    1, 117, 43, 133, 192, 117, 39, 76, 139, 198, 51, 210, 73, 139, 206, 232, _
    36, 3, 0, 0, 76, 139, 198, 51, 210, 73, 139, 206, 232, 115, 253, 255, _
    255, 76, 139, 198, 51, 210, 73, 139, 206, 232, 78, 0, 0, 0, 133, 255, _
    116, 5, 131, 255, 3, 117, 42, 76, 139, 198, 139, 215, 73, 139, 206, 232, _
    80, 253, 255, 255, 139, 216, 137, 68, 36, 48, 133, 192, 116, 19, 76, 139, _
    198, 139, 215, 73, 139, 206, 232, 33, 0, 0, 0, 139, 216, 137, 68, 36, _
    48, 235, 6, 51, 219, 137, 92, 36, 48, 139, 195, 72, 139, 92, 36, 120, _
    72, 131, 196, 64, 65, 94, 95, 94, 195, 204, 204, 204, 72, 137, 92, 36, _
    8, 72, 137, 108, 36, 16, 72, 137, 116, 36, 24, 87, 72, 131, 236, 32, _
    72, 139, 29, 233, 22, 0, 0, 73, 139, 248, 139, 242, 72, 139, 233, 72, _
    133, 219, 117, 5, 141, 67, 1, 235, 18, 72, 139, 203, 232, 99, 8, 0, _
    0, 76, 139, 199, 139, 214, 72, 139, 205, 255, 211, 72, 139, 92, 36, 48, _
    72, 139, 108, 36, 56, 72, 139, 116, 36, 64, 72, 131, 196, 32, 95, 195, _
    72, 137, 92, 36, 8, 72, 137, 116, 36, 16, 87, 72, 131, 236, 32, 73, _
    139, 248, 139, 218, 72, 139, 241, 131, 250, 1, 117, 5, 232, 155, 1, 0, _
    0, 76, 139, 199, 139, 211, 72, 139, 206, 72, 139, 92, 36, 48, 72, 139)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr13) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr13(0)), 24 * (UBound(arr13) + 1)
    
    arr14 = Array(116, 36, 56, 72, 131, 196, 32, 95, 233, 119, 254, 255, 255, 204, 204, 204, _
    64, 83, 72, 131, 236, 32, 72, 139, 217, 51, 201, 255, 21, 175, 20, 0, _
    0, 72, 139, 203, 255, 21, 174, 20, 0, 0, 255, 21, 152, 20, 0, 0, _
    72, 139, 200, 186, 9, 4, 0, 192, 72, 131, 196, 32, 91, 72, 255, 37, _
    124, 20, 0, 0, 72, 137, 76, 36, 8, 72, 131, 236, 56, 185, 23, 0, _
    0, 0, 232, 219, 9, 0, 0, 133, 192, 116, 7, 185, 2, 0, 0, 0, _
    205, 41, 72, 141, 13, 247, 52, 0, 0, 232, 170, 0, 0, 0, 72, 139, _
    68, 36, 56, 72, 137, 5, 222, 53, 0, 0, 72, 141, 68, 36, 56, 72, _
    131, 192, 8, 72, 137, 5, 110, 53, 0, 0, 72, 139, 5, 199, 53, 0, _
    0, 72, 137, 5, 56, 52, 0, 0, 72, 139, 68, 36, 64, 72, 137, 5, _
    60, 53, 0, 0, 199, 5, 18, 52, 0, 0, 9, 4, 0, 192, 199, 5, _
    12, 52, 0, 0, 1, 0, 0, 0, 199, 5, 22, 52, 0, 0, 1, 0, _
    0, 0, 184, 8, 0, 0, 0, 72, 107, 192, 0, 72, 141, 13, 14, 52, _
    0, 0, 72, 199, 4, 1, 2, 0, 0, 0, 184, 8, 0, 0, 0, 72, _
    107, 192, 0, 72, 139, 13, 142, 51, 0, 0, 72, 137, 76, 4, 32, 184, _
    8, 0, 0, 0, 72, 107, 192, 1, 72, 139, 13, 113, 51, 0, 0, 72, _
    137, 76, 4, 32, 72, 141, 13, 125, 21, 0, 0, 232, 0, 255, 255, 255, _
    72, 131, 196, 56, 195, 204, 204, 204, 64, 83, 86, 87, 72, 131, 236, 64, _
    72, 139, 217, 255, 21, 199, 19, 0, 0, 72, 139, 179, 248, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr14) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr14(0)), 24 * (UBound(arr14) + 1)
    
    arr15 = Array(51, 255, 69, 51, 192, 72, 141, 84, 36, 96, 72, 139, 206, 255, 21, 165, _
    19, 0, 0, 72, 133, 192, 116, 57, 72, 131, 100, 36, 56, 0, 72, 141, _
    76, 36, 104, 72, 139, 84, 36, 96, 76, 139, 200, 72, 137, 76, 36, 48, _
    76, 139, 198, 72, 141, 76, 36, 112, 72, 137, 76, 36, 40, 51, 201, 72, _
    137, 92, 36, 32, 255, 21, 102, 19, 0, 0, 255, 199, 131, 255, 2, 124, _
    177, 72, 131, 196, 64, 95, 94, 91, 195, 204, 204, 204, 72, 137, 92, 36, _
    32, 85, 72, 139, 236, 72, 131, 236, 32, 72, 131, 101, 24, 0, 72, 187, _
    50, 162, 223, 45, 153, 43, 0, 0, 72, 139, 5, 201, 50, 0, 0, 72, _
    59, 195, 117, 111, 72, 141, 77, 24, 255, 21, 218, 18, 0, 0, 72, 139, _
    69, 24, 72, 137, 69, 16, 255, 21, 212, 18, 0, 0, 139, 192, 72, 49, _
    69, 16, 255, 21, 208, 18, 0, 0, 139, 192, 72, 141, 77, 32, 72, 49, _
    69, 16, 255, 21, 200, 18, 0, 0, 139, 69, 32, 72, 141, 77, 16, 72, _
    193, 224, 32, 72, 51, 69, 32, 72, 51, 69, 16, 72, 51, 193, 72, 185, _
    255, 255, 255, 255, 255, 255, 0, 0, 72, 35, 193, 72, 185, 51, 162, 223, _
    45, 153, 43, 0, 0, 72, 59, 195, 72, 15, 68, 193, 72, 137, 5, 85, _
    50, 0, 0, 72, 139, 92, 36, 72, 72, 247, 208, 72, 137, 5, 62, 50, _
    0, 0, 72, 131, 196, 32, 93, 195, 72, 131, 236, 40, 131, 250, 1, 117, _
    16, 72, 131, 61, 55, 20, 0, 0, 0, 117, 6, 255, 21, 63, 18, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr15) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr15(0)), 24 * (UBound(arr15) + 1)
    
    arr16 = Array(0, 184, 1, 0, 0, 0, 72, 131, 196, 40, 195, 204, 72, 141, 13, 205, _
    55, 0, 0, 72, 255, 37, 30, 18, 0, 0, 204, 204, 72, 141, 13, 189, _
    55, 0, 0, 233, 126, 7, 0, 0, 72, 141, 5, 193, 55, 0, 0, 195, _
    72, 141, 5, 193, 55, 0, 0, 195, 72, 131, 236, 40, 232, 231, 255, 255, _
    255, 72, 131, 8, 4, 232, 230, 255, 255, 255, 72, 131, 8, 2, 72, 131, _
    196, 40, 195, 204, 72, 131, 236, 40, 232, 51, 7, 0, 0, 133, 192, 116, _
    33, 101, 72, 139, 4, 37, 48, 0, 0, 0, 72, 139, 72, 8, 235, 5, _
    72, 59, 200, 116, 20, 51, 192, 240, 72, 15, 177, 13, 136, 55, 0, 0, _
    117, 238, 50, 192, 72, 131, 196, 40, 195, 176, 1, 235, 247, 204, 204, 204, _
    72, 131, 236, 40, 232, 247, 6, 0, 0, 133, 192, 116, 7, 232, 42, 5, _
    0, 0, 235, 25, 232, 223, 6, 0, 0, 139, 200, 232, 20, 7, 0, 0, _
    133, 192, 116, 4, 50, 192, 235, 7, 232, 13, 7, 0, 0, 176, 1, 72, _
    131, 196, 40, 195, 72, 131, 236, 40, 51, 201, 232, 65, 1, 0, 0, 132, _
    192, 15, 149, 192, 72, 131, 196, 40, 195, 204, 204, 204, 72, 131, 236, 40, _
    232, 3, 7, 0, 0, 132, 192, 117, 4, 50, 192, 235, 18, 232, 246, 6, _
    0, 0, 132, 192, 117, 7, 232, 237, 6, 0, 0, 235, 236, 176, 1, 72, _
    131, 196, 40, 195, 72, 131, 236, 40, 232, 219, 6, 0, 0, 232, 214, 6, _
    0, 0, 176, 1, 72, 131, 196, 40, 195, 204, 204, 204, 72, 137, 92, 36, _
    8, 72, 137, 108, 36, 16, 72, 137, 116, 36, 24, 87, 72, 131, 236, 32)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr16) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr16(0)), 24 * (UBound(arr16) + 1)
    
    arr17 = Array(73, 139, 249, 73, 139, 240, 139, 218, 72, 139, 233, 232, 80, 6, 0, 0, _
    133, 192, 117, 23, 131, 251, 1, 117, 18, 72, 139, 207, 232, 115, 4, 0, _
    0, 76, 139, 198, 51, 210, 72, 139, 205, 255, 215, 72, 139, 84, 36, 88, _
    139, 76, 36, 80, 72, 139, 92, 36, 48, 72, 139, 108, 36, 56, 72, 139, _
    116, 36, 64, 72, 131, 196, 32, 95, 233, 65, 6, 0, 0, 204, 204, 204, _
    72, 131, 236, 40, 232, 7, 6, 0, 0, 133, 192, 116, 16, 72, 141, 13, _
    124, 54, 0, 0, 72, 131, 196, 40, 233, 57, 6, 0, 0, 232, 74, 6, _
    0, 0, 133, 192, 117, 5, 232, 49, 6, 0, 0, 72, 131, 196, 40, 195, _
    72, 131, 236, 40, 51, 201, 232, 45, 6, 0, 0, 72, 131, 196, 40, 233, _
    36, 6, 0, 0, 64, 83, 72, 131, 236, 32, 15, 182, 5, 111, 54, 0, _
    0, 133, 201, 187, 1, 0, 0, 0, 15, 68, 195, 136, 5, 95, 54, 0, _
    0, 232, 230, 3, 0, 0, 232, 253, 5, 0, 0, 132, 192, 117, 4, 50, _
    192, 235, 20, 232, 240, 5, 0, 0, 132, 192, 117, 9, 51, 201, 232, 229, _
    5, 0, 0, 235, 234, 138, 195, 72, 131, 196, 32, 91, 195, 204, 204, 204, _
    72, 137, 92, 36, 8, 85, 72, 139, 236, 72, 131, 236, 64, 128, 61, 224, _
    53, 0, 0, 0, 139, 217, 15, 133, 171, 0, 0, 0, 131, 249, 1, 15, _
    135, 175, 0, 0, 0, 232, 86, 5, 0, 0, 133, 192, 116, 45, 133, 219, _
    117, 41, 72, 141, 13, 199, 53, 0, 0, 232, 130, 5, 0, 0, 133, 192, _
    116, 7, 50, 192, 233, 128, 0, 0, 0, 72, 141, 13, 200, 53, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr17) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr17(0)), 24 * (UBound(arr17) + 1)
    
    arr18 = Array(232, 107, 5, 0, 0, 133, 192, 116, 103, 235, 231, 72, 139, 21, 182, 47, _
    0, 0, 185, 64, 0, 0, 0, 139, 194, 131, 224, 63, 43, 200, 72, 131, _
    200, 255, 72, 211, 200, 72, 51, 194, 72, 137, 69, 224, 72, 137, 69, 232, _
    15, 16, 69, 224, 72, 137, 69, 240, 242, 15, 16, 77, 240, 15, 17, 5, _
    108, 53, 0, 0, 72, 137, 69, 224, 72, 137, 69, 232, 15, 16, 69, 224, _
    72, 137, 69, 240, 242, 15, 17, 13, 100, 53, 0, 0, 242, 15, 16, 77, _
    240, 15, 17, 5, 96, 53, 0, 0, 242, 15, 17, 13, 104, 53, 0, 0, _
    198, 5, 45, 53, 0, 0, 1, 176, 1, 72, 139, 92, 36, 80, 72, 131, _
    196, 64, 93, 195, 185, 5, 0, 0, 0, 232, 246, 0, 0, 0, 204, 204, _
    72, 131, 236, 24, 76, 139, 193, 184, 77, 90, 0, 0, 102, 57, 5, 29, _
    223, 255, 255, 117, 121, 72, 99, 5, 80, 223, 255, 255, 72, 141, 21, 13, _
    223, 255, 255, 72, 141, 12, 16, 129, 57, 80, 69, 0, 0, 117, 95, 184, _
    11, 2, 0, 0, 102, 57, 65, 24, 117, 84, 76, 43, 194, 15, 183, 65, _
    20, 72, 141, 81, 24, 72, 3, 208, 15, 183, 65, 6, 72, 141, 12, 128, _
    76, 141, 12, 202, 72, 137, 20, 36, 73, 59, 209, 116, 24, 139, 74, 12, _
    76, 59, 193, 114, 10, 139, 66, 8, 3, 193, 76, 59, 192, 114, 8, 72, _
    131, 194, 40, 235, 223, 51, 210, 72, 133, 210, 117, 4, 50, 192, 235, 20, _
    131, 122, 36, 0, 125, 4, 50, 192, 235, 10, 176, 1, 235, 6, 50, 192, _
    235, 2, 50, 192, 72, 131, 196, 24, 195, 204, 204, 204, 64, 83, 72, 131, _
    236, 32, 138, 217, 232, 247, 3, 0, 0, 51, 210, 133, 192, 116, 11, 132)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr18) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr18(0)), 24 * (UBound(arr18) + 1)
    
    arr19 = Array(219, 117, 7, 72, 135, 21, 94, 52, 0, 0, 72, 131, 196, 32, 91, 195, _
    64, 83, 72, 131, 236, 32, 128, 61, 131, 52, 0, 0, 0, 138, 217, 116, _
    4, 132, 210, 117, 14, 138, 203, 232, 28, 4, 0, 0, 138, 203, 232, 21, _
    4, 0, 0, 176, 1, 72, 131, 196, 32, 91, 195, 204, 72, 141, 5, 189, _
    52, 0, 0, 195, 72, 137, 92, 36, 8, 85, 72, 141, 172, 36, 64, 251, _
    255, 255, 72, 129, 236, 192, 5, 0, 0, 139, 217, 185, 23, 0, 0, 0, _
    232, 221, 3, 0, 0, 133, 192, 116, 4, 139, 203, 205, 41, 131, 37, 48, _
    52, 0, 0, 0, 72, 141, 77, 240, 51, 210, 65, 184, 208, 4, 0, 0, _
    232, 135, 3, 0, 0, 72, 141, 77, 240, 255, 21, 113, 14, 0, 0, 72, _
    139, 157, 232, 0, 0, 0, 72, 141, 149, 216, 4, 0, 0, 72, 139, 203, _
    69, 51, 192, 255, 21, 79, 14, 0, 0, 72, 133, 192, 116, 60, 72, 131, _
    100, 36, 56, 0, 72, 141, 141, 224, 4, 0, 0, 72, 139, 149, 216, 4, _
    0, 0, 76, 139, 200, 72, 137, 76, 36, 48, 76, 139, 195, 72, 141, 141, _
    232, 4, 0, 0, 72, 137, 76, 36, 40, 72, 141, 77, 240, 72, 137, 76, _
    36, 32, 51, 201, 255, 21, 6, 14, 0, 0, 72, 139, 133, 200, 4, 0, _
    0, 72, 141, 76, 36, 80, 72, 137, 133, 232, 0, 0, 0, 51, 210, 72, _
    141, 133, 200, 4, 0, 0, 65, 184, 152, 0, 0, 0, 72, 131, 192, 8, _
    72, 137, 133, 136, 0, 0, 0, 232, 240, 2, 0, 0, 72, 139, 133, 200, _
    4, 0, 0, 72, 137, 68, 36, 96, 199, 68, 36, 80, 21, 0, 0, 64)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr19) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr19(0)), 24 * (UBound(arr19) + 1)
    
    arr20 = Array(199, 68, 36, 84, 1, 0, 0, 0, 255, 21, 82, 13, 0, 0, 131, 248, _
    1, 72, 141, 68, 36, 80, 72, 137, 68, 36, 64, 72, 141, 69, 240, 15, _
    148, 195, 72, 137, 68, 36, 72, 51, 201, 255, 21, 129, 13, 0, 0, 72, _
    141, 76, 36, 64, 255, 21, 126, 13, 0, 0, 133, 192, 117, 10, 246, 219, _
    27, 192, 33, 5, 44, 51, 0, 0, 72, 139, 156, 36, 208, 5, 0, 0, _
    72, 129, 196, 192, 5, 0, 0, 93, 195, 204, 204, 204, 72, 137, 92, 36, _
    8, 72, 137, 116, 36, 16, 87, 72, 131, 236, 32, 72, 141, 29, 134, 20, _
    0, 0, 72, 141, 53, 127, 20, 0, 0, 235, 22, 72, 139, 59, 72, 133, _
    255, 116, 10, 72, 139, 207, 232, 105, 0, 0, 0, 255, 215, 72, 131, 195, _
    8, 72, 59, 222, 114, 229, 72, 139, 92, 36, 48, 72, 139, 116, 36, 56, _
    72, 131, 196, 32, 95, 195, 204, 204, 72, 137, 92, 36, 8, 72, 137, 116, _
    36, 16, 87, 72, 131, 236, 32, 72, 141, 29, 74, 20, 0, 0, 72, 141, _
    53, 67, 20, 0, 0, 235, 22, 72, 139, 59, 72, 133, 255, 116, 10, 72, _
    139, 207, 232, 29, 0, 0, 0, 255, 215, 72, 131, 195, 8, 72, 59, 222, _
    114, 229, 72, 139, 92, 36, 48, 72, 139, 116, 36, 56, 72, 131, 196, 32, _
    95, 195, 204, 204, 72, 255, 37, 21, 14, 0, 0, 204, 72, 137, 92, 36, _
    16, 72, 137, 108, 36, 24, 86, 87, 65, 86, 72, 131, 236, 16, 51, 201, _
    199, 5, 90, 44, 0, 0, 2, 0, 0, 0, 51, 192, 199, 5, 74, 44, _
    0, 0, 1, 0, 0, 0, 15, 162, 68, 139, 209, 68, 139, 202, 129, 241)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr20) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr20(0)), 24 * (UBound(arr20) + 1)
        
    Call BuildDll3

End Sub

Sub BuildDll3(Optional ByVal Flag As Boolean)

    arr21 = Array(99, 65, 77, 68, 129, 242, 101, 110, 116, 105, 139, 235, 69, 51, 219, 129, _
    245, 65, 117, 116, 104, 68, 139, 240, 11, 234, 65, 129, 241, 105, 110, 101, _
    73, 11, 233, 65, 129, 242, 110, 116, 101, 108, 68, 139, 195, 65, 141, 67, _
    1, 51, 201, 65, 129, 240, 71, 101, 110, 117, 15, 162, 69, 11, 209, 137, _
    4, 36, 69, 11, 208, 137, 92, 36, 4, 68, 139, 5, 248, 49, 0, 0, _
    139, 241, 139, 248, 137, 76, 36, 8, 137, 84, 36, 12, 117, 82, 72, 131, _
    13, 210, 43, 0, 0, 255, 65, 131, 200, 4, 37, 240, 63, 255, 15, 68, _
    137, 5, 210, 49, 0, 0, 61, 192, 6, 1, 0, 116, 40, 61, 96, 6, _
    2, 0, 116, 33, 61, 112, 6, 2, 0, 116, 26, 5, 176, 249, 252, 255, _
    131, 248, 32, 119, 27, 72, 185, 1, 0, 1, 0, 1, 0, 0, 0, 72, _
    15, 163, 193, 115, 11, 65, 131, 200, 1, 68, 137, 5, 152, 49, 0, 0, _
    133, 237, 117, 25, 129, 231, 0, 15, 240, 15, 129, 255, 0, 15, 96, 0, _
    114, 11, 65, 131, 200, 4, 68, 137, 5, 123, 49, 0, 0, 184, 7, 0, _
    0, 0, 68, 59, 240, 124, 39, 51, 201, 15, 162, 137, 4, 36, 68, 139, _
    219, 137, 92, 36, 4, 137, 76, 36, 8, 137, 84, 36, 12, 15, 186, 227, _
    9, 115, 11, 65, 131, 200, 2, 68, 137, 5, 74, 49, 0, 0, 15, 186, _
    230, 20, 115, 110, 199, 5, 50, 43, 0, 0, 2, 0, 0, 0, 199, 5, _
    44, 43, 0, 0, 6, 0, 0, 0, 15, 186, 230, 27, 115, 84, 15, 186, _
    230, 28, 115, 78, 51, 201, 15, 1, 208, 72, 193, 226, 32, 72, 11, 208, _
    72, 137, 84, 36, 48, 72, 139, 68, 36, 48, 36, 6, 60, 6, 117, 50)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr21) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr21(0)), 24 * (UBound(arr21) + 1)
    
    arr22 = Array(139, 5, 254, 42, 0, 0, 131, 200, 8, 199, 5, 237, 42, 0, 0, 3, _
    0, 0, 0, 137, 5, 235, 42, 0, 0, 65, 246, 195, 32, 116, 19, 131, _
    200, 32, 199, 5, 212, 42, 0, 0, 5, 0, 0, 0, 137, 5, 210, 42, _
    0, 0, 72, 139, 92, 36, 56, 51, 192, 72, 139, 108, 36, 64, 72, 131, _
    196, 16, 65, 94, 95, 94, 195, 204, 184, 1, 0, 0, 0, 195, 204, 204, _
    51, 192, 57, 5, 184, 42, 0, 0, 15, 149, 192, 195, 194, 0, 0, 204, _
    255, 37, 194, 11, 0, 0, 255, 37, 204, 11, 0, 0, 255, 37, 190, 11, _
    0, 0, 255, 37, 248, 11, 0, 0, 255, 37, 234, 11, 0, 0, 255, 37, _
    220, 11, 0, 0, 255, 37, 206, 11, 0, 0, 255, 37, 240, 11, 0, 0, _
    255, 37, 186, 11, 0, 0, 255, 37, 172, 11, 0, 0, 255, 37, 214, 11, _
    0, 0, 255, 37, 128, 10, 0, 0, 176, 1, 195, 204, 51, 192, 195, 204, _
    72, 131, 236, 40, 77, 139, 65, 56, 72, 139, 202, 73, 139, 209, 232, 13, _
    0, 0, 0, 184, 1, 0, 0, 0, 72, 131, 196, 40, 195, 204, 204, 204, _
    64, 83, 69, 139, 24, 72, 139, 218, 65, 131, 227, 248, 76, 139, 201, 65, _
    246, 0, 4, 76, 139, 209, 116, 19, 65, 139, 64, 8, 77, 99, 80, 4, _
    247, 216, 76, 3, 209, 72, 99, 200, 76, 35, 209, 73, 99, 195, 74, 139, _
    20, 16, 72, 139, 67, 16, 139, 72, 8, 72, 3, 75, 8, 246, 65, 3, _
    15, 116, 10, 15, 182, 65, 3, 131, 224, 240, 76, 3, 200, 76, 51, 202, _
    73, 139, 201, 91, 233, 183, 241, 255, 255, 204, 204, 204, 204, 204, 204, 204, _
    204, 204, 204, 204, 204, 204, 102, 102, 15, 31, 132, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr22) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr22(0)), 24 * (UBound(arr22) + 1)
    
    arr23 = Array(255, 224, 64, 85, 72, 131, 236, 32, 72, 139, 234, 138, 77, 64, 72, 131, _
    196, 32, 93, 233, 244, 250, 255, 255, 204, 64, 85, 72, 131, 236, 32, 72, _
    139, 234, 232, 9, 249, 255, 255, 138, 77, 56, 72, 131, 196, 32, 93, 233, _
    216, 250, 255, 255, 204, 64, 85, 72, 131, 236, 48, 72, 139, 234, 72, 139, _
    1, 139, 16, 72, 137, 76, 36, 40, 137, 84, 36, 32, 76, 141, 13, 113, _
    241, 255, 255, 76, 139, 69, 112, 139, 85, 104, 72, 139, 77, 96, 232, 57, _
    248, 255, 255, 144, 72, 131, 196, 48, 93, 195, 204, 64, 85, 72, 139, 234, _
    72, 139, 1, 51, 201, 129, 56, 5, 0, 0, 192, 15, 148, 193, 139, 193, _
    93, 195, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr23) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr23(0)), 24 * (UBound(arr23) + 1)
    
    arr24 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    216, 59, 0, 0, 0, 0, 0, 0, 236, 59, 0, 0, 0, 0, 0, 0, _
    14, 64, 0, 0, 0, 0, 0, 0, 248, 63, 0, 0, 0, 0, 0, 0, _
    220, 63, 0, 0, 0, 0, 0, 0, 194, 63, 0, 0, 0, 0, 0, 0, _
    172, 63, 0, 0, 0, 0, 0, 0, 150, 63, 0, 0, 0, 0, 0, 0, _
    124, 63, 0, 0, 0, 0, 0, 0, 96, 63, 0, 0, 0, 0, 0, 0, _
    76, 63, 0, 0, 0, 0, 0, 0, 56, 63, 0, 0, 0, 0, 0, 0, _
    26, 63, 0, 0, 0, 0, 0, 0, 254, 62, 0, 0, 0, 0, 0, 0, _
    234, 62, 0, 0, 0, 0, 0, 0, 208, 62, 0, 0, 0, 0, 0, 0, _
    188, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    12, 61, 0, 0, 0, 0, 0, 0, 24, 61, 0, 0, 0, 0, 0, 0, _
    38, 61, 0, 0, 0, 0, 0, 0, 52, 61, 0, 0, 0, 0, 0, 0, _
    70, 61, 0, 0, 0, 0, 0, 0, 86, 61, 0, 0, 0, 0, 0, 0, _
    40, 60, 0, 0, 0, 0, 0, 0, 54, 60, 0, 0, 0, 0, 0, 0, _
    74, 60, 0, 0, 0, 0, 0, 0, 90, 60, 0, 0, 0, 0, 0, 0, _
    250, 60, 0, 0, 0, 0, 0, 0, 104, 60, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr24) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr24(0)), 24 * (UBound(arr24) + 1)
    
    arr25 = Array(116, 60, 0, 0, 0, 0, 0, 0, 138, 60, 0, 0, 0, 0, 0, 0, _
    156, 60, 0, 0, 0, 0, 0, 0, 168, 60, 0, 0, 0, 0, 0, 0, _
    182, 60, 0, 0, 0, 0, 0, 0, 196, 60, 0, 0, 0, 0, 0, 0, _
    214, 60, 0, 0, 0, 0, 0, 0, 28, 60, 0, 0, 0, 0, 0, 0, _
    230, 60, 0, 0, 0, 0, 0, 0, 6, 60, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 116, 61, 0, 0, 0, 0, 0, 0, _
    172, 61, 0, 0, 0, 0, 0, 0, 140, 61, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 86, 62, 0, 0, 0, 0, 0, 0, _
    58, 62, 0, 0, 0, 0, 0, 0, 254, 61, 0, 0, 0, 0, 0, 0, _
    236, 61, 0, 0, 0, 0, 0, 0, 222, 61, 0, 0, 0, 0, 0, 0, _
    210, 61, 0, 0, 0, 0, 0, 0, 110, 62, 0, 0, 0, 0, 0, 0, _
    24, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    200, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    124, 37, 0, 128, 1, 0, 0, 0, 96, 38, 0, 128, 1, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 0, 128, 1, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr25) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr25(0)), 24 * (UBound(arr25) + 1)
    
    arr26 = Array(240, 80, 0, 128, 1, 0, 0, 0, 119, 0, 110, 0, 100, 0, 99, 0, _
    108, 0, 97, 0, 115, 0, 115, 0, 95, 0, 100, 0, 101, 0, 115, 0, _
    107, 0, 101, 0, 100, 0, 95, 0, 103, 0, 115, 0, 107, 0, 0, 0, _
    77, 0, 115, 0, 103, 0, 80, 0, 111, 0, 115, 0, 116, 0, 101, 0, _
    100, 0, 0, 0, 0, 0, 0, 0, 79, 0, 111, 0, 112, 0, 115, 0, _
    32, 0, 33, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    84, 0, 104, 0, 101, 0, 32, 0, 86, 0, 66, 0, 69, 0, 32, 0, _
    119, 0, 97, 0, 115, 0, 32, 0, 114, 0, 101, 0, 115, 0, 101, 0, _
    116, 0, 46, 0, 10, 0, 69, 0, 120, 0, 99, 0, 101, 0, 108, 0, _
    32, 0, 104, 0, 97, 0, 115, 0, 32, 0, 98, 0, 101, 0, 101, 0, _
    110, 0, 32, 0, 115, 0, 97, 0, 102, 0, 101, 0, 108, 0, 121, 0, _
    32, 0, 85, 0, 110, 0, 45, 0, 83, 0, 117, 0, 98, 0, 99, 0, _
    108, 0, 97, 0, 115, 0, 115, 0, 101, 0, 100, 0, 46, 0, 0, 0, _
    35, 0, 51, 0, 50, 0, 55, 0, 55, 0, 48, 0, 0, 0, 0, 0, _
    77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 86, 105, 115, 117, 97, 108, _
    32, 66, 97, 115, 105, 99, 0, 0, 82, 117, 110, 45, 116, 105, 109, 101, _
    32, 101, 114, 114, 111, 114, 0, 0, 67, 111, 109, 112, 105, 108, 101, 32, _
    69, 114, 114, 111, 114, 58, 0, 0, 69, 114, 114, 101, 117, 114, 32, 100, _
    39, 101, 120, 233, 99, 117, 116, 105, 111, 110, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr26) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr26(0)), 24 * (UBound(arr26) + 1)
    
    arr27 = Array(69, 114, 114, 101, 117, 114, 32, 100, 101, 32, 99, 111, 109, 112, 105, 108, _
    97, 116, 105, 111, 110, 58, 0, 0, 83, 101, 32, 104, 97, 32, 112, 114, _
    111, 100, 117, 99, 105, 100, 111, 32, 101, 108, 32, 101, 114, 114, 111, 114, _
    0, 0, 0, 0, 0, 0, 0, 0, 69, 114, 114, 111, 114, 32, 100, 101, _
    32, 99, 111, 109, 112, 105, 108, 97, 99, 105, 243, 110, 58, 0, 0, 0, _
    88, 0, 108, 0, 83, 0, 117, 0, 98, 0, 67, 0, 108, 0, 97, 0, _
    115, 0, 115, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 114, 187, 201, 89, 0, 0, 0, 0, 2, 0, 0, 0, _
    117, 0, 0, 0, 208, 52, 0, 0, 208, 32, 0, 0, 0, 0, 0, 0, _
    114, 187, 201, 89, 0, 0, 0, 0, 12, 0, 0, 0, 20, 0, 0, 0, _
    72, 53, 0, 0, 72, 33, 0, 0, 0, 0, 0, 0, 114, 187, 201, 89, _
    0, 0, 0, 0, 13, 0, 0, 0, 64, 2, 0, 0, 92, 53, 0, 0, _
    92, 33, 0, 0, 0, 0, 0, 0, 114, 187, 201, 89, 0, 0, 0, 0, _
    14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr27) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr27(0)), 24 * (UBound(arr27) + 1)
    
    arr28 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 128, 1, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    192, 49, 0, 128, 1, 0, 0, 0, 200, 49, 0, 128, 1, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    82, 83, 68, 83, 12, 189, 98, 240, 236, 46, 225, 72, 157, 173, 224, 124, _
    166, 2, 208, 11, 237, 0, 0, 0, 67, 58, 92, 85, 115, 101, 114, 115, _
    92, 73, 110, 102, 111, 45, 72, 112, 92, 100, 111, 99, 117, 109, 101, 110, _
    116, 115, 92, 118, 105, 115, 117, 97, 108, 32, 115, 116, 117, 100, 105, 111, _
    32, 50, 48, 49, 55, 92, 80, 114, 111, 106, 101, 99, 116, 115, 92, 88, _
    108, 83, 117, 98, 67, 108, 97, 115, 115, 92, 120, 54, 52, 92, 82, 101, _
    108, 101, 97, 115, 101, 92, 88, 108, 83, 117, 98, 67, 108, 97, 115, 115, _
    46, 112, 100, 98, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, _
    21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 71, 67, 84, 76, _
    0, 16, 0, 0, 80, 22, 0, 0, 46, 116, 101, 120, 116, 36, 109, 110, _
    0, 0, 0, 0, 80, 38, 0, 0, 18, 0, 0, 0, 46, 116, 101, 120, _
    116, 36, 109, 110, 36, 48, 48, 0, 98, 38, 0, 0, 129, 0, 0, 0, _
    46, 116, 101, 120, 116, 36, 120, 0, 0, 48, 0, 0, 192, 1, 0, 0, _
    46, 105, 100, 97, 116, 97, 36, 53, 0, 0, 0, 0, 192, 49, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr28) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr28(0)), 24 * (UBound(arr28) + 1)
    
    arr29 = Array(16, 0, 0, 0, 46, 48, 48, 99, 102, 103, 0, 0, 208, 49, 0, 0, _
    8, 0, 0, 0, 46, 67, 82, 84, 36, 88, 67, 65, 0, 0, 0, 0, _
    216, 49, 0, 0, 8, 0, 0, 0, 46, 67, 82, 84, 36, 88, 67, 90, _
    0, 0, 0, 0, 224, 49, 0, 0, 8, 0, 0, 0, 46, 67, 82, 84, _
    36, 88, 73, 65, 0, 0, 0, 0, 232, 49, 0, 0, 8, 0, 0, 0, _
    46, 67, 82, 84, 36, 88, 73, 90, 0, 0, 0, 0, 240, 49, 0, 0, _
    8, 0, 0, 0, 46, 67, 82, 84, 36, 88, 80, 65, 0, 0, 0, 0, _
    248, 49, 0, 0, 8, 0, 0, 0, 46, 67, 82, 84, 36, 88, 80, 90, _
    0, 0, 0, 0, 0, 50, 0, 0, 8, 0, 0, 0, 46, 67, 82, 84, _
    36, 88, 84, 65, 0, 0, 0, 0, 8, 50, 0, 0, 8, 0, 0, 0, _
    46, 67, 82, 84, 36, 88, 84, 90, 0, 0, 0, 0, 16, 50, 0, 0, _
    192, 2, 0, 0, 46, 114, 100, 97, 116, 97, 0, 0, 208, 52, 0, 0, _
    208, 2, 0, 0, 46, 114, 100, 97, 116, 97, 36, 122, 122, 122, 100, 98, _
    103, 0, 0, 0, 160, 55, 0, 0, 8, 0, 0, 0, 46, 114, 116, 99, _
    36, 73, 65, 65, 0, 0, 0, 0, 168, 55, 0, 0, 8, 0, 0, 0, _
    46, 114, 116, 99, 36, 73, 90, 90, 0, 0, 0, 0, 176, 55, 0, 0, _
    8, 0, 0, 0, 46, 114, 116, 99, 36, 84, 65, 65, 0, 0, 0, 0, _
    184, 55, 0, 0, 8, 0, 0, 0, 46, 114, 116, 99, 36, 84, 90, 90)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr29) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr29(0)), 24 * (UBound(arr29) + 1)
    
    arr30 = Array(0, 0, 0, 0, 192, 55, 0, 0, 128, 1, 0, 0, 46, 120, 100, 97, _
    116, 97, 0, 0, 64, 57, 0, 0, 96, 0, 0, 0, 46, 101, 100, 97, _
    116, 97, 0, 0, 160, 57, 0, 0, 100, 0, 0, 0, 46, 105, 100, 97, _
    116, 97, 36, 50, 0, 0, 0, 0, 4, 58, 0, 0, 20, 0, 0, 0, _
    46, 105, 100, 97, 116, 97, 36, 51, 0, 0, 0, 0, 24, 58, 0, 0, _
    192, 1, 0, 0, 46, 105, 100, 97, 116, 97, 36, 52, 0, 0, 0, 0, _
    216, 59, 0, 0, 74, 4, 0, 0, 46, 105, 100, 97, 116, 97, 36, 54, _
    0, 0, 0, 0, 0, 80, 0, 0, 64, 0, 0, 0, 46, 100, 97, 116, _
    97, 0, 0, 0, 64, 80, 0, 0, 72, 6, 0, 0, 46, 98, 115, 115, _
    0, 0, 0, 0, 0, 96, 0, 0, 28, 2, 0, 0, 46, 112, 100, 97, _
    116, 97, 0, 0, 0, 112, 0, 0, 96, 0, 0, 0, 46, 114, 115, 114, _
    99, 36, 48, 49, 0, 0, 0, 0, 96, 112, 0, 0, 128, 1, 0, 0, _
    46, 114, 115, 114, 99, 36, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    1, 6, 2, 0, 6, 50, 2, 48, 1, 4, 1, 0, 4, 66, 0, 0, _
    1, 20, 8, 0, 20, 100, 10, 0, 20, 84, 9, 0, 20, 52, 8, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr30) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr30(0)), 24 * (UBound(arr30) + 1)
    
    Call BuildDll4

End Sub

Sub BuildDll4(Optional ByVal Flag As Boolean)

    arr31 = Array(20, 82, 16, 112, 25, 29, 5, 0, 11, 1, 106, 0, 4, 112, 3, 96, _
    2, 48, 0, 0, 208, 37, 0, 0, 64, 3, 0, 0, 0, 0, 0, 0, _
    1, 0, 0, 0, 17, 21, 8, 0, 21, 116, 9, 0, 21, 100, 7, 0, _
    21, 52, 6, 0, 21, 50, 17, 224, 128, 37, 0, 0, 1, 0, 0, 0, _
    175, 24, 0, 0, 36, 25, 0, 0, 98, 38, 0, 0, 0, 0, 0, 0, _
    1, 6, 2, 0, 6, 50, 2, 80, 17, 15, 6, 0, 15, 100, 8, 0, _
    15, 52, 6, 0, 15, 50, 11, 112, 128, 37, 0, 0, 1, 0, 0, 0, _
    190, 25, 0, 0, 230, 25, 0, 0, 121, 38, 0, 0, 0, 0, 0, 0, _
    9, 26, 6, 0, 26, 52, 15, 0, 26, 114, 22, 224, 20, 112, 19, 96, _
    128, 37, 0, 0, 1, 0, 0, 0, 73, 26, 0, 0, 243, 26, 0, 0, _
    149, 38, 0, 0, 243, 26, 0, 0, 1, 6, 2, 0, 6, 82, 2, 80, _
    1, 15, 6, 0, 15, 100, 7, 0, 15, 52, 6, 0, 15, 50, 11, 112, _
    1, 9, 1, 0, 9, 98, 0, 0, 1, 8, 4, 0, 8, 114, 4, 112, _
    3, 96, 2, 48, 1, 13, 4, 0, 13, 52, 9, 0, 13, 50, 6, 80, _
    9, 4, 1, 0, 4, 34, 0, 0, 128, 37, 0, 0, 1, 0, 0, 0, _
    215, 32, 0, 0, 98, 33, 0, 0, 203, 38, 0, 0, 98, 33, 0, 0, _
    1, 2, 1, 0, 2, 80, 0, 0, 1, 13, 4, 0, 13, 52, 10, 0, _
    13, 114, 6, 80, 1, 20, 8, 0, 20, 100, 8, 0, 20, 84, 7, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr31) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr31(0)), 24 * (UBound(arr31) + 1)
    
    arr32 = Array(20, 52, 6, 0, 20, 50, 16, 112, 1, 21, 5, 0, 21, 52, 186, 0, _
    21, 1, 184, 0, 6, 80, 0, 0, 1, 18, 8, 0, 18, 84, 8, 0, _
    18, 52, 7, 0, 18, 18, 14, 224, 12, 112, 11, 96, 0, 0, 0, 0, _
    1, 0, 0, 0, 1, 2, 1, 0, 2, 48, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 114, 187, 201, 89, 0, 0, 0, 0, 124, 57, 0, 0, _
    1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 104, 57, 0, 0, _
    112, 57, 0, 0, 120, 57, 0, 0, 0, 16, 0, 0, 192, 17, 0, 0, _
    139, 57, 0, 0, 148, 57, 0, 0, 0, 0, 1, 0, 88, 108, 83, 117, _
    98, 67, 108, 97, 115, 115, 46, 100, 108, 108, 0, 83, 117, 98, 67, 108, _
    97, 115, 115, 0, 85, 110, 83, 117, 98, 67, 108, 97, 115, 115, 0, 0, _
    24, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 59, 0, 0, _
    0, 48, 0, 0, 168, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    104, 61, 0, 0, 144, 48, 0, 0, 96, 59, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 182, 61, 0, 0, 72, 49, 0, 0, 200, 59, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 120, 62, 0, 0, 176, 49, 0, 0, _
    128, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 62, 0, 0, _
    104, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 216, 59, 0, 0, 0, 0, 0, 0, _
    236, 59, 0, 0, 0, 0, 0, 0, 14, 64, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr32) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr32(0)), 24 * (UBound(arr32) + 1)
    
    arr33 = Array(248, 63, 0, 0, 0, 0, 0, 0, 220, 63, 0, 0, 0, 0, 0, 0, _
    194, 63, 0, 0, 0, 0, 0, 0, 172, 63, 0, 0, 0, 0, 0, 0, _
    150, 63, 0, 0, 0, 0, 0, 0, 124, 63, 0, 0, 0, 0, 0, 0, _
    96, 63, 0, 0, 0, 0, 0, 0, 76, 63, 0, 0, 0, 0, 0, 0, _
    56, 63, 0, 0, 0, 0, 0, 0, 26, 63, 0, 0, 0, 0, 0, 0, _
    254, 62, 0, 0, 0, 0, 0, 0, 234, 62, 0, 0, 0, 0, 0, 0, _
    208, 62, 0, 0, 0, 0, 0, 0, 188, 62, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 12, 61, 0, 0, 0, 0, 0, 0, _
    24, 61, 0, 0, 0, 0, 0, 0, 38, 61, 0, 0, 0, 0, 0, 0, _
    52, 61, 0, 0, 0, 0, 0, 0, 70, 61, 0, 0, 0, 0, 0, 0, _
    86, 61, 0, 0, 0, 0, 0, 0, 40, 60, 0, 0, 0, 0, 0, 0, _
    54, 60, 0, 0, 0, 0, 0, 0, 74, 60, 0, 0, 0, 0, 0, 0, _
    90, 60, 0, 0, 0, 0, 0, 0, 250, 60, 0, 0, 0, 0, 0, 0, _
    104, 60, 0, 0, 0, 0, 0, 0, 116, 60, 0, 0, 0, 0, 0, 0, _
    138, 60, 0, 0, 0, 0, 0, 0, 156, 60, 0, 0, 0, 0, 0, 0, _
    168, 60, 0, 0, 0, 0, 0, 0, 182, 60, 0, 0, 0, 0, 0, 0, _
    196, 60, 0, 0, 0, 0, 0, 0, 214, 60, 0, 0, 0, 0, 0, 0, _
    28, 60, 0, 0, 0, 0, 0, 0, 230, 60, 0, 0, 0, 0, 0, 0, _
    6, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr33) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr33(0)), 24 * (UBound(arr33) + 1)
    
    arr34 = Array(116, 61, 0, 0, 0, 0, 0, 0, 172, 61, 0, 0, 0, 0, 0, 0, _
    140, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    86, 62, 0, 0, 0, 0, 0, 0, 58, 62, 0, 0, 0, 0, 0, 0, _
    254, 61, 0, 0, 0, 0, 0, 0, 236, 61, 0, 0, 0, 0, 0, 0, _
    222, 61, 0, 0, 0, 0, 0, 0, 210, 61, 0, 0, 0, 0, 0, 0, _
    110, 62, 0, 0, 0, 0, 0, 0, 24, 62, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 200, 61, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 118, 2, 71, 101, 116, 77, 111, 100, _
    117, 108, 101, 72, 97, 110, 100, 108, 101, 87, 0, 0, 45, 6, 108, 115, _
    116, 114, 99, 109, 112, 87, 0, 0, 75, 69, 82, 78, 69, 76, 51, 50, _
    46, 100, 108, 108, 0, 0, 8, 3, 83, 101, 116, 70, 111, 114, 101, 103, _
    114, 111, 117, 110, 100, 87, 105, 110, 100, 111, 119, 0, 50, 2, 75, 105, _
    108, 108, 84, 105, 109, 101, 114, 0, 67, 1, 71, 101, 116, 68, 108, 103, _
    73, 116, 101, 109, 0, 0, 79, 3, 83, 101, 116, 87, 105, 110, 100, 111, _
    119, 115, 72, 111, 111, 107, 69, 120, 87, 0, 42, 1, 71, 101, 116, 67, _
    108, 97, 115, 115, 78, 97, 109, 101, 87, 0, 13, 1, 70, 105, 110, 100, _
    87, 105, 110, 100, 111, 119, 87, 0, 38, 3, 83, 101, 116, 80, 114, 111, _
    112, 87, 0, 0, 123, 3, 85, 110, 104, 111, 111, 107, 87, 105, 110, 100, _
    111, 119, 115, 72, 111, 111, 107, 69, 120, 0, 222, 1, 71, 101, 116, 87)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr34) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr34(0)), 24 * (UBound(arr34) + 1)
    
    arr35 = Array(105, 110, 100, 111, 119, 84, 101, 120, 116, 65, 0, 0, 54, 3, 83, 101, _
    116, 84, 105, 109, 101, 114, 0, 0, 87, 3, 83, 104, 111, 119, 87, 105, _
    110, 100, 111, 119, 0, 0, 217, 2, 82, 101, 109, 111, 118, 101, 80, 114, _
    111, 112, 87, 0, 30, 0, 67, 97, 108, 108, 78, 101, 120, 116, 72, 111, _
    111, 107, 69, 120, 0, 0, 236, 2, 83, 101, 110, 100, 77, 101, 115, 115, _
    97, 103, 101, 87, 0, 0, 67, 3, 83, 101, 116, 87, 105, 110, 100, 111, _
    119, 76, 111, 110, 103, 80, 116, 114, 87, 0, 239, 2, 83, 101, 116, 65, _
    99, 116, 105, 118, 101, 87, 105, 110, 100, 111, 119, 0, 160, 1, 71, 101, _
    116, 80, 114, 111, 112, 87, 0, 0, 177, 3, 107, 101, 121, 98, 100, 95, _
    101, 118, 101, 110, 116, 0, 102, 2, 77, 101, 115, 115, 97, 103, 101, 66, _
    111, 120, 87, 0, 47, 2, 73, 115, 87, 105, 110, 100, 111, 119, 86, 105, _
    115, 105, 98, 108, 101, 0, 137, 2, 80, 111, 115, 116, 77, 101, 115, 115, _
    97, 103, 101, 87, 0, 0, 32, 0, 67, 97, 108, 108, 87, 105, 110, 100, _
    111, 119, 80, 114, 111, 99, 87, 0, 85, 83, 69, 82, 51, 50, 46, 100, _
    108, 108, 0, 0, 8, 0, 95, 95, 67, 95, 115, 112, 101, 99, 105, 102, _
    105, 99, 95, 104, 97, 110, 100, 108, 101, 114, 0, 0, 37, 0, 95, 95, _
    115, 116, 100, 95, 116, 121, 112, 101, 95, 105, 110, 102, 111, 95, 100, 101, _
    115, 116, 114, 111, 121, 95, 108, 105, 115, 116, 0, 0, 62, 0, 109, 101)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr35) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr35(0)), 24 * (UBound(arr35) + 1)
    
    arr36 = Array(109, 115, 101, 116, 0, 0, 86, 67, 82, 85, 78, 84, 73, 77, 69, 49, _
    52, 48, 46, 100, 108, 108, 0, 0, 142, 0, 115, 116, 114, 110, 99, 109, _
    112, 0, 54, 0, 95, 105, 110, 105, 116, 116, 101, 114, 109, 0, 55, 0, _
    95, 105, 110, 105, 116, 116, 101, 114, 109, 95, 101, 0, 63, 0, 95, 115, _
    101, 104, 95, 102, 105, 108, 116, 101, 114, 95, 100, 108, 108, 0, 24, 0, _
    95, 99, 111, 110, 102, 105, 103, 117, 114, 101, 95, 110, 97, 114, 114, 111, _
    119, 95, 97, 114, 103, 118, 0, 0, 51, 0, 95, 105, 110, 105, 116, 105, _
    97, 108, 105, 122, 101, 95, 110, 97, 114, 114, 111, 119, 95, 101, 110, 118, _
    105, 114, 111, 110, 109, 101, 110, 116, 0, 0, 52, 0, 95, 105, 110, 105, _
    116, 105, 97, 108, 105, 122, 101, 95, 111, 110, 101, 120, 105, 116, 95, 116, _
    97, 98, 108, 101, 0, 0, 34, 0, 95, 101, 120, 101, 99, 117, 116, 101, _
    95, 111, 110, 101, 120, 105, 116, 95, 116, 97, 98, 108, 101, 0, 22, 0, _
    95, 99, 101, 120, 105, 116, 0, 0, 97, 112, 105, 45, 109, 115, 45, 119, _
    105, 110, 45, 99, 114, 116, 45, 115, 116, 114, 105, 110, 103, 45, 108, 49, _
    45, 49, 45, 48, 46, 100, 108, 108, 0, 0, 97, 112, 105, 45, 109, 115, _
    45, 119, 105, 110, 45, 99, 114, 116, 45, 114, 117, 110, 116, 105, 109, 101, _
    45, 108, 49, 45, 49, 45, 48, 46, 100, 108, 108, 0, 194, 4, 82, 116, _
    108, 67, 97, 112, 116, 117, 114, 101, 67, 111, 110, 116, 101, 120, 116, 0, _
    201, 4, 82, 116, 108, 76, 111, 111, 107, 117, 112, 70, 117, 110, 99, 116)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr36) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr36(0)), 24 * (UBound(arr36) + 1)
    
    arr37 = Array(105, 111, 110, 69, 110, 116, 114, 121, 0, 0, 208, 4, 82, 116, 108, 86, _
    105, 114, 116, 117, 97, 108, 85, 110, 119, 105, 110, 100, 0, 0, 169, 5, _
    85, 110, 104, 97, 110, 100, 108, 101, 100, 69, 120, 99, 101, 112, 116, 105, _
    111, 110, 70, 105, 108, 116, 101, 114, 0, 0, 105, 5, 83, 101, 116, 85, _
    110, 104, 97, 110, 100, 108, 101, 100, 69, 120, 99, 101, 112, 116, 105, 111, _
    110, 70, 105, 108, 116, 101, 114, 0, 24, 2, 71, 101, 116, 67, 117, 114, _
    114, 101, 110, 116, 80, 114, 111, 99, 101, 115, 115, 0, 135, 5, 84, 101, _
    114, 109, 105, 110, 97, 116, 101, 80, 114, 111, 99, 101, 115, 115, 0, 0, _
    126, 3, 73, 115, 80, 114, 111, 99, 101, 115, 115, 111, 114, 70, 101, 97, _
    116, 117, 114, 101, 80, 114, 101, 115, 101, 110, 116, 0, 65, 4, 81, 117, _
    101, 114, 121, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 67, 111, _
    117, 110, 116, 101, 114, 0, 25, 2, 71, 101, 116, 67, 117, 114, 114, 101, _
    110, 116, 80, 114, 111, 99, 101, 115, 115, 73, 100, 0, 29, 2, 71, 101, _
    116, 67, 117, 114, 114, 101, 110, 116, 84, 104, 114, 101, 97, 100, 73, 100, _
    0, 0, 232, 2, 71, 101, 116, 83, 121, 115, 116, 101, 109, 84, 105, 109, _
    101, 65, 115, 70, 105, 108, 101, 84, 105, 109, 101, 0, 30, 1, 68, 105, _
    115, 97, 98, 108, 101, 84, 104, 114, 101, 97, 100, 76, 105, 98, 114, 97, _
    114, 121, 67, 97, 108, 108, 115, 0, 97, 3, 73, 110, 105, 116, 105, 97, _
    108, 105, 122, 101, 83, 76, 105, 115, 116, 72, 101, 97, 100, 0, 119, 3, _
    73, 115, 68, 101, 98, 117, 103, 103, 101, 114, 80, 114, 101, 115, 101, 110)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr37) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr37(0)), 24 * (UBound(arr37) + 1)
    
    arr38 = Array(116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr38) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr38(0)), 24 * (UBound(arr38) + 1)
    
    arr39 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    205, 93, 32, 210, 102, 212, 255, 255, 50, 162, 223, 45, 153, 43, 0, 0, _
    255, 255, 255, 255, 0, 0, 0, 0, 47, 32, 0, 0, 0, 0, 0, 0, _
    1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr39) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr39(0)), 24 * (UBound(arr39) + 1)
    
    arr40 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 16, 0, 0, 189, 17, 0, 0, 192, 55, 0, 0, 192, 17, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr40) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr40(0)), 24 * (UBound(arr40) + 1)
    
    Call BuildDll5

End Sub

Sub BuildDll5(Optional ByVal Flag As Boolean)

    arr41 = Array(132, 18, 0, 0, 200, 55, 0, 0, 144, 18, 0, 0, 28, 19, 0, 0, _
    200, 55, 0, 0, 32, 19, 0, 0, 198, 19, 0, 0, 208, 55, 0, 0, _
    208, 19, 0, 0, 100, 20, 0, 0, 208, 55, 0, 0, 112, 20, 0, 0, _
    241, 20, 0, 0, 208, 55, 0, 0, 0, 21, 0, 0, 186, 23, 0, 0, _
    228, 55, 0, 0, 192, 23, 0, 0, 231, 23, 0, 0, 200, 55, 0, 0, _
    0, 24, 0, 0, 33, 24, 0, 0, 0, 56, 0, 0, 36, 24, 0, 0, _
    116, 24, 0, 0, 200, 55, 0, 0, 116, 24, 0, 0, 135, 25, 0, 0, _
    4, 56, 0, 0, 136, 25, 0, 0, 20, 26, 0, 0, 56, 56, 0, 0, _
    20, 26, 0, 0, 9, 27, 0, 0, 96, 56, 0, 0, 12, 27, 0, 0, _
    96, 27, 0, 0, 244, 56, 0, 0, 96, 27, 0, 0, 157, 27, 0, 0, _
    144, 56, 0, 0, 160, 27, 0, 0, 212, 27, 0, 0, 192, 55, 0, 0, _
    212, 27, 0, 0, 165, 28, 0, 0, 160, 56, 0, 0, 168, 28, 0, 0, _
    25, 29, 0, 0, 168, 56, 0, 0, 28, 29, 0, 0, 200, 29, 0, 0, _
    180, 56, 0, 0, 200, 29, 0, 0, 235, 29, 0, 0, 200, 55, 0, 0, _
    24, 30, 0, 0, 51, 30, 0, 0, 200, 55, 0, 0, 52, 30, 0, 0, _
    109, 30, 0, 0, 200, 55, 0, 0, 112, 30, 0, 0, 164, 30, 0, 0, _
    200, 55, 0, 0, 164, 30, 0, 0, 185, 30, 0, 0, 200, 55, 0, 0, _
    188, 30, 0, 0, 228, 30, 0, 0, 200, 55, 0, 0, 228, 30, 0, 0, _
    249, 30, 0, 0, 200, 55, 0, 0, 252, 30, 0, 0, 93, 31, 0, 0, _
    244, 56, 0, 0, 96, 31, 0, 0, 144, 31, 0, 0, 200, 55, 0, 0, _
    144, 31, 0, 0, 164, 31, 0, 0, 200, 55, 0, 0, 164, 31, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr41) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr41(0)), 24 * (UBound(arr41) + 1)
    
    arr42 = Array(237, 31, 0, 0, 192, 55, 0, 0, 240, 31, 0, 0, 207, 32, 0, 0, _
    232, 56, 0, 0, 208, 32, 0, 0, 105, 33, 0, 0, 192, 56, 0, 0, _
    108, 33, 0, 0, 144, 33, 0, 0, 192, 55, 0, 0, 144, 33, 0, 0, _
    187, 33, 0, 0, 192, 55, 0, 0, 196, 33, 0, 0, 9, 35, 0, 0, _
    8, 57, 0, 0, 12, 35, 0, 0, 86, 35, 0, 0, 144, 56, 0, 0, _
    88, 35, 0, 0, 162, 35, 0, 0, 144, 56, 0, 0, 172, 35, 0, 0, _
    103, 37, 0, 0, 24, 57, 0, 0, 208, 37, 0, 0, 237, 37, 0, 0, _
    200, 55, 0, 0, 240, 37, 0, 0, 73, 38, 0, 0, 52, 57, 0, 0, _
    96, 38, 0, 0, 98, 38, 0, 0, 48, 57, 0, 0, 98, 38, 0, 0, _
    121, 38, 0, 0, 48, 56, 0, 0, 121, 38, 0, 0, 149, 38, 0, 0, _
    48, 56, 0, 0, 149, 38, 0, 0, 203, 38, 0, 0, 136, 56, 0, 0, _
    203, 38, 0, 0, 227, 38, 0, 0, 224, 56, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr42) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr42(0)), 24 * (UBound(arr42) + 1)
    
    arr43 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr43) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr43(0)), 24 * (UBound(arr43) + 1)
    
    arr44 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, _
    24, 0, 0, 0, 24, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 48, 0, 0, 128, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, _
    9, 4, 0, 0, 72, 0, 0, 0, 96, 112, 0, 0, 125, 1, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, 110, 61, 39, 49, _
    46, 48, 39, 32, 101, 110, 99, 111, 100, 105, 110, 103, 61, 39, 85, 84, _
    70, 45, 56, 39, 32, 115, 116, 97, 110, 100, 97, 108, 111, 110, 101, 61, _
    39, 121, 101, 115, 39, 63, 62, 13, 10, 60, 97, 115, 115, 101, 109, 98, _
    108, 121, 32, 120, 109, 108, 110, 115, 61, 39, 117, 114, 110, 58, 115, 99, _
    104, 101, 109, 97, 115, 45, 109, 105, 99, 114, 111, 115, 111, 102, 116, 45, _
    99, 111, 109, 58, 97, 115, 109, 46, 118, 49, 39, 32, 109, 97, 110, 105, _
    102, 101, 115, 116, 86, 101, 114, 115, 105, 111, 110, 61, 39, 49, 46, 48)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr44) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr44(0)), 24 * (UBound(arr44) + 1)
    
    arr45 = Array(39, 62, 13, 10, 32, 32, 60, 116, 114, 117, 115, 116, 73, 110, 102, 111, _
    32, 120, 109, 108, 110, 115, 61, 34, 117, 114, 110, 58, 115, 99, 104, 101, _
    109, 97, 115, 45, 109, 105, 99, 114, 111, 115, 111, 102, 116, 45, 99, 111, _
    109, 58, 97, 115, 109, 46, 118, 51, 34, 62, 13, 10, 32, 32, 32, 32, _
    60, 115, 101, 99, 117, 114, 105, 116, 121, 62, 13, 10, 32, 32, 32, 32, _
    32, 32, 60, 114, 101, 113, 117, 101, 115, 116, 101, 100, 80, 114, 105, 118, _
    105, 108, 101, 103, 101, 115, 62, 13, 10, 32, 32, 32, 32, 32, 32, 32, _
    32, 60, 114, 101, 113, 117, 101, 115, 116, 101, 100, 69, 120, 101, 99, 117, _
    116, 105, 111, 110, 76, 101, 118, 101, 108, 32, 108, 101, 118, 101, 108, 61, _
    39, 97, 115, 73, 110, 118, 111, 107, 101, 114, 39, 32, 117, 105, 65, 99, _
    99, 101, 115, 115, 61, 39, 102, 97, 108, 115, 101, 39, 32, 47, 62, 13, _
    10, 32, 32, 32, 32, 32, 32, 60, 47, 114, 101, 113, 117, 101, 115, 116, _
    101, 100, 80, 114, 105, 118, 105, 108, 101, 103, 101, 115, 62, 13, 10, 32, _
    32, 32, 32, 60, 47, 115, 101, 99, 117, 114, 105, 116, 121, 62, 13, 10, _
    32, 32, 60, 47, 116, 114, 117, 115, 116, 73, 110, 102, 111, 62, 13, 10, _
    60, 47, 97, 115, 115, 101, 109, 98, 108, 121, 62, 13, 10, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr45) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr45(0)), 24 * (UBound(arr45) + 1)
    
    arr46 = Array(0, 48, 0, 0, 24, 0, 0, 0, 192, 161, 200, 161, 24, 162, 32, 162, _
    136, 164, 160, 164, 168, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr46) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr46(0)), 24 * (UBound(arr46) + 1)
    
    arr47 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr47) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr47(0)), 24 * (UBound(arr47) + 1)
    
    Call SaveDllToDisk(ByVal arr1)
End Sub

Private Sub SaveDllToDisk(ByVal Ar As Variant)
    Dim i As Long, FileNum As Long
    Dim bytes() As Byte
    Dim sDllPathName As String

    sDllPathName = Environ("temp") & "\XlSubClass.dll"
    ReDim bytes(LBound(Ar) To UBound(Ar))
    For i = LBound(Ar) To UBound(Ar)
        bytes(i) = CByte((Ar(i)))
    Next
    FileNum = FreeFile
    Open sDllPathName For Binary As [URL="https://www.mrexcel.com/forum/usertag.php?do=list&action=hash&hash=FileNum"]#FileNum[/URL] 
        Put [URL="https://www.mrexcel.com/forum/usertag.php?do=list&action=hash&hash=FileNum"]#FileNum[/URL] , 1, bytes
    Close FileNum
End Sub

Late edit:
I forgot to mention that this will only work in 64bit excel ... I'll adapt the above dll code for 32bit later on and I'll post an example of how to use it here.
 
Last edited:

Jaafar Tribak

Well-known Member
Joined
Dec 5, 2002
Messages
8,332
Office Version
  1. 2016
Platform
  1. Windows
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

Hello again,

I am publishing here the 32bit version if the dll extracted bytes + the corresponding vba code for those using excel 32bit.

Workbook demo.

VBA Usage

1- Code in a Standard Module: (Calling code) (Run the 'SubClassExcel' routine to start)
Code:
Option Explicit

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function SetXLSubClass Lib "user32" Alias "CallWindowProcA" (ByVal dllProcAddr As Long, ByVal hWndExcel As Long, ByVal hwndWbk As Long, ByVal VBAWindProcAddr As Long, ByVal Null_ As Long) As Long

Private Const LOAD_IGNORE_CODE_AUTHZ_LEVEL = &H10

Sub SubClassExcel()
    Dim wbkHwnd As Long, pProcAddr As Long
    Dim sDllPathName As String
    
    sDllPathName = Environ("Temp") & "\XlSubClass32.dll"
    If Len(Dir(sDllPathName)) = 0 Then
        Call Build_Dll
    End If
    If Len(Dir(sDllPathName)) Then
        wbkHwnd = FindWindowEx(FindWindowEx(Application.hwnd, 0, "XLDESK", vbNullString), 0, "EXCEL7", vbNullString)
        If GetModuleHandle(sDllPathName) = 0 Then
            Call LoadLibraryEx(sDllPathName, 0, LOAD_IGNORE_CODE_AUTHZ_LEVEL)
        End If
        pProcAddr = GetProcAddress(GetModuleHandle(sDllPathName), "SubClass")
        SetXLSubClass pProcAddr, Application.hwnd, CLng(wbkHwnd), AddressOf bas_WinProc.WinProc, 0
    End If
End Sub

Sub UnSubClassExcel()
    Dim pProcAddr As Long
    Dim sDllPathName As String
    
    sDllPathName = Environ("Temp") & "\XlSubClass32.dll"
    pProcAddr = GetProcAddress(GetModuleHandle(sDllPathName), "UnSubClass")
    SetXLSubClass pProcAddr, Application.hwnd, 0, 0, 0
    Application.OnTime Now, "UnloadDll"
End Sub

Private Sub UnloadDll()
    Dim sDllPathName As String
    
    sDllPathName = Environ("Temp") & "\XlSubClass32.dll"
    FreeLibrary GetModuleHandle(sDllPathName)
End Sub

Sub RaiseErrorTest()
    Dim x As Long
    x = 1 / 0
End Sub

2- Code in a Standard Module: (Generic window procedure code):
Code:
Option Explicit

Private Type POINTAPI
     x As Long
     y As Long
End Type

Private Type MINMAXINFO
     ptReserved As POINTAPI
     ptMaxSize As POINTAPI
     ptMaxPosition As POINTAPI
     ptMinTrackSize As POINTAPI
     ptMaxTrackSize As POINTAPI
End Type
Private MMinfo As MINMAXINFO

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Const WM_GETMINMAXINFO = &H24

Private Const MinWidth = 600
Private Const MinHeight = 600
'Private Const MaxWidth = 800
'Private Const MaxHeight = 800

Public Function WinProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

  Select Case uMsg
    Case WM_GETMINMAXINFO
        CopyMemory MMinfo, ByVal lParam, LenB(MMinfo)
        MMinfo.ptMinTrackSize.x = 600
        MMinfo.ptMinTrackSize.y = 800
        CopyMemory ByVal lParam, MMinfo, LenB(MMinfo)
        WinProc = -1 'return -1 to abort message.
    End Select
    Debug.Print uMsg; wParam; lParam
End Function

3- Code in a Standard Module:(dll creation from the extracted bytes)
Code:
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private arr1() As Variant, arr2() As Variant, arr3() As Variant, arr4() As Variant, arr5() As Variant
Private arr6() As Variant, arr7() As Variant, arr8() As Variant, arr9() As Variant, arr10() As Variant
Private arr11() As Variant, arr12() As Variant, arr13() As Variant, arr14() As Variant, arr15() As Variant
Private arr16() As Variant, arr17() As Variant, arr18() As Variant, arr19() As Variant, arr20() As Variant
Private arr21() As Variant, arr22() As Variant, arr23() As Variant, arr24() As Variant, arr25() As Variant
Private arr26() As Variant, arr27() As Variant, arr28() As Variant, arr29() As Variant, arr30() As Variant
Private arr31() As Variant

Private lPos As Long

Sub Build_Dll(Optional ByVal Flag As Boolean)

    arr1 = Array(77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, _
    184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, _
    14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, _
    105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, _
    116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, _
    109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, _
    131, 246, 50, 171, 199, 151, 92, 248, 199, 151, 92, 248, 199, 151, 92, 248, _
    206, 239, 207, 248, 195, 151, 92, 248, 84, 247, 93, 249, 197, 151, 92, 248, _
    84, 247, 95, 249, 198, 151, 92, 248, 84, 247, 89, 249, 205, 151, 92, 248, _
    84, 247, 88, 249, 204, 151, 92, 248, 170, 202, 93, 249, 194, 151, 92, 248, _
    199, 151, 93, 248, 242, 151, 92, 248, 124, 246, 85, 249, 198, 151, 92, 248, _
    124, 246, 92, 249, 198, 151, 92, 248, 124, 246, 163, 248, 198, 151, 92, 248, _
    124, 246, 94, 249, 198, 151, 92, 248, 82, 105, 99, 104, 199, 151, 92, 248, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    80, 69, 0, 0, 76, 1, 5, 0, 26, 97, 204, 89, 0, 0, 0, 0, _
    0, 0, 0, 0, 224, 0, 2, 33, 11, 1, 14, 10, 0, 20, 0, 0, _
    0, 24, 0, 0, 0, 0, 0, 0, 106, 25, 0, 0, 0, 16, 0, 0)
    
    arr2 = Array(0, 48, 0, 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, 2, 0, 0, _
    6, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, _
    0, 112, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 64, 1, _
    0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, _
    0, 0, 0, 0, 16, 0, 0, 0, 208, 54, 0, 0, 100, 0, 0, 0, _
    52, 55, 0, 0, 120, 0, 0, 0, 0, 80, 0, 0, 224, 1, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 96, 0, 0, 60, 2, 0, 0, 160, 50, 0, 0, 112, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 16, 51, 0, 0, 64, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 212, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, _
    156, 18, 0, 0, 0, 16, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, _
    46, 114, 100, 97, 116, 97, 0, 0, 136, 12, 0, 0, 0, 48, 0, 0, _
    0, 14, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 64, 0, 0, 64, 46, 100, 97, 116, 97, 0, 0, 0, _
    192, 3, 0, 0, 0, 64, 0, 0, 0, 2, 0, 0, 0, 38, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 192, _
    46, 114, 115, 114, 99, 0, 0, 0, 224, 1, 0, 0, 0, 80, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr2) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr2(0)), 16 * (UBound(arr2) + 1)

    arr3 = Array(0, 2, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 64, 0, 0, 64, 46, 114, 101, 108, 111, 99, 0, 0, _
    60, 2, 0, 0, 0, 96, 0, 0, 0, 4, 0, 0, 0, 42, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 66, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr3) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr3(0)), 16 * (UBound(arr3) + 1)

    arr4 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    85, 139, 236, 131, 61, 184, 67, 0, 16, 0, 15, 133, 108, 1, 0, 0, _
    139, 69, 16, 83, 139, 93, 8, 86, 106, 0, 163, 156, 67, 0, 16, 139, _
    69, 12, 104, 12, 49, 0, 16, 199, 5, 184, 67, 0, 16, 1, 0, 0, _
    0, 199, 5, 152, 67, 0, 16, 0, 0, 0, 0, 199, 5, 144, 67, 0, _
    16, 0, 0, 0, 0, 199, 5, 160, 67, 0, 16, 0, 0, 0, 0, 137, _
    29, 164, 67, 0, 16, 163, 148, 67, 0, 16, 255, 21, 136, 48, 0, 16, _
    104, 112, 50, 0, 16, 163, 136, 67, 0, 16, 255, 21, 0, 48, 0, 16, _
    106, 0, 80, 104, 224, 19, 0, 16, 106, 5, 255, 21, 128, 48, 0, 16, _
    163, 180, 67, 0, 16, 161, 136, 67, 0, 16, 133, 192, 117, 78, 255, 53, _
    164, 67, 0, 16, 255, 21, 112, 48, 0, 16, 139, 53, 76, 48, 0, 16, _
    106, 0, 106, 0, 106, 0, 106, 18, 255, 214, 106, 0, 106, 0, 106, 1, _
    106, 122, 255, 214, 106, 0, 106, 2, 106, 0, 106, 122, 255, 214, 106, 0, _
    106, 2, 106, 0, 106, 18, 255, 214, 104, 32, 18, 0, 16, 106, 0, 106, _
    0, 83, 255, 21, 96, 48, 0, 16, 94, 91, 93, 195, 104, 52, 49, 0, _
    16, 80, 255, 21, 72, 48, 0, 16, 133, 192, 117, 126, 255, 53, 136, 67, _
    0, 16, 255, 21, 84, 48, 0, 16, 139, 53, 88, 48, 0, 16, 106, 0, _
    106, 48, 104, 68, 16, 0, 0, 255, 53, 136, 67, 0, 16, 163, 172, 67, _
    0, 16, 255, 214, 106, 0, 106, 51, 104, 68, 16, 0, 0, 255, 53, 136, _
    67, 0, 16, 255, 214, 106, 0, 104, 131, 0, 0, 0, 104, 68, 16, 0, _
    0, 255, 53, 136, 67, 0, 16, 255, 214, 106, 1, 104, 52, 49, 0, 16)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr4) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr4(0)), 16 * (UBound(arr4) + 1)

    arr5 = Array(255, 53, 136, 67, 0, 16, 255, 21, 140, 48, 0, 16, 131, 61, 172, 67, _
    0, 16, 0, 117, 21, 104, 64, 22, 0, 16, 106, 0, 106, 0, 255, 53, _
    136, 67, 0, 16, 255, 21, 96, 48, 0, 16, 104, 32, 18, 0, 16, 106, _
    0, 106, 0, 83, 255, 21, 96, 48, 0, 16, 94, 91, 93, 195, 204, 204, _
    131, 61, 152, 67, 0, 16, 0, 15, 133, 143, 0, 0, 0, 86, 255, 53, _
    180, 67, 0, 16, 199, 5, 184, 67, 0, 16, 0, 0, 0, 0, 199, 5, _
    152, 67, 0, 16, 1, 0, 0, 0, 255, 21, 104, 48, 0, 16, 255, 53, _
    140, 67, 0, 16, 139, 53, 124, 48, 0, 16, 106, 252, 255, 53, 148, 67, _
    0, 16, 255, 214, 255, 53, 168, 67, 0, 16, 106, 252, 255, 53, 136, 67, _
    0, 16, 255, 214, 255, 53, 176, 67, 0, 16, 106, 252, 255, 53, 164, 67, _
    0, 16, 255, 214, 131, 61, 144, 67, 0, 16, 0, 94, 117, 46, 131, 61, _
    160, 67, 0, 16, 0, 116, 37, 104, 64, 16, 0, 0, 104, 72, 49, 0, _
    16, 104, 88, 49, 0, 16, 255, 53, 164, 67, 0, 16, 199, 5, 160, 67, _
    0, 16, 0, 0, 0, 0, 255, 21, 80, 48, 0, 16, 195, 204, 204, 204, _
    86, 106, 0, 255, 53, 164, 67, 0, 16, 255, 21, 116, 48, 0, 16, 139, _
    53, 124, 48, 0, 16, 104, 16, 19, 0, 16, 106, 252, 255, 53, 148, 67, _
    0, 16, 199, 5, 184, 67, 0, 16, 1, 0, 0, 0, 199, 5, 152, 67, _
    0, 16, 0, 0, 0, 0, 255, 214, 104, 144, 18, 0, 16, 106, 252, 255, _
    53, 164, 67, 0, 16, 163, 140, 67, 0, 16, 255, 214, 104, 128, 19, 0, _
    16, 106, 252, 255, 53, 136, 67, 0, 16, 163, 176, 67, 0, 16, 255, 214, _
    163, 168, 67, 0, 16, 94, 194, 16, 0, 204, 204, 204, 204, 204, 204, 204, _
    85, 139, 236, 86, 139, 117, 16, 87, 139, 125, 12, 129, 255, 18, 1, 0, _
    0, 117, 42, 129, 254, 96, 240, 0, 0, 117, 34, 255, 53, 164, 67, 0, _
    16, 199, 5, 152, 67, 0, 16, 0, 0, 0, 0, 199, 5, 144, 67, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr5) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr5(0)), 16 * (UBound(arr5) + 1)

    arr6 = Array(16, 1, 0, 0, 0, 232, 182, 254, 255, 255, 131, 196, 4, 255, 117, 20, _
    86, 87, 255, 117, 8, 255, 53, 156, 67, 0, 16, 255, 21, 92, 48, 0, _
    16, 131, 248, 255, 117, 8, 95, 11, 192, 94, 93, 194, 16, 0, 255, 117, _
    20, 86, 87, 255, 117, 8, 255, 53, 176, 67, 0, 16, 255, 21, 92, 48, _
    0, 16, 95, 94, 93, 194, 16, 0, 204, 204, 204, 204, 204, 204, 204, 204, _
    85, 139, 236, 129, 125, 12, 18, 1, 0, 0, 117, 60, 129, 125, 16, 96, _
    240, 0, 0, 117, 51, 104, 52, 49, 0, 16, 255, 53, 136, 67, 0, 16, _
    199, 5, 152, 67, 0, 16, 0, 0, 0, 0, 199, 5, 144, 67, 0, 16, _
    1, 0, 0, 0, 255, 21, 108, 48, 0, 16, 255, 53, 164, 67, 0, 16, _
    232, 43, 254, 255, 255, 131, 196, 4, 255, 117, 20, 255, 117, 16, 255, 117, _
    12, 255, 117, 8, 255, 53, 140, 67, 0, 16, 255, 21, 92, 48, 0, 16, _
    93, 194, 16, 0, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    85, 139, 236, 131, 125, 12, 12, 117, 46, 255, 53, 164, 67, 0, 16, 199, _
    5, 152, 67, 0, 16, 0, 0, 0, 0, 199, 5, 160, 67, 0, 16, 1, _
    0, 0, 0, 232, 216, 253, 255, 255, 131, 196, 4, 255, 53, 136, 67, 0, _
    16, 255, 21, 68, 48, 0, 16, 255, 117, 20, 255, 117, 16, 255, 117, 12, _
    255, 117, 8, 255, 53, 168, 67, 0, 16, 255, 21, 92, 48, 0, 16, 93, _
    194, 16, 0, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    85, 139, 236, 129, 236, 16, 3, 0, 0, 161, 4, 64, 0, 16, 51, 197, _
    137, 69, 252, 83, 139, 93, 12, 86, 87, 139, 125, 8, 131, 255, 3, 15, _
    133, 181, 0, 0, 0, 104, 4, 1, 0, 0, 141, 133, 240, 252, 255, 255, _
    80, 83, 255, 21, 132, 48, 0, 16, 104, 12, 49, 0, 16, 141, 133, 240, _
    252, 255, 255, 80, 255, 21, 4, 48, 0, 16, 133, 192, 15, 133, 222, 1, _
    0, 0, 104, 52, 49, 0, 16, 255, 53, 136, 67, 0, 16, 255, 21, 72)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr6) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr6(0)), 16 * (UBound(arr6) + 1)

    arr7 = Array(48, 0, 16, 133, 192, 15, 133, 197, 1, 0, 0, 139, 61, 64, 48, 0, _
    16, 80, 80, 106, 11, 83, 255, 215, 139, 53, 88, 48, 0, 16, 106, 0, _
    106, 48, 104, 68, 16, 0, 0, 83, 255, 214, 106, 0, 106, 51, 104, 68, _
    16, 0, 0, 83, 255, 214, 106, 0, 104, 131, 0, 0, 0, 104, 68, 16, _
    0, 0, 83, 255, 214, 106, 0, 106, 1, 106, 11, 83, 255, 215, 106, 1, _
    104, 52, 49, 0, 16, 83, 137, 29, 136, 67, 0, 16, 255, 21, 140, 48, _
    0, 16, 104, 64, 22, 0, 16, 106, 0, 106, 0, 83, 255, 21, 96, 48, _
    0, 16, 139, 125, 8, 233, 86, 1, 0, 0, 131, 255, 5, 15, 133, 77, _
    1, 0, 0, 104, 4, 1, 0, 0, 141, 133, 240, 252, 255, 255, 80, 83, _
    255, 21, 132, 48, 0, 16, 104, 200, 49, 0, 16, 141, 133, 240, 252, 255, _
    255, 80, 255, 21, 4, 48, 0, 16, 133, 192, 15, 133, 32, 1, 0, 0, _
    104, 4, 1, 0, 0, 80, 141, 133, 248, 254, 255, 255, 80, 232, 82, 13, _
    0, 0, 131, 196, 12, 141, 133, 248, 254, 255, 255, 104, 4, 1, 0, 0, _
    80, 83, 255, 21, 100, 48, 0, 16, 139, 53, 204, 48, 0, 16, 141, 133, _
    248, 254, 255, 255, 106, 22, 104, 216, 49, 0, 16, 80, 255, 214, 131, 196, _
    12, 133, 192, 15, 133, 215, 0, 0, 0, 104, 195, 18, 0, 0, 83, 255, _
    21, 120, 48, 0, 16, 104, 4, 1, 0, 0, 141, 141, 248, 254, 255, 255, _
    81, 80, 255, 21, 100, 48, 0, 16, 106, 14, 141, 133, 248, 254, 255, 255, _
    104, 240, 49, 0, 16, 80, 255, 214, 131, 196, 12, 133, 192, 116, 115, 106, _
    14, 141, 133, 248, 254, 255, 255, 104, 0, 50, 0, 16, 80, 255, 214, 131, _
    196, 12, 133, 192, 116, 92, 106, 18, 141, 133, 248, 254, 255, 255, 104, 16, _
    50, 0, 16, 80, 255, 214, 131, 196, 12, 133, 192, 116, 69, 106, 22, 141, _
    133, 248, 254, 255, 255, 104, 36, 50, 0, 16, 80, 255, 214, 131, 196, 12, _
    133, 192, 116, 46, 106, 24, 141, 133, 248, 254, 255, 255, 104, 60, 50, 0, _
    16, 80, 255, 214, 131, 196, 12, 133, 192, 116, 23, 106, 21, 141, 133, 248)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr7) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr7(0)), 16 * (UBound(arr7) + 1)

    arr8 = Array(254, 255, 255, 104, 88, 50, 0, 16, 80, 255, 214, 131, 196, 12, 133, 192, _
    117, 46, 255, 53, 164, 67, 0, 16, 199, 5, 152, 67, 0, 16, 0, 0, _
    0, 0, 199, 5, 160, 67, 0, 16, 1, 0, 0, 0, 232, 127, 251, 255, _
    255, 131, 196, 4, 255, 53, 136, 67, 0, 16, 255, 21, 68, 48, 0, 16, _
    255, 117, 16, 83, 87, 255, 53, 180, 67, 0, 16, 255, 21, 60, 48, 0, _
    16, 139, 77, 252, 95, 94, 51, 205, 91, 232, 49, 0, 0, 0, 139, 229, _
    93, 194, 12, 0, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, _
    106, 0, 255, 53, 136, 67, 0, 16, 255, 21, 116, 48, 0, 16, 106, 0, _
    255, 53, 136, 67, 0, 16, 255, 21, 144, 48, 0, 16, 194, 16, 0, 59, _
    13, 4, 64, 0, 16, 242, 117, 2, 242, 195, 242, 233, 69, 3, 0, 0, _
    85, 139, 236, 139, 69, 12, 131, 232, 0, 116, 51, 131, 232, 1, 116, 32, _
    131, 232, 1, 116, 17, 131, 232, 1, 116, 5, 51, 192, 64, 235, 48, 232, _
    236, 5, 0, 0, 235, 5, 232, 198, 5, 0, 0, 15, 182, 192, 235, 31, _
    255, 117, 16, 255, 117, 8, 232, 24, 0, 0, 0, 89, 235, 16, 131, 125, _
    16, 0, 15, 149, 192, 15, 182, 192, 80, 232, 255, 0, 0, 0, 89, 93, _
    194, 12, 0, 106, 16, 104, 72, 54, 0, 16, 232, 81, 9, 0, 0, 106, _
    0, 232, 26, 6, 0, 0, 89, 132, 192, 117, 7, 51, 192, 233, 200, 0, _
    0, 0, 232, 12, 5, 0, 0, 136, 69, 227, 179, 1, 136, 93, 231, 131, _
    101, 252, 0, 131, 61, 88, 67, 0, 16, 0, 116, 7, 106, 7, 232, 165, _
    7, 0, 0, 199, 5, 88, 67, 0, 16, 1, 0, 0, 0, 232, 65, 5, _
    0, 0, 132, 192, 116, 77, 232, 168, 8, 0, 0, 232, 78, 4, 0, 0, _
    232, 109, 4, 0, 0, 104, 228, 48, 0, 16, 104, 224, 48, 0, 16, 232, _
    50, 11, 0, 0, 89, 89, 133, 192, 117, 41, 232, 233, 4, 0, 0, 132, _
    192, 116, 32, 104, 220, 48, 0, 16, 104, 216, 48, 0, 16, 232, 14, 11, _
    0, 0, 89, 89, 199, 5, 88, 67, 0, 16, 2, 0, 0, 0, 50, 219)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr8) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr8(0)), 16 * (UBound(arr8) + 1)

    arr9 = Array(136, 93, 231, 199, 69, 252, 254, 255, 255, 255, 232, 68, 0, 0, 0, 132, _
    219, 15, 133, 100, 255, 255, 255, 232, 38, 7, 0, 0, 139, 240, 131, 62, _
    0, 116, 30, 86, 232, 74, 6, 0, 0, 89, 132, 192, 116, 19, 255, 117, _
    12, 106, 2, 255, 117, 8, 139, 54, 139, 206, 232, 122, 8, 0, 0, 255, _
    214, 255, 5, 24, 64, 0, 16, 51, 192, 64, 232, 183, 8, 0, 0, 195, _
    138, 93, 231, 255, 117, 227, 232, 162, 6, 0, 0, 89, 195, 106, 12, 104, _
    104, 54, 0, 16, 232, 87, 8, 0, 0, 161, 24, 64, 0, 16, 133, 192, _
    127, 4, 51, 192, 235, 89, 72, 163, 24, 64, 0, 16, 232, 18, 4, 0, _
    0, 136, 69, 228, 131, 101, 252, 0, 131, 61, 88, 67, 0, 16, 2, 116, _
    7, 106, 7, 232, 176, 6, 0, 0, 232, 195, 4, 0, 0, 232, 120, 3, _
    0, 0, 232, 231, 7, 0, 0, 131, 37, 88, 67, 0, 16, 0, 199, 69, _
    252, 254, 255, 255, 255, 232, 27, 0, 0, 0, 106, 0, 255, 117, 8, 232, _
    86, 6, 0, 0, 89, 89, 51, 201, 132, 192, 15, 149, 193, 139, 193, 232, _
    50, 8, 0, 0, 195, 232, 169, 4, 0, 0, 255, 117, 228, 232, 27, 6, _
    0, 0, 89, 195, 106, 12, 104, 136, 54, 0, 16, 232, 208, 7, 0, 0, _
    139, 125, 12, 133, 255, 117, 15, 57, 61, 24, 64, 0, 16, 127, 7, 51, _
    192, 233, 212, 0, 0, 0, 131, 101, 252, 0, 131, 255, 1, 116, 10, 131, _
    255, 2, 116, 5, 139, 93, 16, 235, 49, 139, 93, 16, 83, 87, 255, 117, _
    8, 232, 186, 0, 0, 0, 139, 240, 137, 117, 228, 133, 246, 15, 132, 158, _
    0, 0, 0, 83, 87, 255, 117, 8, 232, 211, 253, 255, 255, 139, 240, 137, _
    117, 228, 133, 246, 15, 132, 135, 0, 0, 0, 83, 87, 255, 117, 8, 232, _
    152, 2, 0, 0, 139, 240, 137, 117, 228, 131, 255, 1, 117, 34, 133, 246, _
    117, 30, 83, 80, 255, 117, 8, 232, 128, 2, 0, 0, 83, 86, 255, 117, _
    8, 232, 154, 253, 255, 255, 83, 86, 255, 117, 8, 232, 96, 0, 0, 0, _
    133, 255, 116, 5, 131, 255, 3, 117, 72, 83, 87, 255, 117, 8, 232, 125)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr9) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr9(0)), 16 * (UBound(arr9) + 1)

    arr10 = Array(253, 255, 255, 139, 240, 137, 117, 228, 133, 246, 116, 53, 83, 87, 255, 117, _
    8, 232, 58, 0, 0, 0, 139, 240, 235, 36, 139, 77, 236, 139, 1, 81, _
    255, 48, 104, 112, 22, 0, 16, 255, 117, 16, 255, 117, 12, 255, 117, 8, _
    232, 104, 3, 0, 0, 131, 196, 24, 195, 139, 101, 232, 51, 246, 137, 117, _
    228, 199, 69, 252, 254, 255, 255, 255, 139, 198, 232, 39, 7, 0, 0, 195, _
    85, 139, 236, 86, 139, 53, 0, 49, 0, 16, 133, 246, 117, 5, 51, 192, _
    64, 235, 18, 255, 117, 16, 139, 206, 255, 117, 12, 255, 117, 8, 232, 182, _
    6, 0, 0, 255, 214, 94, 93, 194, 12, 0, 85, 139, 236, 131, 125, 12, _
    1, 117, 5, 232, 56, 1, 0, 0, 255, 117, 16, 255, 117, 12, 255, 117, _
    8, 232, 190, 254, 255, 255, 131, 196, 12, 93, 194, 12, 0, 85, 139, 236, _
    106, 0, 255, 21, 48, 48, 0, 16, 255, 117, 8, 255, 21, 52, 48, 0, _
    16, 104, 9, 4, 0, 192, 255, 21, 44, 48, 0, 16, 80, 255, 21, 40, _
    48, 0, 16, 93, 195, 85, 139, 236, 129, 236, 36, 3, 0, 0, 106, 23, _
    232, 203, 8, 0, 0, 133, 192, 116, 5, 106, 2, 89, 205, 41, 163, 32, _
    65, 0, 16, 137, 13, 28, 65, 0, 16, 137, 21, 24, 65, 0, 16, 137, _
    29, 20, 65, 0, 16, 137, 53, 16, 65, 0, 16, 137, 61, 12, 65, 0, _
    16, 102, 140, 21, 56, 65, 0, 16, 102, 140, 13, 44, 65, 0, 16, 102, _
    140, 29, 8, 65, 0, 16, 102, 140, 5, 4, 65, 0, 16, 102, 140, 37, _
    0, 65, 0, 16, 102, 140, 45, 252, 64, 0, 16, 156, 143, 5, 48, 65, _
    0, 16, 139, 69, 0, 163, 36, 65, 0, 16, 139, 69, 4, 163, 40, 65, _
    0, 16, 141, 69, 8, 163, 52, 65, 0, 16, 139, 133, 220, 252, 255, 255, _
    199, 5, 112, 64, 0, 16, 1, 0, 1, 0, 161, 40, 65, 0, 16, 163, _
    44, 64, 0, 16, 199, 5, 32, 64, 0, 16, 9, 4, 0, 192, 199, 5, _
    36, 64, 0, 16, 1, 0, 0, 0, 199, 5, 48, 64, 0, 16, 1, 0, _
    0, 0, 106, 4, 88, 107, 192, 0, 199, 128, 52, 64, 0, 16, 2, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr10) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr10(0)), 16 * (UBound(arr10) + 1)

    Call Build_Dll1

End Sub

Sub Build_Dll1(Optional ByVal Flag As Boolean)

    arr11 = Array(0, 0, 106, 4, 88, 107, 192, 0, 139, 13, 4, 64, 0, 16, 137, 76, _
    5, 248, 106, 4, 88, 193, 224, 0, 139, 13, 0, 64, 0, 16, 137, 76, _
    5, 248, 104, 4, 49, 0, 16, 232, 225, 254, 255, 255, 139, 229, 93, 195, _
    85, 139, 236, 131, 236, 20, 131, 101, 244, 0, 131, 101, 248, 0, 161, 4, _
    64, 0, 16, 86, 87, 191, 78, 230, 64, 187, 190, 0, 0, 255, 255, 59, _
    199, 116, 13, 133, 198, 116, 9, 247, 208, 163, 0, 64, 0, 16, 235, 102, _
    141, 69, 244, 80, 255, 21, 20, 48, 0, 16, 139, 69, 248, 51, 69, 244, _
    137, 69, 252, 255, 21, 24, 48, 0, 16, 49, 69, 252, 255, 21, 28, 48, _
    0, 16, 49, 69, 252, 141, 69, 236, 80, 255, 21, 32, 48, 0, 16, 139, _
    77, 240, 141, 69, 252, 51, 77, 236, 51, 77, 252, 51, 200, 59, 207, 117, _
    7, 185, 79, 230, 64, 187, 235, 16, 133, 206, 117, 12, 139, 193, 13, 17, _
    71, 0, 0, 193, 224, 16, 11, 200, 137, 13, 4, 64, 0, 16, 247, 209, _
    137, 13, 0, 64, 0, 16, 95, 94, 139, 229, 93, 195, 85, 139, 236, 131, _
    125, 12, 1, 117, 18, 131, 61, 0, 49, 0, 16, 0, 117, 9, 255, 117, _
    8, 255, 21, 16, 48, 0, 16, 51, 192, 64, 93, 194, 12, 0, 104, 64, _
    67, 0, 16, 255, 21, 12, 48, 0, 16, 195, 104, 64, 67, 0, 16, 232, _
    202, 6, 0, 0, 89, 195, 184, 72, 67, 0, 16, 195, 184, 80, 67, 0, _
    16, 195, 232, 239, 255, 255, 255, 139, 72, 4, 131, 8, 4, 137, 72, 4, _
    232, 231, 255, 255, 255, 139, 72, 4, 131, 8, 2, 137, 72, 4, 195, 85, _
    139, 236, 139, 69, 8, 86, 139, 72, 60, 3, 200, 15, 183, 65, 20, 141, _
    81, 24, 3, 208, 15, 183, 65, 6, 107, 240, 40, 3, 242, 59, 214, 116, _
    25, 139, 77, 12, 59, 74, 12, 114, 10, 139, 66, 8, 3, 66, 12, 59, _
    200, 114, 12, 131, 194, 40, 59, 214, 117, 234, 51, 192, 94, 93, 195, 139, _
    194, 235, 249, 232, 73, 6, 0, 0, 133, 192, 117, 3, 50, 192, 195, 100, _
    161, 24, 0, 0, 0, 86, 190, 92, 67, 0, 16, 139, 80, 4, 235, 4)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr11) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr11(0)), 16 * (UBound(arr11) + 1)

    arr12 = Array(59, 208, 116, 16, 51, 192, 139, 202, 240, 15, 177, 14, 133, 192, 117, 240, _
    50, 192, 94, 195, 176, 1, 94, 195, 232, 20, 6, 0, 0, 133, 192, 116, _
    7, 232, 104, 4, 0, 0, 235, 24, 232, 0, 6, 0, 0, 80, 232, 47, _
    6, 0, 0, 89, 133, 192, 116, 3, 50, 192, 195, 232, 40, 6, 0, 0, _
    176, 1, 195, 106, 0, 232, 207, 0, 0, 0, 132, 192, 89, 15, 149, 192, _
    195, 232, 48, 6, 0, 0, 132, 192, 117, 3, 50, 192, 195, 232, 36, 6, _
    0, 0, 132, 192, 117, 7, 232, 27, 6, 0, 0, 235, 237, 176, 1, 195, _
    232, 17, 6, 0, 0, 232, 12, 6, 0, 0, 176, 1, 195, 85, 139, 236, _
    232, 172, 5, 0, 0, 133, 192, 117, 24, 131, 125, 12, 1, 117, 18, 255, _
    117, 16, 139, 77, 20, 80, 255, 117, 8, 232, 107, 3, 0, 0, 255, 85, _
    20, 255, 117, 28, 255, 117, 24, 232, 176, 5, 0, 0, 89, 89, 93, 195, _
    232, 124, 5, 0, 0, 133, 192, 116, 12, 104, 96, 67, 0, 16, 232, 177, _
    5, 0, 0, 89, 195, 232, 191, 5, 0, 0, 133, 192, 15, 132, 168, 5, _
    0, 0, 195, 106, 0, 232, 172, 5, 0, 0, 89, 233, 166, 5, 0, 0, _
    85, 139, 236, 131, 125, 8, 0, 117, 7, 198, 5, 121, 67, 0, 16, 1, _
    232, 153, 3, 0, 0, 232, 140, 5, 0, 0, 132, 192, 117, 4, 50, 192, _
    93, 195, 232, 127, 5, 0, 0, 132, 192, 117, 10, 106, 0, 232, 116, 5, _
    0, 0, 89, 235, 233, 176, 1, 93, 195, 85, 139, 236, 131, 236, 12, 128, _
    61, 120, 67, 0, 16, 0, 116, 7, 176, 1, 233, 136, 0, 0, 0, 86, _
    139, 117, 8, 133, 246, 116, 5, 131, 254, 1, 117, 127, 232, 240, 4, 0, _
    0, 133, 192, 116, 38, 133, 246, 117, 34, 104, 96, 67, 0, 16, 232, 27, _
    5, 0, 0, 89, 133, 192, 117, 15, 104, 108, 67, 0, 16, 232, 12, 5, _
    0, 0, 89, 133, 192, 116, 70, 50, 192, 235, 75, 161, 4, 64, 0, 16, _
    141, 117, 244, 87, 131, 224, 31, 191, 96, 67, 0, 16, 106, 32, 89, 43)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr12) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr12(0)), 16 * (UBound(arr12) + 1)

    arr13 = Array(200, 131, 200, 255, 211, 200, 51, 5, 4, 64, 0, 16, 137, 69, 244, 137, _
    69, 248, 137, 69, 252, 165, 165, 165, 191, 108, 67, 0, 16, 137, 69, 244, _
    137, 69, 248, 141, 117, 244, 137, 69, 252, 165, 165, 165, 95, 198, 5, 120, _
    67, 0, 16, 1, 176, 1, 94, 139, 229, 93, 195, 106, 5, 232, 214, 0, _
    0, 0, 204, 106, 8, 104, 168, 54, 0, 16, 232, 65, 2, 0, 0, 131, _
    101, 252, 0, 184, 77, 90, 0, 0, 102, 57, 5, 0, 0, 0, 16, 117, _
    93, 161, 60, 0, 0, 16, 129, 184, 0, 0, 0, 16, 80, 69, 0, 0, _
    117, 76, 185, 11, 1, 0, 0, 102, 57, 136, 24, 0, 0, 16, 117, 62, _
    139, 69, 8, 185, 0, 0, 0, 16, 43, 193, 80, 81, 232, 142, 253, 255, _
    255, 89, 89, 133, 192, 116, 39, 131, 120, 36, 0, 124, 33, 199, 69, 252, _
    254, 255, 255, 255, 176, 1, 235, 31, 139, 69, 236, 139, 0, 51, 201, 129, _
    56, 5, 0, 0, 192, 15, 148, 193, 139, 193, 195, 139, 101, 232, 199, 69, _
    252, 254, 255, 255, 255, 50, 192, 232, 10, 2, 0, 0, 195, 85, 139, 236, _
    232, 220, 3, 0, 0, 133, 192, 116, 15, 128, 125, 8, 0, 117, 9, 51, _
    192, 185, 92, 67, 0, 16, 135, 1, 93, 195, 85, 139, 236, 128, 61, 121, _
    67, 0, 16, 0, 116, 6, 128, 125, 12, 0, 117, 18, 255, 117, 8, 232, _
    2, 4, 0, 0, 255, 117, 8, 232, 250, 3, 0, 0, 89, 89, 176, 1, _
    93, 195, 184, 188, 67, 0, 16, 195, 85, 139, 236, 129, 236, 36, 3, 0, _
    0, 83, 86, 106, 23, 232, 214, 3, 0, 0, 133, 192, 116, 5, 139, 77, _
    8, 205, 41, 51, 246, 141, 133, 220, 252, 255, 255, 104, 204, 2, 0, 0, _
    86, 80, 137, 53, 124, 67, 0, 16, 232, 119, 3, 0, 0, 131, 196, 12, _
    137, 133, 140, 253, 255, 255, 137, 141, 136, 253, 255, 255, 137, 149, 132, 253, _
    255, 255, 137, 157, 128, 253, 255, 255, 137, 181, 124, 253, 255, 255, 137, 189)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr13) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr13(0)), 16 * (UBound(arr13) + 1)

    arr14 = Array(120, 253, 255, 255, 102, 140, 149, 164, 253, 255, 255, 102, 140, 141, 152, 253, _
    255, 255, 102, 140, 157, 116, 253, 255, 255, 102, 140, 133, 112, 253, 255, 255, _
    102, 140, 165, 108, 253, 255, 255, 102, 140, 173, 104, 253, 255, 255, 156, 143, _
    133, 156, 253, 255, 255, 139, 69, 4, 137, 133, 148, 253, 255, 255, 141, 69, _
    4, 137, 133, 160, 253, 255, 255, 199, 133, 220, 252, 255, 255, 1, 0, 1, _
    0, 139, 64, 252, 106, 80, 137, 133, 144, 253, 255, 255, 141, 69, 168, 86, _
    80, 232, 238, 2, 0, 0, 139, 69, 4, 131, 196, 12, 199, 69, 168, 21, _
    0, 0, 64, 199, 69, 172, 1, 0, 0, 0, 137, 69, 180, 255, 21, 8, _
    48, 0, 16, 86, 141, 88, 255, 247, 219, 141, 69, 168, 137, 69, 248, 141, _
    133, 220, 252, 255, 255, 26, 219, 137, 69, 252, 254, 195, 255, 21, 48, 48, _
    0, 16, 141, 69, 248, 80, 255, 21, 52, 48, 0, 16, 133, 192, 117, 13, _
    15, 182, 195, 247, 216, 27, 192, 33, 5, 124, 67, 0, 16, 94, 91, 139, _
    229, 93, 195, 83, 86, 190, 60, 54, 0, 16, 187, 60, 54, 0, 16, 59, _
    243, 115, 24, 87, 139, 62, 133, 255, 116, 9, 139, 207, 232, 56, 0, 0, _
    0, 255, 215, 131, 198, 4, 59, 243, 114, 234, 95, 94, 91, 195, 83, 86, _
    190, 68, 54, 0, 16, 187, 68, 54, 0, 16, 59, 243, 115, 24, 87, 139, _
    62, 133, 255, 116, 9, 139, 207, 232, 13, 0, 0, 0, 255, 215, 131, 198, _
    4, 59, 243, 114, 234, 95, 94, 91, 195, 255, 37, 212, 48, 0, 16, 204, _
    104, 123, 32, 0, 16, 100, 255, 53, 0, 0, 0, 0, 139, 68, 36, 16, _
    137, 108, 36, 16, 141, 108, 36, 16, 43, 224, 83, 86, 87, 161, 4, 64, _
    0, 16, 49, 69, 252, 51, 197, 80, 137, 101, 232, 255, 117, 248, 139, 69, _
    252, 199, 69, 252, 254, 255, 255, 255, 137, 69, 248, 141, 69, 240, 100, 163, _
    0, 0, 0, 0, 242, 195, 139, 77, 240, 100, 137, 13, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr14) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr14(0)), 16 * (UBound(arr14) + 1)

    arr15 = Array(89, 95, 95, 94, 91, 139, 229, 93, 81, 242, 195, 85, 139, 236, 255, 117, _
    20, 255, 117, 16, 255, 117, 12, 255, 117, 8, 104, 95, 22, 0, 16, 104, _
    4, 64, 0, 16, 232, 193, 1, 0, 0, 131, 196, 24, 93, 195, 85, 139, _
    236, 131, 37, 128, 67, 0, 16, 0, 131, 236, 36, 83, 51, 219, 67, 9, _
    29, 16, 64, 0, 16, 106, 10, 232, 212, 1, 0, 0, 133, 192, 15, 132, _
    114, 1, 0, 0, 131, 101, 240, 0, 51, 192, 131, 13, 16, 64, 0, 16, _
    2, 51, 201, 86, 87, 137, 29, 128, 67, 0, 16, 141, 125, 220, 83, 15, _
    162, 139, 243, 91, 137, 7, 137, 119, 4, 137, 79, 8, 51, 201, 137, 87, _
    12, 139, 69, 220, 139, 125, 224, 137, 69, 244, 129, 247, 71, 101, 110, 117, _
    139, 69, 232, 53, 105, 110, 101, 73, 137, 69, 248, 139, 69, 228, 53, 110, _
    116, 101, 108, 137, 69, 252, 51, 192, 64, 83, 15, 162, 139, 243, 91, 141, _
    93, 220, 137, 3, 139, 69, 252, 11, 69, 248, 11, 199, 137, 115, 4, 137, _
    75, 8, 137, 83, 12, 117, 67, 139, 69, 220, 37, 240, 63, 255, 15, 61, _
    192, 6, 1, 0, 116, 35, 61, 96, 6, 2, 0, 116, 28, 61, 112, 6, _
    2, 0, 116, 21, 61, 80, 6, 3, 0, 116, 14, 61, 96, 6, 3, 0, _
    116, 7, 61, 112, 6, 3, 0, 117, 17, 139, 61, 132, 67, 0, 16, 131, _
    207, 1, 137, 61, 132, 67, 0, 16, 235, 6, 139, 61, 132, 67, 0, 16, _
    131, 125, 244, 7, 139, 69, 228, 137, 69, 252, 124, 50, 106, 7, 88, 51, _
    201, 83, 15, 162, 139, 243, 91, 141, 93, 220, 137, 3, 139, 69, 252, 137, _
    115, 4, 137, 75, 8, 137, 83, 12, 139, 93, 224, 247, 195, 0, 2, 0, _
    0, 116, 14, 131, 207, 2, 137, 61, 132, 67, 0, 16, 235, 3, 139, 93, _
    240, 95, 94, 169, 0, 0, 16, 0, 116, 108, 131, 13, 16, 64, 0, 16, _
    4, 199, 5, 128, 67, 0, 16, 2, 0, 0, 0, 169, 0, 0, 0, 8, _
    116, 84, 169, 0, 0, 0, 16, 116, 77, 51, 201, 15, 1, 208, 137, 69)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr15) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr15(0)), 16 * (UBound(arr15) + 1)

    arr16 = Array(236, 137, 85, 240, 139, 69, 236, 139, 77, 240, 131, 224, 6, 51, 201, 131, _
    248, 6, 117, 50, 133, 201, 117, 46, 161, 16, 64, 0, 16, 131, 200, 8, _
    199, 5, 128, 67, 0, 16, 3, 0, 0, 0, 163, 16, 64, 0, 16, 246, _
    195, 32, 116, 18, 131, 200, 32, 199, 5, 128, 67, 0, 16, 5, 0, 0, _
    0, 163, 16, 64, 0, 16, 51, 192, 91, 139, 229, 93, 195, 51, 192, 64, _
    195, 51, 192, 57, 5, 20, 64, 0, 16, 15, 149, 192, 195, 195, 255, 37, _
    156, 48, 0, 16, 255, 37, 152, 48, 0, 16, 255, 37, 160, 48, 0, 16, _
    255, 37, 196, 48, 0, 16, 255, 37, 192, 48, 0, 16, 255, 37, 188, 48, _
    0, 16, 255, 37, 184, 48, 0, 16, 255, 37, 180, 48, 0, 16, 255, 37, _
    168, 48, 0, 16, 255, 37, 176, 48, 0, 16, 255, 37, 172, 48, 0, 16, _
    255, 37, 36, 48, 0, 16, 176, 1, 195, 51, 192, 195, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr16) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr16(0)), 16 * (UBound(arr16) + 1)

    arr17 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    128, 56, 0, 0, 148, 56, 0, 0, 116, 60, 0, 0, 94, 60, 0, 0, _
    66, 60, 0, 0, 40, 60, 0, 0, 18, 60, 0, 0, 252, 59, 0, 0, _
    226, 59, 0, 0, 198, 59, 0, 0, 178, 59, 0, 0, 158, 59, 0, 0, _
    128, 59, 0, 0, 100, 59, 0, 0, 0, 0, 0, 0, 126, 57, 0, 0, _
    144, 57, 0, 0, 160, 57, 0, 0, 178, 57, 0, 0, 190, 57, 0, 0, _
    204, 57, 0, 0, 218, 57, 0, 0, 236, 57, 0, 0, 252, 57, 0, 0, _
    86, 57, 0, 0, 68, 57, 0, 0, 46, 57, 0, 0, 112, 57, 0, 0, _
    174, 56, 0, 0, 196, 56, 0, 0, 208, 56, 0, 0, 222, 56, 0, 0, _
    240, 56, 0, 0, 4, 57, 0, 0, 20, 57, 0, 0, 34, 57, 0, 0, _
    98, 57, 0, 0, 0, 0, 0, 0, 58, 58, 0, 0, 26, 58, 0, 0, _
    68, 58, 0, 0, 0, 0, 0, 0, 226, 58, 0, 0, 22, 59, 0, 0, _
    254, 58, 0, 0, 192, 58, 0, 0, 166, 58, 0, 0, 148, 58, 0, 0, _
    134, 58, 0, 0, 122, 58, 0, 0, 0, 0, 0, 0, 112, 58, 0, 0, _
    0, 0, 0, 0, 77, 34, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr17) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr17(0)), 16 * (UBound(arr17) + 1)

    arr18 = Array(0, 0, 0, 0, 32, 64, 0, 16, 112, 64, 0, 16, 119, 0, 110, 0, _
    100, 0, 99, 0, 108, 0, 97, 0, 115, 0, 115, 0, 95, 0, 100, 0, _
    101, 0, 115, 0, 107, 0, 101, 0, 100, 0, 95, 0, 103, 0, 115, 0, _
    107, 0, 0, 0, 77, 0, 115, 0, 103, 0, 80, 0, 111, 0, 115, 0, _
    116, 0, 101, 0, 100, 0, 0, 0, 79, 0, 111, 0, 112, 0, 115, 0, _
    32, 0, 33, 0, 33, 0, 0, 0, 84, 0, 104, 0, 101, 0, 32, 0, _
    86, 0, 66, 0, 69, 0, 32, 0, 119, 0, 97, 0, 115, 0, 32, 0, _
    114, 0, 101, 0, 115, 0, 101, 0, 116, 0, 46, 0, 10, 0, 69, 0, _
    120, 0, 99, 0, 101, 0, 108, 0, 32, 0, 104, 0, 97, 0, 115, 0, _
    32, 0, 98, 0, 101, 0, 101, 0, 110, 0, 32, 0, 115, 0, 97, 0, _
    102, 0, 101, 0, 108, 0, 121, 0, 32, 0, 85, 0, 110, 0, 45, 0, _
    83, 0, 117, 0, 98, 0, 99, 0, 108, 0, 97, 0, 115, 0, 115, 0, _
    101, 0, 100, 0, 46, 0, 0, 0, 35, 0, 51, 0, 50, 0, 55, 0, _
    55, 0, 48, 0, 0, 0, 0, 0, 77, 105, 99, 114, 111, 115, 111, 102, _
    116, 32, 86, 105, 115, 117, 97, 108, 32, 66, 97, 115, 105, 99, 0, 0, _
    82, 117, 110, 45, 116, 105, 109, 101, 32, 101, 114, 114, 111, 114, 0, 0, _
    67, 111, 109, 112, 105, 108, 101, 32, 69, 114, 114, 111, 114, 58, 0, 0, _
    69, 114, 114, 101, 117, 114, 32, 100, 39, 101, 120, 233, 99, 117, 116, 105, _
    111, 110, 0, 0, 69, 114, 114, 101, 117, 114, 32, 100, 101, 32, 99, 111, _
    109, 112, 105, 108, 97, 116, 105, 111, 110, 58, 0, 0, 83, 101, 32, 104, _
    97, 32, 112, 114, 111, 100, 117, 99, 105, 100, 111, 32, 101, 108, 32, 101, _
    114, 114, 111, 114, 0, 0, 0, 0, 69, 114, 114, 111, 114, 32, 100, 101, _
    32, 99, 111, 109, 112, 105, 108, 97, 99, 105, 243, 110, 58, 0, 0, 0, _
    88, 0, 108, 0, 83, 0, 117, 0, 98, 0, 67, 0, 108, 0, 97, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr18) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr18(0)), 16 * (UBound(arr18) + 1)

    arr19 = Array(115, 0, 115, 0, 51, 0, 50, 0, 46, 0, 100, 0, 108, 0, 108, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 26, 97, 204, 89, 0, 0, 0, 0, 2, 0, 0, 0, _
    117, 0, 0, 0, 132, 51, 0, 0, 132, 27, 0, 0, 0, 0, 0, 0, _
    26, 97, 204, 89, 0, 0, 0, 0, 12, 0, 0, 0, 20, 0, 0, 0, _
    252, 51, 0, 0, 252, 27, 0, 0, 0, 0, 0, 0, 26, 97, 204, 89, _
    0, 0, 0, 0, 13, 0, 0, 0, 40, 2, 0, 0, 16, 52, 0, 0, _
    16, 28, 0, 0, 0, 0, 0, 0, 26, 97, 204, 89, 0, 0, 0, 0, _
    14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 64, 0, 16, _
    128, 51, 0, 16, 1, 0, 0, 0, 212, 48, 0, 16, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    123, 32, 0, 0, 82, 83, 68, 83, 84, 3, 249, 187, 214, 251, 145, 71, _
    146, 147, 169, 189, 25, 29, 115, 182, 5, 0, 0, 0, 67, 58, 92, 85, _
    115, 101, 114, 115, 92, 73, 110, 102, 111, 45, 72, 112, 92, 100, 111, 99, _
    117, 109, 101, 110, 116, 115, 92, 118, 105, 115, 117, 97, 108, 32, 115, 116, _
    117, 100, 105, 111, 32, 50, 48, 49, 55, 92, 80, 114, 111, 106, 101, 99, _
    116, 115, 92, 88, 108, 83, 117, 98, 67, 97, 108, 115, 115, 51, 50, 92, _
    82, 101, 108, 101, 97, 115, 101, 92, 88, 108, 83, 117, 98, 67, 97, 108, _
    115, 115, 51, 50, 46, 112, 100, 98, 0, 0, 0, 0, 0, 0, 0, 0, _
    22, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr19) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr19(0)), 16 * (UBound(arr19) + 1)

    arr20 = Array(71, 67, 84, 76, 0, 16, 0, 0, 156, 18, 0, 0, 46, 116, 101, 120, _
    116, 36, 109, 110, 0, 0, 0, 0, 0, 48, 0, 0, 212, 0, 0, 0, _
    46, 105, 100, 97, 116, 97, 36, 53, 0, 0, 0, 0, 212, 48, 0, 0, _
    4, 0, 0, 0, 46, 48, 48, 99, 102, 103, 0, 0, 216, 48, 0, 0, _
    4, 0, 0, 0, 46, 67, 82, 84, 36, 88, 67, 65, 0, 0, 0, 0, _
    220, 48, 0, 0, 4, 0, 0, 0, 46, 67, 82, 84, 36, 88, 67, 90, _
    0, 0, 0, 0, 224, 48, 0, 0, 4, 0, 0, 0, 46, 67, 82, 84, _
    36, 88, 73, 65, 0, 0, 0, 0, 228, 48, 0, 0, 4, 0, 0, 0, _
    46, 67, 82, 84, 36, 88, 73, 90, 0, 0, 0, 0, 232, 48, 0, 0, _
    4, 0, 0, 0, 46, 67, 82, 84, 36, 88, 80, 65, 0, 0, 0, 0, _
    236, 48, 0, 0, 4, 0, 0, 0, 46, 67, 82, 84, 36, 88, 80, 90, _
    0, 0, 0, 0, 240, 48, 0, 0, 4, 0, 0, 0, 46, 67, 82, 84, _
    36, 88, 84, 65, 0, 0, 0, 0, 244, 48, 0, 0, 12, 0, 0, 0, _
    46, 67, 82, 84, 36, 88, 84, 90, 0, 0, 0, 0, 0, 49, 0, 0, _
    128, 2, 0, 0, 46, 114, 100, 97, 116, 97, 0, 0, 128, 51, 0, 0, _
    4, 0, 0, 0, 46, 114, 100, 97, 116, 97, 36, 115, 120, 100, 97, 116, _
    97, 0, 0, 0, 132, 51, 0, 0, 180, 2, 0, 0, 46, 114, 100, 97, _
    116, 97, 36, 122, 122, 122, 100, 98, 103, 0, 0, 0, 56, 54, 0, 0, _
    4, 0, 0, 0, 46, 114, 116, 99, 36, 73, 65, 65, 0, 0, 0, 0, _
    60, 54, 0, 0, 4, 0, 0, 0, 46, 114, 116, 99, 36, 73, 90, 90, _
    0, 0, 0, 0, 64, 54, 0, 0, 4, 0, 0, 0, 46, 114, 116, 99, _
    36, 84, 65, 65, 0, 0, 0, 0, 68, 54, 0, 0, 4, 0, 0, 0, _
    46, 114, 116, 99, 36, 84, 90, 90, 0, 0, 0, 0, 72, 54, 0, 0, _
    136, 0, 0, 0, 46, 120, 100, 97, 116, 97, 36, 120, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr20) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr20(0)), 16 * (UBound(arr20) + 1)

    Call Build_Dll2

End Sub

Sub Build_Dll2(Optional ByVal Flag As Boolean)

    arr21 = Array(208, 54, 0, 0, 100, 0, 0, 0, 46, 101, 100, 97, 116, 97, 0, 0, _
    52, 55, 0, 0, 100, 0, 0, 0, 46, 105, 100, 97, 116, 97, 36, 50, _
    0, 0, 0, 0, 152, 55, 0, 0, 20, 0, 0, 0, 46, 105, 100, 97, _
    116, 97, 36, 51, 0, 0, 0, 0, 172, 55, 0, 0, 212, 0, 0, 0, _
    46, 105, 100, 97, 116, 97, 36, 52, 0, 0, 0, 0, 128, 56, 0, 0, _
    8, 4, 0, 0, 46, 105, 100, 97, 116, 97, 36, 54, 0, 0, 0, 0, _
    0, 64, 0, 0, 24, 0, 0, 0, 46, 100, 97, 116, 97, 0, 0, 0, _
    24, 64, 0, 0, 168, 3, 0, 0, 46, 98, 115, 115, 0, 0, 0, 0, _
    0, 80, 0, 0, 96, 0, 0, 0, 46, 114, 115, 114, 99, 36, 48, 49, _
    0, 0, 0, 0, 96, 80, 0, 0, 128, 1, 0, 0, 46, 114, 115, 114, _
    99, 36, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 255, 0, 0, 0, 0, _
    208, 255, 255, 255, 0, 0, 0, 0, 254, 255, 255, 255, 0, 0, 0, 0, _
    176, 23, 0, 16, 0, 0, 0, 0, 254, 255, 255, 255, 0, 0, 0, 0, _
    212, 255, 255, 255, 0, 0, 0, 0, 254, 255, 255, 255, 0, 0, 0, 0, _
    53, 24, 0, 16, 0, 0, 0, 0, 254, 255, 255, 255, 0, 0, 0, 0, _
    212, 255, 255, 255, 0, 0, 0, 0, 254, 255, 255, 255, 10, 25, 0, 16, _
    41, 25, 0, 16, 0, 0, 0, 0, 254, 255, 255, 255, 0, 0, 0, 0, _
    216, 255, 255, 255, 0, 0, 0, 0, 254, 255, 255, 255, 56, 30, 0, 16, _
    75, 30, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 23, 97, 204, 89, 0, 0, 0, 0, 12, 55, 0, 0, _
    1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 248, 54, 0, 0, _
    0, 55, 0, 0, 8, 55, 0, 0, 0, 16, 0, 0, 128, 17, 0, 0, _
    29, 55, 0, 0, 38, 55, 0, 0, 0, 0, 1, 0, 88, 108, 83, 117)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr21) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr21(0)), 16 * (UBound(arr21) + 1)

    arr22 = Array(98, 67, 108, 97, 115, 115, 51, 50, 46, 100, 108, 108, 0, 83, 117, 98, _
    67, 108, 97, 115, 115, 0, 85, 110, 83, 117, 98, 67, 108, 97, 115, 115, _
    0, 0, 0, 0, 172, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    160, 56, 0, 0, 0, 48, 0, 0, 232, 55, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 14, 58, 0, 0, 60, 48, 0, 0, 68, 56, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 94, 58, 0, 0, 152, 48, 0, 0, _
    120, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 59, 0, 0, _
    204, 48, 0, 0, 84, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    66, 59, 0, 0, 168, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 56, 0, 0, _
    148, 56, 0, 0, 116, 60, 0, 0, 94, 60, 0, 0, 66, 60, 0, 0, _
    40, 60, 0, 0, 18, 60, 0, 0, 252, 59, 0, 0, 226, 59, 0, 0, _
    198, 59, 0, 0, 178, 59, 0, 0, 158, 59, 0, 0, 128, 59, 0, 0, _
    100, 59, 0, 0, 0, 0, 0, 0, 126, 57, 0, 0, 144, 57, 0, 0, _
    160, 57, 0, 0, 178, 57, 0, 0, 190, 57, 0, 0, 204, 57, 0, 0, _
    218, 57, 0, 0, 236, 57, 0, 0, 252, 57, 0, 0, 86, 57, 0, 0, _
    68, 57, 0, 0, 46, 57, 0, 0, 112, 57, 0, 0, 174, 56, 0, 0, _
    196, 56, 0, 0, 208, 56, 0, 0, 222, 56, 0, 0, 240, 56, 0, 0, _
    4, 57, 0, 0, 20, 57, 0, 0, 34, 57, 0, 0, 98, 57, 0, 0, _
    0, 0, 0, 0, 58, 58, 0, 0, 26, 58, 0, 0, 68, 58, 0, 0, _
    0, 0, 0, 0, 226, 58, 0, 0, 22, 59, 0, 0, 254, 58, 0, 0, _
    192, 58, 0, 0, 166, 58, 0, 0, 148, 58, 0, 0, 134, 58, 0, 0, _
    122, 58, 0, 0, 0, 0, 0, 0, 112, 58, 0, 0, 0, 0, 0, 0, _
    112, 2, 71, 101, 116, 77, 111, 100, 117, 108, 101, 72, 97, 110, 100, 108)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr22) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr22(0)), 16 * (UBound(arr22) + 1)

    arr23 = Array(101, 87, 0, 0, 26, 6, 108, 115, 116, 114, 99, 109, 112, 87, 0, 0, _
    75, 69, 82, 78, 69, 76, 51, 50, 46, 100, 108, 108, 0, 0, 2, 3, _
    83, 101, 116, 70, 111, 114, 101, 103, 114, 111, 117, 110, 100, 87, 105, 110, _
    100, 111, 119, 0, 46, 2, 75, 105, 108, 108, 84, 105, 109, 101, 114, 0, _
    65, 1, 71, 101, 116, 68, 108, 103, 73, 116, 101, 109, 0, 0, 60, 3, _
    83, 101, 116, 87, 105, 110, 100, 111, 119, 76, 111, 110, 103, 87, 0, 0, _
    71, 3, 83, 101, 116, 87, 105, 110, 100, 111, 119, 115, 72, 111, 111, 107, _
    69, 120, 87, 0, 40, 1, 71, 101, 116, 67, 108, 97, 115, 115, 78, 97, _
    109, 101, 87, 0, 13, 1, 70, 105, 110, 100, 87, 105, 110, 100, 111, 119, _
    87, 0, 32, 3, 83, 101, 116, 80, 114, 111, 112, 87, 0, 0, 115, 3, _
    85, 110, 104, 111, 111, 107, 87, 105, 110, 100, 111, 119, 115, 72, 111, 111, _
    107, 69, 120, 0, 218, 1, 71, 101, 116, 87, 105, 110, 100, 111, 119, 84, _
    101, 120, 116, 65, 0, 0, 48, 3, 83, 101, 116, 84, 105, 109, 101, 114, _
    0, 0, 79, 3, 83, 104, 111, 119, 87, 105, 110, 100, 111, 119, 0, 0, _
    213, 2, 82, 101, 109, 111, 118, 101, 80, 114, 111, 112, 87, 0, 30, 0, _
    67, 97, 108, 108, 78, 101, 120, 116, 72, 111, 111, 107, 69, 120, 0, 0, _
    232, 2, 83, 101, 110, 100, 77, 101, 115, 115, 97, 103, 101, 87, 0, 0, _
    235, 2, 83, 101, 116, 65, 99, 116, 105, 118, 101, 87, 105, 110, 100, 111, _
    119, 0, 158, 1, 71, 101, 116, 80, 114, 111, 112, 87, 0, 0, 169, 3, _
    107, 101, 121, 98, 100, 95, 101, 118, 101, 110, 116, 0, 98, 2, 77, 101, _
    115, 115, 97, 103, 101, 66, 111, 120, 87, 0, 43, 2, 73, 115, 87, 105, _
    110, 100, 111, 119, 86, 105, 115, 105, 98, 108, 101, 0, 133, 2, 80, 111, _
    115, 116, 77, 101, 115, 115, 97, 103, 101, 87, 0, 0, 32, 0, 67, 97, _
    108, 108, 87, 105, 110, 100, 111, 119, 80, 114, 111, 99, 87, 0, 85, 83)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr23) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr23(0)), 16 * (UBound(arr23) + 1)

    arr24 = Array(69, 82, 51, 50, 46, 100, 108, 108, 0, 0, 37, 0, 95, 95, 115, 116, _
    100, 95, 116, 121, 112, 101, 95, 105, 110, 102, 111, 95, 100, 101, 115, 116, _
    114, 111, 121, 95, 108, 105, 115, 116, 0, 0, 72, 0, 109, 101, 109, 115, _
    101, 116, 0, 0, 53, 0, 95, 101, 120, 99, 101, 112, 116, 95, 104, 97, _
    110, 100, 108, 101, 114, 52, 95, 99, 111, 109, 109, 111, 110, 0, 86, 67, _
    82, 85, 78, 84, 73, 77, 69, 49, 52, 48, 46, 100, 108, 108, 0, 0, _
    142, 0, 115, 116, 114, 110, 99, 109, 112, 0, 56, 0, 95, 105, 110, 105, _
    116, 116, 101, 114, 109, 0, 57, 0, 95, 105, 110, 105, 116, 116, 101, 114, _
    109, 95, 101, 0, 65, 0, 95, 115, 101, 104, 95, 102, 105, 108, 116, 101, _
    114, 95, 100, 108, 108, 0, 25, 0, 95, 99, 111, 110, 102, 105, 103, 117, _
    114, 101, 95, 110, 97, 114, 114, 111, 119, 95, 97, 114, 103, 118, 0, 0, _
    53, 0, 95, 105, 110, 105, 116, 105, 97, 108, 105, 122, 101, 95, 110, 97, _
    114, 114, 111, 119, 95, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, _
    0, 0, 54, 0, 95, 105, 110, 105, 116, 105, 97, 108, 105, 122, 101, 95, _
    111, 110, 101, 120, 105, 116, 95, 116, 97, 98, 108, 101, 0, 0, 36, 0, _
    95, 101, 120, 101, 99, 117, 116, 101, 95, 111, 110, 101, 120, 105, 116, 95, _
    116, 97, 98, 108, 101, 0, 23, 0, 95, 99, 101, 120, 105, 116, 0, 0, _
    97, 112, 105, 45, 109, 115, 45, 119, 105, 110, 45, 99, 114, 116, 45, 115, _
    116, 114, 105, 110, 103, 45, 108, 49, 45, 49, 45, 48, 46, 100, 108, 108, _
    0, 0, 97, 112, 105, 45, 109, 115, 45, 119, 105, 110, 45, 99, 114, 116, _
    45, 114, 117, 110, 116, 105, 109, 101, 45, 108, 49, 45, 49, 45, 48, 46, _
    100, 108, 108, 0, 154, 5, 85, 110, 104, 97, 110, 100, 108, 101, 100, 69, _
    120, 99, 101, 112, 116, 105, 111, 110, 70, 105, 108, 116, 101, 114, 0, 0, _
    91, 5, 83, 101, 116, 85, 110, 104, 97, 110, 100, 108, 101, 100, 69, 120)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr24) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr24(0)), 16 * (UBound(arr24) + 1)

    arr25 = Array(99, 101, 112, 116, 105, 111, 110, 70, 105, 108, 116, 101, 114, 0, 18, 2, _
    71, 101, 116, 67, 117, 114, 114, 101, 110, 116, 80, 114, 111, 99, 101, 115, _
    115, 0, 121, 5, 84, 101, 114, 109, 105, 110, 97, 116, 101, 80, 114, 111, _
    99, 101, 115, 115, 0, 0, 123, 3, 73, 115, 80, 114, 111, 99, 101, 115, _
    115, 111, 114, 70, 101, 97, 116, 117, 114, 101, 80, 114, 101, 115, 101, 110, _
    116, 0, 62, 4, 81, 117, 101, 114, 121, 80, 101, 114, 102, 111, 114, 109, _
    97, 110, 99, 101, 67, 111, 117, 110, 116, 101, 114, 0, 19, 2, 71, 101, _
    116, 67, 117, 114, 114, 101, 110, 116, 80, 114, 111, 99, 101, 115, 115, 73, _
    100, 0, 23, 2, 71, 101, 116, 67, 117, 114, 114, 101, 110, 116, 84, 104, _
    114, 101, 97, 100, 73, 100, 0, 0, 225, 2, 71, 101, 116, 83, 121, 115, _
    116, 101, 109, 84, 105, 109, 101, 65, 115, 70, 105, 108, 101, 84, 105, 109, _
    101, 0, 26, 1, 68, 105, 115, 97, 98, 108, 101, 84, 104, 114, 101, 97, _
    100, 76, 105, 98, 114, 97, 114, 121, 67, 97, 108, 108, 115, 0, 88, 3, _
    73, 110, 105, 116, 105, 97, 108, 105, 122, 101, 83, 76, 105, 115, 116, 72, _
    101, 97, 100, 0, 116, 3, 73, 115, 68, 101, 98, 117, 103, 103, 101, 114, _
    80, 114, 101, 115, 101, 110, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr25) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr25(0)), 16 * (UBound(arr25) + 1)

    arr26 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    177, 25, 191, 68, 78, 230, 64, 187, 255, 255, 255, 255, 0, 0, 0, 0, _
    1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr26) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr26(0)), 16 * (UBound(arr26) + 1)

    arr27 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr27) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr27(0)), 16 * (UBound(arr27) + 1)

    arr28 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, _
    24, 0, 0, 0, 24, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 48, 0, 0, 128, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, _
    9, 4, 0, 0, 72, 0, 0, 0, 96, 80, 0, 0, 125, 1, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, 110, 61, 39, 49, _
    46, 48, 39, 32, 101, 110, 99, 111, 100, 105, 110, 103, 61, 39, 85, 84, _
    70, 45, 56, 39, 32, 115, 116, 97, 110, 100, 97, 108, 111, 110, 101, 61, _
    39, 121, 101, 115, 39, 63, 62, 13, 10, 60, 97, 115, 115, 101, 109, 98, _
    108, 121, 32, 120, 109, 108, 110, 115, 61, 39, 117, 114, 110, 58, 115, 99, _
    104, 101, 109, 97, 115, 45, 109, 105, 99, 114, 111, 115, 111, 102, 116, 45, _
    99, 111, 109, 58, 97, 115, 109, 46, 118, 49, 39, 32, 109, 97, 110, 105, _
    102, 101, 115, 116, 86, 101, 114, 115, 105, 111, 110, 61, 39, 49, 46, 48, _
    39, 62, 13, 10, 32, 32, 60, 116, 114, 117, 115, 116, 73, 110, 102, 111, _
    32, 120, 109, 108, 110, 115, 61, 34, 117, 114, 110, 58, 115, 99, 104, 101, _
    109, 97, 115, 45, 109, 105, 99, 114, 111, 115, 111, 102, 116, 45, 99, 111, _
    109, 58, 97, 115, 109, 46, 118, 51, 34, 62, 13, 10, 32, 32, 32, 32, _
    60, 115, 101, 99, 117, 114, 105, 116, 121, 62, 13, 10, 32, 32, 32, 32, _
    32, 32, 60, 114, 101, 113, 117, 101, 115, 116, 101, 100, 80, 114, 105, 118, _
    105, 108, 101, 103, 101, 115, 62, 13, 10, 32, 32, 32, 32, 32, 32, 32, _
    32, 60, 114, 101, 113, 117, 101, 115, 116, 101, 100, 69, 120, 101, 99, 117, _
    116, 105, 111, 110, 76, 101, 118, 101, 108, 32, 108, 101, 118, 101, 108, 61, _
    39, 97, 115, 73, 110, 118, 111, 107, 101, 114, 39, 32, 117, 105, 65, 99)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr28) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr28(0)), 16 * (UBound(arr28) + 1)

    arr29 = Array(99, 101, 115, 115, 61, 39, 102, 97, 108, 115, 101, 39, 32, 47, 62, 13, _
    10, 32, 32, 32, 32, 32, 32, 60, 47, 114, 101, 113, 117, 101, 115, 116, _
    101, 100, 80, 114, 105, 118, 105, 108, 101, 103, 101, 115, 62, 13, 10, 32, _
    32, 32, 32, 60, 47, 115, 101, 99, 117, 114, 105, 116, 121, 62, 13, 10, _
    32, 32, 60, 47, 116, 114, 117, 115, 116, 73, 110, 102, 111, 62, 13, 10, _
    60, 47, 97, 115, 115, 101, 109, 98, 108, 121, 62, 13, 10, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 16, 0, 0, 208, 1, 0, 0, 5, 48, 27, 48, 35, 48, 41, 48, _
    51, 48, 61, 48, 71, 48, 81, 48, 86, 48, 92, 48, 97, 48, 102, 48, _
    108, 48, 116, 48, 124, 48, 129, 48, 134, 48, 144, 48, 150, 48, 156, 48, _
    201, 48, 212, 48, 221, 48, 228, 48, 238, 48, 244, 48, 250, 48, 9, 49, _
    14, 49, 31, 49, 51, 49, 60, 49, 66, 49, 72, 49, 78, 49, 86, 49, _
    96, 49, 102, 49, 107, 49, 118, 49, 130, 49, 144, 49, 150, 49, 160, 49, _
    170, 49, 176, 49, 182, 49, 190, 49, 198, 49, 206, 49, 214, 49, 222, 49, _
    230, 49, 240, 49, 253, 49, 2, 50, 8, 50, 14, 50, 24, 50, 37, 50, _
    43, 50, 49, 50, 54, 50, 62, 50, 68, 50, 78, 50, 89, 50, 97, 50, _
    102, 50, 109, 50, 117, 50, 122, 50, 129, 50, 173, 50, 179, 50, 189, 50, _
    215, 50, 221, 50, 248, 50, 254, 50, 38, 51, 44, 51, 50, 51, 60, 51, _
    70, 51, 76, 51, 102, 51, 108, 51, 139, 51, 145, 51, 155, 51, 173, 51, _
    179, 51, 197, 51, 203, 51, 234, 51, 20, 52, 25, 52, 38, 52, 51, 52, _
    57, 52, 63, 52, 77, 52, 90, 52, 145, 52, 152, 52, 158, 52, 163, 52, _
    174, 52, 210, 52, 215, 52, 228, 52, 20, 53, 26, 53, 39, 53, 65, 53, _
    84, 53, 97, 53, 120, 53, 143, 53, 166, 53, 189, 53, 212, 53, 228, 53, _
    234, 53, 244, 53, 6, 54, 12, 54, 23, 54, 29, 54, 68, 54, 74, 54)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr29) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr29(0)), 16 * (UBound(arr29) + 1)

    arr30 = Array(82, 54, 88, 54, 97, 54, 198, 54, 245, 54, 5, 55, 38, 55, 43, 55, _
    68, 55, 73, 55, 86, 55, 163, 55, 192, 55, 202, 55, 216, 55, 234, 55, _
    9, 56, 71, 56, 89, 56, 19, 57, 70, 57, 148, 57, 157, 57, 168, 57, _
    175, 57, 207, 57, 213, 57, 219, 57, 225, 57, 231, 57, 237, 57, 244, 57, _
    251, 57, 2, 58, 9, 58, 16, 58, 23, 58, 30, 58, 38, 58, 46, 58, _
    54, 58, 66, 58, 75, 58, 80, 58, 86, 58, 96, 58, 106, 58, 122, 58, _
    138, 58, 154, 58, 163, 58, 191, 58, 218, 58, 230, 58, 245, 58, 254, 58, _
    11, 59, 58, 59, 66, 59, 87, 59, 99, 59, 111, 59, 117, 59, 123, 59, _
    135, 59, 141, 59, 7, 60, 202, 60, 251, 60, 49, 61, 90, 61, 105, 61, _
    124, 61, 136, 61, 152, 61, 169, 61, 191, 61, 214, 61, 235, 61, 242, 61, _
    248, 61, 10, 62, 20, 62, 114, 62, 127, 62, 163, 62, 212, 62, 127, 63, _
    158, 63, 168, 63, 185, 63, 198, 63, 203, 63, 241, 63, 246, 63, 0, 0, _
    0, 32, 0, 0, 76, 0, 0, 0, 27, 48, 33, 48, 62, 48, 139, 48, _
    144, 48, 163, 48, 177, 48, 204, 48, 215, 48, 107, 49, 116, 49, 124, 49, _
    184, 49, 204, 49, 211, 49, 9, 50, 18, 50, 27, 50, 41, 50, 50, 50, _
    69, 50, 80, 50, 86, 50, 92, 50, 98, 50, 104, 50, 110, 50, 116, 50, _
    122, 50, 128, 50, 134, 50, 140, 50, 146, 50, 0, 0, 0, 48, 0, 0, _
    32, 0, 0, 0, 212, 48, 4, 49, 8, 49, 76, 51, 80, 51, 88, 51, _
    96, 54, 128, 54, 156, 54, 160, 54, 188, 54, 192, 54, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr30) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr30(0)), 16 * (UBound(arr30) + 1)

    arr31 = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    lPos = UBound(arr1)
    ReDim Preserve arr1(UBound(arr1) + UBound(arr31) + 1)
    CopyMemory ByVal VarPtr(arr1(lPos + 1)), ByVal VarPtr(arr31(0)), 16 * (UBound(arr31) + 1)

    Call SaveDllToDisk(ByVal arr1)
    
End Sub

Private Sub SaveDllToDisk(ByVal Ar As Variant)
    Dim i As Long, FileNum As Long
    Dim bytes() As Byte
    Dim sDllPathName As String

    sDllPathName = Environ("Temp") & "\XlSubClass32.dll"
    ReDim bytes(LBound(Ar) To UBound(Ar))
    For i = LBound(Ar) To UBound(Ar)
        bytes(i) = CByte((Ar(i)))
    Next
    FileNum = FreeFile
    Open sDllPathName For Binary As [URL="https://www.mrexcel.com/forum/usertag.php?do=list&action=hash&hash=FileNum"]#FileNum[/URL] 
        Put [URL="https://www.mrexcel.com/forum/usertag.php?do=list&action=hash&hash=FileNum"]#FileNum[/URL] , 1, bytes
    Close FileNum
End Sub
 
Last edited:

hymced

New Member
Joined
Sep 25, 2017
Messages
33
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

Hello Jaafar,


Many thanks for the work !!! but I have an issue with the 32-bit Excel version :

Code:
pProcAddr = GetProcAddress(GetModuleHandle(sDllPathName), "SubClass")

returns 0, so bas_WinProc.WinProc is never reached, nothing happens !

FYI: the DLL is correctly built in my temp folder
 
Last edited:

Jaafar Tribak

Well-known Member
Joined
Dec 5, 2002
Messages
8,332
Office Version
  1. 2016
Platform
  1. Windows

ADVERTISEMENT

Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

Hello hymced,

Did the 64bit version worked for you ? and did you test the 32bit version on a 32 system ?
 

hymced

New Member
Joined
Sep 25, 2017
Messages
33
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

no Excel crashes with the 64-bit version

I am running Excel 32-bit on a 64-bit Windows 10, and it is the only system I have :/
 

Jaafar Tribak

Well-known Member
Joined
Dec 5, 2002
Messages
8,332
Office Version
  1. 2016
Platform
  1. Windows

ADVERTISEMENT

Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

no Excel crashes with the 64-bit version

I am running Excel 32-bit on a 64-bit Windows 10, and it is the only system I have :/

Difficult for me to test because I don't have access to a 64bit system with a 32bit version of excel.. Maybe someone who has can test it to confirm or not the crashes that you are experiencing .

By the way, Did you try the 64 bit dll vesrion on the 32bit excel (using the calling 32bit vba code in post#3) ? give it a try and see what happens .
 

hymced

New Member
Joined
Sep 25, 2017
Messages
33
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

Just tried it, using the 64-bit bas_DllBytes and the 2 others bas module from the 32-bit version (renaming the proc Build_Dll to BuildDll since it won't compile)

Excel also crashes.

I think the correct version for me to use do is the 32-bit version. But why the GetProcAddress API cannot find the "SubClass" proc in the DLL... How could I debug this ?
 
Last edited:

hymced

New Member
Joined
Sep 25, 2017
Messages
33
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

I think the correct version for me to use do is the 32-bit version. But why the GetProcAddress API cannot find the "SubClass" proc in the DLL... How could I debug this ?

Simple: the line
Code:
Call LoadLibraryEx(sDllPathName, 0, LOAD_IGNORE_CODE_AUTHZ_LEVEL)
actually removes the .DLL files from the Temp folder !

I assume this is not expected behaviour...
 

hymced

New Member
Joined
Sep 25, 2017
Messages
33
Re: Intercepting resetting of vba editor as well as unhadled errors for safe subclassing

Simple: the line
Code:
Call LoadLibraryEx(sDllPathName, 0, LOAD_IGNORE_CODE_AUTHZ_LEVEL)
actually removes the .DLL files from the Temp folder !

I assume this is not expected behaviour...

I found what's happening. My antivirus was actually placing the DLL in quarantine when this line is executed !!! I assume this have something to do with Software Restriction Policies for the DLL...

So I replaced it back to the Temp folder and it works just fine ! But I guess everyone should expect the same problem. As when opening a Workbook from internet, Excel asks if the file is safe.

I think it might be required to add an entry in the registry at some point to have this working fully automated :
-
https://technet.microsoft.com/en-us/library/bb457006.aspx
- https://technet.microsoft.com/en-us/library/cc786941(v=ws.10).aspx
 
Last edited:

Forum statistics

Threads
1,143,654
Messages
5,720,101
Members
422,266
Latest member
Mattyw

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Top