' Windows Installer utility to execute SQL statements against an installer database
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the script-driven database queries and updates
'
Option Explicit

Const msiOpenDatabaseModeReadOnly = 0
Const msiOpenDatabaseModeTransact = 1

Dim argNum, argCount:argCount = Wscript.Arguments.Count
If (argCount < 2) Then
	Wscript.Echo "Windows Installer utility to execute SQL queries against an installer database." &_
		vbLf & " The 1st argument specifies the path to the MSI database, relative or full path" &_
		vbLf & " Subsequent arguments specify SQL queries to execute - must be in double quotes" &_
		vbLf & " SELECT queries will display the rows of the result list specified in the query" &_
		vbLf & " Binary data columns selected by a query will not be displayed" &_
		vblf &_
		vblf & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Scan arguments for valid SQL keyword and to determine if any update operations
Dim openMode : openMode = msiOpenDatabaseModeReadOnly
For argNum = 1 To argCount - 1
	Dim keyword : keyword = Wscript.Arguments(argNum)
	Dim keywordLen : keywordLen = InStr(1, keyword, " ", vbTextCompare)
	If (keywordLen) Then keyword = UCase(Left(keyword, keywordLen - 1))
	If InStr(1, "UPDATE INSERT DELETE CREATE ALTER DROP", keyword, vbTextCompare) Then
		openMode = msiOpenDatabaseModeTransact
	ElseIf keyword <> "SELECT" Then
		Fail "Invalid SQL statement type: " & keyword
	End If
Next

' Connect to Windows installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open database
Dim databasePath:databasePath = Wscript.Arguments(0)
Dim database : Set database = installer.OpenDatabase(databasePath, openMode) : CheckError

' Process SQL statements
Dim query, view, record, message, rowData, columnCount, delim, column
For argNum = 1 To argCount - 1
	query = Wscript.Arguments(argNum)
	Set view = database.OpenView(query) : CheckError
	view.Execute : CheckError
	If Ucase(Left(query, 6)) = "SELECT" Then
		Do
			Set record = view.Fetch
			If record Is Nothing Then Exit Do
			columnCount = record.FieldCount
			rowData = Empty
			delim = "  "
			For column = 1 To columnCount
				If column = columnCount Then delim = vbLf
				rowData = rowData & record.StringData(column) & delim
			Next
			message = message & rowData
		Loop
	End If
Next
If openMode = msiOpenDatabaseModeTransact Then database.Commit
If Not IsEmpty(message) Then Wscript.Echo message
Wscript.Quit 0

Sub CheckError
	Dim message, errRec
	If Err = 0 Then Exit Sub
	message = Err.Source & " " & Hex(Err) & ": " & Err.Description
	If Not installer Is Nothing Then
		Set errRec = installer.LastErrorRecord
		If Not errRec Is Nothing Then message = message & vbLf & errRec.FormatText
	End If
	Fail message
End Sub

Sub Fail(message)
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIIpigYJKoZIhvcNAQcCoIIpezCCKXcCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' 4Xv5+5ronXWl5cvPsyZzr63fsdqLVPGyNx2CnUPSw9mg
'' SIG '' gg3lMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' SIG '' AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
'' SIG '' ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
'' SIG '' VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
'' SIG '' cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
'' SIG '' 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
'' SIG '' hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
'' SIG '' B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
'' SIG '' UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
'' SIG '' 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
'' SIG '' xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
'' SIG '' YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
'' SIG '' 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
'' SIG '' uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
'' SIG '' 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
'' SIG '' 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
'' SIG '' K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
'' SIG '' O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
'' SIG '' LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
'' SIG '' yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
'' SIG '' 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
'' SIG '' AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
'' SIG '' gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
'' SIG '' X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
'' SIG '' nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
'' SIG '' +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
'' SIG '' /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
'' SIG '' ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
'' SIG '' iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
'' SIG '' RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
'' SIG '' khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
'' SIG '' /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
'' SIG '' FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
'' SIG '' MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
'' SIG '' mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
'' SIG '' cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
'' SIG '' nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
'' SIG '' iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
'' SIG '' kFS+KpYAm5VE9r5kKZZVdzCCByAwggUIoAMCAQICEzMA
'' SIG '' AACG53GUuU3/CfsAAAAAAIYwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjQ1M1oXDTI2MDUwNjE4MjQ1M1owdDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEApH31lbdTfYCtnKM6hm0dcBgl
'' SIG '' L0fUQXvAsjycUQQnTbg9O0ONzUD4l9K0pCaMmLq88Z3P
'' SIG '' NgSZpNFCnR+AfdvW8SZCtaYwDflp/SXnWyEzAGiD9Vps
'' SIG '' OtEgtB7OsFynkTPZ6jk25AYadsClcZA0KaZ36mUTjJ+h
'' SIG '' LS3IBH6U1EJPyB8WiG8amw50S2N9S1Gq3qEZVH9LbizX
'' SIG '' +NmQIFA8hLVTo64uaXuAFcj7Kz7iIRBy18yq6Z7qqyup
'' SIG '' 0n04LK+2+38C+Mandd64RtQ0t9CyuiXwgFcOxz2w/+5v
'' SIG '' 0UDoafmTD4ZWWXy1r56rve3Jqd49/jSkRc2AhelN1Tbr
'' SIG '' XTjfwIS5+DTdPks+jJunosQXEgEbmMFdSutr1M8k4itu
'' SIG '' di0IO10qsFA3HQk167vtm7fWh/JKLEFoA6/Itl3PY8mV
'' SIG '' I4xMDJVCs8bp6s+7UPNDs00gIM9spFtKNegk0xFePz2/
'' SIG '' 4S1hZT4V6YfoycfjJIU9/Mq939rj8FQrj/XjGUrhGnym
'' SIG '' XPkzl9RrK9gRSMMXT/CAiUx+zKb8AL+Bte7KPOMTRhr0
'' SIG '' au06UvS8urm1CeNPe9PSZ6LON3Q+315xOV5kaCC7xQ1A
'' SIG '' qN7Z7fWbIZ8e8HwLIPvKYVxznemImIExu+97NRxj7zJc
'' SIG '' GQk/hzxV+1uc4iHTUAttop9+/6q0O8HSoOFDJmSGOMMC
'' SIG '' AwEAAaOCAb4wggG6MA4GA1UdDwEB/wQEAwIHgDAfBgNV
'' SIG '' HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
'' SIG '' HRMBAf8EAjAAMB0GA1UdDgQWBBRQoxo91TqmkNu2C06l
'' SIG '' TspQcpQogDBUBgNVHREETTBLpEkwRzEtMCsGA1UECxMk
'' SIG '' TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
'' SIG '' dGVkMRYwFAYDVQQFEw0yMzA4NjUrNTA0NTkxMB8GA1Ud
'' SIG '' IwQYMBaAFB6C3w7XjLPXAjSDDtqrrWW5r7jsMGoGA1Ud
'' SIG '' HwRjMGEwX6BdoFuGWWh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFdpbmRv
'' SIG '' d3MlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjQu
'' SIG '' Y3JsMHcGCCsGAQUFBwEBBGswaTBnBggrBgEFBQcwAoZb
'' SIG '' aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
'' SIG '' ZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwQ29kZSUy
'' SIG '' MFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNydDANBgkqhkiG
'' SIG '' 9w0BAQwFAAOCAgEADDlkX+NgsTjRleN8tgJD0V5k5QWc
'' SIG '' rczHYC/AGulvcPtVDcT/LErOmJQvQA6k5XoaoQ1SmY08
'' SIG '' 0Y/+xDcfi877vrnOLFb2H0W+IjWMLI+/fM6KBdNPEQDl
'' SIG '' bydWc+IZy9d5pMlvT3tzgNFpvNuBZZ4YK1dTdzh4o9PU
'' SIG '' tMeMV7+ARlSy+TlcZIh/PpCqrigKbzw6HXPmQ386HBMC
'' SIG '' tDkQAbNdkVw7qHjxEvFwUWf1lAjfwT5Xu2RjIGHHz1kP
'' SIG '' qkRJ+uBnCx77n3SuZmJkJSp2swNgiM78HU8j8H6k0wXl
'' SIG '' JNDJB7YmX3BPfMV1WJTvSdwO6uiu8MUrg6xBoXlcEaBG
'' SIG '' 4WDny6ecTfXBNdSy12ywxdo/DAwU42P7IoB/ZREiCPPb
'' SIG '' wEJoTcds9/+rb6LtNe3sd6RVW9qhImtzjL//uj291F2x
'' SIG '' X9BGLIT405GCAoaWEoGenLSmWcewujxXM7UaJ/iSrMg2
'' SIG '' wI45ozVdFQfeMF8+YXtFVeE6uzVELOUoHwqmasaFxi7k
'' SIG '' 2F/YH6dbTErbCam/8mD6ZijOO+iqSlbLcKM/r8GPpcHz
'' SIG '' 4XEYacSb411dLbeMee04Tv03LU3VeUs7mhPLbTn1Fsyw
'' SIG '' m3L3iidxf+nAXTupyDI+FvH6eEtsbuOQ06Fni29+futP
'' SIG '' H6f8q1SycPjF8LaKe6g8Jvuqm/zGEKMvE5PF76Ixghr9
'' SIG '' MIIa+QIBATB2MF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMDAuBgNVBAMT
'' SIG '' J01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
'' SIG '' Q0EgMjAyNAITMwAAAIbncZS5Tf8J+wAAAAAAhjANBglg
'' SIG '' hkgBZQMEAgEFAKCBqDAZBgkqhkiG9w0BCQMxDAYKKwYB
'' SIG '' BAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgk6JglrqV6v3D
'' SIG '' tnQAQb6e6ZRImgh0mz/ZPyqjprDy/bswWgYKKwYBBAGC
'' SIG '' NwIBDDFMMEqgJIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAA
'' SIG '' VwBpAG4AZABvAHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vd2luZG93czANBgkqhkiG9w0BAQEFAASC
'' SIG '' AgBBQlSXOysr6qbjt9XWDROKX9V3VnmQqk1TKcCzzh4z
'' SIG '' l1Doep88/Vu856UKd4XtCzL41gdjHFGAiGcVfgOvhxLX
'' SIG '' 8gM/mqUvGAKhNhp0ILgY5yyJCDOWfJIsAQR7mIJ72SQW
'' SIG '' HrQbm02rliCCehpgcwAE+cmEaNrxM81WZADfOlzWA8jK
'' SIG '' KLKgg3Wvn46rVnBkKCa3qks3ZqXM7Q0q5cMXmSsomxvu
'' SIG '' EFpH+FQAZ4FFUfbr8zTxtM+yUVtwa48/UazgcoH6B9Ml
'' SIG '' AdSkTnK8sf53jALenoggd0ZlQHw4BIypIG8n5kR15yDM
'' SIG '' apcVyHwsZ+UxsiLuOm+n1MekXvPF6lDmsEEHo0E8EzhH
'' SIG '' aU3UChqUIv0Rx2QpyPZDSmTdOy/MumkupfSAFGixQ1TO
'' SIG '' ZCvs20RhsCLrNhzZ70sAiyk41sWzbyiHB45ELNQYJCG+
'' SIG '' ZkyQxoBbJ2juacDdCkLiLlDDSTqLDBiSJSXOYkx6hB4e
'' SIG '' OcmPd2XuXwWMmJIxYCP3EzzGUN1dQe5LBZvPEwS4tm1q
'' SIG '' olk73RVImF6MWl31TKdkwy2RteUWKBuRqORKZT1mpTBh
'' SIG '' faYAK5xpYUALYefpl8WgUIuHJYnHKQa6Yl/YMbmI32tk
'' SIG '' z+QDqo+9QNYGdEe5HtwEkJYjb49AuCS3Tim6OddDCsWT
'' SIG '' vBgSaA5TsU3OwBMeRIJlz+ULuaGCF60wghepBgorBgEE
'' SIG '' AYI3AwMBMYIXmTCCF5UGCSqGSIb3DQEHAqCCF4YwgheC
'' SIG '' AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0B
'' SIG '' CRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAx
'' SIG '' MA0GCWCGSAFlAwQCAQUABCA8AWZ5hcULVrZSd+/UCLh5
'' SIG '' n+ef0gI3dcUHJCEf8a1FSAIGaXQqQ1a8GBMyMDI2MDEy
'' SIG '' NzAyMTY0OS43ODNaMASAAgH0oIHZpIHWMIHTMQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
'' SIG '' SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNV
'' SIG '' BAsTHm5TaGllbGQgVFNTIEVTTjo1MjFBLTA1RTAtRDk0
'' SIG '' NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
'' SIG '' U2VydmljZaCCEfswggcoMIIFEKADAgECAhMzAAACF3H7
'' SIG '' LqWvAR3qAAEAAAIXMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
'' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
'' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
'' SIG '' ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4
'' SIG '' NDgyM1oXDTI2MTExMzE4NDgyM1owgdMxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
'' SIG '' YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMe
'' SIG '' blNoaWVsZCBUU1MgRVNOOjUyMUEtMDVFMC1EOTQ3MSUw
'' SIG '' IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
'' SIG '' aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
'' SIG '' AgEAwM82sEw+39vYR7iGCIFDnYNhRM+BzF2AYiq5dUpZ
'' SIG '' pJFPRjCcipQ6RUbI+RAYNRApExx5ygrXbaWtuwvqsqAV
'' SIG '' SWbU/W6fecujjILkPqn9pngtWRkfQgbYgvaXALl6PY2y
'' SIG '' OH9f72MD+6AyxQenSpAMdUzY/Qk/jtjsHdFXVBe+tshl
'' SIG '' IkSJ3GZw8VVKqTg3GZElztwbJWNtrhBEvhf6anxMegQM
'' SIG '' JP7tO8/BJ7ITs4/AV3D2bv8eHk81Y+fOmQ8mQ61WLq2w
'' SIG '' ItvlzIT5bzelK9LvEycf5x1lXxAwEw5a7dpS+CKTanht
'' SIG '' v+Q2mwebAybjf9io4k48stTaq1rtcrOiDwddqVm1S9e8
'' SIG '' h1TszXFzjLLvE9EmjnNfIewsY+RChUaHnY4FFwwJEnEv
'' SIG '' /JS76oHT0oGdy7+J60fGOl7A1UoUyAkhpb2Bja+SwSIi
'' SIG '' HbQ4FDyJiLlZ6drZZ84MoJ852JSxM0hBjGO6FZlPO8iu
'' SIG '' Nyk680Di8VnbSNpIdJN+DhlepeTUMBDHqCmd0mVWRWZP
'' SIG '' m1pvgty93asNt/Ng6o4m2dnooWOdM3yKsJaWjyHqic9g
'' SIG '' fTrZBM+PCXqeTaO1oEiaQ+h4w0nHVdV+XSvI2m1yN4ii
'' SIG '' bqjm5HPaAO3OJ+OmNLftNVmr4Z6U2T6pIcLBysoKcDUv
'' SIG '' CqycXj4C/+n1KFBpDGdDMw9gmu8CAwEAAaOCAUkwggFF
'' SIG '' MB0GA1UdDgQWBBRQrN9jlwNOoeE5ZQqnF5x8S1bJQzAf
'' SIG '' BgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBf
'' SIG '' BgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBU
'' SIG '' aW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYI
'' SIG '' KwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8v
'' SIG '' d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
'' SIG '' Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEw
'' SIG '' KDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM
'' SIG '' MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkq
'' SIG '' hkiG9w0BAQsFAAOCAgEARmgFdhB7xIAIHEEg5I/5S+gx
'' SIG '' 67aR6RiW8ZAwtE3mz8o0dyn+pIP+lidNR1IKQQ0r+RjY
'' SIG '' gI9cZ6mbvAyvh3e2q/BV8rjHE3ud9PyYyq32euFgdZ3v
'' SIG '' X4b5QXePWlpBAYrdziR27rHz6WwpH5dZsSypbXDBbQkW
'' SIG '' kNl6g82yTy3AbBbKDXBdzxZsEauaOplatK7Er4dhglKB
'' SIG '' ex8JQ2dMSkSZweCNDXqd9r/9W2VdRZsDJKP/Xc4UyQlV
'' SIG '' sboBotKtYESXFkjwR1HVsH+Q0C69/N5CP/Tq3YgI1ub4
'' SIG '' b9+3MJFKWhJXCcJGFZkcLwUmYwoFg1XLo7DLJdGjrIH1
'' SIG '' jsI2NFXJFQHef6AdRe1ERvYQeqtyrBvxIvR+P/83FNYy
'' SIG '' zx04inUT9TF2AwTOuqCC6Z67oNwR4pEEJyAIEREvkdhj
'' SIG '' jfWcgsk/nGTlfahvNY/SOHrNRKo49KDlccNzRCJQyQ+D
'' SIG '' 59r7/qebNSyQPTfwI9++jEY0Q/UWKVNLhio55GYBseJ9
'' SIG '' 9s7NzkdxOr9Uftp597HEovbA69qGlZ3OpUE3H1RBGDVp
'' SIG '' /FvM2uXTum8LrMkPXx5Ap/kbPASsC9ju9oMCe2IEXO2S
'' SIG '' eD1aD3IqvAOdHFKHg1vpbPUQSWb6g2xfBV30wFcqaPYg
'' SIG '' zcbxPWPyZqK+S8l7zw64aO5hmJ7eQwoMfTu0Vay6r48w
'' SIG '' ggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAV
'' SIG '' MA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0
'' SIG '' aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAx
'' SIG '' ODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
'' SIG '' LVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7V
'' SIG '' gtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/H
'' SIG '' ZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKD
'' SIG '' RLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gm
'' SIG '' U3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36M
'' SIG '' EBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+y
'' SIG '' OSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoF
'' SIG '' VZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJi
'' SIG '' ss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGa
'' SIG '' RnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuqfjbs
'' SIG '' Nkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afo
'' SIG '' mXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9
'' SIG '' ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZk
'' SIG '' i1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y
'' SIG '' 1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV
'' SIG '' 2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0C
'' SIG '' AwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEw
'' SIG '' IwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/
'' SIG '' LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnp
'' SIG '' cjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8G
'' SIG '' CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYD
'' SIG '' VR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAwe
'' SIG '' CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB
'' SIG '' /wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9
'' SIG '' lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
'' SIG '' L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj
'' SIG '' dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoG
'' SIG '' CCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov
'' SIG '' L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
'' SIG '' b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcN
'' SIG '' AQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pc
'' SIG '' FLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHk
'' SIG '' wo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AF
'' SIG '' vonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4
'' SIG '' U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2
'' SIG '' EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8Atq
'' SIG '' gcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mj
'' SIG '' dAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZM
'' SIG '' cm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQE
'' SIG '' cb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2f
'' SIG '' pCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBM
'' SIG '' drVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L
'' SIG '' +DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJ
'' SIG '' C4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU
'' SIG '' 5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/
'' SIG '' 2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDVjCC
'' SIG '' Aj4CAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBP
'' SIG '' cGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGll
'' SIG '' bGQgVFNTIEVTTjo1MjFBLTA1RTAtRDk0NzElMCMGA1UE
'' SIG '' AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIj
'' SIG '' CgEBMAcGBSsOAwIaAxUAabKAFaKt2haUdqkHfFYzAzfg
'' SIG '' SMuggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMDANBgkqhkiG9w0BAQsFAAIFAO0inSIwIhgPMjAy
'' SIG '' NjAxMjcwMjEwNDJaGA8yMDI2MDEyODAyMTA0MlowdDA6
'' SIG '' BgorBgEEAYRZCgQBMSwwKjAKAgUA7SKdIgIBADAHAgEA
'' SIG '' AgIhqjAHAgEAAgISxTAKAgUA7SPuogIBADA2BgorBgEE
'' SIG '' AYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAID
'' SIG '' B6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IB
'' SIG '' AQBlyYlZRc0FuEs/g7969Jr+Mo+VU8z36K6/vSQHzIxF
'' SIG '' Xsh9EeyT2W1nWASkx19lPmGowShapwUu/H4/l5d+6w/s
'' SIG '' FzlvCGifrtixMXftUFDnDZvDMUqKqXpX5OIUjbDohcsB
'' SIG '' 4Z9aaDIZhKx5HUFD448g/oq9c4oziQdpM8zbnz3LmSWi
'' SIG '' D6LqZMrZNvqkXny5j0S27DyHrKO6gPbKK9WcdBAgayAp
'' SIG '' +WPQZA+I/V8Z+bSwwz473nSOlOc5SYhjY+FORz/pQGYO
'' SIG '' wwISJQrJ2M063FKPdh0A1YTA9VyjVQqHNNEB1dIpHfw7
'' SIG '' ImgMeSPClky+rVD5N1h8Jnh6cRMcDx2C8DkuMYIEDTCC
'' SIG '' BAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
'' SIG '' Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
'' SIG '' BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
'' SIG '' A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
'' SIG '' MTACEzMAAAIXcfsupa8BHeoAAQAAAhcwDQYJYIZIAWUD
'' SIG '' BAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B
'' SIG '' CRABBDAvBgkqhkiG9w0BCQQxIgQgaEVoqHs/bWOY3CSI
'' SIG '' 320BSH2gXivhte08eDr5T3R6yYEwgfoGCyqGSIb3DQEJ
'' SIG '' EAIvMYHqMIHnMIHkMIG9BCDQ8lBgPl23yZ0SzUSt5phO
'' SIG '' IegHPywrkNwevxe2k+RaWzCBmDCBgKR+MHwxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACF3H7LqWvAR3q
'' SIG '' AAEAAAIXMCIEIBcRFZRrenDN+QthcrZREDcxkuof0M6o
'' SIG '' 9whq0dZYkbVEMA0GCSqGSIb3DQEBCwUABIICADlIPY94
'' SIG '' 0yiJXJain3OETZl5+Cxz4SZbq5SK4i6DMl4jF+0T+dG5
'' SIG '' WDpemE1ZeLnTOy58vq0/IeQ0CZ53OOcuA+Wa2Y06T27M
'' SIG '' 9L3E4UdNJu0nxv6W4qXyi4kLBBGQjCKIfAI14UiyVWHL
'' SIG '' FOMcLz3TEzSCnCUyS+FJdcvT2oUJ+EG0vcFWb8zq07SW
'' SIG '' /gDjU8TiwVQJpybde5lKGr6wQHEVAhLIUMMGuOqBhYyY
'' SIG '' yoJrjsUoz/DTeWrdD85nfPo4WxC09NU2BygKaoCP5kO+
'' SIG '' SusLp1OqymmkeIP9Cq5VLErBSJe1NaSLjp5urXoI5fTq
'' SIG '' jG/vCjNugB4+Xbr2aTGuT8+82AcRL4Z4k0BUztSPAGxc
'' SIG '' 1d3ZUAFHu2cexxdJLj7DjB8K3LESIunqLGD2t/44gjuF
'' SIG '' Jav7SGN2yev6xW1bkT6GdJ8IP6NxhOu0MPda+RabKeKF
'' SIG '' Z8T96hD19sjYSnFrI8Cyvp+RWapdsU+9UmYj3ar9xUvY
'' SIG '' SfJjDqz1Pu9VmIKyFpSsIGr5UdFhsGIVVX3TGr4akmI6
'' SIG '' XNBbCb2TaqwFvSAe6Wgkn6cWLaZiQfBqRuUpFvRPWqgF
'' SIG '' yIb4Jm3jrE//NyzpfpiHYOvy1QXRzJ37IU2UMVwnsSWm
'' SIG '' fwTGxSWjjXKQ1MuThU5nYddEOVbew7b7TA5Wb0IGL48/
'' SIG '' ZZBaHEUi1ADDKQwr
'' SIG '' End signature block
