//////////////////////////////////////////////////////////////////////////////
//
// Copyright © 2002-2003, Microsoft Corporation.  All rights reserved.
//
// File: Dependencies.js
//
// Description: Utility functions that are associated with the use of
//		external dependencies, currently MSXML and Flash.
//
//////////////////////////////////////////////////////////////////////////////

var g_sXmlParserProgID = "";

//--------------------------------------------------------------------
// Function: GetXmlParserProgID
//
// Purpose:
//	Gets the ProgID of the highest available version of the 
//	Microsoft XML parser.
//
// Parameters: None
//
// Returns: String (i.e. "Msxml2.DOMDocument.4.0")
//
//--------------------------------------------------------------------
function GetXmlParserProgID()
{
	var MAX_MAJOR_PARSER_VERSION = 10;
	var MIN_MAJOR_PARSER_VERSION = 0;
	var MAX_MINOR_PARSER_VERSION = 9;
	var MIN_MINOR_PARSER_VERSION = 0;
	
	var sProgID = g_sXmlParserProgID;
	var bFound = false;

	if (!sProgID)
	{
		// Iterate through possible versions
  		for (var nMajor = MAX_MAJOR_PARSER_VERSION; nMajor >= MIN_MAJOR_PARSER_VERSION; nMajor--)
		{
			for (var nMinor = MAX_MINOR_PARSER_VERSION; nMinor >= MIN_MINOR_PARSER_VERSION; nMinor--)
			{
				// Set up the classname for the version that we're trying to instantiate
				sProgID = "Msxml2.DOMDocument." + nMajor + "." + nMinor;

				try
				{ 
	    				if (new ActiveXObject(sProgID)) 
					{
						bFound = true;
						break;
					}
				}
				catch(e)
				{
				}
			}

			if (bFound)
			{
				// store in a global variable to speedup subsequent calls
				g_sXmlParserProgID = sProgID;
				break;
			}
		}
	}
	
	return sProgID;
}

//--------------------------------------------------------------------
// Function: GetXmlParserVersion
//
// Purpose:
//	Gets the highest available version of the Microsoft XML parser
//
// Parameters: None
//
// Returns: String (i.e. "2.6")
//--------------------------------------------------------------------
function GetXmlParserVersion()
{
	if (!g_sXmlParserProgID) g_sXmlParserProgID = GetXmlParserProgID();

	var reg = /\d+.\d+/g;
	var ar = reg.exec(g_sXmlParserProgID);

	return (ar ? ar[0] : "0.0");
}

//--------------------------------------------------------------------
// Function: LoadXML
//
// Purpose: Loads the specified xml fragment
//
// Parameters:
//	String sXML [in] - Xml fragment
//
// Returns: XMLDOM object or null
//
// Note: Function can throw
//--------------------------------------------------------------------
function LoadXML(sXML)
{
	if (!sXML || "string" != typeof(sXML)) return null;
		
	var oXML = CreateXmlDOM();

	oXML.loadXML(sXML);
	if (0 != oXML.parseError.errorCode)
	{
		var oError = new Object();
		oError.number = oXML.parseError.errorCode;
		oError.description = oXML.parseError.reason;
		throw(oError);
	}
		
	return oXML;
}

//--------------------------------------------------------------------
// Function: LoadXMLFile
//
// Purpose: Loads the specified xml file.
//
// Parameters:
//	String sFile [in] - Xml filename
//
// Returns: XMLDOM object OR null
//
// Note: Function can throw
//--------------------------------------------------------------------
function LoadXMLFile(sFile)
{
	if (!sFile || "string" != typeof(sFile)) return null;
		
	var oXML = CreateXmlDOM()

	oXML.load(sFile);
	if (0 != oXML.parseError.errorCode)
	{
		var oError = new Object();
		oError.number = oXML.parseError.errorCode;
		oError.description = ERR_CANNOT_LOAD_XML_FILE + sFile + "\n" + oXML.parseError.reason;
		throw(oError);
	}
		
	return oXML;
}

//--------------------------------------------------------------------
// Function: CreateXMLDOM
//
// Purpose: Creates a new XML DOM.
//
// Parameters: None
//
// Returns: XMLDOM object OR null
//--------------------------------------------------------------------
function CreateXmlDOM()
{
	var oXML = new ActiveXObject(GetXmlParserProgID());
	try
	{
		oXML.setProperty("AllowXsltScript", true);
	}
	catch(err){}
	
	oXML.async = false;
	oXML.validateOnParse = false;
	oXML.resolveExternals = false;
	oXML.setProperty("SelectionLanguage", "XPath");
	try {oXML.setProperty("NewParser", true);} catch(e){}

	return oXML;
}

//--------------------------------------------------------------------
// Method: SetXMLDOMNamespaces
//
// Purpose: Gets the namespace declarations from the manifest and adds
//	    a prefix to the default namespace.
//
// Parameters:
//	Object oXMLDOM [in] - Manifest XML DOM
//
// Returns: None
//--------------------------------------------------------------------
function SetXMLDOMNamespaces(oXMLDOM)
{
	var sNamespaces = "";
	var nLen = oXMLDOM.documentElement.attributes.length;

	for (var i = 0; i < nLen; i++)
	{
		var oAttrib = oXMLDOM.documentElement.attributes(i);

		if (oAttrib.nodeName.indexOf("xmlns") != -1)
		{
			if (oAttrib.nodeName == "xmlns")
				sNamespaces += "xmlns:dflt='" + oAttrib.nodeValue + "' ";
			else
				sNamespaces += oAttrib.nodeName + "='" + oAttrib.nodeValue + "' ";
		}
	}

	// Set the property
	oXMLDOM.setProperty("SelectionNamespaces",sNamespaces);
}

//--------------------------------------------------------------------
// Method: RemoveComments
//
// Purpose: Removes all comments from the XML DOM.
//
// Parameters:
//	Object oXMLDOM [in] - Manifest XML DOM
//
// Returns: None
//--------------------------------------------------------------------
function RemoveComments(oXMLDOM)
{
	var oComments = oXMLDOM.selectNodes("//comment()");
	var oComment = null;

	while (oComment = oComments.nextNode())
	{
		var oParent = oComment.parentNode;
		oParent.removeChild(oComment);
	}
}

//--------------------------------------------------------------------
// Function: GetFlashVersion
//
// Purpose: Gets the highest installed version of Macromedia Flash.
//
// Parameters: None
//
// Returns: Number
//--------------------------------------------------------------------
function GetFlashVersion()
{
	var MAX_FLASH_VERSION = 10;	// Start with version 10 just in case the viewer has a long lifespan
	var MIN_FLASH_VERSION = 1; 
	var oControl = null;
	var sClassName = "";
	var nVersion = 0;
	
	// Step down through possible versions
  	for (var i = MAX_FLASH_VERSION; i >= MIN_FLASH_VERSION; i--)
	{
		// Set up the classname for the version that we're trying to instantiate
		sClassName = "ShockwaveFlash.ShockwaveFlash";

		// The class name for Flash version 1 is "ShockwaveFlash.ShockwaveFlash"
		if (i > MIN_FLASH_VERSION) sClassName += "." + i.toString();

		try
		{
			oControl = new ActiveXObject(sClassName);
			nVersion = i;
			break;
		}
		catch(e)
		{
		}
	}

	oControl = null;

  	return nVersion;
}
// SIG // Begin signature block
// SIG // MIIXWAYJKoZIhvcNAQcCoIIXSTCCF0UCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFK8udNMJLOLF
// SIG // MiGbtm9CIDhM0DzKoIISMTCCBGAwggNMoAMCAQICCi6r
// SIG // EdxQ/1ydy8AwCQYFKw4DAh0FADBwMSswKQYDVQQLEyJD
// SIG // b3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAu
// SIG // MR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
// SIG // ITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0
// SIG // eTAeFw0wNzA4MjIyMjMxMDJaFw0xMjA4MjUwNzAwMDBa
// SIG // MHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1p
// SIG // Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBMIIBIjANBgkq
// SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt3l91l2zRTmo
// SIG // NKwx2vklNUl3wPsfnsdFce/RRujUjMNrTFJi9JkCw03Y
// SIG // SWwvJD5lv84jtwtIt3913UW9qo8OUMUlK/Kg5w0jH9FB
// SIG // JPpimc8ZRaWTSh+ZzbMvIsNKLXxv2RUeO4w5EDndvSn0
// SIG // ZjstATL//idIprVsAYec+7qyY3+C+VyggYSFjrDyuJSj
// SIG // zzimUIUXJ4dO3TD2AD30xvk9gb6G7Ww5py409rQurwp9
// SIG // YpF4ZpyYcw2Gr/LE8yC5TxKNY8ss2TJFGe67SpY7UFMY
// SIG // zmZReaqth8hWPp+CUIhuBbE1wXskvVJmPZlOzCt+M26E
// SIG // RwbRntBKhgJuhgCkwIffUwIDAQABo4H6MIH3MBMGA1Ud
// SIG // JQQMMAoGCCsGAQUFBwMDMIGiBgNVHQEEgZowgZeAEFvQ
// SIG // cO9pcp4jUX4Usk2O/8uhcjBwMSswKQYDVQQLEyJDb3B5
// SIG // cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4w
// SIG // HAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
// SIG // BgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIP
// SIG // AMEAizw8iBHRPvZj7N9AMA8GA1UdEwEB/wQFMAMBAf8w
// SIG // HQYDVR0OBBYEFMwdznYAcFuv8drETppRRC6jRGPwMAsG
// SIG // A1UdDwQEAwIBhjAJBgUrDgMCHQUAA4IBAQB7q65+Siby
// SIG // zrxOdKJYJ3QqdbOG/atMlHgATenK6xjcacUOonzzAkPG
// SIG // yofM+FPMwp+9Vm/wY0SpRADulsia1Ry4C58ZDZTX2h6t
// SIG // KX3v7aZzrI/eOY49mGq8OG3SiK8j/d/p1mkJkYi9/uEA
// SIG // uzTz93z5EBIuBesplpNCayhxtziP4AcNyV1ozb2AQWtm
// SIG // qLu3u440yvIDEHx69dLgQt97/uHhrP7239UNs3DWkuNP
// SIG // tjiifC3UPds0C2I3Ap+BaiOJ9lxjj7BauznXYIxVhBoz
// SIG // 9TuYoIIMol+Lsyy3oaXLq9ogtr8wGYUgFA0qvFL0QeBe
// SIG // MOOSKGmHwXDi86erzoBCcnYOMIIEejCCA2KgAwIBAgIK
// SIG // YQYngQAAAAAACDANBgkqhkiG9w0BAQUFADB5MQswCQYD
// SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
// SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
// SIG // IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQg
// SIG // Q29kZSBTaWduaW5nIFBDQTAeFw0wODEwMjIyMTI0NTVa
// SIG // Fw0xMDAxMjIyMTM0NTVaMIGDMQswCQYDVQQGEwJVUzET
// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
// SIG // aW9uMQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQDExVNaWNy
// SIG // b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEB
// SIG // AQUAA4IBDwAwggEKAoIBAQC9crSJ5xyfhcd0uGBcAzY9
// SIG // nP2ZepopRiKwp4dT7e5GOsdbBQtXqLfKBczTTHdHcIWz
// SIG // 5cvfZ+ej/XQnk2ef14oDRDDG98m6yTodCFZETxcIDfm0
// SIG // GWiqJBz7BVeF6cVOByE3p+vOLC+2Qs0hBafW5tMoV8cb
// SIG // es4pNgfNnlXMu/Ei66gjpA0pwvvQw1o+Yz3HLEkLe3mF
// SIG // 8Ijvcb1DWuOjsw3zVfsl4OIg0+eaXpSlMy0of1cbVWoM
// SIG // MkTvZmxv8Dic7wKtmqHdmAcQDjwYaeJ5TkYU4LmM0HVt
// SIG // nKwAnC1C9VG4WvR4RYPpLnwru13NGWEorZRDCsVqQv+1
// SIG // Mq6kKSLeFujTAgMBAAGjgfgwgfUwEwYDVR0lBAwwCgYI
// SIG // KwYBBQUHAwMwHQYDVR0OBBYEFCPRcypMvfvlIfpxHpkV
// SIG // 0Rf5xKaKMA4GA1UdDwEB/wQEAwIHgDAfBgNVHSMEGDAW
// SIG // gBTMHc52AHBbr/HaxE6aUUQuo0Rj8DBEBgNVHR8EPTA7
// SIG // MDmgN6A1hjNodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20v
// SIG // cGtpL2NybC9wcm9kdWN0cy9DU1BDQS5jcmwwSAYIKwYB
// SIG // BQUHAQEEPDA6MDgGCCsGAQUFBzAChixodHRwOi8vd3d3
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL0NTUENBLmNy
// SIG // dDANBgkqhkiG9w0BAQUFAAOCAQEAQynPY71s43Ntw5nX
// SIG // bQyIO8ZIc3olziziN3udNJ+9I86+39hceRFrE1EgAWO5
// SIG // cvcI48Z9USoWKNTR55sqzxgN0hNxkSnsVr351sUNL69l
// SIG // LW1NRSlWcoRPP9JqHUFiqXlcjvDHd4rLAiguncecK+W5
// SIG // Kgnd7Jfi5XqNXhCIU6HdYE93mHFgqFs5kdOrEh8F6cNF
// SIG // qdPCUbmvuNz8BoQA9HSj2//MHaAjBQfkJzXCl5AZqoJg
// SIG // J+j7hCse0QTLjs+CDdeoTUNAddLe3XfvilxrD4dkj7S6
// SIG // t7qrZ1QhRapKaOdUXosUXGd47JBcAxCRCJ0kIJfo3wAR
// SIG // cKn5snJwt67iwp8WAjCCBJ0wggOFoAMCAQICEGoLmU/A
// SIG // ACWrEdtFH1h6Z6IwDQYJKoZIhvcNAQEFBQAwcDErMCkG
// SIG // A1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jvc29m
// SIG // dCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENvcnBv
// SIG // cmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9vdCBB
// SIG // dXRob3JpdHkwHhcNMDYwOTE2MDEwNDQ3WhcNMTkwOTE1
// SIG // MDcwMDAwWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYD
// SIG // VQQDExpNaWNyb3NvZnQgVGltZXN0YW1waW5nIFBDQTCC
// SIG // ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANw3
// SIG // bvuvyEJKcRjIzkg+U8D6qxS6LDK7Ek9SyIPtPjPZSTGS
// SIG // KLaRZOAfUIS6wkvRfwX473W+i8eo1a5pcGZ4J2botrfv
// SIG // hbnN7qr9EqQLWSIpL89A2VYEG3a1bWRtSlTb3fHev5+D
// SIG // x4Dff0wCN5T1wJ4IVh5oR83ZwHZcL322JQS0VltqHGP/
// SIG // gHw87tUEJU05d3QHXcJc2IY3LHXJDuoeOQl8dv6dbG56
// SIG // 4Ow+j5eecQ5fKk8YYmAyntKDTisiXGhFi94vhBBQsvm1
// SIG // Go1s7iWbE/jLENeFDvSCdnM2xpV6osxgBuwFsIYzt/iU
// SIG // W4RBhFiFlG6wHyxIzG+cQ+Bq6H8mjmsCAwEAAaOCASgw
// SIG // ggEkMBMGA1UdJQQMMAoGCCsGAQUFBwMIMIGiBgNVHQEE
// SIG // gZowgZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSswKQYD
// SIG // VQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0
// SIG // IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9y
// SIG // YXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1
// SIG // dGhvcml0eYIPAMEAizw8iBHRPvZj7N9AMBAGCSsGAQQB
// SIG // gjcVAQQDAgEAMB0GA1UdDgQWBBRv6E4/l7k0q0uGj7yc
// SIG // 6qw7QUPG0DAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
// SIG // QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAN
// SIG // BgkqhkiG9w0BAQUFAAOCAQEAlE0RMcJ8ULsRjqFhBwEO
// SIG // jHBFje9zVL0/CQUt/7hRU4Uc7TmRt6NWC96Mtjsb0fus
// SIG // p8m3sVEhG28IaX5rA6IiRu1stG18IrhG04TzjQ++B4o2
// SIG // wet+6XBdRZ+S0szO3Y7A4b8qzXzsya4y1Ye5y2PENtEY
// SIG // Ib923juasxtzniGI2LS0ElSM9JzCZUqaKCacYIoPO8cT
// SIG // ZXhIu8+tgzpPsGJY3jDp6Tkd44ny2jmB+RMhjGSAYwYE
// SIG // lvKaAkMve0aIuv8C2WX5St7aA3STswVuDMyd3ChhfEjx
// SIG // F5wRITgCHIesBsWWMrjlQMZTPb2pid7oZjeN9CKWnMyw
// SIG // d1RROtZyRLIj9jCCBKowggOSoAMCAQICCmEFojAAAAAA
// SIG // AAgwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IFRpbWVzdGFt
// SIG // cGluZyBQQ0EwHhcNMDgwNzI1MTkwMTE1WhcNMTMwNzI1
// SIG // MTkxMTE1WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgT
// SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
// SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsG
// SIG // A1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0Ug
// SIG // RVNOOjg1RDMtMzA1Qy01QkNGMSUwIwYDVQQDExxNaWNy
// SIG // b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkq
// SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8AQtspbAGoFn
// SIG // JbEmYrMTS84wusASOPyBZTQHxDayJGj2BwTAB5f0t/F7
// SIG // HmIsRtlLpFE0t9Ns7Vo7tIOhRz0RCC41a0XmwjyMAmYC
// SIG // qRhp60rtJyzuPHdbpNRwmUtXhBDQry34iR3m6im058+e
// SIG // BmKnclTCO8bPP7jhsFgQbOWl18PCdTe99IXhgego2Bvx
// SIG // 8q7xgqPW1wOinxWE+z36q+G2MsigAmTz5v8aJnEIU4oV
// SIG // AvKDJ3ZJgnGn760yeMbXbBZPImWXYk1GL/8jr4XspnC9
// SIG // A8va2DIFxSuQQLae1SyGbLfLEzJ9jcZ+rhcvMvxmux2w
// SIG // RVX4rfotZ4NnKZOE0lqhIwIDAQABo4H4MIH1MB0GA1Ud
// SIG // DgQWBBTol/b374zx5mnjWWhO95iKet2bLjAfBgNVHSME
// SIG // GDAWgBRv6E4/l7k0q0uGj7yc6qw7QUPG0DBEBgNVHR8E
// SIG // PTA7MDmgN6A1hjNodHRwOi8vY3JsLm1pY3Jvc29mdC5j
// SIG // b20vcGtpL2NybC9wcm9kdWN0cy90c3BjYS5jcmwwSAYI
// SIG // KwYBBQUHAQEEPDA6MDgGCCsGAQUFBzAChixodHRwOi8v
// SIG // d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL3RzcGNh
// SIG // LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDAOBgNVHQ8B
// SIG // Af8EBAMCBsAwDQYJKoZIhvcNAQEFBQADggEBAA0/d1+R
// SIG // PL6lNaTbBQWEH1by75mmxwiNL7PNP3HVhnx3H93rF7K9
// SIG // fOP5mfIKRUitFLtpLPI+Z2JU8u5/JxGSOezO2YdOiPdg
// SIG // RyN7JxVACJ+/DTEEgtg1tgycANOLqnhhxbWIQZ0+NtxY
// SIG // pCebOtq9Bl0UprIPTMGOPIvyYpn4Zu3V8xwosDLbyjEJ
// SIG // vPsiaEZM+tNzIucpjiIA+1a/Bq6BoBW6NPkojh9KYgWh
// SIG // ifWBR+kNkQjXWDuPHmsJaanASHxVgj9fADhDnAbMP9gv
// SIG // v09zCT39ul70x+w3wmRhoE3UPXDMW7ATgcHUozEavWTW
// SIG // ltJ6PypbRlMJPM0D+T9ZAMyJU2ExggSTMIIEjwIBATCB
// SIG // hzB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
// SIG // Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
// SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
// SIG // aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQIKYQYngQAA
// SIG // AAAACDAJBgUrDgMCGgUAoIG+MBkGCSqGSIb3DQEJAzEM
// SIG // BgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor
// SIG // BgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQBXAgtZDgI
// SIG // Sa4Z+C9OowCNVNbcVjBeBgorBgEEAYI3AgEMMVAwTqAm
// SIG // gCQATQBpAGMAcgBvAHMAbwBmAHQAIABMAGUAYQByAG4A
// SIG // aQBuAGehJIAiaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
// SIG // L2xlYXJuaW5nIDANBgkqhkiG9w0BAQEFAASCAQBoYNqI
// SIG // 2NeQqg5sSHcokqP4jABvrqh3dNnqWKVIK88g6aQujIVk
// SIG // 08DuRdmFtAV1dMpQUq1VCSkvRm2TF3vb+GpumwHcMfDA
// SIG // QihSjqWyV+Pg1C385o9UEFtK8uQeUoC3Wra9EFrJPaJa
// SIG // lWmEDkLP89y3OamzZQtgwBw6yFWUoGeLBeZFpM+b+Mc4
// SIG // KIp4g+jdXh2KDL7ExBrXFHsao4cDSxrJyqlWURGBhRaP
// SIG // FOnVSS+Bh0AIh7yEpfaVAmcfcm58Yb+09EEUQD92Ia31
// SIG // h7SZ5Bah4HQyE5o1x1ISPsbhnS/gs/FXUNsmQ2oGQtGF
// SIG // IXzZmASjS1JDueqvTHDwv6QQ3OFOoYICHzCCAhsGCSqG
// SIG // SIb3DQEJBjGCAgwwggIIAgEBMIGHMHkxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
// SIG // cG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUaW1l
// SIG // c3RhbXBpbmcgUENBAgphBaIwAAAAAAAIMAcGBSsOAwIa
// SIG // oF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkq
// SIG // hkiG9w0BCQUxDxcNMDkwNDA5MDExNTE4WjAjBgkqhkiG
// SIG // 9w0BCQQxFgQUrHkCxjCRXFqh54PuHWoHTTBj4yEwDQYJ
// SIG // KoZIhvcNAQEFBQAEggEA07bIISZ03MKlWX9AWsfoMFqH
// SIG // EG5vfbCL8pqH3Zfvm9m6FMxWopDMaeLofcr40+imZERO
// SIG // 5MDuKT13nHfAsphULDBb5AC6078POaLVX4H/LvFjiMgu
// SIG // pjnVhFeDklL15HTqBhaHFmxpNsyqWQkUrcb4JyMySQ1i
// SIG // T0tTr/RWExC9Bl4P2tCCXqvC/ZeL3wYHFj3InSpGkXIa
// SIG // uTI6AswAtAFS8mUwURiyKj1pW07HatHmHRfdLA5Qj4Ok
// SIG // GPcD9xuV1tDuU4Kucl5OVSNlC9zEBiqxEhmYRVMlljBR
// SIG // 5iS3pVT9qJXH/FumnGCIP6nmDP52gabwoo+t+v/WTvHX
// SIG // T/T4Qt4LMw==
// SIG // End signature block

