' Windows Installer database utility to merge data from another database              
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the use of the Database.Merge method and MsiDatabaseMerge API
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3
Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Const TristateTrue = -1

Dim argCount:argCount = Wscript.Arguments.Count
Dim iArg:iArg = 0
If (argCount < 2) Then
	Wscript.Echo "Windows Installer database merge utility" &_
		vbNewLine & " 1st argument is the path to MSI database (installer package)" &_
		vbNewLine & " 2nd argument is the path to database containing data to merge" &_
		vbNewLine & " 3rd argument is the optional table to contain the merge errors" &_
		vbNewLine & " If 3rd argument is not present, the table _MergeErrors is used" &_
		vbNewLine & "  and that table will be dropped after displaying its contents." &_
		vbNewLine &_
		vbNewLine & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Connect to Windows Installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open databases and merge data
Dim database1 : Set database1 = installer.OpenDatabase(WScript.Arguments(0), msiOpenDatabaseModeTransact) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(WScript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim errorTable : errorTable = "_MergeErrors"
If argCount >= 3 Then errorTable = WScript.Arguments(2)
Dim hasConflicts:hasConflicts = database1.Merge(database2, errorTable) 'Old code returns void value, new returns boolean
If hasConflicts <> True Then hasConflicts = CheckError 'Temp for old Merge function that returns void
If hasConflicts <> 0 Then
	Dim message, line, view, record
	Set view = database1.OpenView("Select * FROM `" & errorTable & "`") : CheckError
	view.Execute
	Do
		Set record = view.Fetch
		If record Is Nothing Then Exit Do
		line = record.StringData(1) & " table has " & record.IntegerData(2) & " conflicts"
		If message = Empty Then message = line Else message = message & vbNewLine & line
	Loop
	Set view = Nothing
	Wscript.Echo message
End If
If argCount < 3 And hasConflicts Then database1.OpenView("DROP TABLE `" & errorTable & "`").Execute : CheckError
database1.Commit : CheckError
Quit 0

Function CheckError
	Dim message, errRec
	CheckError = 0
	If Err = 0 Then Exit Function
	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 & vbNewLine & errRec.FormatText : CheckError = errRec.IntegerData(1)
	End If
	If CheckError = 2268 Then Err.Clear : Exit Function
	Wscript.Echo message
	Wscript.Quit 2
End Function

'' SIG '' Begin signature block
'' SIG '' MIImTgYJKoZIhvcNAQcCoIImPzCCJjsCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' QXX+BeRpnj5/3w9MZiLTEbzssoFPyxBqr0/6QcQWjb+g
'' SIG '' gguBMIIFCTCCA/GgAwIBAgITMwAABXwzcc9L673fygAA
'' SIG '' AAAFfDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTI0MDQyNDIwMjA0NloX
'' SIG '' DTI1MDQxOTIwMjA0NlowfzELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEpMCcGA1UEAxMgTWljcm9zb2Z0IFdpbmRvd3MgS2l0
'' SIG '' cyBQdWJsaXNoZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
'' SIG '' DwAwggEKAoIBAQDuXrTpeGqa9J5HOOYHUPYdqaUaLkRs
'' SIG '' zxXXZ8vW6hKNpSbkHFsB1K8mlscbD29EryD2l9f3JRnx
'' SIG '' qDEzY5dGhp8MvGO1FhuJURH5Zkpt2Dce8B05RAw9gVVI
'' SIG '' 6ODjSZFbra/wKR3b+NNOabK9eB99SCzUBmv6Kh/bYdeR
'' SIG '' oh5yjYPJIL2FEBOh1jtUq6d7zlgXdI+ajekWsLULwtwy
'' SIG '' Y5xTx9CuCzqKxFyRZTkdZTfBVJXPlUuFFyI39wp2b0KW
'' SIG '' Bg8vuIux8i9GAzTZOTsmlbd+808Y8/Mxt7z2j10IEBx3
'' SIG '' wdScRCXgOYH0b4kDbARgYA/JXZlWrEKbIomQcfjFgl3k
'' SIG '' qJs9AgMBAAGjggF9MIIBeTAfBgNVHSUEGDAWBgorBgEE
'' SIG '' AYI3CgMUBggrBgEFBQcDAzAdBgNVHQ4EFgQUjr/0Zy+p
'' SIG '' LzaM7/6H0aEaoBark5swVAYDVR0RBE0wS6RJMEcxLTAr
'' SIG '' BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv
'' SIG '' bnMgTGltaXRlZDEWMBQGA1UEBRMNMjI5OTAzKzUwMjIz
'' SIG '' NDAfBgNVHSMEGDAWgBTm/F97uyIAWORyTrX0IXQjMubv
'' SIG '' rDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWND
'' SIG '' b2RTaWdQQ0FfMjAxMC0wNy0wNi5jcmwwWgYIKwYBBQUH
'' SIG '' AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BD
'' SIG '' QV8yMDEwLTA3LTA2LmNydDAMBgNVHRMBAf8EAjAAMA0G
'' SIG '' CSqGSIb3DQEBCwUAA4IBAQC3ldMZx+mZuf+EY2cLU0CN
'' SIG '' baZL8/85vD6tWvmuwfpBlQMgcrofbyDfuveWw4HqOJht
'' SIG '' 1/UcW3dHuG/UQEzHGFPlL8ZwWonopyWGWyzELA2YQwXq
'' SIG '' RAwlFFbxLwQrAWY1QQw+X0R6mt2+3EpWd0HRusSrExZn
'' SIG '' dUxI3u0OY4KJ1ZMNeddkKR6o4BRmh8hTYhr2edYFfkYX
'' SIG '' MuhoSzCXZqexUhCgIMWuP3XiFDIuteaRlcKfuq2eV+y3
'' SIG '' bXadRbJu0TPbmsY1f4ms+an/4RSS271XGbR5R4zMKWRP
'' SIG '' hbfdU1W1R88jAf4+ziOfF0ZfLHKt25fw/X1d4xbx4Cwx
'' SIG '' o3XDRA6EyM7YMIIGcDCCBFigAwIBAgIKYQxSTAAAAAAA
'' SIG '' AzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2Vy
'' SIG '' dGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzA2
'' SIG '' MjA0MDE3WhcNMjUwNzA2MjA1MDE3WjB+MQswCQYDVQQG
'' SIG '' EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
'' SIG '' BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
'' SIG '' cnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29k
'' SIG '' ZSBTaWduaW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0B
'' SIG '' AQEFAAOCAQ8AMIIBCgKCAQEA6Q5kUHlntcTj/QkATJ6U
'' SIG '' rPdWaOpE2M/FWE+ppXZ8bUW60zmStKQe+fllguQX0o/9
'' SIG '' RJwI6GWTzixVhL99COMuK6hBKxi3oktuSUxrFQfe0dLC
'' SIG '' iR5xlM21f0u0rwjYzIjWaxeUOpPOJj/s5v40mFfVHV1J
'' SIG '' 9rIqLtWFu1k/+JC0K4N0yiuzO0bj8EZJwRdmVMkcvR3E
'' SIG '' VWJXcvhnuSUgNN5dpqWVXqsogM3Vsp7lA7Vj07IUyMHI
'' SIG '' iiYKWX8H7P8O7YASNUwSpr5SW/Wm2uCLC0h31oVH1RC5
'' SIG '' xuiq7otqLQVcYMa0KlucIxxfReMaFB5vN8sZM4BqiU2j
'' SIG '' amZjeJPVMM+VHwIDAQABo4IB4zCCAd8wEAYJKwYBBAGC
'' SIG '' NxUBBAMCAQAwHQYDVR0OBBYEFOb8X3u7IgBY5HJOtfQh
'' SIG '' dCMy5u+sMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB
'' SIG '' MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MIGdBgNVHSAEgZUwgZIwgY8GCSsG
'' SIG '' AQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3
'' SIG '' dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZh
'' SIG '' dWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBh
'' SIG '' AGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUA
'' SIG '' bgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAGnTvV08p
'' SIG '' e8QWhXi4UNMi/AmdrIKX+DT/KiyXlRLl5L/Pv5PI4zSp
'' SIG '' 24G43B4AvtI1b6/lf3mVd+UC1PHr2M1OHhthosJaIxrw
'' SIG '' jKhiUUVnCOM/PB6T+DCFF8g5QKbXDrMhKeWloWmMIpPM
'' SIG '' dJjnoUdD8lOswA8waX/+0iUgbW9h098H1dlyACxphnY9
'' SIG '' UdumOUjJN2FtB91TGcun1mHCv+KDqw/ga5uV1n0oUbCJ
'' SIG '' SlGkmmzItx9KGg5pqdfcwX7RSXCqtq27ckdjF/qm1qKm
'' SIG '' huyoEESbY7ayaYkGx0aGehg/6MUdIdV7+QIjLcVBy78d
'' SIG '' TMgW77Gcf/wiS0mKbhXjpn92W9FTeZGFndXS2z1zNfM8
'' SIG '' rlSyUkdqwKoTldKOEdqZZ14yjPs3hdHcdYWch8ZaV4XC
'' SIG '' v90Nj4ybLeu07s8n07VeafqkFgQBpyRnc89NT7beBVaX
'' SIG '' evfpUk30dwVPhcbYC/GO7UIJ0Q124yNWeCImNr7KsYxu
'' SIG '' qh3khdpHM2KPpMmRM19xHkCvmGXJIuhCISWKHC1g2TeJ
'' SIG '' QYkqFg/XYTyUaGBS79ZHmaCAQO4VgXc+nOBTGBpQHTiV
'' SIG '' mx5mMxMnORd4hzbOTsNfsvU9R1O24OXbC2E9KteSLM43
'' SIG '' Wj5AQjGkHxAIwlacvyRdUQKdannSF9PawZSOB3slcUSr
'' SIG '' Bmrm1MbfI5qWdcUxgholMIIaIQIBATCBlTB+MQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
'' SIG '' Q29kZSBTaWduaW5nIFBDQSAyMDEwAhMzAAAFfDNxz0vr
'' SIG '' vd/KAAAAAAV8MA0GCWCGSAFlAwQCAQUAoIHGMBkGCSqG
'' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
'' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEi
'' SIG '' BCB9ZNrAIUSORGzQaD3sArrVgPFTTGrK3FiVXZNuVgrD
'' SIG '' zzBaBgorBgEEAYI3AgEMMUwwSqAkgCIATQBpAGMAcgBv
'' SIG '' AHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqG
'' SIG '' SIb3DQEBAQUABIIBAJAPjqvrHnI7CTz/0UaZqxAWF9DQ
'' SIG '' aW9yRpAbk8hJZQk2n5YihtLqXbwCsnoLN9kcO9svQFhE
'' SIG '' dlpVBhm9J8Chv3ap8Tt4nC+IEKQR3yqASJzNdRk8dPn2
'' SIG '' dhzyeQn2aKRCb31/ht5D+7KfAOufBJdDM0q8wzorTJA9
'' SIG '' 7XVCsLjozdGpicnd5rT4TaLx0eFVWdpDKOgCgpjgqYFA
'' SIG '' /Txa89FNGVOKK9boaK6kZ20b/hn5scH4qW3rlLyKrb71
'' SIG '' 3n98gxnaw4PRC9geVZzkFasYoUnBNsj7lpuSe8MV515/
'' SIG '' kDLqpXnDjBwIXaKhIFO9QVlvQwCCsBAgRtPUAD9r/cKs
'' SIG '' xrDxZOWhgheXMIIXkwYKKwYBBAGCNwMDATGCF4Mwghd/
'' SIG '' BgkqhkiG9w0BBwKgghdwMIIXbAIBAzEPMA0GCWCGSAFl
'' SIG '' AwQCAQUAMIIBUgYLKoZIhvcNAQkQAQSgggFBBIIBPTCC
'' SIG '' ATkCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF
'' SIG '' AAQg/R9k/d79OCt8E1X7EWIDwHkSOBXD3Ws/i3AbWvSp
'' SIG '' H0kCBme3qeZU/hgTMjAyNTAzMTIxMTE1MDQuOTk1WjAE
'' SIG '' gAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEl
'' SIG '' MCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0
'' SIG '' aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjM3
'' SIG '' MDMtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg
'' SIG '' VGltZS1TdGFtcCBTZXJ2aWNloIIR7TCCByAwggUIoAMC
'' SIG '' AQICEzMAAAIKR7IU2e6ysw8AAQAAAgowDQYJKoZIhvcN
'' SIG '' AQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
'' SIG '' HhcNMjUwMTMwMTk0MjU3WhcNMjYwNDIyMTk0MjU3WjCB
'' SIG '' yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
'' SIG '' cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UE
'' SIG '' CxMeblNoaWVsZCBUU1MgRVNOOjM3MDMtMDVFMC1EOTQ3
'' SIG '' MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
'' SIG '' ZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
'' SIG '' CgKCAgEAsuzc8BKW+wacAJPSydNF6t9E3E43MDWfNE8Q
'' SIG '' LQG4UmidpMJyQNQLvw6Pf3xAYwB7+jJrbd35jw3iCZ0O
'' SIG '' 1QXiKvEXH43I62zyIN8AOb+TEH5TzUgTTr3F0T/n2ZwM
'' SIG '' tBCw835yR5wpGTbEFGexhey8VC0yjmGNmCcOE65nB6IZ
'' SIG '' GOg4wmcsYaphkMMHW46D1kW2Lv6MxXpv8nyT8o1Qapdd
'' SIG '' OvG3FYefAPHOQg+k1jfy97vjcvuzvPg73q+qgU+OBMu6
'' SIG '' Xz2TGdR4u8rwi7+Sxs0geqNjg+RiGcu8+JIfFGB3c45/
'' SIG '' VsfkGdtt90iUCrWYaSO7h396DE4NM2p0H8+5oLnXn5hg
'' SIG '' a0BINaMd5/t04s4dA/c1ZjUD/bBY7D0LTRmfSA/R/APp
'' SIG '' BSJ8eJq0sQNkshjDkHMZRjN9JLSCjN4qgrhRFPQh1TKT
'' SIG '' feP9X5eE+j6Jyfv6FiahZWrWLjCr9mfLoqa5xXAMQqTr
'' SIG '' AyFQTvStbx3gDIkEFJXBPQg+d+iNWC55jtqh2oDz5l4X
'' SIG '' Thqx1JwlLaKdtXpbpB4e+av+cx/jpzXpKebnaY0DWQr4
'' SIG '' mAGXR7C55FNDX1AK+q9VKg3Eqtcn+UYsIpgfEo7HZh5Z
'' SIG '' eID45qlYtP65pzNaABEJtz8lnE0EIm2C4rije2OIqOWy
'' SIG '' U1cJvr0UW6SeVC/w99wv/+6px23qFgUCAwEAAaOCAUkw
'' SIG '' ggFFMB0GA1UdDgQWBBQCrxdBBI+AMj32PFv6q7AL37Wc
'' SIG '' JDAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnp
'' SIG '' cjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl
'' SIG '' MjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmww
'' SIG '' bAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
'' SIG '' L01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAy
'' SIG '' MDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB
'' SIG '' /wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDAN
'' SIG '' BgkqhkiG9w0BAQsFAAOCAgEAsJNz1tAsozmqlwjDrrE3
'' SIG '' Xu3qdgsD/8VdSd6PSgIiknavGtlEeUQh2IZybHnpsHjF
'' SIG '' B9pDXn6ZwIdgZ/B9qKQ87QyZI/DmEXfykMrBNdjcGmNy
'' SIG '' jsAFvEYPDnV7+X1GSLDloKa5AkDNFaBR3V2BMZCTdxMw
'' SIG '' W1AlMN8m+IABTyuek/unD6SPDCSyQkFxzTILYtkGYV/S
'' SIG '' pH0QH3xWDBXKbGyPqM4guQa65N9+tXCRR4YBCUdCeNp6
'' SIG '' mUxkoFKQxh0mQERqjXAFeYfjkAy3hdqd1Ecfz+jHFINZ
'' SIG '' ydoDD2AbA/m8HfQdHP1yGfTLd7o5RCz6ZIo4wnUmcYc7
'' SIG '' tjN0mVia+e7mPhQvi7KbyDh9TqaH2p4dyRg6LDXABLvc
'' SIG '' lDFirBATJ4A+lVkEkGGel/RfNMwqHmcE6tIvQLo52M88
'' SIG '' eVtnxIGXo0buitRggEps7TZWCZQAo6mn1kaH06pCYVfy
'' SIG '' dr/e1967g736bjrkKFLVQMF6w7BtjTgbr1bKOSnVueIQ
'' SIG '' UrM/+PjkQeKi56uPxjbWo1B6KykShxjoBaPAymlxvlDQ
'' SIG '' DcIRjcR2yC0mufT8RMTIAowUT9/NvMhirKrkhM8yzVp8
'' SIG '' +Wn/WZnh+PNPX8CLbSONSZLomPV+oZjJi2L/DmN+L7zi
'' SIG '' vs8sZEvvQVC1QD+oLfsmh2gZa5Z/BouP3Qa9sukq6/+e
'' SIG '' oNAwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAA
'' SIG '' AAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBD
'' SIG '' ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5
'' SIG '' MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0B
'' SIG '' AQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5
'' SIG '' vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/
'' SIG '' XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9
'' SIG '' alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3X
'' SIG '' D9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62A
'' SIG '' W36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTj
'' SIG '' kY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP
'' SIG '' 3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxP
'' SIG '' LOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9z
'' SIG '' fUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuq
'' SIG '' fjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY
'' SIG '' 7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG
'' SIG '' 4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28M
'' SIG '' yTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb
'' SIG '' 0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReT
'' SIG '' wDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3Pmri
'' SIG '' Lq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMB
'' SIG '' AAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUp
'' SIG '' zxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtT
'' SIG '' NRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBB
'' SIG '' MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29m
'' SIG '' dC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQC
'' SIG '' BAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
'' SIG '' EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxi
'' SIG '' aNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0
'' SIG '' cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJv
'' SIG '' ZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3Js
'' SIG '' MFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9N
'' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZI
'' SIG '' hvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/yp
'' SIG '' b+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27
'' SIG '' DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYA
'' SIG '' A7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0j
'' SIG '' VOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCg
'' SIG '' vxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn
'' SIG '' 8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb
'' SIG '' 30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0
'' SIG '' /fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkct
'' SIG '' wRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmR
'' SIG '' aw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d
'' SIG '' 0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+
'' SIG '' k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQ
'' SIG '' KBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdC
'' SIG '' PSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6
'' SIG '' CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYID
'' SIG '' UDCCAjgCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh
'' SIG '' IE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNT
'' SIG '' IEVTTjozNzAzLTA1RTAtRDk0NzElMCMGA1UEAxMcTWlj
'' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG
'' SIG '' BSsOAwIaAxUA0QDFSZQOmyqvd1Z7t1JCYJuR5WGggYMw
'' SIG '' gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
'' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
'' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
'' SIG '' Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN
'' SIG '' BgkqhkiG9w0BAQsFAAIFAOt73DkwIhgPMjAyNTAzMTIx
'' SIG '' MDExMDVaGA8yMDI1MDMxMzEwMTEwNVowdzA9BgorBgEE
'' SIG '' AYRZCgQBMS8wLTAKAgUA63vcOQIBADAKAgEAAgIIxgIB
'' SIG '' /zAHAgEAAgITuzAKAgUA630tuQIBADA2BgorBgEEAYRZ
'' SIG '' CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6Eg
'' SIG '' oQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQCN
'' SIG '' BQsobUa8Cl8arT096LfzJApDD5H8Qh8Kt3YLAx2Lg2T7
'' SIG '' D88pHcpkFbc1XedP0QJ2CkK8qkYFJM08Y6Sy+KWsykmn
'' SIG '' dMK5nUaeBFcbJkNlAyAL5cAMBkPNienH6ItJjZHWIj7P
'' SIG '' EwuyTSIcnUJFGllrAat6gBl9OiOp4E6rfMccYuKfwpI9
'' SIG '' v3C1G8yzgMPDAW8clIbRIFVkrSPknmTilWvE/JiSEzBd
'' SIG '' nqfEuU2nafeS67oEVUBBPK4bFivjowLCtBD3as7ypI/P
'' SIG '' vTvsP4x71xQcxVUj7bjLSe7Sq8TQWPgkewidzBRC4zJB
'' SIG '' UlmFJNE9vJdvOHSVEvgrH7nLoCSsmnzyMYIEDTCCBAkC
'' SIG '' AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC
'' SIG '' EzMAAAIKR7IU2e6ysw8AAQAAAgowDQYJYIZIAWUDBAIB
'' SIG '' BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
'' SIG '' BDAvBgkqhkiG9w0BCQQxIgQgNm5PibFYIg6TmIj/xlx9
'' SIG '' Gokg0WiegbqDVfDE8m3ls0AwgfoGCyqGSIb3DQEJEAIv
'' SIG '' MYHqMIHnMIHkMIG9BCBNmsv8tHqSv192dNyk3JaKhPLv
'' SIG '' SF0bXTuzHsdIcPfkmjCBmDCBgKR+MHwxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
'' SIG '' LVN0YW1wIFBDQSAyMDEwAhMzAAACCkeyFNnusrMPAAEA
'' SIG '' AAIKMCIEIB87ODtvK799eRSg52k5uhTEfmYVRHOC8U8J
'' SIG '' KSZ20KTUMA0GCSqGSIb3DQEBCwUABIICAJlbcUSc734N
'' SIG '' 0JkonKlyhvi43aXnbkYnASJrcM9aA3NNDrH2ex5hy67l
'' SIG '' hTQe0ub1m/aDQRU1ZQwgKAdXHuOaLW6ez8pA+00Sv18F
'' SIG '' 30/J8LizBzuo3Zlz/8q4lCf7+T8gdAcMxBHq08ShU2LQ
'' SIG '' K2p/JsjCi3EUcfuTzh9UAwffeEEQzlzpcCnUlI24zxcz
'' SIG '' LwVSPcMuWaLXIrDUePDb2d0lhtkIeU9KEAmxoGm4gI5D
'' SIG '' QrpQcZ8OScdh9KgjX+U8cwPq0vbkGMYT8GOirev84s5W
'' SIG '' z02/xaTglaOzOOdQbhktQ1Uj5uY6wLNh2VzYF1S++5AQ
'' SIG '' k7c+JOgd43NovE1BbUQJ5AzkhyL0xafaN9rS0YL7ef0J
'' SIG '' nUU1uh8QfxDbHRSu4kxDzDv/3f9MfxyNR+Wx5bsrUlC0
'' SIG '' uQbwSWJGMl0im5oHYombxMOaM3hP3oppXGZBBA9wpl7G
'' SIG '' StTXaZtBDkUT0HV/qSnIPTNCV1QVCdG4O4hY4d5w/wCZ
'' SIG '' 7hytrMSFFxnQUFkp+0l75X2oT0BeOSUvz80KqUnu3s+7
'' SIG '' QFWvrHjBfLHhhzVTMtQ9YEZK/GlwhVbC6+7FcJciNW7t
'' SIG '' O4CvKUlK3laldTKOm1JUA/mcU1MQWbDjD8fUZ/AR1lFW
'' SIG '' 0KWeIp7Lmyihf4EHhxePycS2jvd1kkYuhiEBzkj9wMiG
'' SIG '' 0qUVkrujJCG7
'' SIG '' End signature block
