' 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 '' MIIpdAYJKoZIhvcNAQcCoIIpZTCCKWECAQExDzANBglg
'' 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/zGEKMvE5PF76Ixghrn
'' SIG '' MIIa4wIBATB2MF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQK
'' 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+ULuaGCF5cwgheTBgorBgEE
'' SIG '' AYI3AwMBMYIXgzCCF38GCSqGSIb3DQEHAqCCF3Awghds
'' SIG '' AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFSBgsqhkiG9w0B
'' SIG '' CRABBKCCAUEEggE9MIIBOQIBAQYKKwYBBAGEWQoDATAx
'' SIG '' MA0GCWCGSAFlAwQCAQUABCA8AWZ5hcULVrZSd+/UCLh5
'' SIG '' n+ef0gI3dcUHJCEf8a1FSAIGaW/ZrdRMGBMyMDI2MDEy
'' SIG '' NzAxMjEwNi45NTZaMASAAgH0oIHRpIHOMIHLMQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQg
'' SIG '' QW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hp
'' SIG '' ZWxkIFRTUyBFU046MzMwMy0wNUUwLUQ5NDcxJTAjBgNV
'' SIG '' BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wg
'' SIG '' ghHtMIIHIDCCBQigAwIBAgITMwAAAg9XmkcUQOZG5gAB
'' SIG '' AAACDzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
'' SIG '' dGFtcCBQQ0EgMjAxMDAeFw0yNTAxMzAxOTQzMDRaFw0y
'' SIG '' NjA0MjIxOTQzMDRaMIHLMQswCQYDVQQGEwJVUzETMBEG
'' SIG '' A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
'' SIG '' ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
'' SIG '' MSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVy
'' SIG '' YXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046
'' SIG '' MzMwMy0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0GCSqGSIb3
'' SIG '' DQEBAQUAA4ICDwAwggIKAoICAQCl6DTurxf66o73G0A2
'' SIG '' yKo1/nYvITBQsd50F52SQzo2cSrt+EDEFCDlSxZzWJD7
'' SIG '' ujQ1Z1dMbMT6YhK7JUvwxQ+LkQXv2k/3v3xw8xJ2mhXu
'' SIG '' wbT+s1WOL0+9g9AOEAAM6WGjCzI/LZq3/tzHr56in/Z+
'' SIG '' +o/2soGhyGhKMDwWl4J4L1Fn8ndtoM1SBibPdqmwmPXp
'' SIG '' B9QtaP+TCOC1vAaGQOdsqXQ8AdlK6Vuk9yW9ty7S0kRP
'' SIG '' 1nXkFseM33NzBu//ubaoJHb1ceYPZ4U4EOXBHi/2g09W
'' SIG '' RL9QWItHjPGJYjuJ0ckyrOG1ksfAZWP+Bu8PXAq4s1Ba
'' SIG '' /h/nXhXAwuxThpvaFb4T0bOjYO/h2LPRbdDMcMfS9Zbh
'' SIG '' q10hXP6ZFHR0RRJ+rr5A8ID9l0UgoUu/gNvCqHCMowz9
'' SIG '' 7udo7eWODA7LaVv81FHHYw3X5DSTUqJ6pwP+/0lxatxa
'' SIG '' jbSGsm267zqVNsuzUoF2FzPM+YUIwiOpgQvvjYIBkB+K
'' SIG '' UwZf2vRIPWmhAEzWZAGTox/0vj4eHgxwER9fpThcsbZG
'' SIG '' Sxx0nL54Hz+L36KJyEVio+oJVvUxm75YEESaTh1RnL0D
'' SIG '' ls91sBw6mvKrO2O+NCbUtfx+cQXYS0JcWZef810BW9Bn
'' SIG '' /eIvow3Kcx0dVuqDfIWfW7imeTLAK9QAEk+oZCJzUUTv
'' SIG '' hh2hYQIDAQABo4IBSTCCAUUwHQYDVR0OBBYEFJnUMQ2O
'' SIG '' tyAhLR/MD2qtJ9lKRP9ZMB8GA1UdIwQYMBaAFJ+nFV0A
'' SIG '' XmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRYMFYwVKBSoFCG
'' SIG '' Tmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
'' SIG '' Y3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
'' SIG '' MjAyMDEwKDEpLmNybDBsBggrBgEFBQcBAQRgMF4wXAYI
'' SIG '' KwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
'' SIG '' bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1T
'' SIG '' dGFtcCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB
'' SIG '' /wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYD
'' SIG '' VR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQBT
'' SIG '' owbo1bUE7fXTy+uW9m58qGEXRBGVMEQiFEfSui1fhN7j
'' SIG '' S+kSiN0SR5Kl3AuV49xOxgHo9+GIne5Mpg5n4NS5PW8n
'' SIG '' WIWGj/8jkE3pdJZSvAZarXD4l43iMNxDhdBZqVCkAYcd
'' SIG '' FVZnxdy+25MRY6RfaGwkinjnYNFA6DYL/1cxw6Ya4sXy
'' SIG '' V7FgPdMmxVpffnPEDFv4mcVx3jvPZod7gqiDcUHbyV1g
'' SIG '' aND3PejyJ1MGfBYbAQxsynLX1FUsWLwKsNPRJjynwlzB
'' SIG '' T/OQbxnzkjLibi4h4dOwcN+H4myDtUSnYq9Xf4YvFlZ+
'' SIG '' mJs5Ytx4U9JVCyW/WERtIEieTvTRgvAYj/4Mh1F2Elf8
'' SIG '' cdILgzi9ezqYefxdsBD8Vix35yMC5LTnDUoyVVulUeeD
'' SIG '' AJY8+6YBbtXIty4phIkihiIHsyWVxW2YGG6A6UWenuwY
'' SIG '' 6z9oBONvMHlqtD37ZyLn0h1kCkkp5kcIIhMtpzEcPkfq
'' SIG '' lkbDVogMoWy80xulxt64P4+1YIzkRht3zTO+jLONu1pm
'' SIG '' Bt+8EUh7DVct/33tuW5NOSx56jXQ1TdOdFBpgcW8HvJi
'' SIG '' i8smQ1TQP42HNIKIJY5aiMkK9M2HoxYrQy2MoHNOPySs
'' SIG '' Ozr3le/4SDdX67uobGkUNerlJKzKpTR5ZU0SeNAu5oCy
'' SIG '' Db6gdtTiaN50lCC6m44sXjCCB3EwggVZoAMCAQICEzMA
'' SIG '' AAAVxedrngKbSZkAAAAAABUwDQYJKoZIhvcNAQELBQAw
'' SIG '' gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
'' SIG '' dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
'' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1p
'' SIG '' Y3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
'' SIG '' eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4
'' SIG '' MzIyNVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
'' SIG '' ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDk
'' SIG '' 4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXIyjVX
'' SIG '' 9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VG
'' SIG '' Iwy1jRPPdzLAEBjoYH1qUoNEt6aORmsHFPPFdvWGUNzB
'' SIG '' RMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1yaa8dq6z2
'' SIG '' Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+
'' SIG '' jlPP1uyFVk3v3byNpOORj7I5LFGc6XBpDco2LXCOMcg1
'' SIG '' KL3jtIckw+DJj361VI/c+gVVmG1oO5pGve2krnopN6zL
'' SIG '' 64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakX
'' SIG '' W2dg3viSkR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX78
'' SIG '' 2Z5F37ZyL9t9X4C626p+Nuw2TPYrbqgSUei/BQOj0XOm
'' SIG '' TTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07B
'' SIG '' MzlMjgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIz
'' SIG '' GHLXpyDwwvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ
'' SIG '' +QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AF
'' SIG '' emzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode
'' SIG '' 2o+eFnJpxq57t7c+auIurQIDAQABo4IB3TCCAdkwEgYJ
'' SIG '' KwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQU
'' SIG '' KqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+n
'' SIG '' FV0AXmJdg/Tl0mWnG1M1GelyMFwGA1UdIARVMFMwUQYM
'' SIG '' KwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9S
'' SIG '' ZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcD
'' SIG '' CDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNV
'' SIG '' HQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
'' SIG '' GDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8E
'' SIG '' TzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRf
'' SIG '' MjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoG
'' SIG '' CCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2
'' SIG '' LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt
'' SIG '' 4SwfZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaTlz0xM7U5
'' SIG '' 18JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZnOlNN
'' SIG '' 3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu
'' SIG '' 2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f8449xvNo32X2
'' SIG '' pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4rPf5KYnD
'' SIG '' vBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMu
'' SIG '' LGt7bj8sCXgU6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG
'' SIG '' +jIa2Zb0j/aRAfbOxnT99kxybxCrdTDFNLB62FD+Cljd
'' SIG '' QDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJ
'' SIG '' VGTZc9d/HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRr
'' SIG '' akURR6nxt67I6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+
'' SIG '' CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8C
'' SIG '' wYKiexcdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVn
'' SIG '' K+ANuOaMmdbhIurwJ0I9JZTmdHRbatGePu1+oDEzfbzL
'' SIG '' 6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZq
'' SIG '' ELQdVTNYs6FwZvKhggNQMIICOAIBATCB+aGB0aSBzjCB
'' SIG '' yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
'' SIG '' cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UE
'' SIG '' CxMeblNoaWVsZCBUU1MgRVNOOjMzMDMtMDVFMC1EOTQ3
'' SIG '' MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
'' SIG '' ZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQBetIzj2C/MkdiI
'' SIG '' 03EyNsCtSOMdWqCBgzCBgKR+MHwxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0
'' SIG '' YW1wIFBDQSAyMDEwMA0GCSqGSIb3DQEBCwUAAgUA7SJA
'' SIG '' IzAiGA8yMDI2MDEyNjE5MzM1NVoYDzIwMjYwMTI3MTkz
'' SIG '' MzU1WjB3MD0GCisGAQQBhFkKBAExLzAtMAoCBQDtIkAj
'' SIG '' AgEAMAoCAQACAhOgAgH/MAcCAQACAhIcMAoCBQDtI5Gj
'' SIG '' AgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkK
'' SIG '' AwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZI
'' SIG '' hvcNAQELBQADggEBAICIDIIKMbQv8AYlb22dqDOUwSkS
'' SIG '' i0srXDQkr6o4DK6sIpWnHPdNE6Fp4DTJfhe/olMfKWuU
'' SIG '' gMOZyOkyZfraz64e6h4l7YqwOabqJpbSu2wr7s2RgPPv
'' SIG '' lbbiv6J6fJL8btjFB1dCeuGatWnwr6O6uzwOduof+AvJ
'' SIG '' xIuuk4Qkvh5Id6FLNpF/GVgONgYpXv60kwWTpFHV19I+
'' SIG '' gz++jaKem9IL2n9znh7fW9lOaN9sPBugj4poBLEizzS2
'' SIG '' eIembEFexCCONnzLrOdNF8vpen4W1CRpUA/DDUqBKi+w
'' SIG '' 3WR/qWSk4m8hA906K0Ax54dY9EGSQgQUIPBEukA/XCBQ
'' SIG '' 92y3UY4xggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
'' SIG '' dGFtcCBQQ0EgMjAxMAITMwAAAg9XmkcUQOZG5gABAAAC
'' SIG '' DzANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkD
'' SIG '' MQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCA9
'' SIG '' aN6d96AqxVost83felwRpb5lkuXeEFQwRnwJ5bJabDCB
'' SIG '' +gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIN1Hd5Um
'' SIG '' Knm7FW7xP3niGsfHJt4xR8Xu+MxgXXc0iqn4MIGYMIGA
'' SIG '' pH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
'' SIG '' TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMA
'' SIG '' AAIPV5pHFEDmRuYAAQAAAg8wIgQg1cLg9USor+9k8qer
'' SIG '' 95zT/63bGkcOVAMjQznRA5sufn0wDQYJKoZIhvcNAQEL
'' SIG '' BQAEggIAYotuMn6btNgO4quA/a9D188X+V9CEQNAmAeH
'' SIG '' GxTVOjFiQ9bJYiz9QxZOem1kMWMQuTIb+49QPgs7I/JQ
'' SIG '' X3pS0on52s+QNSapzppvX7mJC61AGmqL9Ec6c6DEVWk6
'' SIG '' r3DiPqTuIxyrySq+3bYIoKfp7hIH5Vrp+YzaY0RiteJy
'' SIG '' OGcwtlWoPxA6gSUen4hPX40BXlJ1fQi2gwt03yAnOMTD
'' SIG '' Niz00taLmForjqYAjyGszhl1mXkrV0Gl3qP1pbhbOlHS
'' SIG '' EmFnTmPmwvwSiaZ8a9quwjG7cgQoOE11oHqrEBvbfciR
'' SIG '' jsK9CEktuATdKEm86G0T/CTutmNV4Ik2z7TcuCzllTm3
'' SIG '' xsP5aVKPlh2dyO9DrcV2Kl3Nwki1mujsfeKyHtq9qKPj
'' SIG '' oQyx38w4CMNBLrUz+OT0ln3btSk7WUXX/Xr7y4B1iY2R
'' SIG '' VuX64YCaj1MC2fUEC9Env6i11dwNWZ+PfEwa4Ml+vrT7
'' SIG '' EYXDdtgu+Oqn/qQt4pJPGQFF5RdLMHRi441cKdlLuLE3
'' SIG '' elmRbGVehcAh1lBwYsW8+uhSxvTl7DQovLKiWfmFZwRB
'' SIG '' baWSDBYh56aJlS4GaQ5DI1RX5bMnqgwqV01JRhg4t9Yr
'' SIG '' QCR39AEFg133H5hwVPc6Xa0O2A1kaSPrZVhwchQvkdul
'' SIG '' EQciFB630ZlacZHm2M+Nw2aJPXJ0MoA=
'' SIG '' End signature block
