????

Your IP : 3.16.89.150


Current Path : C:/Windows/System32/Printing_Admin_Scripts/en-US/
Upload File :
Current File : C:/Windows/System32/Printing_Admin_Scripts/en-US/prndrvr.vbs

��'----------------------------------------------------------------------

'

' Copyright (c) Microsoft Corporation. All rights reserved.

'

' Abstract:

' prndrvr.vbs - driver script for WMI on Windows 

'     used to add, delete, and list drivers.

'

' Usage:

' prndrvr [-adlx?] [-m model][-v version][-e environment][-s server]

'         [-u user name][-w password][-h file path][-i inf file]

'

' Example:

' prndrvr -a -m "driver" -v 3 -e "Windows NT x86"

' prndrvr -d -m "driver" -v 3 -e "Windows x64"

' prndrvr -d -m "driver" -v 3 -e "Windows IA64"

' prndrvr -x -s server

' prndrvr -l -s server

'

'----------------------------------------------------------------------



option explicit



'

' Debugging trace flags, to enable debug output trace message

' change gDebugFlag to true.

'

const kDebugTrace = 1

const kDebugError = 2

dim gDebugFlag



gDebugFlag = false



'

' Operation action values.

'

const kActionUnknown    = 0

const kActionAdd        = 1

const kActionDel        = 2

const kActionDelAll     = 3

const kActionList       = 4



const kErrorSuccess     = 0

const kErrorFailure     = 1



const kNameSpace        = "root\cimv2"



'

' Generic strings

'

const L_Empty_Text                 = ""

const L_Space_Text                 = " "

const L_Error_Text                 = "Error"

const L_Success_Text               = "Success"

const L_Failed_Text                = "Failed"

const L_Hex_Text                   = "0x"

const L_Printer_Text               = "Printer"

const L_Operation_Text             = "Operation"

const L_Provider_Text              = "Provider"

const L_Description_Text           = "Description"

const L_Debug_Text                 = "Debug:"



'

' General usage messages

'

const L_Help_Help_General01_Text   = "Usage: prndrvr [-adlx?] [-m model][-v version][-e environment][-s server]"

const L_Help_Help_General02_Text   = "               [-u user name][-w password][-h path][-i inf file]"

const L_Help_Help_General03_Text   = "Arguments:"

const L_Help_Help_General04_Text   = "-a     - add the specified driver"

const L_Help_Help_General05_Text   = "-d     - delete the specified driver"

const L_Help_Help_General06_Text   = "-e     - environment  ""Windows {NT x86 | X64 | IA64}"""

const L_Help_Help_General07_Text   = "-h     - driver file path"

const L_Help_Help_General08_Text   = "-i     - fully qualified inf file name"

const L_Help_Help_General09_Text   = "-l     - list all drivers"

const L_Help_Help_General10_Text   = "-m     - driver model name"

const L_Help_Help_General11_Text   = "-s     - server name"

const L_Help_Help_General12_Text   = "-u     - user name"

const L_Help_Help_General13_Text   = "-v     - version"

const L_Help_Help_General14_Text   = "-w     - password"

const L_Help_Help_General15_Text   = "-x     - delete all drivers that are not in use"

const L_Help_Help_General16_Text   = "-?     - display command usage"

const L_Help_Help_General17_Text   = "Examples:"

const L_Help_Help_General18_Text   = "prndrvr -a -m ""driver"" -v 3 -e ""Windows NT x86"""

const L_Help_Help_General19_Text   = "prndrvr -d -m ""driver"" -v 3 -e ""Windows x64"""

const L_Help_Help_General20_Text   = "prndrvr -a -m ""driver"" -v 3 -e ""Windows IA64"" -i c:\temp\drv\drv.inf -h c:\temp\drv"

const L_Help_Help_General21_Text   = "prndrvr -l -s server"

const L_Help_Help_General22_Text   = "prndrvr -x -s server"

const L_Help_Help_General23_Text   = "Remarks:"

const L_Help_Help_General24_Text   = "The inf file name must be fully qualified. If the inf name is not specified, the script uses"

const L_Help_Help_General25_Text   = "one of the inbox printer inf files in the inf subdirectory of the Windows directory."

const L_Help_Help_General26_Text   = "If the driver path is not specified, the script searches for driver files in the driver.cab file."

const L_Help_Help_General27_Text   = "The -x option deletes all additional printer drivers (drivers installed for use on clients running"

const L_Help_Help_General28_Text   = "alternate versions of Windows), even if the primary driver is in use. If the fax component is installed,"

const L_Help_Help_General29_Text   = "this option deletes any additional fax drivers. The primary fax driver is also deleted if it is not"

const L_Help_Help_General30_Text   = "in use (i.e. if there is no queue using it). If the primary fax driver is deleted, the only way to"

const L_Help_Help_General31_Text   = "re-enable fax is to reinstall the fax component."



'

' Messages to be displayed if the scripting host is not cscript

'

const L_Help_Help_Host01_Text      = "This script should be executed from the Command Prompt using CScript.exe."

const L_Help_Help_Host02_Text      = "For example: CScript script.vbs arguments"

const L_Help_Help_Host03_Text      = ""

const L_Help_Help_Host04_Text      = "To set CScript as the default application to run .VBS files run the following:"

const L_Help_Help_Host05_Text      = "     CScript //H:CScript //S"

const L_Help_Help_Host06_Text      = "You can then run ""script.vbs arguments"" without preceding the script with CScript."



'

' General error messages

'

const L_Text_Error_General01_Text  = "The scripting host could not be determined."

const L_Text_Error_General02_Text  = "Unable to parse command line."

const L_Text_Error_General03_Text  = "Win32 error code"



'

' Miscellaneous messages

'

const L_Text_Msg_General01_Text    = "Added printer driver"

const L_Text_Msg_General02_Text    = "Unable to add printer driver"

const L_Text_Msg_General03_Text    = "Unable to delete printer driver"

const L_Text_Msg_General04_Text    = "Deleted printer driver"

const L_Text_Msg_General05_Text    = "Unable to enumerate printer drivers"

const L_Text_Msg_General06_Text    = "Number of printer drivers enumerated"

const L_Text_Msg_General07_Text    = "Number of printer drivers deleted"

const L_Text_Msg_General08_Text    = "Attempting to delete printer driver"

const L_Text_Msg_General09_Text    = "Unable to list dependent files"

const L_Text_Msg_General10_Text    = "Unable to get SWbemLocator object"

const L_Text_Msg_General11_Text    = "Unable to connect to WMI service"





'

' Printer driver properties

'

const L_Text_Msg_Driver01_Text     = "Server name"

const L_Text_Msg_Driver02_Text     = "Driver name"

const L_Text_Msg_Driver03_Text     = "Version"

const L_Text_Msg_Driver04_Text     = "Environment"

const L_Text_Msg_Driver05_Text     = "Monitor name"

const L_Text_Msg_Driver06_Text     = "Driver path"

const L_Text_Msg_Driver07_Text     = "Data file"

const L_Text_Msg_Driver08_Text     = "Config file"

const L_Text_Msg_Driver09_Text     = "Help file"

const L_Text_Msg_Driver10_Text     = "Dependent files"



'

' Debug messages

'

const L_Text_Dbg_Msg01_Text        = "In function AddDriver"

const L_Text_Dbg_Msg02_Text        = "In function DelDriver"

const L_Text_Dbg_Msg03_Text        = "In function DelAllDrivers"

const L_Text_Dbg_Msg04_Text        = "In function ListDrivers"

const L_Text_Dbg_Msg05_Text        = "In function ParseCommandLine"



main



'

' Main execution starts here

'

sub main



    dim iAction

    dim iRetval

    dim strServer

    dim strModel

    dim strPath

    dim uVersion

    dim strEnvironment

    dim strInfFile

    dim strUser

    dim strPassword



    '

    ' Abort if the host is not cscript

    '

    if not IsHostCscript() then



        call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _

                          L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _

                          L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)



        wscript.quit



    end if



    '

    ' Get command line parameters

    '

    iRetval = ParseCommandLine(iAction, strServer, strModel, strPath, uVersion, _

                               strEnvironment, strInfFile, strUser, strPAssword)



    if iRetval = kErrorSuccess  then



        select case iAction



            case kActionAdd

                iRetval = AddDriver(strServer, strModel, strPath, uVersion, _

                                    strEnvironment, strInfFile, strUser, strPassword)



            case kActionDel

                iRetval = DelDriver(strServer, strModel, uVersion, strEnvironment, strUser, strPassword)



            case kActionDelAll

                iRetval = DelAllDrivers(strServer, strUser, strPassword)



            case kActionList

                iRetval = ListDrivers(strServer, strUser, strPassword)



            case kActionUnknown

                Usage(true)

                exit sub



            case else

                Usage(true)

                exit sub



        end select



    end if



end sub



'

' Add a driver

'

function AddDriver(strServer, strModel, strFilePath, uVersion, strEnvironment, strInfFile, strUser, strPassword)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text



    dim oDriver

    dim oService

    dim iResult

    dim uResult



    '

    ' Initialize return value

    '

    iResult = kErrorFailure



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oDriver = oService.Get("Win32_PrinterDriver")



    else



        AddDriver = kErrorFailure



        exit function



    end if



    '

    ' Check if Get was successful

    '

    if Err.Number = kErrorSuccess then



        oDriver.Name              = strModel

        oDriver.SupportedPlatform = strEnvironment

        oDriver.Version           = uVersion

        oDriver.FilePath          = strFilePath

        oDriver.InfName           = strInfFile



        uResult = oDriver.AddPrinterDriver(oDriver)



        if Err.Number = kErrorSuccess then



            if uResult = kErrorSuccess then



                wscript.echo L_Text_Msg_General01_Text & L_Space_Text & oDriver.Name



                iResult = kErrorSuccess



            else



                wscript.echo L_Text_Msg_General02_Text & L_Space_Text & strModel & L_Space_Text _

                             & L_Text_Error_General03_Text & L_Space_Text & uResult



            end if



        else



            wscript.echo L_Text_Msg_General02_Text & L_Space_Text & strModel & L_Space_Text _

                         & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        end if



    else



        wscript.echo L_Text_Msg_General02_Text & L_Space_Text & strModel & L_Space_Text _

                     & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



    end if



    AddDriver = iResult



end function



'

' Delete a driver

'

function DelDriver(strServer, strModel, uVersion, strEnvironment, strUser, strPassword)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text



    dim oDriver

    dim oService

    dim iResult

    dim strObject



    '

    ' Initialize return value

    '

    iResult = kErrorFailure



    '

    ' Build the key that identifies the driver instance.

    '

    strObject = strModel & "," & CStr(uVersion) & "," & strEnvironment



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oDriver = oService.Get("Win32_PrinterDriver.Name='" & strObject & "'")



    else



        DelDriver = kErrorFailure



        exit function



    end if



    '

    ' Check if Get was successful

    '

    if Err.Number = kErrorSuccess then



        '

        ' Delete the printer driver instance

        '

        oDriver.Delete_



        if Err.Number = kErrorSuccess then



            wscript.echo L_Text_Msg_General04_Text & L_Space_Text & oDriver.Name



            iResult = kErrorSuccess



        else



            wscript.echo L_Text_Msg_General03_Text & L_Space_Text & strModel & L_Space_Text _

                         & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                         & L_Space_Text & Err.Description



            call LastError()



        end if



    else



        wscript.echo L_Text_Msg_General03_Text & L_Space_Text & strModel & L_Space_Text _

                     & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                     & L_Space_Text & Err.Description



    end if



    DelDriver = iResult



end function



'

' Delete all drivers

'

function DelAllDrivers(strServer, strUser, strPassword)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text



    dim Drivers

    dim oDriver

    dim oService

    dim iResult

    dim iTotal

    dim iTotalDeleted

    dim vntDependentFiles

    dim strDriverName



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set Drivers = oService.InstancesOf("Win32_PrinterDriver")



    else



        DelAllDrivers = kErrorFailure



        exit function



    end if



    if Err.Number <> kErrorSuccess then



        wscript.echo L_Text_Msg_General05_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        DelAllDrivers = kErrorFailure



        exit function



    end if



    iTotal = 0

    iTotalDeleted = 0



    for each oDriver in Drivers



        iTotal = iTotal + 1



        wscript.echo

        wscript.echo L_Text_Msg_General08_Text

        wscript.echo L_Text_Msg_Driver01_Text & L_Space_Text & strServer

        wscript.echo L_Text_Msg_Driver02_Text & L_Space_Text & oDriver.Name

        wscript.echo L_Text_Msg_Driver03_Text & L_Space_Text & oDriver.Version

        wscript.echo L_Text_Msg_Driver04_Text & L_Space_Text & oDriver.SupportedPlatform



        strDriverName = oDriver.Name



        '

        ' Example of how to delete an instance of a printer driver

        '

        oDriver.Delete_



        if Err.Number = kErrorSuccess then



            wscript.echo L_Text_Msg_General04_Text & L_Space_Text & oDriver.Name



            iTotalDeleted = iTotalDeleted + 1



        else



            '

            ' We cannot use oDriver.Name to display the driver name, because the SWbemLastError

            ' that the function LastError() looks at would be overwritten. For that reason we

            ' use strDriverName for accessing the driver name

            '

            wscript.echo L_Text_Msg_General03_Text & L_Space_Text & strDriverName & L_Space_Text _

                         & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                         & L_Space_Text & Err.Description



            '

            ' Try getting extended error information

            '

            call LastError()



            Err.Clear



        end if



    next



    wscript.echo L_Empty_Text

    wscript.echo L_Text_Msg_General06_Text & L_Space_Text & iTotal

    wscript.echo L_Text_Msg_General07_Text & L_Space_Text & iTotalDeleted



    DelAllDrivers = kErrorSuccess



end function



'

' List drivers

'

function ListDrivers(strServer, strUser, strPassword)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text



    dim Drivers

    dim oDriver

    dim oService

    dim iResult

    dim iTotal

    dim vntDependentFiles



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set Drivers = oService.InstancesOf("Win32_PrinterDriver")



    else



        ListDrivers = kErrorFailure



        exit function



    end if



    if Err.Number <> kErrorSuccess then



        wscript.echo L_Text_Msg_General05_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        ListDrivers = kErrorFailure



        exit function



    end if



    iTotal = 0



    for each oDriver in Drivers



        iTotal = iTotal + 1



        wscript.echo

        wscript.echo L_Text_Msg_Driver01_Text & L_Space_Text & strServer

        wscript.echo L_Text_Msg_Driver02_Text & L_Space_Text & oDriver.Name

        wscript.echo L_Text_Msg_Driver03_Text & L_Space_Text & oDriver.Version

        wscript.echo L_Text_Msg_Driver04_Text & L_Space_Text & oDriver.SupportedPlatform

        wscript.echo L_Text_Msg_Driver05_Text & L_Space_Text & oDriver.MonitorName

        wscript.echo L_Text_Msg_Driver06_Text & L_Space_Text & oDriver.DriverPath

        wscript.echo L_Text_Msg_Driver07_Text & L_Space_Text & oDriver.DataFile

        wscript.echo L_Text_Msg_Driver08_Text & L_Space_Text & oDriver.ConfigFile

        wscript.echo L_Text_Msg_Driver09_Text & L_Space_Text & oDriver.HelpFile



        vntDependentFiles = oDriver.DependentFiles



        '

        ' If there are no dependent files, the method will set DependentFiles to

        ' an empty variant, so we check if the variant is an array of variants

        '

        if VarType(vntDependentFiles) = (vbArray + vbVariant) then



            PrintDepFiles oDriver.DependentFiles



        end if



        Err.Clear



    next



    wscript.echo L_Empty_Text

    wscript.echo L_Text_Msg_General06_Text & L_Space_Text & iTotal



    ListDrivers = kErrorSuccess



end function



'

' Prints the contents of an array of variants

'

sub PrintDepFiles(Param)



   on error resume next



   dim iIndex



   iIndex = LBound(Param)



   if Err.Number = 0 then



      wscript.echo L_Text_Msg_Driver10_Text



      for iIndex = LBound(Param) to UBound(Param)



          wscript.echo L_Space_Text & Param(iIndex)



      next



   else



        wscript.echo L_Text_Msg_General09_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



   end if



end sub



'

' Debug display helper function

'

sub DebugPrint(uFlags, strString)



    if gDebugFlag = true then



        if uFlags = kDebugTrace then



            wscript.echo L_Debug_Text & L_Space_Text & strString



        end if



        if uFlags = kDebugError then



            if Err <> 0 then



                wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _

                             & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                             & L_Space_Text & Err.Description



            end if



        end if



    end if



end sub



'

' Parse the command line into its components

'

function ParseCommandLine(iAction, strServer, strModel, strPath, uVersion, _

                          strEnvironment, strInfFile, strUser, strPassword)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg05_Text



    dim oArgs

    dim iIndex



    iAction = kActionUnknown

    iIndex = 0



    set oArgs = wscript.Arguments



    while iIndex < oArgs.Count



        select case oArgs(iIndex)



            case "-a"

                iAction = kActionAdd



            case "-d"

                iAction = kActionDel



            case "-l"

                iAction = kActionList



            case "-x"

                iAction = kActionDelAll



            case "-s"

                iIndex = iIndex + 1

                strServer = RemoveBackslashes(oArgs(iIndex))



            case "-m"

                iIndex = iIndex + 1

                strModel = oArgs(iIndex)



            case "-h"

                iIndex = iIndex + 1

                strPath = oArgs(iIndex)



            case "-v"

                iIndex = iIndex + 1

                uVersion = oArgs(iIndex)



            case "-e"

                iIndex = iIndex + 1

                strEnvironment = oArgs(iIndex)



            case "-i"

                iIndex = iIndex + 1

                strInfFile = oArgs(iIndex)



            case "-u"

                iIndex = iIndex + 1

                strUser = oArgs(iIndex)



            case "-w"

                iIndex = iIndex + 1

                strPassword = oArgs(iIndex)



            case "-?"

                Usage(true)

                exit function



            case else

                Usage(true)

                exit function



        end select



        iIndex = iIndex + 1



    wend



    if Err.Number <> 0 then



        wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description



        ParseCommandLine = kErrorFailure



    else



        ParseCommandLine = kErrorSuccess



    end if



end  function



'

' Display command usage.

'

sub Usage(bExit)



    wscript.echo L_Help_Help_General01_Text

    wscript.echo L_Help_Help_General02_Text

    wscript.echo L_Help_Help_General03_Text

    wscript.echo L_Help_Help_General04_Text

    wscript.echo L_Help_Help_General05_Text

    wscript.echo L_Help_Help_General06_Text

    wscript.echo L_Help_Help_General07_Text

    wscript.echo L_Help_Help_General08_Text

    wscript.echo L_Help_Help_General09_Text

    wscript.echo L_Help_Help_General10_Text

    wscript.echo L_Help_Help_General11_Text

    wscript.echo L_Help_Help_General12_Text

    wscript.echo L_Help_Help_General13_Text

    wscript.echo L_Help_Help_General14_Text

    wscript.echo L_Help_Help_General15_Text

    wscript.echo L_Help_Help_General16_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General17_Text

    wscript.echo L_Help_Help_General18_Text

    wscript.echo L_Help_Help_General19_Text

    wscript.echo L_Help_Help_General20_Text

    wscript.echo L_Help_Help_General21_Text

    wscript.echo L_Help_Help_General22_Text

    wscript.echo L_Help_Help_General23_Text

    wscript.echo L_Help_Help_General24_Text

    wscript.echo L_Help_Help_General25_Text

    wscript.echo L_Help_Help_General26_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General27_Text

    wscript.echo L_Help_Help_General28_Text

    wscript.echo L_Help_Help_General29_Text

    wscript.echo L_Help_Help_General30_Text

    wscript.echo L_Help_Help_General31_Text



    if bExit then



        wscript.quit(1)



    end if



end sub



'

' Determines which program is being used to run this script.

' Returns true if the script host is cscript.exe

'

function IsHostCscript()



    on error resume next



    dim strFullName

    dim strCommand

    dim i, j

    dim bReturn



    bReturn = false



    strFullName = WScript.FullName



    i = InStr(1, strFullName, ".exe", 1)



    if i <> 0 then



        j = InStrRev(strFullName, "\", i, 1)



        if j <> 0 then



            strCommand = Mid(strFullName, j+1, i-j-1)



            if LCase(strCommand) = "cscript" then



                bReturn = true



            end if



        end if



    end if



    if Err <> 0 then



        wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



    end if



    IsHostCscript = bReturn



end function



'

' Retrieves extended information about the last error that occurred

' during a WBEM operation. The methods that set an SWbemLastError

' object are GetObject, PutInstance, DeleteInstance

'

sub LastError()



    on error resume next



    dim oError



    set oError = CreateObject("WbemScripting.SWbemLastError")



    if Err = kErrorSuccess then



        wscript.echo L_Operation_Text            & L_Space_Text & oError.Operation

        wscript.echo L_Provider_Text             & L_Space_Text & oError.ProviderName

        wscript.echo L_Description_Text          & L_Space_Text & oError.Description

        wscript.echo L_Text_Error_General03_Text & L_Space_Text & oError.StatusCode



    end if



end sub



'

' Connects to the WMI service on a server. oService is returned as a service

' object (SWbemServices)

'

function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)



    on error resume next



    dim oLocator

    dim bResult



    oService = null



    bResult  = false



    set oLocator = CreateObject("WbemScripting.SWbemLocator")



    if Err = kErrorSuccess then



        set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)



        if Err = kErrorSuccess then



            bResult = true



            oService.Security_.impersonationlevel = 3



            '

            ' Required to perform administrative tasks on the spooler service

            '

            oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege"



            Err.Clear



        else



            wscript.echo L_Text_Msg_General11_Text & L_Space_Text & L_Error_Text _

                         & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                         & Err.Description



        end if



    else



        wscript.echo L_Text_Msg_General10_Text & L_Space_Text & L_Error_Text _

                     & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                     & Err.Description



    end if



    WmiConnect = bResult



end function



'

' Remove leading "\\" from server name

'

function RemoveBackslashes(strServer)



    dim strRet



    strRet = strServer



    if Left(strServer, 2) = "\\" and Len(strServer) > 2 then



        strRet = Mid(strServer, 3)



    end if



    RemoveBackslashes = strRet



end function





'' SIG '' Begin signature block

'' SIG '' MIIhWwYJKoZIhvcNAQcCoIIhTDCCIUgCAQExDzANBglg

'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor

'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC

'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg

'' SIG '' mlUP3KOnaFb8M6G5M6AlnOFVzMN6IRQb2eB8kdGCjCig

'' SIG '' ggrlMIIFBjCCA+6gAwIBAgITMwAAAu0sReTBRc9IRAAA

'' SIG '' AAAC7TANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UEBhMC

'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT

'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw

'' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv

'' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTAeFw0yMDEyMTUy

'' SIG '' MTI5MTRaFw0yMTEyMDIyMTI5MTRaMHAxCzAJBgNVBAYT

'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH

'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y

'' SIG '' cG9yYXRpb24xGjAYBgNVBAMTEU1pY3Jvc29mdCBXaW5k

'' SIG '' b3dzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC

'' SIG '' AQEA1/mOTaZIAMdvXd/Uq3DhEpREugbVndaHjzafKgYv

'' SIG '' XqdiboW0UGKgYBgiM+f66zVMFxocrP4gxe33290l7UFD

'' SIG '' 6iVt6t7BkJDi91lzCGFZMsjlKfRwvDC64ucGyhaS64N5

'' SIG '' uQlvjwH8a8YjNwPwfF2IOU8r1MStiYVtBS6cQPAGT9HK

'' SIG '' FsuKOkieubIYQMwh6F05jPheTP0NvbxlISpy9LEbUYoB

'' SIG '' bbOjZ+GJbjOil7USxnbYK+bEQ+qSCnrHfolbLX5Ajmk3

'' SIG '' uFC11bjuJxA9opD6cmwi2QAs+V4HFuDjAhvJojb8lP/v

'' SIG '' qiZRe4mRvp0xsaQWI2y/Jv5czI7ZBiI6v+0d1QIDAQAB

'' SIG '' o4IBgjCCAX4wHwYDVR0lBBgwFgYKKwYBBAGCNwoDBgYI

'' SIG '' KwYBBQUHAwMwHQYDVR0OBBYEFBX5vmhcu8syt5gpQoPf

'' SIG '' BQEaWSozMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRN

'' SIG '' aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0

'' SIG '' ZWQxFjAUBgNVBAUTDTIyOTg3OSs0NjMzNDQwHwYDVR0j

'' SIG '' BBgwFoAUqSkCOY4WxJd4zZD5nk+a4XxVr1MwVAYDVR0f

'' SIG '' BE0wSzBJoEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQu

'' SIG '' Y29tL3BraW9wcy9jcmwvTWljV2luUHJvUENBMjAxMV8y

'' SIG '' MDExLTEwLTE5LmNybDBhBggrBgEFBQcBAQRVMFMwUQYI

'' SIG '' KwYBBQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv

'' SIG '' bS9wa2lvcHMvY2VydHMvTWljV2luUHJvUENBMjAxMV8y

'' SIG '' MDExLTEwLTE5LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqG

'' SIG '' SIb3DQEBCwUAA4IBAQAeDDbpx7pwpcs42ObZbp01JdBL

'' SIG '' Ul1/8L2+4IaJVeTRbjYc5hRcGbh3wjkNLBP90gXISlh8

'' SIG '' ZsC7k22x+k89M8JnDPp47a81uAE0kO3eEq9M90XvusY1

'' SIG '' B+2Q2N62wRJAjlvrj8jsX5RPGD69Hf9Tl0+TXE2aZ+FU

'' SIG '' o1vH9WsKRHorLLASNzOO+VrSx+iPN4ht2sHppvFK749M

'' SIG '' fSiTpnwMv1YTQ9gj/AiT+Htn+DYj8k/siV96lsHRhgE8

'' SIG '' xuTSyl306rKlfiuoCI/Q2o1vPpbPMz30r2q9Yd3823uc

'' SIG '' uN9CoFTpeOjSnvjz7uLjnrxDSSoKopMFZgvnGGcLWNEV

'' SIG '' nlxc/H+/MIIF1zCCA7+gAwIBAgIKYQd2VgAAAAAACDAN

'' SIG '' BgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzAR

'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v

'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv

'' SIG '' bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm

'' SIG '' aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTExMDE5MTg0

'' SIG '' MTQyWhcNMjYxMDE5MTg1MTQyWjCBhDELMAkGA1UEBhMC

'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT

'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw

'' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv

'' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTCCASIwDQYJKoZI

'' SIG '' hvcNAQEBBQADggEPADCCAQoCggEBAN0Mu6LkLgnj58X3

'' SIG '' lmm8ACG9aTMz760Ey1SA7gaDu8UghNn30ovzOLCrpK0t

'' SIG '' fGJ5Bf/jSj8ENSBw48Tna+CcwDZ16Yox3Y1w5dw3tXRG

'' SIG '' lihbh2AjLL/cR6Vn91EnnnLrB6bJuR47UzV85dPsJ7mH

'' SIG '' HP65ySMJb6hGkcFuljxB08ujP10Cak3saR8lKFw2//1D

'' SIG '' FQqU4Bm0z9/CEuLCWyfuJ3gwi1sqCWsiiVNgFizAaB1T

'' SIG '' uuxJ851hjIVoCXNEXX2iVCvdefcVzzVdbBwrXM68nCOL

'' SIG '' b261Jtk2E8NP1ieuuTI7QZIs4cfNd+iqVE73XAsEh2W0

'' SIG '' QxiosuBtGXfsWiT6SAMCAwEAAaOCAUMwggE/MBAGCSsG

'' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSpKQI5jhbEl3jN

'' SIG '' kPmeT5rhfFWvUzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi

'' SIG '' AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB

'' SIG '' /zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoY

'' SIG '' xDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p

'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNS

'' SIG '' b29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUH

'' SIG '' AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p

'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1

'' SIG '' dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOC

'' SIG '' AgEAFPx8cVGlecJusu85Prw8Ug9uKz8QE3P+qGjQSKY0

'' SIG '' TYqWBSbuMUaQYXnW/zguRWv0wOUouNodj4rbCdcax0wK

'' SIG '' NmZqjOwb1wSQqBgXpJu54kAyNnbEwVrGv+QEwOoW06zD

'' SIG '' aO9irN1UbFAwWKbrfP6Up06O9Ox8hnNXwlIhczRa86OK

'' SIG '' VsgE2gcJ7fiL4870fo6u8PYLigj7P8kdcn9TuOu+Y+Dj

'' SIG '' PTFlsIHl8qzNFqSfPaixm8JC0JCEX1Qd/4nquh1HkG+w

'' SIG '' c05Bn0CfX+WhKrIRkXOKISjwzt5zOV8+q1xg7N8DEKjT

'' SIG '' Cen09paFtn9RiGZHGY2isBI9gSpoBXe7kUxie7bBB8e6

'' SIG '' eoc0Aw5LYnqZ6cr8zko3yS2kV3wc/j3cuA9a+tbEswKF

'' SIG '' Ajrqs9lu5GkhN96B0fZ1GQVn05NXXikbOcjuLeHN5EVz

'' SIG '' W9DSznqrFhmCRljQXp2Bs2evbDXyvOU/JOI1ogp1BvYY

'' SIG '' VpnUeCzRBRvr0IgBnaoQ8QXfun4sY7cGmyMhxPl4bOJY

'' SIG '' FwY2K5ESA8yk2fItuvmUnUDtGEXxzopcaz6rA9NwGCoK

'' SIG '' auBfR9HVYwoy8q/XNh8qcFrlQlkIcUtXun6DgfAhPPQc

'' SIG '' wcW5kJMOiEWThumxIJm+mMvFlaRdYtagYwggvXUQd309

'' SIG '' 80W5n5efy1eAbzOpBM93pGIcWX4xghXOMIIVygIBATCB

'' SIG '' nDCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp

'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT

'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwGA1UEAxMl

'' SIG '' TWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlvbiBQQ0Eg

'' SIG '' MjAxMQITMwAAAu0sReTBRc9IRAAAAAAC7TANBglghkgB

'' SIG '' ZQMEAgEFAKCCAQQwGQYJKoZIhvcNAQkDMQwGCisGAQQB

'' SIG '' gjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC

'' SIG '' ARUwLwYJKoZIhvcNAQkEMSIEIHzQ3S/HJfQsF18gElR1

'' SIG '' iwpOGlHP8JWRjg0YO5l6qKz2MDwGCisGAQQBgjcKAxwx

'' SIG '' LgwseHplR2pxSHBHS3N5WjQ4S1RycXpYVjlVb2NNeHVj

'' SIG '' SFVScjFMbjJEWDBmUT0wWgYKKwYBBAGCNwIBDDFMMEqg

'' SIG '' JIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABv

'' SIG '' AHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v

'' SIG '' d2luZG93czANBgkqhkiG9w0BAQEFAASCAQAouw8zx3ss

'' SIG '' cH8sWFgoqxQtP1wQgiHZ030Nb+Zb0ehEYUPZtRSCab5q

'' SIG '' OEOX8u/T1LUjpbpHHz5TDyfKkHQNSvgIuBrxkYuA5Y6O

'' SIG '' KMOIF27Jh6p5QZhbxD3OMRQMv95AoyACcS2vGqyOh6I1

'' SIG '' knqZvK8kxoGLb8xpupZVsKY1vC4bQY1rkDf0Tpy3xvKd

'' SIG '' PPScXazdIhADPRa60i5MrM98ZbudmRDe/aUl9ExDLw1A

'' SIG '' JDDP3VqnbMXrg3WeMCL4OeQClAg5oJfcutuqtthNFVb/

'' SIG '' EPRFLFs8FIMViKIMHkRznI5I/i60wnBg1a3t7pQ98WLT

'' SIG '' +YBxTFhATpaO8n9pNYdWtF2joYIS+jCCEvYGCisGAQQB

'' SIG '' gjcDAwExghLmMIIS4gYJKoZIhvcNAQcCoIIS0zCCEs8C

'' SIG '' AQMxDzANBglghkgBZQMEAgEFADCCAVgGCyqGSIb3DQEJ

'' SIG '' EAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMBMDEw

'' SIG '' DQYJYIZIAWUDBAIBBQAEIJzPIzMARHtCj8gCjC3LvdkJ

'' SIG '' o3uq4usNtg7jwib7HykOAgZgfmMzKpYYEjIwMjEwNTA4

'' SIG '' MDUxMzU0LjIyWjAEgAIB9KCB2KSB1TCB0jELMAkGA1UE

'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV

'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD

'' SIG '' b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IEly

'' SIG '' ZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQL

'' SIG '' Ex1UaGFsZXMgVFNTIEVTTjpEMDgyLTRCRkQtRUVCQTEl

'' SIG '' MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy

'' SIG '' dmljZaCCDkowggT5MIID4aADAgECAhMzAAABQa9/Updc

'' SIG '' 8txFAAAAAAFBMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV

'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD

'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg

'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU

'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIwMTAxNTE3Mjgy

'' SIG '' N1oXDTIyMDExMjE3MjgyN1owgdIxCzAJBgNVBAYTAlVT

'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS

'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y

'' SIG '' YXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5k

'' SIG '' IE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhh

'' SIG '' bGVzIFRTUyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNV

'' SIG '' BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw

'' SIG '' ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDy

'' SIG '' Ksuovbx1qX48lSZQk7C9if+w4ITNDNnKP3hdsU+1GEOE

'' SIG '' +NqC+8o6/UaAyg65e+Skze4zkTru/I4I/GqFMDOrsCTf

'' SIG '' OQRdcG/smgzxebTHlRycCSlSISjR7JxGXpudggHcqVlb

'' SIG '' e7Pglza/YVXQoIaQuu+p8o/xX+LaFXI3zng56NanHzAZ

'' SIG '' RrMzgJhRWjByAQNzvo5j5drhbbsMJkmbZ/2iXgGNIv5v

'' SIG '' Yv9Pyf8sQaSdpTHBJBM3UtAK364EMIBJ3pVBHkIsslW3

'' SIG '' owEvRbU2VpbEQAnCUh3IGdLWKEu9GDWNz8pRl7SxEV0P

'' SIG '' d+EquM9pzeGjLTTsW+voajRYnimvasl1AgMBAAGjggEb

'' SIG '' MIIBFzAdBgNVHQ4EFgQULSg/LG4ukP1FcGv1zw07QQUS

'' SIG '' xsQwHwYDVR0jBBgwFoAU1WM6XIoxkPNDe3xGG8UzaFqF

'' SIG '' bVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5t

'' SIG '' aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWlj

'' SIG '' VGltU3RhUENBXzIwMTAtMDctMDEuY3JsMFoGCCsGAQUF

'' SIG '' BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5t

'' SIG '' aWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQ

'' SIG '' Q0FfMjAxMC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADAT

'' SIG '' BgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsF

'' SIG '' AAOCAQEAUnrfIn3YKGoKCl7EPjyiS+Ia4LiKQ2y+bCUJ

'' SIG '' J63WwWm8kTMskHxxMXjPipBPPwCxC1x7DqYBWZAJgO71

'' SIG '' /l57XXFePUvAdixkadKz859G6XVUqZjnU5Cmq8rk78K3

'' SIG '' h+zQhuXOjx7I4snKBOT3tpdUDhTOrwZuUvstDleLABjj

'' SIG '' jow4Auc1cWj8qr22/OKnBjVhxGf+eUxD5v3Y6IsuYdUy

'' SIG '' LbABQ5GIoW9oB9haOFB37aocsyx2k2W7AFtZ7sUXkAGw

'' SIG '' OjQdE4xbIKDF0tDe+qvcMxIfdlYqKKsWy9YmZyF9k8ZE

'' SIG '' 5vCqzO9Jc8WY8Fn2j56v7hSgtX7nQZaedCTLsdWAuTCC

'' SIG '' BnEwggRZoAMCAQICCmEJgSoAAAAAAAIwDQYJKoZIhvcN

'' SIG '' AQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX

'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD

'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNV

'' SIG '' BAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1

'' SIG '' dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1

'' SIG '' MDcwMTIxNDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNV

'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx

'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm

'' SIG '' MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB

'' SIG '' IDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK

'' SIG '' AoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF

'' SIG '' ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkT

'' SIG '' jnxhMFmxMEQP8WCIhFRDDNdNuDgIs0Ldk6zWczBXJoKj

'' SIG '' RQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSxz5NM

'' SIG '' ksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tk

'' SIG '' iVBisV39dx898Fd1rL2KQk1AUdEPnAY+Z3/1ZsADlkR+

'' SIG '' 79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16HgcsOmZzTzn

'' SIG '' L0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMB

'' SIG '' AAGjggHmMIIB4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNV

'' SIG '' HQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqFbVUwGQYJKwYB

'' SIG '' BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG

'' SIG '' MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZW

'' SIG '' y4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmg

'' SIG '' R4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j

'' SIG '' cmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYt

'' SIG '' MjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcw

'' SIG '' AoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j

'' SIG '' ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQw

'' SIG '' gaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYBBAGCNy4DMIGB

'' SIG '' MD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29m

'' SIG '' dC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAG

'' SIG '' CCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAFAAbwBs

'' SIG '' AGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0G

'' SIG '' CSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2j

'' SIG '' oSFvs+umzPUxvs8F4qn++ldtGTCzwsVmyWrf9efweL3H

'' SIG '' qJ4l4/m87WtUVwgrUYJEEvu5U4zM9GASinbMQEBBm9xc

'' SIG '' F/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFS

'' SIG '' AK84Dxf1L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WW

'' SIG '' j1kpvLb9BOFwnzJKJ/1Vry/+tuWOM7tiX5rbV0Dp8c6Z

'' SIG '' ZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32W

'' SIG '' apB4pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsi

'' SIG '' OCC1JeVk7Pf0v35jWSUPei45V3aicaoGig+JFrphpxHL

'' SIG '' mtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x

'' SIG '' 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5

'' SIG '' u+zGy9iCtHLNHfS4hQEegPsbiSpUObJb2sgNVZl6h3M7

'' SIG '' COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKnQqLJ

'' SIG '' zxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7c

'' SIG '' RDyXUHHXodLFVeNp3lfB0d4wwP3M5k37Db9dT+mdHhk4

'' SIG '' L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvTX4/edIhJ

'' SIG '' EqGCAtQwggI9AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UE

'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV

'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD

'' SIG '' b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IEly

'' SIG '' ZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQL

'' SIG '' Ex1UaGFsZXMgVFNTIEVTTjpEMDgyLTRCRkQtRUVCQTEl

'' SIG '' MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy

'' SIG '' dmljZaIjCgEBMAcGBSsOAwIaAxUAquW/KbUKq4ihByvO

'' SIG '' dwu+QPValQOggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET

'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk

'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0

'' SIG '' aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt

'' SIG '' cCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAORAm/Mw

'' SIG '' IhgPMjAyMTA1MDgxMzExMTVaGA8yMDIxMDUwOTEzMTEx

'' SIG '' NVowdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA5ECb8wIB

'' SIG '' ADAHAgEAAgIRazAHAgEAAgISsTAKAgUA5EHtcwIBADA2

'' SIG '' BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAow

'' SIG '' CAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEB

'' SIG '' BQUAA4GBAGhE8ol24JHjifn/UhwpYqYt1p4EqxlvJeoN

'' SIG '' 9ejBlaZ72SIrnXGIzJf2iw5l4ukbFDCgaP20Aum/w1Ja

'' SIG '' MjauPQSzWuFE9lRjvtM/mSYqBbwfdauV1vHUi9hF5bc+

'' SIG '' EvmrC6TFbWJZhj+JYzwCu6a44W5DNUIJVeodXtjpuZQF

'' SIG '' xlqeMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMx

'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl

'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh

'' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh

'' SIG '' bXAgUENBIDIwMTACEzMAAAFBr39Sl1zy3EUAAAAAAUEw

'' SIG '' DQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN

'' SIG '' BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQga7qD

'' SIG '' Wcw7XfKhyrHnydYpykB8/9NObkqKThdBWLUBeS8wgfoG

'' SIG '' CyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCBRPwE8jOpz

'' SIG '' dJ5wdE8soG1bS846dP7vyFpaj5dzFV6t3jCBmDCBgKR+

'' SIG '' MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n

'' SIG '' dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN

'' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p

'' SIG '' Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB

'' SIG '' Qa9/Updc8txFAAAAAAFBMCIEIB0iBQtYium/2WJ1h0ln

'' SIG '' 8ew6ywnmewHOQBiaICypoCkaMA0GCSqGSIb3DQEBCwUA

'' SIG '' BIIBAGb9tdLLtOcDkLNXfNzEootqisUqy6wrMav8ZpTn

'' SIG '' 0hbCczIP/msuHWX9aRrEAef1QnwV2OfTdYJOhyKFslT5

'' SIG '' UNUoZef+tlEd3tq2Iena7bMBckmpMyd87ndIkVqncmS6

'' SIG '' GVWr9+Wwk2axg0PBmyxtKuKH/Gd9B1NV8rBizjQ080QY

'' SIG '' 4jx4pTLujW6+Ii7MVV8bsENw2E0JUBQIxQ9Uf7aWI1sp

'' SIG '' 7dnC8U5JFvMEoGVhYfpGxjx8pQowa2x7Cz2XczT/ywE8

'' SIG '' TE6zUtahnsC6XT43Z27EktALaNAKNLf5TaXFJ0fsJfR6

'' SIG '' u4ztIqbEVbJzwypAIEzRKbz1k5EsKRDWbqgqMAg=

'' SIG '' End signature block