From 8350badbb5861fc3f26d1ada6ba2b980d955e9d9 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 16:28:46 -0700 Subject: [PATCH 01/19] Separate invalid session test for ReuseUsageEntry [ Merge of http://go/wvgerrit/144729 ] Since OEMCrypto_ReuseUsageEntry() was introduced in v17, splitting the test case for an invalid session from the other usage entry methods since they were implemented in v15/16 as well. Bug: 216193739 Test: GtsMediaTestCases on a sunfish Change-Id: I7f4399c07a19227495a15807228b930066f6a794 --- libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index 96bef331..7ecd1712 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -10030,7 +10030,7 @@ TEST_P(OEMCryptoUsageTableTest, PSTLargeBuffer) { } // Verify that a usage entry with an invalid session cannot be used. -TEST_P(OEMCryptoUsageTableTest, UsageEntryWithInvalidSessionAPI17) { +TEST_P(OEMCryptoUsageTableTest, UsageEntryWithInvalidSession) { std::string pst("pst"); LicenseWithUsageEntry entry; entry.license_messages().set_pst(pst); @@ -10048,6 +10048,13 @@ TEST_P(OEMCryptoUsageTableTest, UsageEntryWithInvalidSessionAPI17) { entry.session().close(); ASSERT_EQ(OEMCrypto_ERROR_INVALID_SESSION, OEMCrypto_MoveEntry(entry.session().session_id(), 0)); +} + +// Verify that a usage entry with an invalid session cannot be used. +TEST_P(OEMCryptoUsageTableTest, ReuseUsageEntryWithInvalidSessionAPI17) { + std::string pst("pst"); + LicenseWithUsageEntry entry; + entry.license_messages().set_pst(pst); entry.session().open(); ASSERT_NO_FATAL_FAILURE(entry.session().CreateNewUsageEntry()); From bc6e841ccd1ff46273edf6c7a4b04bcf929f251c Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 16:33:19 -0700 Subject: [PATCH 02/19] Add out of bounds testing for LoadKeys() [ Merge of http://go/wvgerrit/146249 ] Update the OEMCryptoMemoryLoadLicense* tests so they cover LoadKeys() for v15 and prior and LoadLicense() for v16 and later versions. Merged from https://widevine-internal-review.googlesource.com/145951 Bug: 190749256 Test: GtsMediaTestCases on sunfish Change-Id: If90f7afd82819375f52a2fe619675bf0c4c4dd3a --- .../oemcrypto/test/oemcrypto_test.cpp | 242 ++++++++++-------- 1 file changed, 132 insertions(+), 110 deletions(-) diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index 7ecd1712..db0f36e7 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -265,7 +265,7 @@ TEST_F(OEMCryptoClientTest, FreeUnallocatedSecureBufferNoFailure) { */ TEST_F(OEMCryptoClientTest, VersionNumber) { const std::string log_message = - "OEMCrypto unit tests for API 17.0. Tests last updated 2021-12-03"; + "OEMCrypto unit tests for API 17.0. Tests last updated 2022-02-18"; cout << " " << log_message << "\n"; cout << " " << "These tests are part of Android T." @@ -1569,59 +1569,6 @@ class OEMCryptoSessionTests : public OEMCryptoClientTest { license_messages.EncryptAndSignResponse(); return license_messages.LoadResponse(); } - - void TestLoadLicenseForHugeBufferLengths( - const std::function f, bool check_status, - bool update_core_message_substring_values) { - auto oemcrypto_function = [&](size_t message_length) { - Session s; - LicenseRoundTrip license_messages(&s); - s.open(); - InstallTestRSAKey(&s); - bool verify_keys_loaded = true; - license_messages.SignAndVerifyRequest(); - license_messages.CreateDefaultResponse(); - if (update_core_message_substring_values) { - // Make the license message big enough so that updated core message - // substring offset and length values from tests are still able to read - // data from license_message buffer rather than reading some garbage - // data. - license_messages.set_message_size( - sizeof(license_messages.response_data()) + message_length); - } - f(message_length, &license_messages); - if (update_core_message_substring_values) { - // We will be updating offset for these tests, which will cause verify - // keys to fail with an assertion. Hence skipping verification. - verify_keys_loaded = false; - } - license_messages.EncryptAndSignResponse(); - OEMCryptoResult result = - license_messages.LoadResponse(&s, verify_keys_loaded); - s.close(); - return result; - }; - TestHugeLengthDoesNotCrashAPI(oemcrypto_function, check_status); - } - - void TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( - const std::function f) { - Session s; - LicenseRoundTrip license_messages(&s); - s.open(); - InstallTestRSAKey(&s); - license_messages.SignAndVerifyRequest(); - license_messages.CreateDefaultResponse(); - size_t message_length = sizeof(license_messages.response_data()); - f(message_length, &license_messages); - license_messages.EncryptAndSignResponse(); - OEMCryptoResult result = license_messages.LoadResponse(); - s.close(); - // Verifying error is not due to signature failure which can be caused due - // to test code. - ASSERT_NE(OEMCrypto_ERROR_SIGNATURE_FAILURE, result); - ASSERT_NE(OEMCrypto_SUCCESS, result); - } }; TEST_F(OEMCryptoSessionTests, @@ -1695,6 +1642,77 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus); } +class OEMCryptoLicenseOverflowTest : public OEMCryptoSessionTests, + public WithParamInterface { + public: + OEMCryptoLicenseOverflowTest() : license_api_version_(kCurrentAPI) {} + + void SetUp() override { + OEMCryptoSessionTests::SetUp(); + license_api_version_ = GetParam(); + } + + void TearDown() override { OEMCryptoSessionTests::TearDown(); } + + void TestLoadLicenseForHugeBufferLengths( + const std::function f, bool check_status, + bool update_core_message_substring_values) { + auto oemcrypto_function = [&](size_t message_length) { + Session s; + LicenseRoundTrip license_messages(&s); + license_messages.set_api_version(license_api_version_); + s.open(); + InstallTestRSAKey(&s); + bool verify_keys_loaded = true; + license_messages.SignAndVerifyRequest(); + license_messages.CreateDefaultResponse(); + if (update_core_message_substring_values) { + // Make the license message big enough so that updated core message + // substring offset and length values from tests are still able to read + // data from license_message buffer rather than reading some garbage + // data. + license_messages.set_message_size( + sizeof(license_messages.response_data()) + message_length); + } + f(message_length, &license_messages); + if (update_core_message_substring_values) { + // We will be updating offset for these tests, which will cause verify + // keys to fail with an assertion. Hence skipping verification. + verify_keys_loaded = false; + } + license_messages.EncryptAndSignResponse(); + OEMCryptoResult result = + license_messages.LoadResponse(&s, verify_keys_loaded); + s.close(); + return result; + }; + TestHugeLengthDoesNotCrashAPI(oemcrypto_function, check_status); + } + + void TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( + const std::function f) { + Session s; + LicenseRoundTrip license_messages(&s); + license_messages.set_api_version(license_api_version_); + s.open(); + InstallTestRSAKey(&s); + license_messages.SignAndVerifyRequest(); + license_messages.CreateDefaultResponse(); + size_t message_length = sizeof(license_messages.response_data()); + OEMCryptoResult result = license_messages.LoadResponse(); + f(message_length, &license_messages); + license_messages.EncryptAndSignResponse(); + s.close(); + // Verifying error is not due to signature failure which can be caused due + // to test code. + ASSERT_NE(OEMCrypto_ERROR_SIGNATURE_FAILURE, result); + ASSERT_NE(OEMCrypto_SUCCESS, result); + } + + protected: + uint32_t license_api_version_; +}; + // This class is for testing a single license with the default API version // of 16. Used for buffer overflow tests. class OEMCryptoMemoryLicenseTest : public OEMCryptoLicenseTestAPI16 { @@ -3424,7 +3442,7 @@ TEST_F(OEMCryptoSessionTests, TestHugeLengthDoesNotCrashAPI(oemcrypto_function, !kCheckStatus); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyIdLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3434,7 +3452,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyIdOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3443,7 +3461,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyIdLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3452,7 +3470,7 @@ TEST_F(OEMCryptoSessionTests, }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyIdOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3461,7 +3479,7 @@ TEST_F(OEMCryptoSessionTests, }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyDataIvLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3471,7 +3489,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyDataIvOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3481,8 +3499,8 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyDataIvLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3492,8 +3510,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyDataIvOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3503,7 +3521,7 @@ TEST_F( }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyDataLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3513,7 +3531,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyDataOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3522,8 +3540,8 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyDataLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3533,8 +3551,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyDataOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3544,8 +3562,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyControlIvLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3555,8 +3573,8 @@ TEST_F( !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyControlIvOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3566,8 +3584,8 @@ TEST_F( !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyControlIvLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3578,8 +3596,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyControlIvOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3590,7 +3608,7 @@ TEST_F( }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyControlLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3600,7 +3618,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringKeyControlOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3610,8 +3628,8 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyControlLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3621,8 +3639,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringKeyControlOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3632,7 +3650,7 @@ TEST_F( }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringEncMacKeyIvLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3641,7 +3659,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringEncMacKeyIvOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3650,8 +3668,8 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringEncMacKeyIvLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3662,8 +3680,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringEncMacKeyIvOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3674,7 +3692,7 @@ TEST_F( }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringEncMacKeyLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3683,7 +3701,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringEncMacKeyOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3692,8 +3710,8 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringEncMacKeyLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3702,8 +3720,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringEncMacKeyOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3712,7 +3730,7 @@ TEST_F( }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringPstLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3721,7 +3739,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringPstOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3730,7 +3748,7 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringPstLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3739,7 +3757,7 @@ TEST_F(OEMCryptoSessionTests, }); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringPstOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3748,8 +3766,8 @@ TEST_F(OEMCryptoSessionTests, }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringSrmRestrictionDataLength) { TestLoadLicenseForHugeBufferLengths( [](size_t length, LicenseRoundTrip* license_messages) { @@ -3758,8 +3776,8 @@ TEST_F( !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageSubstringSrmRestrictionDataOffset) { TestLoadLicenseForHugeBufferLengths( [](size_t offset, LicenseRoundTrip* license_messages) { @@ -3768,8 +3786,8 @@ TEST_F( !kCheckStatus, kUpdateCoreMessageSubstringValues); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringSrmRestrictionDataLength) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3780,8 +3798,8 @@ TEST_F( }); } -TEST_F( - OEMCryptoSessionTests, +TEST_P( + OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForOutOfRangeCoreMessageSubstringSrmRestrictionDataOffset) { TestLoadLicenseForOutOfRangeSubStringOffSetAndLengths( [](size_t response_message_length, LicenseRoundTrip* license_messages) { @@ -3792,7 +3810,8 @@ TEST_F( }); } -TEST_F(OEMCryptoSessionTests, OEMCryptoMemoryLoadLicenseForHugeResponseLength) { +TEST_P(OEMCryptoLicenseOverflowTest, + OEMCryptoMemoryLoadLicenseForHugeResponseLength) { TestLoadLicenseForHugeBufferLengths( [](size_t message_size, LicenseRoundTrip* license_messages) { license_messages->set_message_size(message_size); @@ -3800,7 +3819,7 @@ TEST_F(OEMCryptoSessionTests, OEMCryptoMemoryLoadLicenseForHugeResponseLength) { !kCheckStatus, !kUpdateCoreMessageSubstringValues); } -TEST_F(OEMCryptoSessionTests, +TEST_P(OEMCryptoLicenseOverflowTest, OEMCryptoMemoryLoadLicenseForHugeCoreMessageLength) { TestLoadLicenseForHugeBufferLengths( [](size_t message_size, LicenseRoundTrip* license_messages) { @@ -3809,6 +3828,9 @@ TEST_F(OEMCryptoSessionTests, !kCheckStatus, !kUpdateCoreMessageSubstringValues); } +INSTANTIATE_TEST_SUITE_P(TestAll, OEMCryptoLicenseOverflowTest, + Range(kCurrentAPI - 1, kCurrentAPI + 1)); + TEST_F(OEMCryptoSessionTests, OEMCryptoMemoryLoadRenewalForHugeResponseLength) { auto oemcrypto_function = [&](size_t message_size) { Session s; From 4532802ea053b4ce303ecc2f11a7a8a1ed94283b Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 16:45:28 -0700 Subject: [PATCH 03/19] Fix 1 ClangTidyBuild finding: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Merge of http://go/wvgerrit/145289 ] * missing #include for 'std::string' For more info see go/clang_tidy/checks/google3-build-missing-std-includes This CL looks good? Just LGTM and Approve it! This CL doesn’t look good? This is what you can do: * Revert this CL, by replying "REVERT: " * File a bug under go/clang-tidy-bug for category ClangTidyBuild if the change looks generally problematic. * Revert this CL and not get a CL that cleans up these paths in the future by replying "BLOCKLIST: ". This is not reversible! We recommend to opt out the respective paths in your CL Robot configuration instead: go/clrobot-opt-out. This CL was generated by CL Robot - a tool that cleans up code findings (go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA. Anything wrong with the signup? File a bug at go/clrobot-bug. Tested: Local presubmit tests passed. Bug: 224375138 Test: GtsTestCases on sunfish PiperOrigin-RevId: 426761099 Merged from https://widevine-internal-review.googlesource.com/145250 Change-Id: I5a66b6eccc2b08ee11f92f90ce3b725f24c8d33c --- libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp index cf1be5f0..1f3b2301 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp @@ -3,6 +3,8 @@ // License Agreement. #include "fuzzing/odk_fuzz_helper.h" +#include + #include "odk.h" namespace oemcrypto_core_message { From 83a4100d11f2875573f961894f601b972d009026 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 17:42:09 -0700 Subject: [PATCH 04/19] Update cipher mode elsewhere [ Merge of http://go/wvgerrit/144696 ] In v17, OEMCrypto_CipherMode_CTR renamed to OEMCrypto_CipherMode_CENC OEMCrypto_CipherMode_CBC renamed to OEMCrypto_CipherMode_CBCS Bug: 224375138 Test: GtsMediaTestCases on sunfish Change-Id: I2d96e9c6d22a9d9e2fbbd15a8aea3f2d5dac6dcb --- .../oemcrypto/test/fuzz_tests/oemcrypto_generic_verify_fuzz.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_generic_verify_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_generic_verify_fuzz.cc index 076d3caa..759286d3 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_generic_verify_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_generic_verify_fuzz.cc @@ -42,7 +42,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { license_api_fuzz.LoadLicense(); OEMCrypto_SelectKey(session->session_id(), session->license().keys[0].key_id, session->license().keys[0].key_id_length, - OEMCrypto_CipherMode_CTR); + OEMCrypto_CipherMode_CENC); // Calculate signature for in buffer. size_t signature_length = 0; OEMCrypto_Generic_Sign(session->session_id(), in_buffer.data(), From 5f454851758927f7e4732e7d9040ecfb83dbf589 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 18:17:17 -0700 Subject: [PATCH 05/19] Merge oemcrypto-v17 to master [ Merge of http://go/wvgerrit/144530 ] It's time to copy all the v17 work to our main branch. I had to re-run clang-format to match local style. Merge from commit b14f08374f9a48aed49850cc230daf384725b15f Fix allow_null for key control iv in L3 v17 Bug: 161477208 Test: GtsMediaTestCases on sunfish Change-Id: I97caa851e9e65eb0e42034d2f4a28dfb7499df0d --- libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h | 10 +++++----- libwvdrmengine/oemcrypto/include/OEMCryptoCENCCommon.h | 2 +- .../oemcrypto/odk/include/core_message_features.h | 6 +++--- libwvdrmengine/oemcrypto/odk/include/odk_message.h | 6 +++--- libwvdrmengine/oemcrypto/odk/include/odk_structs.h | 2 +- .../oemcrypto/odk/src/core_message_features.cpp | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h index 670e5ab3..fd410044 100644 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h @@ -2116,7 +2116,7 @@ OEMCryptoResult OEMCrypto_QueryKeyControl(OEMCrypto_SESSION session, * 256 bits it will be used for OEMCrypto_Generic_Sign() or * OEMCrypto_Generic_Verify() as specified in the key control block. If the key * will be used for OEMCrypto_Generic_Encrypt() or OEMCrypto_Generic_Decrypt() - * then the cipher mode will always be OEMCrypto_CipherMode_CBC. Continue to + * then the cipher mode will always be OEMCrypto_CipherMode_CBCS. Continue to * use this key for this session until OEMCrypto_SelectKey() is called again, * or until OEMCrypto_CloseSession() is called. * @@ -2292,15 +2292,15 @@ OEMCryptoResult OEMCrypto_SelectKey(OEMCrypto_SESSION session, * 'cbcs'. Starting with v16, OEMCrypto only supports 'cenc' and 'cbcs'. The * schemes 'cens' and 'cbc1' are not supported. * - * The decryption mode, either OEMCrypto_CipherMode_CTR or - * OEMCrypto_CipherMode_CBC, was already specified in the call to + * The decryption mode, either OEMCrypto_CipherMode_CENC or + * OEMCrypto_CipherMode_CBCS, was already specified in the call to * OEMCrypto_SelectKey(). The encryption pattern is specified by the fields in * the parameter pattern. A description of partial encryption patterns for * 'cbcs' can be found in the ISO-CENC standard, section 10.4. * * 'cenc' SCHEME: * - * The 'cenc' scheme is OEMCrypto_CipherMode_CTR without an encryption + * The 'cenc' scheme is OEMCrypto_CipherMode_CENC without an encryption * pattern. All the bytes in the encrypted portion of each subsample are * encrypted. In the pattern parameter, both the encrypt and skip fields will * be zero. @@ -2323,7 +2323,7 @@ OEMCryptoResult OEMCrypto_SelectKey(OEMCrypto_SESSION session, * * 'cbcs' SCHEME: * - * The 'cbcs' scheme is OEMCrypto_CipherMode_CBC with an encryption pattern. + * The 'cbcs' scheme is OEMCrypto_CipherMode_CBCS with an encryption pattern. * Only some of the bytes in the encrypted portion of each subsample are * encrypted. In the pattern parameter, the encrypt and skip fields will * usually be non-zero. This mode allows devices to decrypt FMP4 HLS content, diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENCCommon.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENCCommon.h index cc0c0720..dd929640 120000 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENCCommon.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENCCommon.h @@ -1 +1 @@ -../odk/include/OEMCryptoCENCCommon.h \ No newline at end of file +../../oemcrypto/odk/include/OEMCryptoCENCCommon.h \ No newline at end of file diff --git a/libwvdrmengine/oemcrypto/odk/include/core_message_features.h b/libwvdrmengine/oemcrypto/odk/include/core_message_features.h index 16289c6b..07113e6e 100644 --- a/libwvdrmengine/oemcrypto/odk/include/core_message_features.h +++ b/libwvdrmengine/oemcrypto/odk/include/core_message_features.h @@ -30,13 +30,13 @@ struct CoreMessageFeatures { uint32_t maximum_major_version = 17; uint32_t maximum_minor_version = 0; - bool operator==(const CoreMessageFeatures &other) const; - bool operator!=(const CoreMessageFeatures &other) const { + bool operator==(const CoreMessageFeatures& other) const; + bool operator!=(const CoreMessageFeatures& other) const { return !(*this == other); } }; -std::ostream &operator<<(std::ostream &os, const CoreMessageFeatures &features); +std::ostream& operator<<(std::ostream& os, const CoreMessageFeatures& features); } // namespace features } // namespace oemcrypto_core_message diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_message.h b/libwvdrmengine/oemcrypto/odk/include/odk_message.h index 94ce2ae7..e4f135f6 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_message.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_message.h @@ -35,10 +35,10 @@ extern "C" { */ #if defined(__GNUC__) || defined(__clang__) -#define ALIGNED __attribute__((aligned)) +# define ALIGNED __attribute__((aligned)) #else -#define ALIGNED -#error ODK_Message must be aligned to the maximum useful alignment of the \ +# define ALIGNED +# error ODK_Message must be aligned to the maximum useful alignment of the \ machine you are compiling for. Define the ALIGNED macro accordingly. #endif diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h index a3ae63b2..72be13bd 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h @@ -19,7 +19,7 @@ extern "C" { #define ODK_MINOR_VERSION 0 /* ODK Version string. Date changed automatically on each release. */ -#define ODK_RELEASE_DATE "ODK v17.0 2022-01-24" +#define ODK_RELEASE_DATE "ODK v17.0 2022-02-15" /* The lowest version number for an ODK message. */ #define ODK_FIRST_VERSION 16 diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp index c28622c0..9dbbecbd 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp @@ -8,7 +8,7 @@ namespace oemcrypto_core_message { namespace features { const CoreMessageFeatures CoreMessageFeatures::kDefaultFeatures; -bool CoreMessageFeatures::operator==(const CoreMessageFeatures &other) const { +bool CoreMessageFeatures::operator==(const CoreMessageFeatures& other) const { return maximum_major_version == other.maximum_major_version && maximum_minor_version == other.maximum_minor_version; } @@ -31,8 +31,8 @@ CoreMessageFeatures CoreMessageFeatures::DefaultFeatures( return features; } -std::ostream &operator<<(std::ostream &os, - const CoreMessageFeatures &features) { +std::ostream& operator<<(std::ostream& os, + const CoreMessageFeatures& features) { return os << "v" << features.maximum_major_version << "." << features.maximum_minor_version; } From 57353b49417331725e3b2f727e272c746bc032c9 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 18:26:49 -0700 Subject: [PATCH 06/19] Test max number of DRM private keys [ Merge of http://go/wvgerrit/143909 ] The max. number of DRM keys that can be loaded depends on the resource rating. Add a test to verify: 1. We can load up to MAX. drm keys 2. Loading the MAX+1 key can fail 3. The loaded keys should work even if loading other keys failed Bug: 209084113 Test: opk_ta, run_x86_64_tests, run_level3_static_tests, run_fake_l1_tests Test: GtsMediaTestCases on sunfish Change-Id: Ib9821e8a1994d41d3e9c2063440c109a2332ba89 --- libwvdrmengine/oemcrypto/test/oec_test_data.h | 1395 +++++++++++++---- .../oemcrypto/test/oemcrypto_test.cpp | 50 + 2 files changed, 1140 insertions(+), 305 deletions(-) diff --git a/libwvdrmengine/oemcrypto/test/oec_test_data.h b/libwvdrmengine/oemcrypto/test/oec_test_data.h index 453847b5..d2792176 100644 --- a/libwvdrmengine/oemcrypto/test/oec_test_data.h +++ b/libwvdrmengine/oemcrypto/test/oec_test_data.h @@ -12,7 +12,6 @@ #include "OEMCryptoCENC.h" #include "oemcrypto_types.h" - namespace wvoec { // This is a test keybox. It will not be accepted by production systems. By @@ -91,313 +90,262 @@ static const WidevineKeybox kQATestKeybox = { // A 2048 bit RSA key in PKCS#8 PrivateKeyInfo format // Used to verify the functions that manipulate RSA keys. static const uint8_t kTestRSAPKCS8PrivateKeyInfo2_2048[] = { - 0x30, 0x82, 0x04, 0xbc, 0x02, 0x01, 0x00, 0x30, - 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, - 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, - 0x04, 0xa6, 0x30, 0x82, 0x04, 0xa2, 0x02, 0x01, - 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa7, 0x00, - 0x36, 0x60, 0x65, 0xdc, 0xbd, 0x54, 0x5a, 0x2a, - 0x40, 0xb4, 0xe1, 0x15, 0x94, 0x58, 0x11, 0x4f, - 0x94, 0x58, 0xdd, 0xde, 0xa7, 0x1f, 0x3c, 0x2c, - 0xe0, 0x88, 0x09, 0x29, 0x61, 0x57, 0x67, 0x5e, - 0x56, 0x7e, 0xee, 0x27, 0x8f, 0x59, 0x34, 0x9a, - 0x2a, 0xaa, 0x9d, 0xb4, 0x4e, 0xfa, 0xa7, 0x6a, - 0xd4, 0xc9, 0x7a, 0x53, 0xc1, 0x4e, 0x9f, 0xe3, - 0x34, 0xf7, 0x3d, 0xb7, 0xc9, 0x10, 0x47, 0x4f, - 0x28, 0xda, 0x3f, 0xce, 0x31, 0x7b, 0xfd, 0x06, - 0x10, 0xeb, 0xf7, 0xbe, 0x92, 0xf9, 0xaf, 0xfb, - 0x3e, 0x68, 0xda, 0xee, 0x1a, 0x64, 0x4c, 0xf3, - 0x29, 0xf2, 0x73, 0x9e, 0x39, 0xd8, 0xf6, 0x6f, - 0xd8, 0xb2, 0x80, 0x82, 0x71, 0x8e, 0xb5, 0xa4, - 0xf2, 0xc2, 0x3e, 0xcd, 0x0a, 0xca, 0xb6, 0x04, - 0xcd, 0x9a, 0x13, 0x8b, 0x54, 0x73, 0x54, 0x25, - 0x54, 0x8c, 0xbe, 0x98, 0x7a, 0x67, 0xad, 0xda, - 0xb3, 0x4e, 0xb3, 0xfa, 0x82, 0xa8, 0x4a, 0x67, - 0x98, 0x56, 0x57, 0x54, 0x71, 0xcd, 0x12, 0x7f, - 0xed, 0xa3, 0x01, 0xc0, 0x6a, 0x8b, 0x24, 0x03, - 0x96, 0x88, 0xbe, 0x97, 0x66, 0x2a, 0xbc, 0x53, - 0xc9, 0x83, 0x06, 0x51, 0x5a, 0x88, 0x65, 0x13, - 0x18, 0xe4, 0x3a, 0xed, 0x6b, 0xf1, 0x61, 0x5b, - 0x4c, 0xc8, 0x1e, 0xf4, 0xc2, 0xae, 0x08, 0x5e, - 0x2d, 0x5f, 0xf8, 0x12, 0x7f, 0xa2, 0xfc, 0xbb, - 0x21, 0x18, 0x30, 0xda, 0xfe, 0x40, 0xfb, 0x01, - 0xca, 0x2e, 0x37, 0x0e, 0xce, 0xdd, 0x76, 0x87, - 0x82, 0x46, 0x0b, 0x3a, 0x77, 0x8f, 0xc0, 0x72, - 0x07, 0x2c, 0x7f, 0x9d, 0x1e, 0x86, 0x5b, 0xed, - 0x27, 0x29, 0xdf, 0x03, 0x97, 0x62, 0xef, 0x44, - 0xd3, 0x5b, 0x3d, 0xdb, 0x9c, 0x5e, 0x1b, 0x7b, - 0x39, 0xb4, 0x0b, 0x6d, 0x04, 0x6b, 0xbb, 0xbb, - 0x2c, 0x5f, 0xcf, 0xb3, 0x7a, 0x05, 0x02, 0x03, - 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, 0x00, 0x5e, - 0x79, 0x65, 0x49, 0xa5, 0x76, 0x79, 0xf9, 0x05, - 0x45, 0x0f, 0xf4, 0x03, 0xbd, 0xa4, 0x7d, 0x29, - 0xd5, 0xde, 0x33, 0x63, 0xd8, 0xb8, 0xac, 0x97, - 0xeb, 0x3f, 0x5e, 0x55, 0xe8, 0x7d, 0xf3, 0xe7, - 0x3b, 0x5c, 0x2d, 0x54, 0x67, 0x36, 0xd6, 0x1d, - 0x46, 0xf5, 0xca, 0x2d, 0x8b, 0x3a, 0x7e, 0xdc, - 0x45, 0x38, 0x79, 0x7e, 0x65, 0x71, 0x5f, 0x1c, - 0x5e, 0x79, 0xb1, 0x40, 0xcd, 0xfe, 0xc5, 0xe1, - 0xc1, 0x6b, 0x78, 0x04, 0x4e, 0x8e, 0x79, 0xf9, - 0x0a, 0xfc, 0x79, 0xb1, 0x5e, 0xb3, 0x60, 0xe3, - 0x68, 0x7b, 0xc6, 0xef, 0xcb, 0x71, 0x4c, 0xba, - 0xa7, 0x79, 0x5c, 0x7a, 0x81, 0xd1, 0x71, 0xe7, - 0x00, 0x21, 0x13, 0xe2, 0x55, 0x69, 0x0e, 0x75, - 0xbe, 0x09, 0xc3, 0x4f, 0xa9, 0xc9, 0x68, 0x22, - 0x0e, 0x97, 0x8d, 0x89, 0x6e, 0xf1, 0xe8, 0x88, - 0x7a, 0xd1, 0xd9, 0x09, 0x5d, 0xd3, 0x28, 0x78, - 0x25, 0x0b, 0x1c, 0x47, 0x73, 0x25, 0xcc, 0x21, - 0xb6, 0xda, 0xc6, 0x24, 0x5a, 0xd0, 0x37, 0x14, - 0x46, 0xc7, 0x94, 0x69, 0xe4, 0x43, 0x6f, 0x47, - 0xde, 0x00, 0x33, 0x4d, 0x8f, 0x95, 0x72, 0xfa, - 0x68, 0x71, 0x17, 0x66, 0x12, 0x1a, 0x87, 0x27, - 0xf7, 0xef, 0x7e, 0xe0, 0x35, 0x58, 0xf2, 0x4d, - 0x6f, 0x35, 0x01, 0xaa, 0x96, 0xe2, 0x3d, 0x51, - 0x13, 0x86, 0x9c, 0x79, 0xd0, 0xb7, 0xb6, 0x64, - 0xe8, 0x86, 0x65, 0x50, 0xbf, 0xcc, 0x27, 0x53, - 0x1f, 0x51, 0xd4, 0xca, 0xbe, 0xf5, 0xdd, 0x77, - 0x70, 0x98, 0x0f, 0xee, 0xa8, 0x96, 0x07, 0x5f, - 0x45, 0x6a, 0x7a, 0x0d, 0x03, 0x9c, 0x4f, 0x29, - 0xf6, 0x06, 0xf3, 0x5d, 0x58, 0x6c, 0x47, 0xd0, - 0x96, 0xa9, 0x03, 0x17, 0xbb, 0x4e, 0xc9, 0x21, - 0xe0, 0xac, 0xcd, 0x78, 0x78, 0xb2, 0xfe, 0x81, - 0xb2, 0x51, 0x53, 0xa6, 0x1f, 0x98, 0x45, 0x02, - 0x81, 0x81, 0x00, 0xcf, 0x73, 0x8c, 0xbe, 0x6d, - 0x45, 0x2d, 0x0c, 0x0b, 0x5d, 0x5c, 0x6c, 0x75, - 0x78, 0xcc, 0x35, 0x48, 0xb6, 0x98, 0xf1, 0xb9, - 0x64, 0x60, 0x8c, 0x43, 0xeb, 0x85, 0xab, 0x04, - 0xb6, 0x7d, 0x1b, 0x71, 0x75, 0x06, 0xe2, 0xda, - 0x84, 0x68, 0x2e, 0x7f, 0x4c, 0xe3, 0x73, 0xb4, - 0xde, 0x51, 0x4b, 0xb6, 0x51, 0x86, 0x7b, 0xd0, - 0xe6, 0x4d, 0xf3, 0xd1, 0xcf, 0x1a, 0xfe, 0x7f, - 0x3a, 0x83, 0xba, 0xb3, 0xe1, 0xff, 0x54, 0x13, - 0x93, 0xd7, 0x9c, 0x27, 0x80, 0xb7, 0x1e, 0x64, - 0x9e, 0xf7, 0x32, 0x2b, 0x46, 0x29, 0xf7, 0xf8, - 0x18, 0x6c, 0xf7, 0x4a, 0xbe, 0x4b, 0xee, 0x96, - 0x90, 0x8f, 0xa2, 0x16, 0x22, 0x6a, 0xcc, 0x48, - 0x06, 0x74, 0x63, 0x43, 0x7f, 0x27, 0x22, 0x44, - 0x3c, 0x2d, 0x3b, 0x62, 0xf1, 0x1c, 0xb4, 0x27, - 0x33, 0x85, 0x26, 0x60, 0x48, 0x16, 0xcb, 0xef, - 0xf8, 0xcd, 0x37, 0x02, 0x81, 0x81, 0x00, 0xce, - 0x15, 0x43, 0x6e, 0x4b, 0x0f, 0xf9, 0x3f, 0x87, - 0xc3, 0x41, 0x45, 0x97, 0xb1, 0x49, 0xc2, 0x19, - 0x23, 0x87, 0xe4, 0x24, 0x1c, 0x64, 0xe5, 0x28, - 0xcb, 0x43, 0x10, 0x14, 0x14, 0x0e, 0x19, 0xcb, - 0xbb, 0xdb, 0xfd, 0x11, 0x9d, 0x17, 0x68, 0x78, - 0x6d, 0x61, 0x70, 0x63, 0x3a, 0xa1, 0xb3, 0xf3, - 0xa7, 0x5b, 0x0e, 0xff, 0xb7, 0x61, 0x11, 0x54, - 0x91, 0x99, 0xe5, 0x91, 0x32, 0x2d, 0xeb, 0x3f, - 0xd8, 0x3e, 0xf7, 0xd4, 0xcb, 0xd2, 0xa3, 0x41, - 0xc1, 0xee, 0xc6, 0x92, 0x13, 0xeb, 0x7f, 0x42, - 0x58, 0xf4, 0xd0, 0xb2, 0x74, 0x1d, 0x8e, 0x87, - 0x46, 0xcd, 0x14, 0xb8, 0x16, 0xad, 0xb5, 0xbd, - 0x0d, 0x6c, 0x95, 0x5a, 0x16, 0xbf, 0xe9, 0x53, - 0xda, 0xfb, 0xed, 0x83, 0x51, 0x67, 0xa9, 0x55, - 0xab, 0x54, 0x02, 0x95, 0x20, 0xa6, 0x68, 0x17, - 0x53, 0xa8, 0xea, 0x43, 0xe5, 0xb0, 0xa3, 0x02, - 0x81, 0x80, 0x67, 0x9c, 0x32, 0x83, 0x39, 0x57, - 0xff, 0x73, 0xb0, 0x89, 0x64, 0x8b, 0xd6, 0xf0, - 0x0a, 0x2d, 0xe2, 0xaf, 0x30, 0x1c, 0x2a, 0x97, - 0xf3, 0x90, 0x9a, 0xab, 0x9b, 0x0b, 0x1b, 0x43, - 0x79, 0xa0, 0xa7, 0x3d, 0xe7, 0xbe, 0x8d, 0x9c, - 0xeb, 0xdb, 0xad, 0x40, 0xdd, 0xa9, 0x00, 0x80, - 0xb8, 0xe1, 0xb3, 0xa1, 0x6c, 0x25, 0x92, 0xe4, - 0x33, 0xb2, 0xbe, 0xeb, 0x4d, 0x74, 0x26, 0x5f, - 0x37, 0x43, 0x9c, 0x6c, 0x17, 0x76, 0x0a, 0x81, - 0x20, 0x82, 0xa1, 0x48, 0x2c, 0x2d, 0x45, 0xdc, - 0x0f, 0x62, 0x43, 0x32, 0xbb, 0xeb, 0x59, 0x41, - 0xf9, 0xca, 0x58, 0xce, 0x4a, 0x66, 0x53, 0x54, - 0xc8, 0x28, 0x10, 0x1e, 0x08, 0x71, 0x16, 0xd8, - 0x02, 0x71, 0x41, 0x58, 0xd4, 0x56, 0xcc, 0xf5, - 0xb1, 0x31, 0xa3, 0xed, 0x00, 0x85, 0x09, 0xbf, - 0x35, 0x95, 0x41, 0x29, 0x40, 0x19, 0x83, 0x35, - 0x24, 0x69, 0x02, 0x81, 0x80, 0x55, 0x10, 0x0b, - 0xcc, 0x3b, 0xa9, 0x75, 0x3d, 0x16, 0xe1, 0xae, - 0x50, 0x76, 0x63, 0x94, 0x49, 0x4c, 0xad, 0x10, - 0xcb, 0x47, 0x68, 0x7c, 0xf0, 0xe5, 0xdc, 0xb8, - 0x6a, 0xab, 0x8e, 0xf7, 0x9f, 0x08, 0x2c, 0x1b, - 0x8a, 0xa2, 0xb9, 0x8f, 0xce, 0xec, 0x5e, 0x61, - 0xa8, 0xcd, 0x1c, 0x87, 0x60, 0x4a, 0xc3, 0x1a, - 0x5f, 0xdf, 0x87, 0x26, 0xc6, 0xcb, 0x7c, 0x69, - 0xe4, 0x8b, 0x01, 0x06, 0x59, 0x22, 0xfa, 0x34, - 0x4b, 0x81, 0x87, 0x3c, 0x03, 0x6d, 0x02, 0x0a, - 0x77, 0xe6, 0x15, 0xd8, 0xcf, 0xa7, 0x68, 0x26, - 0x6c, 0xfa, 0x2b, 0xd9, 0x83, 0x5a, 0x2d, 0x0c, - 0x3b, 0x70, 0x1c, 0xd4, 0x48, 0xbe, 0xa7, 0x0a, - 0xd9, 0xbe, 0xdc, 0xc3, 0x0c, 0x21, 0x33, 0xb3, - 0x66, 0xff, 0x1c, 0x1b, 0xc8, 0x96, 0x76, 0xe8, - 0x6f, 0x44, 0x74, 0xbc, 0x9b, 0x1c, 0x7d, 0xc8, - 0xac, 0x21, 0xa8, 0x6e, 0x37, 0x02, 0x81, 0x80, - 0x2c, 0x7c, 0xad, 0x1e, 0x75, 0xf6, 0x69, 0x1d, - 0xe7, 0xa6, 0xca, 0x74, 0x7d, 0x67, 0xc8, 0x65, - 0x28, 0x66, 0xc4, 0x43, 0xa6, 0xbd, 0x40, 0x57, - 0xae, 0xb7, 0x65, 0x2c, 0x52, 0xf9, 0xe4, 0xc7, - 0x81, 0x7b, 0x56, 0xa3, 0xd2, 0x0d, 0xe8, 0x33, - 0x70, 0xcf, 0x06, 0x84, 0xb3, 0x4e, 0x44, 0x50, - 0x75, 0x61, 0x96, 0x86, 0x4b, 0xb6, 0x2b, 0xad, - 0xf0, 0xad, 0x57, 0xd0, 0x37, 0x0d, 0x1d, 0x35, - 0x50, 0xcb, 0x69, 0x22, 0x39, 0x29, 0xb9, 0x3a, - 0xd3, 0x29, 0x23, 0x02, 0x60, 0xf7, 0xab, 0x30, - 0x40, 0xda, 0x8e, 0x4d, 0x45, 0x70, 0x26, 0xf4, - 0xa2, 0x0d, 0xd0, 0x64, 0x5d, 0x47, 0x3c, 0x18, - 0xf4, 0xd4, 0x52, 0x95, 0x00, 0xae, 0x84, 0x6b, - 0x47, 0xb2, 0x3c, 0x82, 0xd3, 0x72, 0x53, 0xde, - 0x72, 0x2c, 0xf7, 0xc1, 0x22, 0x36, 0xd9, 0x18, - 0x56, 0xfe, 0x39, 0x28, 0x33, 0xe0, 0xdb, 0x03 }; + 0x30, 0x82, 0x04, 0xbc, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa6, 0x30, 0x82, 0x04, 0xa2, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xa7, 0x00, 0x36, 0x60, 0x65, 0xdc, 0xbd, 0x54, 0x5a, 0x2a, + 0x40, 0xb4, 0xe1, 0x15, 0x94, 0x58, 0x11, 0x4f, 0x94, 0x58, 0xdd, 0xde, + 0xa7, 0x1f, 0x3c, 0x2c, 0xe0, 0x88, 0x09, 0x29, 0x61, 0x57, 0x67, 0x5e, + 0x56, 0x7e, 0xee, 0x27, 0x8f, 0x59, 0x34, 0x9a, 0x2a, 0xaa, 0x9d, 0xb4, + 0x4e, 0xfa, 0xa7, 0x6a, 0xd4, 0xc9, 0x7a, 0x53, 0xc1, 0x4e, 0x9f, 0xe3, + 0x34, 0xf7, 0x3d, 0xb7, 0xc9, 0x10, 0x47, 0x4f, 0x28, 0xda, 0x3f, 0xce, + 0x31, 0x7b, 0xfd, 0x06, 0x10, 0xeb, 0xf7, 0xbe, 0x92, 0xf9, 0xaf, 0xfb, + 0x3e, 0x68, 0xda, 0xee, 0x1a, 0x64, 0x4c, 0xf3, 0x29, 0xf2, 0x73, 0x9e, + 0x39, 0xd8, 0xf6, 0x6f, 0xd8, 0xb2, 0x80, 0x82, 0x71, 0x8e, 0xb5, 0xa4, + 0xf2, 0xc2, 0x3e, 0xcd, 0x0a, 0xca, 0xb6, 0x04, 0xcd, 0x9a, 0x13, 0x8b, + 0x54, 0x73, 0x54, 0x25, 0x54, 0x8c, 0xbe, 0x98, 0x7a, 0x67, 0xad, 0xda, + 0xb3, 0x4e, 0xb3, 0xfa, 0x82, 0xa8, 0x4a, 0x67, 0x98, 0x56, 0x57, 0x54, + 0x71, 0xcd, 0x12, 0x7f, 0xed, 0xa3, 0x01, 0xc0, 0x6a, 0x8b, 0x24, 0x03, + 0x96, 0x88, 0xbe, 0x97, 0x66, 0x2a, 0xbc, 0x53, 0xc9, 0x83, 0x06, 0x51, + 0x5a, 0x88, 0x65, 0x13, 0x18, 0xe4, 0x3a, 0xed, 0x6b, 0xf1, 0x61, 0x5b, + 0x4c, 0xc8, 0x1e, 0xf4, 0xc2, 0xae, 0x08, 0x5e, 0x2d, 0x5f, 0xf8, 0x12, + 0x7f, 0xa2, 0xfc, 0xbb, 0x21, 0x18, 0x30, 0xda, 0xfe, 0x40, 0xfb, 0x01, + 0xca, 0x2e, 0x37, 0x0e, 0xce, 0xdd, 0x76, 0x87, 0x82, 0x46, 0x0b, 0x3a, + 0x77, 0x8f, 0xc0, 0x72, 0x07, 0x2c, 0x7f, 0x9d, 0x1e, 0x86, 0x5b, 0xed, + 0x27, 0x29, 0xdf, 0x03, 0x97, 0x62, 0xef, 0x44, 0xd3, 0x5b, 0x3d, 0xdb, + 0x9c, 0x5e, 0x1b, 0x7b, 0x39, 0xb4, 0x0b, 0x6d, 0x04, 0x6b, 0xbb, 0xbb, + 0x2c, 0x5f, 0xcf, 0xb3, 0x7a, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x5e, 0x79, 0x65, 0x49, 0xa5, 0x76, 0x79, 0xf9, 0x05, + 0x45, 0x0f, 0xf4, 0x03, 0xbd, 0xa4, 0x7d, 0x29, 0xd5, 0xde, 0x33, 0x63, + 0xd8, 0xb8, 0xac, 0x97, 0xeb, 0x3f, 0x5e, 0x55, 0xe8, 0x7d, 0xf3, 0xe7, + 0x3b, 0x5c, 0x2d, 0x54, 0x67, 0x36, 0xd6, 0x1d, 0x46, 0xf5, 0xca, 0x2d, + 0x8b, 0x3a, 0x7e, 0xdc, 0x45, 0x38, 0x79, 0x7e, 0x65, 0x71, 0x5f, 0x1c, + 0x5e, 0x79, 0xb1, 0x40, 0xcd, 0xfe, 0xc5, 0xe1, 0xc1, 0x6b, 0x78, 0x04, + 0x4e, 0x8e, 0x79, 0xf9, 0x0a, 0xfc, 0x79, 0xb1, 0x5e, 0xb3, 0x60, 0xe3, + 0x68, 0x7b, 0xc6, 0xef, 0xcb, 0x71, 0x4c, 0xba, 0xa7, 0x79, 0x5c, 0x7a, + 0x81, 0xd1, 0x71, 0xe7, 0x00, 0x21, 0x13, 0xe2, 0x55, 0x69, 0x0e, 0x75, + 0xbe, 0x09, 0xc3, 0x4f, 0xa9, 0xc9, 0x68, 0x22, 0x0e, 0x97, 0x8d, 0x89, + 0x6e, 0xf1, 0xe8, 0x88, 0x7a, 0xd1, 0xd9, 0x09, 0x5d, 0xd3, 0x28, 0x78, + 0x25, 0x0b, 0x1c, 0x47, 0x73, 0x25, 0xcc, 0x21, 0xb6, 0xda, 0xc6, 0x24, + 0x5a, 0xd0, 0x37, 0x14, 0x46, 0xc7, 0x94, 0x69, 0xe4, 0x43, 0x6f, 0x47, + 0xde, 0x00, 0x33, 0x4d, 0x8f, 0x95, 0x72, 0xfa, 0x68, 0x71, 0x17, 0x66, + 0x12, 0x1a, 0x87, 0x27, 0xf7, 0xef, 0x7e, 0xe0, 0x35, 0x58, 0xf2, 0x4d, + 0x6f, 0x35, 0x01, 0xaa, 0x96, 0xe2, 0x3d, 0x51, 0x13, 0x86, 0x9c, 0x79, + 0xd0, 0xb7, 0xb6, 0x64, 0xe8, 0x86, 0x65, 0x50, 0xbf, 0xcc, 0x27, 0x53, + 0x1f, 0x51, 0xd4, 0xca, 0xbe, 0xf5, 0xdd, 0x77, 0x70, 0x98, 0x0f, 0xee, + 0xa8, 0x96, 0x07, 0x5f, 0x45, 0x6a, 0x7a, 0x0d, 0x03, 0x9c, 0x4f, 0x29, + 0xf6, 0x06, 0xf3, 0x5d, 0x58, 0x6c, 0x47, 0xd0, 0x96, 0xa9, 0x03, 0x17, + 0xbb, 0x4e, 0xc9, 0x21, 0xe0, 0xac, 0xcd, 0x78, 0x78, 0xb2, 0xfe, 0x81, + 0xb2, 0x51, 0x53, 0xa6, 0x1f, 0x98, 0x45, 0x02, 0x81, 0x81, 0x00, 0xcf, + 0x73, 0x8c, 0xbe, 0x6d, 0x45, 0x2d, 0x0c, 0x0b, 0x5d, 0x5c, 0x6c, 0x75, + 0x78, 0xcc, 0x35, 0x48, 0xb6, 0x98, 0xf1, 0xb9, 0x64, 0x60, 0x8c, 0x43, + 0xeb, 0x85, 0xab, 0x04, 0xb6, 0x7d, 0x1b, 0x71, 0x75, 0x06, 0xe2, 0xda, + 0x84, 0x68, 0x2e, 0x7f, 0x4c, 0xe3, 0x73, 0xb4, 0xde, 0x51, 0x4b, 0xb6, + 0x51, 0x86, 0x7b, 0xd0, 0xe6, 0x4d, 0xf3, 0xd1, 0xcf, 0x1a, 0xfe, 0x7f, + 0x3a, 0x83, 0xba, 0xb3, 0xe1, 0xff, 0x54, 0x13, 0x93, 0xd7, 0x9c, 0x27, + 0x80, 0xb7, 0x1e, 0x64, 0x9e, 0xf7, 0x32, 0x2b, 0x46, 0x29, 0xf7, 0xf8, + 0x18, 0x6c, 0xf7, 0x4a, 0xbe, 0x4b, 0xee, 0x96, 0x90, 0x8f, 0xa2, 0x16, + 0x22, 0x6a, 0xcc, 0x48, 0x06, 0x74, 0x63, 0x43, 0x7f, 0x27, 0x22, 0x44, + 0x3c, 0x2d, 0x3b, 0x62, 0xf1, 0x1c, 0xb4, 0x27, 0x33, 0x85, 0x26, 0x60, + 0x48, 0x16, 0xcb, 0xef, 0xf8, 0xcd, 0x37, 0x02, 0x81, 0x81, 0x00, 0xce, + 0x15, 0x43, 0x6e, 0x4b, 0x0f, 0xf9, 0x3f, 0x87, 0xc3, 0x41, 0x45, 0x97, + 0xb1, 0x49, 0xc2, 0x19, 0x23, 0x87, 0xe4, 0x24, 0x1c, 0x64, 0xe5, 0x28, + 0xcb, 0x43, 0x10, 0x14, 0x14, 0x0e, 0x19, 0xcb, 0xbb, 0xdb, 0xfd, 0x11, + 0x9d, 0x17, 0x68, 0x78, 0x6d, 0x61, 0x70, 0x63, 0x3a, 0xa1, 0xb3, 0xf3, + 0xa7, 0x5b, 0x0e, 0xff, 0xb7, 0x61, 0x11, 0x54, 0x91, 0x99, 0xe5, 0x91, + 0x32, 0x2d, 0xeb, 0x3f, 0xd8, 0x3e, 0xf7, 0xd4, 0xcb, 0xd2, 0xa3, 0x41, + 0xc1, 0xee, 0xc6, 0x92, 0x13, 0xeb, 0x7f, 0x42, 0x58, 0xf4, 0xd0, 0xb2, + 0x74, 0x1d, 0x8e, 0x87, 0x46, 0xcd, 0x14, 0xb8, 0x16, 0xad, 0xb5, 0xbd, + 0x0d, 0x6c, 0x95, 0x5a, 0x16, 0xbf, 0xe9, 0x53, 0xda, 0xfb, 0xed, 0x83, + 0x51, 0x67, 0xa9, 0x55, 0xab, 0x54, 0x02, 0x95, 0x20, 0xa6, 0x68, 0x17, + 0x53, 0xa8, 0xea, 0x43, 0xe5, 0xb0, 0xa3, 0x02, 0x81, 0x80, 0x67, 0x9c, + 0x32, 0x83, 0x39, 0x57, 0xff, 0x73, 0xb0, 0x89, 0x64, 0x8b, 0xd6, 0xf0, + 0x0a, 0x2d, 0xe2, 0xaf, 0x30, 0x1c, 0x2a, 0x97, 0xf3, 0x90, 0x9a, 0xab, + 0x9b, 0x0b, 0x1b, 0x43, 0x79, 0xa0, 0xa7, 0x3d, 0xe7, 0xbe, 0x8d, 0x9c, + 0xeb, 0xdb, 0xad, 0x40, 0xdd, 0xa9, 0x00, 0x80, 0xb8, 0xe1, 0xb3, 0xa1, + 0x6c, 0x25, 0x92, 0xe4, 0x33, 0xb2, 0xbe, 0xeb, 0x4d, 0x74, 0x26, 0x5f, + 0x37, 0x43, 0x9c, 0x6c, 0x17, 0x76, 0x0a, 0x81, 0x20, 0x82, 0xa1, 0x48, + 0x2c, 0x2d, 0x45, 0xdc, 0x0f, 0x62, 0x43, 0x32, 0xbb, 0xeb, 0x59, 0x41, + 0xf9, 0xca, 0x58, 0xce, 0x4a, 0x66, 0x53, 0x54, 0xc8, 0x28, 0x10, 0x1e, + 0x08, 0x71, 0x16, 0xd8, 0x02, 0x71, 0x41, 0x58, 0xd4, 0x56, 0xcc, 0xf5, + 0xb1, 0x31, 0xa3, 0xed, 0x00, 0x85, 0x09, 0xbf, 0x35, 0x95, 0x41, 0x29, + 0x40, 0x19, 0x83, 0x35, 0x24, 0x69, 0x02, 0x81, 0x80, 0x55, 0x10, 0x0b, + 0xcc, 0x3b, 0xa9, 0x75, 0x3d, 0x16, 0xe1, 0xae, 0x50, 0x76, 0x63, 0x94, + 0x49, 0x4c, 0xad, 0x10, 0xcb, 0x47, 0x68, 0x7c, 0xf0, 0xe5, 0xdc, 0xb8, + 0x6a, 0xab, 0x8e, 0xf7, 0x9f, 0x08, 0x2c, 0x1b, 0x8a, 0xa2, 0xb9, 0x8f, + 0xce, 0xec, 0x5e, 0x61, 0xa8, 0xcd, 0x1c, 0x87, 0x60, 0x4a, 0xc3, 0x1a, + 0x5f, 0xdf, 0x87, 0x26, 0xc6, 0xcb, 0x7c, 0x69, 0xe4, 0x8b, 0x01, 0x06, + 0x59, 0x22, 0xfa, 0x34, 0x4b, 0x81, 0x87, 0x3c, 0x03, 0x6d, 0x02, 0x0a, + 0x77, 0xe6, 0x15, 0xd8, 0xcf, 0xa7, 0x68, 0x26, 0x6c, 0xfa, 0x2b, 0xd9, + 0x83, 0x5a, 0x2d, 0x0c, 0x3b, 0x70, 0x1c, 0xd4, 0x48, 0xbe, 0xa7, 0x0a, + 0xd9, 0xbe, 0xdc, 0xc3, 0x0c, 0x21, 0x33, 0xb3, 0x66, 0xff, 0x1c, 0x1b, + 0xc8, 0x96, 0x76, 0xe8, 0x6f, 0x44, 0x74, 0xbc, 0x9b, 0x1c, 0x7d, 0xc8, + 0xac, 0x21, 0xa8, 0x6e, 0x37, 0x02, 0x81, 0x80, 0x2c, 0x7c, 0xad, 0x1e, + 0x75, 0xf6, 0x69, 0x1d, 0xe7, 0xa6, 0xca, 0x74, 0x7d, 0x67, 0xc8, 0x65, + 0x28, 0x66, 0xc4, 0x43, 0xa6, 0xbd, 0x40, 0x57, 0xae, 0xb7, 0x65, 0x2c, + 0x52, 0xf9, 0xe4, 0xc7, 0x81, 0x7b, 0x56, 0xa3, 0xd2, 0x0d, 0xe8, 0x33, + 0x70, 0xcf, 0x06, 0x84, 0xb3, 0x4e, 0x44, 0x50, 0x75, 0x61, 0x96, 0x86, + 0x4b, 0xb6, 0x2b, 0xad, 0xf0, 0xad, 0x57, 0xd0, 0x37, 0x0d, 0x1d, 0x35, + 0x50, 0xcb, 0x69, 0x22, 0x39, 0x29, 0xb9, 0x3a, 0xd3, 0x29, 0x23, 0x02, + 0x60, 0xf7, 0xab, 0x30, 0x40, 0xda, 0x8e, 0x4d, 0x45, 0x70, 0x26, 0xf4, + 0xa2, 0x0d, 0xd0, 0x64, 0x5d, 0x47, 0x3c, 0x18, 0xf4, 0xd4, 0x52, 0x95, + 0x00, 0xae, 0x84, 0x6b, 0x47, 0xb2, 0x3c, 0x82, 0xd3, 0x72, 0x53, 0xde, + 0x72, 0x2c, 0xf7, 0xc1, 0x22, 0x36, 0xd9, 0x18, 0x56, 0xfe, 0x39, 0x28, + 0x33, 0xe0, 0xdb, 0x03}; // A 3072 bit RSA key in PKCS#8 PrivateKeyInfo format // Used to verify the functions that manipulate RSA keys. static const uint8_t kTestRSAPKCS8PrivateKeyInfo3_3072[] = { - 0x30, 0x82, 0x06, 0xfe, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, - 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, - 0x06, 0xe8, 0x30, 0x82, 0x06, 0xe4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, - 0x81, 0x00, 0xe3, 0x32, 0x2f, 0x0a, 0x94, 0x06, 0x46, 0x99, 0x0a, 0x58, - 0xda, 0xd0, 0x9b, 0x2b, 0xe4, 0x2a, 0x35, 0xdf, 0xb7, 0x9b, 0x5e, 0xbf, - 0xfb, 0xe5, 0x24, 0x47, 0x5a, 0x94, 0x06, 0x04, 0xe5, 0x43, 0xed, 0x37, - 0x33, 0x94, 0x09, 0xd0, 0xae, 0xad, 0x86, 0xb4, 0xc7, 0xc3, 0x56, 0x6f, - 0x88, 0x74, 0xfb, 0xab, 0xf7, 0xcf, 0xcb, 0xa6, 0x89, 0x48, 0x4a, 0x02, - 0x89, 0xcd, 0xfd, 0x83, 0x3d, 0x2a, 0x27, 0xc1, 0xa2, 0x99, 0x8e, 0xef, - 0xcf, 0x91, 0xd3, 0xb2, 0x96, 0xe7, 0x5f, 0x0c, 0xb3, 0x44, 0x6a, 0xcf, - 0xc1, 0x22, 0xb9, 0xe4, 0xd4, 0xc0, 0xf2, 0xc3, 0x8d, 0xe1, 0x43, 0x38, - 0x31, 0x9c, 0x56, 0x04, 0xd4, 0x9d, 0x41, 0x02, 0x31, 0xce, 0x7e, 0xc0, - 0x11, 0x24, 0x54, 0xb1, 0xa2, 0x99, 0x0e, 0xe2, 0x0c, 0x5b, 0x24, 0x94, - 0x85, 0xe8, 0x8c, 0x30, 0xbb, 0x12, 0x94, 0x74, 0x0f, 0x67, 0xe5, 0x69, - 0xa4, 0xc4, 0x59, 0xd6, 0x77, 0x96, 0xae, 0xc6, 0x00, 0xbe, 0xf5, 0xe6, - 0x1f, 0x71, 0x90, 0x6d, 0xdd, 0xfb, 0x7b, 0x42, 0xd0, 0xdf, 0x4b, 0x58, - 0xaf, 0x9c, 0xba, 0xcb, 0x35, 0x4b, 0xf3, 0x06, 0x3a, 0x20, 0x42, 0x97, - 0x96, 0x95, 0x47, 0xbe, 0x2d, 0xeb, 0x9a, 0xb6, 0xea, 0xe0, 0xc1, 0x1d, - 0x80, 0x61, 0x3e, 0x8e, 0x18, 0x66, 0xf4, 0x26, 0x77, 0xcf, 0x56, 0x27, - 0x8b, 0xde, 0x93, 0x94, 0x3e, 0x1d, 0xe4, 0x5f, 0x6d, 0xf2, 0x39, 0x03, - 0x15, 0x4f, 0x2e, 0x58, 0x59, 0x75, 0x19, 0xb9, 0x24, 0x87, 0xd4, 0xff, - 0x64, 0x82, 0x11, 0x10, 0x34, 0x30, 0x09, 0x39, 0x43, 0x9c, 0xd2, 0x3b, - 0x45, 0xdc, 0x85, 0x4f, 0x6d, 0xb7, 0xbb, 0x49, 0xda, 0x3b, 0x07, 0xa2, - 0x76, 0x56, 0xa0, 0xee, 0xa9, 0xa9, 0x52, 0xb7, 0xf1, 0xfd, 0xde, 0xa1, - 0x6f, 0x0e, 0x7f, 0x82, 0x3f, 0x9e, 0x3d, 0x46, 0xcd, 0x48, 0x55, 0xe8, - 0x59, 0x65, 0xd8, 0xc7, 0xe4, 0x6b, 0xe6, 0xc0, 0xdd, 0x6e, 0x5c, 0xb7, - 0x0c, 0xdb, 0x29, 0xad, 0x8e, 0xa4, 0x86, 0xe9, 0x4d, 0xad, 0x54, 0xf9, - 0x56, 0x06, 0x0e, 0xc4, 0x2b, 0x01, 0xd9, 0x86, 0x1f, 0x65, 0xbe, 0x0d, - 0x77, 0x8d, 0x9d, 0xff, 0x37, 0x97, 0x57, 0xc3, 0x06, 0x8a, 0x05, 0x80, - 0x78, 0xd3, 0xbd, 0x91, 0xa5, 0xc1, 0x11, 0x4d, 0x99, 0x1a, 0x83, 0xd7, - 0x30, 0x1c, 0x24, 0xac, 0xdf, 0x6c, 0xc1, 0x23, 0x60, 0x76, 0x54, 0xbf, - 0x2b, 0xac, 0x34, 0xf0, 0x35, 0x92, 0x0d, 0x36, 0x29, 0x09, 0x24, 0xd5, - 0x54, 0xe9, 0x68, 0x9c, 0x90, 0x07, 0x16, 0x86, 0xb1, 0xd0, 0x9b, 0xa5, - 0x86, 0x4e, 0xce, 0xbf, 0x30, 0x9d, 0x91, 0xd7, 0xd2, 0xa6, 0x4f, 0xbb, - 0xbb, 0x9d, 0x7c, 0x0f, 0x58, 0xaa, 0xf1, 0xd0, 0x90, 0x66, 0x20, 0x48, - 0x8f, 0x29, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, 0x81, 0x00, - 0x88, 0x41, 0x28, 0x85, 0x27, 0x91, 0x3b, 0xf5, 0xbc, 0x86, 0xdd, 0x74, - 0x0e, 0x1b, 0x9c, 0x92, 0xd4, 0x0c, 0x7f, 0x88, 0xe6, 0xa2, 0x2c, 0xe7, - 0x97, 0x82, 0x53, 0x88, 0x42, 0xb3, 0xdc, 0xeb, 0x87, 0xf0, 0x7b, 0x36, - 0x65, 0x4c, 0x89, 0xf5, 0xf7, 0xbb, 0xa3, 0xb2, 0x3a, 0xbc, 0x59, 0x12, - 0x0f, 0x7d, 0x6a, 0xf9, 0x6c, 0x21, 0x4c, 0x63, 0xd6, 0x3e, 0xff, 0x76, - 0x52, 0x7b, 0xca, 0xca, 0xe5, 0x5c, 0xf3, 0xaf, 0x34, 0x52, 0x0e, 0x22, - 0x5e, 0xdb, 0xd4, 0x34, 0x9e, 0x84, 0x77, 0x5e, 0xa8, 0xd0, 0x3f, 0xfc, - 0x1b, 0x90, 0x69, 0x27, 0xee, 0x6f, 0xe9, 0x3f, 0x17, 0x99, 0x33, 0xe7, - 0x96, 0x8e, 0xff, 0x13, 0xf0, 0x50, 0xe8, 0x9d, 0xf6, 0xd6, 0x29, 0x71, - 0xa8, 0x79, 0x80, 0x12, 0x5b, 0x22, 0xa6, 0x56, 0x62, 0xf1, 0xcf, 0xfd, - 0x4f, 0x56, 0x4a, 0x5b, 0x32, 0x3d, 0x08, 0xa0, 0x3e, 0xad, 0xc4, 0xeb, - 0x1d, 0x15, 0xca, 0x52, 0xcc, 0x2e, 0x63, 0x74, 0x22, 0xf5, 0x08, 0x16, - 0x8b, 0x8f, 0xd8, 0x79, 0x61, 0xcb, 0x08, 0x89, 0x62, 0x1e, 0xa5, 0xf3, - 0x50, 0xf3, 0x5d, 0xdb, 0x56, 0xbc, 0x7d, 0x4f, 0xab, 0xa0, 0x4d, 0xe6, - 0xe9, 0x47, 0xdd, 0x32, 0x57, 0x6f, 0x2c, 0x1d, 0xee, 0xb3, 0x4a, 0xb3, - 0x07, 0x59, 0x20, 0xb9, 0x5d, 0xe3, 0x54, 0x27, 0x3c, 0x7c, 0x2b, 0x1d, - 0x07, 0xff, 0x49, 0x93, 0xe2, 0xe3, 0xb2, 0x65, 0xf3, 0x69, 0xc1, 0x1c, - 0x2a, 0x75, 0x80, 0x16, 0x37, 0xe6, 0x00, 0x5b, 0xd3, 0x1b, 0xac, 0xca, - 0x8b, 0x8b, 0x98, 0x77, 0x81, 0x67, 0xe3, 0xdc, 0xbb, 0xc4, 0x3a, 0x45, - 0x15, 0xec, 0xd9, 0xad, 0xdb, 0x60, 0xcf, 0xe5, 0xd8, 0xd9, 0xfc, 0xcf, - 0xbe, 0x76, 0x2f, 0x5b, 0x60, 0xdb, 0x06, 0x62, 0x5b, 0x80, 0x7e, 0x53, - 0xde, 0x74, 0xb1, 0xa3, 0xb6, 0x9b, 0x14, 0xd7, 0x09, 0x65, 0x21, 0x1d, - 0xd5, 0xd3, 0x34, 0xca, 0x89, 0xe7, 0xbc, 0xf4, 0x48, 0x81, 0x6a, 0xcf, - 0x28, 0xbe, 0x74, 0x8b, 0x40, 0xad, 0x86, 0xcd, 0xa5, 0xd6, 0xfa, 0x64, - 0x9b, 0xd2, 0xd4, 0x17, 0x20, 0xd6, 0x0d, 0xbe, 0x95, 0xd4, 0xaf, 0xa5, - 0xde, 0x31, 0x0d, 0x6a, 0x90, 0xc6, 0xd0, 0x59, 0xd4, 0x8c, 0x81, 0x2d, - 0x9d, 0x09, 0xf1, 0x22, 0xf5, 0x30, 0x2d, 0xdf, 0x85, 0x54, 0x34, 0x8a, - 0xde, 0x3c, 0xce, 0xdb, 0x36, 0x9f, 0xcf, 0x12, 0x61, 0x0e, 0x99, 0x87, - 0x70, 0x51, 0x04, 0x91, 0x74, 0xc6, 0x88, 0x22, 0x75, 0x02, 0x8f, 0x7e, - 0xb5, 0x79, 0x48, 0x2f, 0xf3, 0x3b, 0xb8, 0x82, 0x3e, 0x7e, 0x45, 0xe5, - 0xb2, 0xc8, 0x4c, 0x12, 0x73, 0xb8, 0x92, 0x04, 0xd1, 0x9a, 0xae, 0xaa, - 0x08, 0xd9, 0x23, 0x54, 0x19, 0x46, 0xc8, 0x56, 0x5f, 0x5e, 0x10, 0xa1, - 0x02, 0x81, 0xc1, 0x00, 0xf6, 0x38, 0x88, 0x31, 0x06, 0x85, 0xd9, 0x00, - 0xf0, 0x6b, 0xd8, 0x7d, 0x76, 0x08, 0xc0, 0x69, 0x6a, 0xfb, 0xa4, 0xc8, - 0xdc, 0x6b, 0x00, 0xaf, 0xae, 0x52, 0x82, 0xe6, 0xba, 0xc9, 0x5e, 0xc9, - 0xb7, 0x7f, 0xa1, 0xc4, 0xcb, 0xa0, 0xbc, 0x66, 0x3c, 0x55, 0x6a, 0xea, - 0x6e, 0x42, 0xf1, 0x6b, 0xbd, 0xc4, 0xf2, 0x6b, 0x91, 0x11, 0x82, 0x20, - 0xc2, 0xe6, 0x9e, 0x96, 0x5c, 0x9a, 0x7e, 0xb3, 0x57, 0x45, 0x9c, 0x42, - 0x60, 0x4c, 0x04, 0x4f, 0x47, 0xfb, 0xa7, 0x68, 0x4e, 0x15, 0x43, 0x5a, - 0x97, 0xb3, 0xfc, 0xd2, 0x91, 0x3c, 0x11, 0x5e, 0xaf, 0x57, 0x2a, 0xa1, - 0x45, 0xa5, 0x60, 0xf0, 0xbe, 0x31, 0xe8, 0xc4, 0x0b, 0x35, 0xe3, 0x42, - 0x9b, 0x22, 0x6b, 0xa3, 0x6c, 0x49, 0x71, 0x20, 0x34, 0x3f, 0x46, 0x0b, - 0x79, 0xc9, 0xb8, 0xb4, 0xbd, 0x9c, 0xad, 0xd3, 0xd8, 0x7e, 0x95, 0x9f, - 0x9a, 0xd4, 0x03, 0xe9, 0x5a, 0x54, 0x46, 0x94, 0x39, 0x55, 0xf1, 0x28, - 0x0d, 0xd1, 0xaa, 0xc9, 0xf8, 0x28, 0x58, 0xef, 0xb0, 0x62, 0xb6, 0x2d, - 0xc7, 0xd2, 0x09, 0x3a, 0x21, 0x0f, 0x7d, 0xa1, 0xb9, 0x59, 0xd5, 0xa7, - 0x43, 0xa9, 0x51, 0xb7, 0xbf, 0x9d, 0xf3, 0x85, 0xec, 0xb3, 0xfb, 0x51, - 0x61, 0xca, 0x81, 0x4d, 0xfa, 0xf1, 0xc3, 0x94, 0x37, 0x45, 0x91, 0xf0, - 0x4b, 0xfc, 0x8e, 0xff, 0x02, 0x81, 0xc1, 0x00, 0xec, 0x38, 0x37, 0x3b, - 0xba, 0x1b, 0x83, 0xaf, 0x3a, 0x00, 0xb9, 0x5e, 0x1f, 0xc8, 0xad, 0x57, - 0xcf, 0x7c, 0xe2, 0x94, 0x95, 0xf1, 0xec, 0x0a, 0x4b, 0x40, 0xc4, 0x48, - 0xfb, 0x47, 0x5f, 0x66, 0xc6, 0xf0, 0x70, 0x14, 0xe9, 0x08, 0xe4, 0x50, - 0x29, 0x0a, 0x24, 0x57, 0x93, 0x97, 0x21, 0xd9, 0xfb, 0xc5, 0x52, 0x0a, - 0x38, 0xb9, 0x68, 0xa3, 0x4f, 0x4b, 0xf8, 0xb8, 0x24, 0xef, 0x0c, 0x42, - 0xda, 0x57, 0x32, 0x77, 0xed, 0x9c, 0x78, 0xeb, 0x10, 0x3e, 0x70, 0x67, - 0xe9, 0x01, 0x03, 0x19, 0x19, 0xdb, 0x48, 0x9e, 0x1e, 0x52, 0x23, 0x88, - 0xb6, 0x87, 0xb8, 0x0d, 0x2d, 0x0c, 0xfc, 0x90, 0x31, 0x9f, 0xa6, 0x96, - 0x0a, 0xe1, 0x34, 0x72, 0x86, 0x0e, 0x49, 0x7c, 0xfe, 0x21, 0xaa, 0x25, - 0xdd, 0x36, 0xbb, 0x1f, 0x85, 0xfe, 0x34, 0x18, 0xc2, 0x36, 0xa2, 0x7d, - 0xee, 0xd9, 0x4f, 0x8e, 0xcb, 0x49, 0x8e, 0x7a, 0x43, 0x3c, 0x52, 0x73, - 0x18, 0x60, 0xf6, 0xb7, 0x7a, 0xc4, 0x7a, 0x8a, 0x1c, 0xf0, 0xc9, 0x2e, - 0xad, 0x54, 0xb1, 0x7b, 0x8e, 0xcb, 0x4d, 0xc2, 0xbc, 0x2a, 0x72, 0xfe, - 0x61, 0x01, 0xd8, 0xff, 0x0a, 0x22, 0x6c, 0x51, 0x7e, 0x06, 0x9e, 0x9e, - 0x3c, 0xe8, 0x31, 0x98, 0xf5, 0x08, 0x34, 0x7e, 0xfa, 0x08, 0xd1, 0x14, - 0xdf, 0xfd, 0x26, 0x2f, 0x1f, 0x5a, 0x89, 0xd7, 0x02, 0x81, 0xc0, 0x76, - 0xdd, 0xed, 0xe9, 0xf5, 0x23, 0x33, 0x13, 0x3f, 0xfe, 0x60, 0xa2, 0x99, - 0x14, 0x3a, 0x87, 0xea, 0x0d, 0x18, 0x8d, 0x9b, 0xd3, 0xd0, 0x9d, 0xff, - 0xc3, 0x77, 0xcc, 0x9a, 0x0a, 0x53, 0x47, 0x80, 0xde, 0x0e, 0x23, 0xea, - 0xc6, 0x6b, 0x8d, 0xd3, 0xbc, 0xcd, 0x03, 0xe6, 0x3d, 0x4d, 0x3d, 0xdd, - 0x7c, 0xb2, 0x27, 0xf9, 0xfe, 0x00, 0xdb, 0x7e, 0x1c, 0x46, 0x1d, 0x83, - 0x11, 0x56, 0xef, 0x8f, 0xc7, 0x5c, 0x5b, 0xb3, 0x0f, 0x9f, 0xd9, 0x02, - 0x80, 0x5c, 0x5e, 0x7f, 0xab, 0xc6, 0x3b, 0x7b, 0x17, 0x7a, 0x8b, 0xd1, - 0x6f, 0xb5, 0x57, 0x07, 0xc1, 0x46, 0x24, 0x5b, 0x72, 0x2e, 0xad, 0xaa, - 0xb4, 0x7f, 0x91, 0xfd, 0x73, 0x83, 0x86, 0x89, 0x4c, 0x81, 0xb8, 0x80, - 0xb3, 0xa7, 0xf8, 0x8b, 0x20, 0xac, 0xd9, 0x27, 0x6f, 0x9a, 0x4b, 0x2f, - 0x6a, 0xef, 0x84, 0x61, 0x75, 0x23, 0x18, 0xcd, 0x6f, 0x63, 0x80, 0x09, - 0x8a, 0xbc, 0x14, 0x1c, 0xe5, 0xff, 0xa9, 0x7d, 0x9a, 0x66, 0x20, 0x61, - 0x3c, 0x61, 0x4b, 0x3d, 0xd5, 0x39, 0xec, 0x3a, 0x16, 0x8d, 0x3b, 0xd1, - 0xf0, 0x1f, 0x8f, 0xae, 0xe2, 0xce, 0xc1, 0x94, 0x69, 0xae, 0xb8, 0xcd, - 0xba, 0x1c, 0x71, 0xe0, 0x47, 0x37, 0xa2, 0x1f, 0x5a, 0xdb, 0x37, 0xe1, - 0x59, 0x4c, 0x39, 0x46, 0xc1, 0xc0, 0x65, 0xc8, 0xd9, 0x61, 0xd3, 0x02, - 0x81, 0xc0, 0x2f, 0x63, 0xe7, 0xd0, 0xd7, 0xb9, 0x85, 0x65, 0xb6, 0x21, - 0x47, 0x0f, 0x17, 0x19, 0x4f, 0x8d, 0x7a, 0x56, 0xf7, 0xae, 0x0f, 0x97, - 0x05, 0x5f, 0xdb, 0x51, 0x17, 0x0f, 0xfd, 0x39, 0x88, 0x6e, 0x3a, 0x23, - 0x2a, 0x99, 0x47, 0x57, 0x3d, 0x56, 0xc7, 0xa4, 0xfd, 0x3d, 0x84, 0xa2, - 0xa1, 0x6b, 0xf6, 0x12, 0xd4, 0x2e, 0xb0, 0xca, 0xa1, 0xaf, 0x81, 0xcd, - 0x20, 0x0c, 0xf1, 0x7b, 0xf3, 0xdd, 0xc5, 0xa8, 0x10, 0xbb, 0xf6, 0xb3, - 0x99, 0x9e, 0xaf, 0x17, 0x97, 0xbd, 0x81, 0x05, 0x6e, 0xf5, 0xae, 0x36, - 0x4c, 0x0f, 0x4c, 0xcd, 0xf5, 0xcb, 0x0b, 0xb3, 0x96, 0xbd, 0x2d, 0xf8, - 0x99, 0x02, 0xe4, 0xb1, 0xbe, 0xde, 0x03, 0x38, 0xc3, 0x28, 0xe6, 0xb4, - 0x1f, 0x12, 0x30, 0x79, 0xd8, 0x84, 0xd8, 0x28, 0x8e, 0xc9, 0xf8, 0x3b, - 0xd3, 0x7f, 0xd4, 0x16, 0xd9, 0xea, 0xa1, 0xec, 0x7f, 0x05, 0x8a, 0xcb, - 0x2b, 0x06, 0x64, 0x4e, 0xc9, 0xcb, 0xc5, 0x6c, 0x4e, 0x92, 0xe8, 0xd2, - 0x5a, 0x33, 0x33, 0x33, 0x2b, 0x69, 0x6d, 0xe4, 0xbb, 0xe6, 0xa9, 0xf3, - 0x27, 0x9a, 0x95, 0xdd, 0x7e, 0x4c, 0x82, 0x71, 0xb8, 0x73, 0x12, 0x39, - 0x6d, 0xb9, 0xbb, 0xaa, 0xe0, 0x4f, 0xa6, 0xb0, 0x7e, 0xa2, 0xcd, 0x25, - 0xe4, 0x42, 0x45, 0x2f, 0x57, 0xa2, 0xf4, 0x7c, 0xf9, 0x18, 0x23, 0x16, - 0x2a, 0xe9, 0x02, 0x81, 0xc1, 0x00, 0xab, 0x35, 0x0d, 0x35, 0x94, 0x9d, - 0x96, 0xb2, 0xb7, 0x45, 0x16, 0xef, 0xb7, 0xea, 0xba, 0xa4, 0x32, 0xec, - 0x43, 0x05, 0xb0, 0x14, 0xbd, 0x9e, 0xd2, 0xbe, 0x0a, 0x0c, 0x4f, 0xca, - 0x4f, 0xf3, 0x11, 0xb3, 0x1f, 0xdc, 0x04, 0x18, 0x38, 0x9d, 0xb0, 0x09, - 0xb8, 0xf1, 0xcf, 0x7a, 0x89, 0x03, 0xd8, 0xed, 0x28, 0x30, 0xe8, 0xe6, - 0xbc, 0x7c, 0x1c, 0x59, 0x12, 0xf8, 0x95, 0x9b, 0x36, 0xad, 0xf2, 0xea, - 0x4a, 0x34, 0x00, 0xcf, 0x94, 0x3e, 0xeb, 0xff, 0xe2, 0x5b, 0x6c, 0x72, - 0xe3, 0x04, 0xd1, 0x10, 0x2e, 0xdd, 0x18, 0x8d, 0x9a, 0x84, 0x93, 0x55, - 0x4a, 0x80, 0x6c, 0xb5, 0x82, 0xc4, 0x16, 0x19, 0xc4, 0xba, 0xad, 0x2e, - 0x40, 0x76, 0xb3, 0xc9, 0xd4, 0x26, 0x5d, 0xc9, 0xb1, 0x05, 0x0f, 0x1f, - 0x7d, 0x59, 0x8c, 0x7b, 0xbe, 0x34, 0x09, 0x3e, 0x71, 0x0b, 0xc8, 0xf9, - 0xb3, 0x77, 0x4e, 0x4b, 0xfb, 0xbf, 0x81, 0x55, 0xa4, 0x5e, 0xc6, 0xe9, - 0xa1, 0xc3, 0x16, 0xff, 0xc8, 0x37, 0x88, 0xd5, 0x2d, 0xfb, 0x06, 0x98, - 0xe9, 0x82, 0x1b, 0x5e, 0x1e, 0xdd, 0x48, 0x5d, 0x6c, 0x59, 0xee, 0x7a, - 0xa6, 0xa4, 0x29, 0x41, 0x20, 0xb4, 0xcd, 0xf4, 0x58, 0x95, 0xfd, 0x7d, - 0xbf, 0xfc, 0x83, 0xf5, 0xe1, 0x5a, 0x5d, 0xa8, 0x08, 0x66, 0xd8, 0xa0, - 0x7f, 0xad, 0x7d, 0xcd, 0x22, 0x06 -}; + 0x30, 0x82, 0x06, 0xfe, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x06, 0xe8, 0x30, 0x82, 0x06, 0xe4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x81, 0x00, 0xe3, 0x32, 0x2f, 0x0a, 0x94, 0x06, 0x46, 0x99, 0x0a, 0x58, + 0xda, 0xd0, 0x9b, 0x2b, 0xe4, 0x2a, 0x35, 0xdf, 0xb7, 0x9b, 0x5e, 0xbf, + 0xfb, 0xe5, 0x24, 0x47, 0x5a, 0x94, 0x06, 0x04, 0xe5, 0x43, 0xed, 0x37, + 0x33, 0x94, 0x09, 0xd0, 0xae, 0xad, 0x86, 0xb4, 0xc7, 0xc3, 0x56, 0x6f, + 0x88, 0x74, 0xfb, 0xab, 0xf7, 0xcf, 0xcb, 0xa6, 0x89, 0x48, 0x4a, 0x02, + 0x89, 0xcd, 0xfd, 0x83, 0x3d, 0x2a, 0x27, 0xc1, 0xa2, 0x99, 0x8e, 0xef, + 0xcf, 0x91, 0xd3, 0xb2, 0x96, 0xe7, 0x5f, 0x0c, 0xb3, 0x44, 0x6a, 0xcf, + 0xc1, 0x22, 0xb9, 0xe4, 0xd4, 0xc0, 0xf2, 0xc3, 0x8d, 0xe1, 0x43, 0x38, + 0x31, 0x9c, 0x56, 0x04, 0xd4, 0x9d, 0x41, 0x02, 0x31, 0xce, 0x7e, 0xc0, + 0x11, 0x24, 0x54, 0xb1, 0xa2, 0x99, 0x0e, 0xe2, 0x0c, 0x5b, 0x24, 0x94, + 0x85, 0xe8, 0x8c, 0x30, 0xbb, 0x12, 0x94, 0x74, 0x0f, 0x67, 0xe5, 0x69, + 0xa4, 0xc4, 0x59, 0xd6, 0x77, 0x96, 0xae, 0xc6, 0x00, 0xbe, 0xf5, 0xe6, + 0x1f, 0x71, 0x90, 0x6d, 0xdd, 0xfb, 0x7b, 0x42, 0xd0, 0xdf, 0x4b, 0x58, + 0xaf, 0x9c, 0xba, 0xcb, 0x35, 0x4b, 0xf3, 0x06, 0x3a, 0x20, 0x42, 0x97, + 0x96, 0x95, 0x47, 0xbe, 0x2d, 0xeb, 0x9a, 0xb6, 0xea, 0xe0, 0xc1, 0x1d, + 0x80, 0x61, 0x3e, 0x8e, 0x18, 0x66, 0xf4, 0x26, 0x77, 0xcf, 0x56, 0x27, + 0x8b, 0xde, 0x93, 0x94, 0x3e, 0x1d, 0xe4, 0x5f, 0x6d, 0xf2, 0x39, 0x03, + 0x15, 0x4f, 0x2e, 0x58, 0x59, 0x75, 0x19, 0xb9, 0x24, 0x87, 0xd4, 0xff, + 0x64, 0x82, 0x11, 0x10, 0x34, 0x30, 0x09, 0x39, 0x43, 0x9c, 0xd2, 0x3b, + 0x45, 0xdc, 0x85, 0x4f, 0x6d, 0xb7, 0xbb, 0x49, 0xda, 0x3b, 0x07, 0xa2, + 0x76, 0x56, 0xa0, 0xee, 0xa9, 0xa9, 0x52, 0xb7, 0xf1, 0xfd, 0xde, 0xa1, + 0x6f, 0x0e, 0x7f, 0x82, 0x3f, 0x9e, 0x3d, 0x46, 0xcd, 0x48, 0x55, 0xe8, + 0x59, 0x65, 0xd8, 0xc7, 0xe4, 0x6b, 0xe6, 0xc0, 0xdd, 0x6e, 0x5c, 0xb7, + 0x0c, 0xdb, 0x29, 0xad, 0x8e, 0xa4, 0x86, 0xe9, 0x4d, 0xad, 0x54, 0xf9, + 0x56, 0x06, 0x0e, 0xc4, 0x2b, 0x01, 0xd9, 0x86, 0x1f, 0x65, 0xbe, 0x0d, + 0x77, 0x8d, 0x9d, 0xff, 0x37, 0x97, 0x57, 0xc3, 0x06, 0x8a, 0x05, 0x80, + 0x78, 0xd3, 0xbd, 0x91, 0xa5, 0xc1, 0x11, 0x4d, 0x99, 0x1a, 0x83, 0xd7, + 0x30, 0x1c, 0x24, 0xac, 0xdf, 0x6c, 0xc1, 0x23, 0x60, 0x76, 0x54, 0xbf, + 0x2b, 0xac, 0x34, 0xf0, 0x35, 0x92, 0x0d, 0x36, 0x29, 0x09, 0x24, 0xd5, + 0x54, 0xe9, 0x68, 0x9c, 0x90, 0x07, 0x16, 0x86, 0xb1, 0xd0, 0x9b, 0xa5, + 0x86, 0x4e, 0xce, 0xbf, 0x30, 0x9d, 0x91, 0xd7, 0xd2, 0xa6, 0x4f, 0xbb, + 0xbb, 0x9d, 0x7c, 0x0f, 0x58, 0xaa, 0xf1, 0xd0, 0x90, 0x66, 0x20, 0x48, + 0x8f, 0x29, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, 0x81, 0x00, + 0x88, 0x41, 0x28, 0x85, 0x27, 0x91, 0x3b, 0xf5, 0xbc, 0x86, 0xdd, 0x74, + 0x0e, 0x1b, 0x9c, 0x92, 0xd4, 0x0c, 0x7f, 0x88, 0xe6, 0xa2, 0x2c, 0xe7, + 0x97, 0x82, 0x53, 0x88, 0x42, 0xb3, 0xdc, 0xeb, 0x87, 0xf0, 0x7b, 0x36, + 0x65, 0x4c, 0x89, 0xf5, 0xf7, 0xbb, 0xa3, 0xb2, 0x3a, 0xbc, 0x59, 0x12, + 0x0f, 0x7d, 0x6a, 0xf9, 0x6c, 0x21, 0x4c, 0x63, 0xd6, 0x3e, 0xff, 0x76, + 0x52, 0x7b, 0xca, 0xca, 0xe5, 0x5c, 0xf3, 0xaf, 0x34, 0x52, 0x0e, 0x22, + 0x5e, 0xdb, 0xd4, 0x34, 0x9e, 0x84, 0x77, 0x5e, 0xa8, 0xd0, 0x3f, 0xfc, + 0x1b, 0x90, 0x69, 0x27, 0xee, 0x6f, 0xe9, 0x3f, 0x17, 0x99, 0x33, 0xe7, + 0x96, 0x8e, 0xff, 0x13, 0xf0, 0x50, 0xe8, 0x9d, 0xf6, 0xd6, 0x29, 0x71, + 0xa8, 0x79, 0x80, 0x12, 0x5b, 0x22, 0xa6, 0x56, 0x62, 0xf1, 0xcf, 0xfd, + 0x4f, 0x56, 0x4a, 0x5b, 0x32, 0x3d, 0x08, 0xa0, 0x3e, 0xad, 0xc4, 0xeb, + 0x1d, 0x15, 0xca, 0x52, 0xcc, 0x2e, 0x63, 0x74, 0x22, 0xf5, 0x08, 0x16, + 0x8b, 0x8f, 0xd8, 0x79, 0x61, 0xcb, 0x08, 0x89, 0x62, 0x1e, 0xa5, 0xf3, + 0x50, 0xf3, 0x5d, 0xdb, 0x56, 0xbc, 0x7d, 0x4f, 0xab, 0xa0, 0x4d, 0xe6, + 0xe9, 0x47, 0xdd, 0x32, 0x57, 0x6f, 0x2c, 0x1d, 0xee, 0xb3, 0x4a, 0xb3, + 0x07, 0x59, 0x20, 0xb9, 0x5d, 0xe3, 0x54, 0x27, 0x3c, 0x7c, 0x2b, 0x1d, + 0x07, 0xff, 0x49, 0x93, 0xe2, 0xe3, 0xb2, 0x65, 0xf3, 0x69, 0xc1, 0x1c, + 0x2a, 0x75, 0x80, 0x16, 0x37, 0xe6, 0x00, 0x5b, 0xd3, 0x1b, 0xac, 0xca, + 0x8b, 0x8b, 0x98, 0x77, 0x81, 0x67, 0xe3, 0xdc, 0xbb, 0xc4, 0x3a, 0x45, + 0x15, 0xec, 0xd9, 0xad, 0xdb, 0x60, 0xcf, 0xe5, 0xd8, 0xd9, 0xfc, 0xcf, + 0xbe, 0x76, 0x2f, 0x5b, 0x60, 0xdb, 0x06, 0x62, 0x5b, 0x80, 0x7e, 0x53, + 0xde, 0x74, 0xb1, 0xa3, 0xb6, 0x9b, 0x14, 0xd7, 0x09, 0x65, 0x21, 0x1d, + 0xd5, 0xd3, 0x34, 0xca, 0x89, 0xe7, 0xbc, 0xf4, 0x48, 0x81, 0x6a, 0xcf, + 0x28, 0xbe, 0x74, 0x8b, 0x40, 0xad, 0x86, 0xcd, 0xa5, 0xd6, 0xfa, 0x64, + 0x9b, 0xd2, 0xd4, 0x17, 0x20, 0xd6, 0x0d, 0xbe, 0x95, 0xd4, 0xaf, 0xa5, + 0xde, 0x31, 0x0d, 0x6a, 0x90, 0xc6, 0xd0, 0x59, 0xd4, 0x8c, 0x81, 0x2d, + 0x9d, 0x09, 0xf1, 0x22, 0xf5, 0x30, 0x2d, 0xdf, 0x85, 0x54, 0x34, 0x8a, + 0xde, 0x3c, 0xce, 0xdb, 0x36, 0x9f, 0xcf, 0x12, 0x61, 0x0e, 0x99, 0x87, + 0x70, 0x51, 0x04, 0x91, 0x74, 0xc6, 0x88, 0x22, 0x75, 0x02, 0x8f, 0x7e, + 0xb5, 0x79, 0x48, 0x2f, 0xf3, 0x3b, 0xb8, 0x82, 0x3e, 0x7e, 0x45, 0xe5, + 0xb2, 0xc8, 0x4c, 0x12, 0x73, 0xb8, 0x92, 0x04, 0xd1, 0x9a, 0xae, 0xaa, + 0x08, 0xd9, 0x23, 0x54, 0x19, 0x46, 0xc8, 0x56, 0x5f, 0x5e, 0x10, 0xa1, + 0x02, 0x81, 0xc1, 0x00, 0xf6, 0x38, 0x88, 0x31, 0x06, 0x85, 0xd9, 0x00, + 0xf0, 0x6b, 0xd8, 0x7d, 0x76, 0x08, 0xc0, 0x69, 0x6a, 0xfb, 0xa4, 0xc8, + 0xdc, 0x6b, 0x00, 0xaf, 0xae, 0x52, 0x82, 0xe6, 0xba, 0xc9, 0x5e, 0xc9, + 0xb7, 0x7f, 0xa1, 0xc4, 0xcb, 0xa0, 0xbc, 0x66, 0x3c, 0x55, 0x6a, 0xea, + 0x6e, 0x42, 0xf1, 0x6b, 0xbd, 0xc4, 0xf2, 0x6b, 0x91, 0x11, 0x82, 0x20, + 0xc2, 0xe6, 0x9e, 0x96, 0x5c, 0x9a, 0x7e, 0xb3, 0x57, 0x45, 0x9c, 0x42, + 0x60, 0x4c, 0x04, 0x4f, 0x47, 0xfb, 0xa7, 0x68, 0x4e, 0x15, 0x43, 0x5a, + 0x97, 0xb3, 0xfc, 0xd2, 0x91, 0x3c, 0x11, 0x5e, 0xaf, 0x57, 0x2a, 0xa1, + 0x45, 0xa5, 0x60, 0xf0, 0xbe, 0x31, 0xe8, 0xc4, 0x0b, 0x35, 0xe3, 0x42, + 0x9b, 0x22, 0x6b, 0xa3, 0x6c, 0x49, 0x71, 0x20, 0x34, 0x3f, 0x46, 0x0b, + 0x79, 0xc9, 0xb8, 0xb4, 0xbd, 0x9c, 0xad, 0xd3, 0xd8, 0x7e, 0x95, 0x9f, + 0x9a, 0xd4, 0x03, 0xe9, 0x5a, 0x54, 0x46, 0x94, 0x39, 0x55, 0xf1, 0x28, + 0x0d, 0xd1, 0xaa, 0xc9, 0xf8, 0x28, 0x58, 0xef, 0xb0, 0x62, 0xb6, 0x2d, + 0xc7, 0xd2, 0x09, 0x3a, 0x21, 0x0f, 0x7d, 0xa1, 0xb9, 0x59, 0xd5, 0xa7, + 0x43, 0xa9, 0x51, 0xb7, 0xbf, 0x9d, 0xf3, 0x85, 0xec, 0xb3, 0xfb, 0x51, + 0x61, 0xca, 0x81, 0x4d, 0xfa, 0xf1, 0xc3, 0x94, 0x37, 0x45, 0x91, 0xf0, + 0x4b, 0xfc, 0x8e, 0xff, 0x02, 0x81, 0xc1, 0x00, 0xec, 0x38, 0x37, 0x3b, + 0xba, 0x1b, 0x83, 0xaf, 0x3a, 0x00, 0xb9, 0x5e, 0x1f, 0xc8, 0xad, 0x57, + 0xcf, 0x7c, 0xe2, 0x94, 0x95, 0xf1, 0xec, 0x0a, 0x4b, 0x40, 0xc4, 0x48, + 0xfb, 0x47, 0x5f, 0x66, 0xc6, 0xf0, 0x70, 0x14, 0xe9, 0x08, 0xe4, 0x50, + 0x29, 0x0a, 0x24, 0x57, 0x93, 0x97, 0x21, 0xd9, 0xfb, 0xc5, 0x52, 0x0a, + 0x38, 0xb9, 0x68, 0xa3, 0x4f, 0x4b, 0xf8, 0xb8, 0x24, 0xef, 0x0c, 0x42, + 0xda, 0x57, 0x32, 0x77, 0xed, 0x9c, 0x78, 0xeb, 0x10, 0x3e, 0x70, 0x67, + 0xe9, 0x01, 0x03, 0x19, 0x19, 0xdb, 0x48, 0x9e, 0x1e, 0x52, 0x23, 0x88, + 0xb6, 0x87, 0xb8, 0x0d, 0x2d, 0x0c, 0xfc, 0x90, 0x31, 0x9f, 0xa6, 0x96, + 0x0a, 0xe1, 0x34, 0x72, 0x86, 0x0e, 0x49, 0x7c, 0xfe, 0x21, 0xaa, 0x25, + 0xdd, 0x36, 0xbb, 0x1f, 0x85, 0xfe, 0x34, 0x18, 0xc2, 0x36, 0xa2, 0x7d, + 0xee, 0xd9, 0x4f, 0x8e, 0xcb, 0x49, 0x8e, 0x7a, 0x43, 0x3c, 0x52, 0x73, + 0x18, 0x60, 0xf6, 0xb7, 0x7a, 0xc4, 0x7a, 0x8a, 0x1c, 0xf0, 0xc9, 0x2e, + 0xad, 0x54, 0xb1, 0x7b, 0x8e, 0xcb, 0x4d, 0xc2, 0xbc, 0x2a, 0x72, 0xfe, + 0x61, 0x01, 0xd8, 0xff, 0x0a, 0x22, 0x6c, 0x51, 0x7e, 0x06, 0x9e, 0x9e, + 0x3c, 0xe8, 0x31, 0x98, 0xf5, 0x08, 0x34, 0x7e, 0xfa, 0x08, 0xd1, 0x14, + 0xdf, 0xfd, 0x26, 0x2f, 0x1f, 0x5a, 0x89, 0xd7, 0x02, 0x81, 0xc0, 0x76, + 0xdd, 0xed, 0xe9, 0xf5, 0x23, 0x33, 0x13, 0x3f, 0xfe, 0x60, 0xa2, 0x99, + 0x14, 0x3a, 0x87, 0xea, 0x0d, 0x18, 0x8d, 0x9b, 0xd3, 0xd0, 0x9d, 0xff, + 0xc3, 0x77, 0xcc, 0x9a, 0x0a, 0x53, 0x47, 0x80, 0xde, 0x0e, 0x23, 0xea, + 0xc6, 0x6b, 0x8d, 0xd3, 0xbc, 0xcd, 0x03, 0xe6, 0x3d, 0x4d, 0x3d, 0xdd, + 0x7c, 0xb2, 0x27, 0xf9, 0xfe, 0x00, 0xdb, 0x7e, 0x1c, 0x46, 0x1d, 0x83, + 0x11, 0x56, 0xef, 0x8f, 0xc7, 0x5c, 0x5b, 0xb3, 0x0f, 0x9f, 0xd9, 0x02, + 0x80, 0x5c, 0x5e, 0x7f, 0xab, 0xc6, 0x3b, 0x7b, 0x17, 0x7a, 0x8b, 0xd1, + 0x6f, 0xb5, 0x57, 0x07, 0xc1, 0x46, 0x24, 0x5b, 0x72, 0x2e, 0xad, 0xaa, + 0xb4, 0x7f, 0x91, 0xfd, 0x73, 0x83, 0x86, 0x89, 0x4c, 0x81, 0xb8, 0x80, + 0xb3, 0xa7, 0xf8, 0x8b, 0x20, 0xac, 0xd9, 0x27, 0x6f, 0x9a, 0x4b, 0x2f, + 0x6a, 0xef, 0x84, 0x61, 0x75, 0x23, 0x18, 0xcd, 0x6f, 0x63, 0x80, 0x09, + 0x8a, 0xbc, 0x14, 0x1c, 0xe5, 0xff, 0xa9, 0x7d, 0x9a, 0x66, 0x20, 0x61, + 0x3c, 0x61, 0x4b, 0x3d, 0xd5, 0x39, 0xec, 0x3a, 0x16, 0x8d, 0x3b, 0xd1, + 0xf0, 0x1f, 0x8f, 0xae, 0xe2, 0xce, 0xc1, 0x94, 0x69, 0xae, 0xb8, 0xcd, + 0xba, 0x1c, 0x71, 0xe0, 0x47, 0x37, 0xa2, 0x1f, 0x5a, 0xdb, 0x37, 0xe1, + 0x59, 0x4c, 0x39, 0x46, 0xc1, 0xc0, 0x65, 0xc8, 0xd9, 0x61, 0xd3, 0x02, + 0x81, 0xc0, 0x2f, 0x63, 0xe7, 0xd0, 0xd7, 0xb9, 0x85, 0x65, 0xb6, 0x21, + 0x47, 0x0f, 0x17, 0x19, 0x4f, 0x8d, 0x7a, 0x56, 0xf7, 0xae, 0x0f, 0x97, + 0x05, 0x5f, 0xdb, 0x51, 0x17, 0x0f, 0xfd, 0x39, 0x88, 0x6e, 0x3a, 0x23, + 0x2a, 0x99, 0x47, 0x57, 0x3d, 0x56, 0xc7, 0xa4, 0xfd, 0x3d, 0x84, 0xa2, + 0xa1, 0x6b, 0xf6, 0x12, 0xd4, 0x2e, 0xb0, 0xca, 0xa1, 0xaf, 0x81, 0xcd, + 0x20, 0x0c, 0xf1, 0x7b, 0xf3, 0xdd, 0xc5, 0xa8, 0x10, 0xbb, 0xf6, 0xb3, + 0x99, 0x9e, 0xaf, 0x17, 0x97, 0xbd, 0x81, 0x05, 0x6e, 0xf5, 0xae, 0x36, + 0x4c, 0x0f, 0x4c, 0xcd, 0xf5, 0xcb, 0x0b, 0xb3, 0x96, 0xbd, 0x2d, 0xf8, + 0x99, 0x02, 0xe4, 0xb1, 0xbe, 0xde, 0x03, 0x38, 0xc3, 0x28, 0xe6, 0xb4, + 0x1f, 0x12, 0x30, 0x79, 0xd8, 0x84, 0xd8, 0x28, 0x8e, 0xc9, 0xf8, 0x3b, + 0xd3, 0x7f, 0xd4, 0x16, 0xd9, 0xea, 0xa1, 0xec, 0x7f, 0x05, 0x8a, 0xcb, + 0x2b, 0x06, 0x64, 0x4e, 0xc9, 0xcb, 0xc5, 0x6c, 0x4e, 0x92, 0xe8, 0xd2, + 0x5a, 0x33, 0x33, 0x33, 0x2b, 0x69, 0x6d, 0xe4, 0xbb, 0xe6, 0xa9, 0xf3, + 0x27, 0x9a, 0x95, 0xdd, 0x7e, 0x4c, 0x82, 0x71, 0xb8, 0x73, 0x12, 0x39, + 0x6d, 0xb9, 0xbb, 0xaa, 0xe0, 0x4f, 0xa6, 0xb0, 0x7e, 0xa2, 0xcd, 0x25, + 0xe4, 0x42, 0x45, 0x2f, 0x57, 0xa2, 0xf4, 0x7c, 0xf9, 0x18, 0x23, 0x16, + 0x2a, 0xe9, 0x02, 0x81, 0xc1, 0x00, 0xab, 0x35, 0x0d, 0x35, 0x94, 0x9d, + 0x96, 0xb2, 0xb7, 0x45, 0x16, 0xef, 0xb7, 0xea, 0xba, 0xa4, 0x32, 0xec, + 0x43, 0x05, 0xb0, 0x14, 0xbd, 0x9e, 0xd2, 0xbe, 0x0a, 0x0c, 0x4f, 0xca, + 0x4f, 0xf3, 0x11, 0xb3, 0x1f, 0xdc, 0x04, 0x18, 0x38, 0x9d, 0xb0, 0x09, + 0xb8, 0xf1, 0xcf, 0x7a, 0x89, 0x03, 0xd8, 0xed, 0x28, 0x30, 0xe8, 0xe6, + 0xbc, 0x7c, 0x1c, 0x59, 0x12, 0xf8, 0x95, 0x9b, 0x36, 0xad, 0xf2, 0xea, + 0x4a, 0x34, 0x00, 0xcf, 0x94, 0x3e, 0xeb, 0xff, 0xe2, 0x5b, 0x6c, 0x72, + 0xe3, 0x04, 0xd1, 0x10, 0x2e, 0xdd, 0x18, 0x8d, 0x9a, 0x84, 0x93, 0x55, + 0x4a, 0x80, 0x6c, 0xb5, 0x82, 0xc4, 0x16, 0x19, 0xc4, 0xba, 0xad, 0x2e, + 0x40, 0x76, 0xb3, 0xc9, 0xd4, 0x26, 0x5d, 0xc9, 0xb1, 0x05, 0x0f, 0x1f, + 0x7d, 0x59, 0x8c, 0x7b, 0xbe, 0x34, 0x09, 0x3e, 0x71, 0x0b, 0xc8, 0xf9, + 0xb3, 0x77, 0x4e, 0x4b, 0xfb, 0xbf, 0x81, 0x55, 0xa4, 0x5e, 0xc6, 0xe9, + 0xa1, 0xc3, 0x16, 0xff, 0xc8, 0x37, 0x88, 0xd5, 0x2d, 0xfb, 0x06, 0x98, + 0xe9, 0x82, 0x1b, 0x5e, 0x1e, 0xdd, 0x48, 0x5d, 0x6c, 0x59, 0xee, 0x7a, + 0xa6, 0xa4, 0x29, 0x41, 0x20, 0xb4, 0xcd, 0xf4, 0x58, 0x95, 0xfd, 0x7d, + 0xbf, 0xfc, 0x83, 0xf5, 0xe1, 0x5a, 0x5d, 0xa8, 0x08, 0x66, 0xd8, 0xa0, + 0x7f, 0xad, 0x7d, 0xcd, 0x22, 0x06}; // A 2048 bit RSA key in PKCS#8 PrivateKeyInfo format. // This is a different key from the one above. @@ -719,7 +667,844 @@ static const uint8_t kTestKeyRSAEuler_2048[] = { 0x33, 0xe0, 0xdb, 0x03, }; -static const uint8_t kTestSandbox[] = { 0x01, 0x02, 0x03 }; +// 8 randomly generated RSA private keys for testing the max number of DRM keys +// that can be loaded. +static const std::vector> kTestRSAPKCS8PrivateKeys_2048 = { + { + 0x30, 0x82, 0x04, 0xbd, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa7, 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xe3, 0x1a, 0x35, 0xd2, 0x41, 0x27, 0x76, 0xbe, 0x6a, 0xbb, + 0x87, 0xb1, 0x63, 0x4a, 0x8f, 0x83, 0x00, 0x37, 0x62, 0x8d, 0x21, 0xef, + 0xb2, 0x6d, 0xab, 0x94, 0xa4, 0x91, 0xc1, 0x16, 0x88, 0x73, 0x76, 0x4c, + 0x49, 0x7e, 0x60, 0xd7, 0xb4, 0xd5, 0xcc, 0xf1, 0x8f, 0xf1, 0x43, 0x78, + 0x52, 0xbb, 0x75, 0xf8, 0x90, 0x1f, 0xa0, 0x46, 0x3e, 0xba, 0xf1, 0x7a, + 0x0e, 0x80, 0xfa, 0xa0, 0x5a, 0x14, 0xd7, 0xbd, 0xe3, 0x8b, 0x08, 0xaf, + 0x43, 0xfb, 0x25, 0xdd, 0x6f, 0x1a, 0x14, 0x22, 0x08, 0xdb, 0xaf, 0x08, + 0xd9, 0xd3, 0x63, 0x1e, 0xb0, 0x3c, 0xe2, 0x15, 0xcb, 0xff, 0xf5, 0x54, + 0x87, 0x98, 0x66, 0xf0, 0x2b, 0x4b, 0x55, 0x61, 0xa0, 0xa3, 0xc8, 0x58, + 0xf2, 0x27, 0x9c, 0xce, 0x9d, 0x9c, 0x32, 0x2e, 0x8f, 0x5a, 0x18, 0xd2, + 0x66, 0x98, 0x5b, 0xc3, 0x33, 0x55, 0xdd, 0x5f, 0xe7, 0x7c, 0x9f, 0x0f, + 0xaa, 0xee, 0x39, 0xb9, 0xef, 0xa1, 0x14, 0x62, 0x41, 0xd4, 0xd3, 0x54, + 0x83, 0xdc, 0x63, 0xa1, 0x46, 0xba, 0x60, 0xb3, 0xe1, 0x72, 0xec, 0xc2, + 0x7a, 0xf6, 0x0c, 0x5f, 0xf6, 0xd0, 0x7e, 0x25, 0xc2, 0x84, 0xdc, 0x62, + 0xb0, 0x17, 0xa6, 0xb5, 0x12, 0xd0, 0x7f, 0x30, 0xbd, 0x94, 0x55, 0x8d, + 0x89, 0xe3, 0x37, 0xd1, 0xc2, 0xe0, 0x80, 0x59, 0xfe, 0xb1, 0x86, 0xe8, + 0xb2, 0xce, 0x30, 0x4e, 0xd7, 0xd8, 0xec, 0x5b, 0x54, 0x83, 0x93, 0x00, + 0xf0, 0x0a, 0x3a, 0x4e, 0x54, 0x12, 0x55, 0x07, 0xf9, 0x8d, 0x41, 0xda, + 0xe5, 0x16, 0xfc, 0xa8, 0x38, 0x29, 0x11, 0x94, 0xbd, 0xce, 0x40, 0x62, + 0xb4, 0x63, 0xbb, 0xde, 0x35, 0xf2, 0xa3, 0x06, 0xcb, 0x5e, 0x9e, 0x59, + 0x71, 0x1b, 0xd2, 0x77, 0xb7, 0xa4, 0x05, 0x4b, 0x70, 0xca, 0x77, 0x18, + 0x18, 0x65, 0xfe, 0x8f, 0x65, 0xe3, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x78, 0x13, 0x14, 0x9f, 0xed, 0x79, 0x0b, 0x2c, 0x94, + 0xcc, 0x40, 0x6b, 0x86, 0xff, 0x16, 0x30, 0x02, 0x7e, 0x46, 0x2a, 0x2e, + 0xe6, 0x48, 0x65, 0xfa, 0x11, 0x66, 0x8d, 0xf6, 0x14, 0x8e, 0xe2, 0xd5, + 0x8a, 0x72, 0x55, 0x52, 0xa8, 0xda, 0x61, 0x2c, 0xb2, 0x10, 0x14, 0x55, + 0x43, 0x1a, 0x23, 0x29, 0xb5, 0xd9, 0xa6, 0x0f, 0x1c, 0xf4, 0xef, 0xec, + 0xdb, 0x47, 0x2d, 0xe4, 0xd5, 0xc1, 0xab, 0x41, 0x82, 0x91, 0xfb, 0xa2, + 0x04, 0xe1, 0x21, 0xba, 0x1c, 0x81, 0x30, 0xbd, 0xb2, 0x5d, 0x12, 0xa2, + 0x52, 0x40, 0xb1, 0xa6, 0xb7, 0xc4, 0x20, 0xfc, 0xbc, 0xdf, 0x96, 0x9e, + 0xc5, 0x29, 0xc8, 0x67, 0xac, 0xd6, 0x87, 0x47, 0x46, 0x8e, 0x23, 0xea, + 0xbb, 0x34, 0x95, 0xc3, 0x2f, 0xef, 0x5f, 0x75, 0x9c, 0xee, 0x88, 0x89, + 0x95, 0x3d, 0x4f, 0x93, 0x3c, 0xfb, 0x38, 0x8c, 0x0a, 0xb8, 0x1e, 0x49, + 0xc5, 0x04, 0xfe, 0xb8, 0xfb, 0xac, 0x27, 0x03, 0x76, 0xdd, 0x7a, 0xaf, + 0x03, 0xe7, 0x08, 0x73, 0x78, 0xb9, 0x1a, 0xb0, 0xa4, 0x1f, 0x7c, 0xcd, + 0xc8, 0x97, 0xf0, 0x80, 0x44, 0xb4, 0x52, 0xa7, 0xc4, 0xf2, 0x10, 0xe3, + 0x19, 0xbc, 0xdc, 0xd4, 0x64, 0xb3, 0xf4, 0xe4, 0x64, 0x46, 0xf2, 0xf8, + 0xc5, 0xc1, 0x8c, 0xcd, 0xa1, 0xf9, 0x0b, 0x80, 0xe2, 0x9f, 0x0f, 0xcf, + 0x61, 0x40, 0x87, 0x59, 0xbe, 0xc3, 0xf1, 0x21, 0x0d, 0xfc, 0xce, 0xd5, + 0xd7, 0xdc, 0x30, 0xc8, 0x5f, 0x9e, 0x4b, 0x26, 0xac, 0xdd, 0x86, 0x5c, + 0xfd, 0xd7, 0x4c, 0xb9, 0x3b, 0x02, 0xf8, 0xef, 0x70, 0xb8, 0x7e, 0x8e, + 0x7e, 0x38, 0x1f, 0xaf, 0xb1, 0x3c, 0x3e, 0x93, 0xd4, 0xdb, 0x72, 0x4b, + 0x13, 0xd7, 0xbf, 0xac, 0x4f, 0x30, 0x95, 0x6f, 0x09, 0x03, 0xd5, 0x58, + 0x41, 0x41, 0x94, 0x32, 0x75, 0x8c, 0xa9, 0x02, 0x81, 0x81, 0x00, 0xfd, + 0x6f, 0xc2, 0x10, 0x20, 0x42, 0x2a, 0xb0, 0xf9, 0x52, 0x00, 0xe2, 0xec, + 0x03, 0x4c, 0x34, 0x42, 0xf8, 0x1c, 0x96, 0xe7, 0xe0, 0x4b, 0x7a, 0x33, + 0x51, 0x4c, 0x6d, 0xa9, 0xf5, 0xf2, 0x84, 0x23, 0x70, 0x8f, 0x48, 0x9c, + 0xcb, 0x0d, 0x92, 0x89, 0x55, 0x2d, 0x0c, 0x14, 0xc4, 0xa6, 0xa8, 0x93, + 0x3a, 0x44, 0xbe, 0x22, 0xac, 0x5b, 0x40, 0x9d, 0xbd, 0x0a, 0x76, 0xfa, + 0xd1, 0x71, 0xc0, 0x9a, 0x17, 0xa4, 0x15, 0x93, 0x84, 0xcb, 0x84, 0x20, + 0xeb, 0x69, 0x12, 0x30, 0x0a, 0x22, 0x55, 0x2d, 0x36, 0x9e, 0xa1, 0xbc, + 0x9c, 0xe3, 0x44, 0xef, 0xb6, 0xa0, 0x33, 0x59, 0x88, 0x99, 0x3f, 0xb8, + 0x93, 0x2a, 0x79, 0xbd, 0x0b, 0x53, 0xb6, 0x02, 0x78, 0x41, 0xfb, 0xcb, + 0x03, 0x43, 0xf5, 0x3d, 0x2c, 0x21, 0xb3, 0xd8, 0x75, 0xfe, 0x1a, 0x85, + 0xc2, 0x1b, 0x32, 0x4c, 0x68, 0x03, 0xf5, 0x02, 0x81, 0x81, 0x00, 0xe5, + 0x66, 0x43, 0x5f, 0x36, 0x27, 0x00, 0xcf, 0xed, 0x36, 0xf9, 0x70, 0xb4, + 0xef, 0x39, 0x25, 0x81, 0x3c, 0x1f, 0x1c, 0xd8, 0xcc, 0x23, 0x48, 0x11, + 0xaa, 0x87, 0x74, 0x16, 0x93, 0x44, 0x4a, 0x41, 0x66, 0x4e, 0x2e, 0x31, + 0xfe, 0x6e, 0x5d, 0x3d, 0x74, 0xe0, 0x71, 0x8a, 0xde, 0x6e, 0x2d, 0x9f, + 0xef, 0xb5, 0x28, 0x29, 0x7a, 0xbb, 0x0b, 0xba, 0x49, 0xe9, 0xef, 0x20, + 0xb2, 0xf6, 0x9b, 0x8b, 0x56, 0xf7, 0x1f, 0x9f, 0x62, 0x7e, 0x5a, 0x64, + 0xd8, 0xdd, 0x4e, 0xa3, 0x35, 0x77, 0x15, 0x7c, 0x74, 0x3e, 0x48, 0x58, + 0xa7, 0x86, 0xf0, 0x9c, 0x50, 0xfa, 0x5c, 0x42, 0xbc, 0x95, 0x18, 0x6d, + 0x40, 0xae, 0x41, 0x8f, 0x0d, 0x4e, 0xe2, 0xad, 0xa3, 0x3c, 0x54, 0x1c, + 0xbc, 0x25, 0x6d, 0x2e, 0x9a, 0x8c, 0x87, 0x59, 0xaa, 0xff, 0x6e, 0xba, + 0x85, 0x2d, 0x5a, 0x70, 0x24, 0xf3, 0x77, 0x02, 0x81, 0x81, 0x00, 0xa2, + 0xba, 0xfc, 0xef, 0xdf, 0xd6, 0xbc, 0x94, 0xd0, 0x32, 0x30, 0x71, 0x84, + 0xbc, 0x05, 0x55, 0x55, 0x5e, 0xfc, 0xf4, 0x84, 0xc5, 0x07, 0x91, 0xda, + 0x9b, 0xac, 0x28, 0x8a, 0x46, 0x6b, 0x47, 0x1f, 0x7e, 0x69, 0xf2, 0x65, + 0x03, 0x18, 0x9e, 0xeb, 0xe1, 0xae, 0x40, 0x20, 0xa1, 0xb8, 0xa5, 0x6b, + 0x8b, 0xb1, 0x92, 0x28, 0xaf, 0x65, 0x14, 0x93, 0x74, 0x4b, 0xe0, 0xe3, + 0xe2, 0x52, 0x59, 0x2a, 0x58, 0x5d, 0xba, 0xa0, 0xf3, 0x56, 0xbe, 0x6b, + 0x68, 0xdd, 0x19, 0x99, 0x91, 0x18, 0x44, 0x7a, 0xf8, 0xa4, 0x59, 0x13, + 0xc3, 0xe5, 0x46, 0x61, 0x69, 0x71, 0x6a, 0x27, 0x66, 0x47, 0x88, 0x9b, + 0xda, 0x9b, 0x1e, 0x7a, 0x1d, 0x68, 0xcd, 0xe8, 0xbe, 0x11, 0x18, 0x3d, + 0x5d, 0xc6, 0x68, 0x14, 0xb4, 0x5e, 0x9b, 0x9d, 0x34, 0xfe, 0x49, 0x47, + 0x73, 0xc0, 0x84, 0xc6, 0x7c, 0xcf, 0x75, 0x02, 0x81, 0x80, 0x0b, 0xf2, + 0x50, 0x6d, 0xe3, 0xef, 0x12, 0x0e, 0xc2, 0x06, 0xcb, 0xe4, 0xbf, 0xb7, + 0x79, 0x9d, 0x67, 0x66, 0x8f, 0x24, 0x3c, 0x72, 0x1d, 0x20, 0x42, 0xb3, + 0x43, 0xcc, 0x9a, 0xe4, 0x5e, 0x79, 0x13, 0x80, 0xd5, 0x6f, 0x78, 0x71, + 0x0c, 0xa4, 0x54, 0x70, 0x02, 0xc4, 0x46, 0xfc, 0x20, 0x76, 0xc5, 0xce, + 0x80, 0xfb, 0xaf, 0x75, 0x51, 0xca, 0x61, 0x90, 0x39, 0xdb, 0x97, 0x33, + 0x5a, 0xbe, 0x6c, 0xfa, 0x41, 0x72, 0x67, 0x25, 0x84, 0xf9, 0x06, 0x29, + 0x79, 0x15, 0x00, 0x50, 0xe7, 0x7b, 0xb9, 0xf8, 0x7f, 0xc9, 0xda, 0xbc, + 0x16, 0xbd, 0xef, 0x16, 0x14, 0x83, 0xbb, 0x82, 0x00, 0xad, 0xbd, 0xfa, + 0xd1, 0x58, 0x5e, 0xaf, 0xcd, 0xbc, 0xe6, 0x58, 0x0a, 0xeb, 0x42, 0x77, + 0xd5, 0xe7, 0x22, 0xb7, 0x2f, 0xbc, 0x58, 0xc2, 0x1b, 0xfd, 0x53, 0x3f, + 0x5e, 0x46, 0x48, 0x72, 0xd4, 0x2f, 0x02, 0x81, 0x80, 0x6a, 0xbf, 0xcf, + 0x58, 0x14, 0x66, 0xc3, 0x76, 0x93, 0xc7, 0x03, 0xae, 0xb9, 0xb6, 0x60, + 0x61, 0xdd, 0x1e, 0x08, 0x2c, 0xe0, 0x2d, 0xd7, 0xde, 0x2c, 0x13, 0x04, + 0x26, 0x52, 0xf5, 0x25, 0x56, 0x3a, 0x30, 0xcc, 0xf1, 0x14, 0x7b, 0x82, + 0xa8, 0xce, 0x75, 0xf7, 0xfd, 0x01, 0x5c, 0x28, 0xd2, 0x78, 0x67, 0x56, + 0x42, 0xe3, 0x69, 0x1c, 0x69, 0xda, 0xf5, 0x31, 0xcf, 0xc8, 0x04, 0x00, + 0x76, 0x3c, 0x1b, 0x4c, 0x6d, 0xcc, 0x79, 0xcd, 0xd8, 0x4d, 0x29, 0x03, + 0xbb, 0xec, 0xfc, 0xf1, 0x02, 0x59, 0x98, 0x6d, 0xfa, 0xed, 0xc2, 0xac, + 0x8d, 0x1c, 0xb5, 0xa5, 0x4a, 0xe4, 0x04, 0x98, 0x47, 0xd3, 0x15, 0xc4, + 0xb9, 0xa1, 0xa6, 0xc8, 0xbd, 0xff, 0xef, 0x52, 0xac, 0x5b, 0xdc, 0x9f, + 0x46, 0x5c, 0x98, 0x46, 0xb3, 0x1a, 0x50, 0x75, 0x6a, 0x6d, 0x58, 0x53, + 0xcd, 0xed, 0x10, 0x4d, 0xde, + }, + { + 0x30, 0x82, 0x04, 0xbd, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa7, 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xaf, 0x87, 0xf1, 0xcb, 0x79, 0x9d, 0x91, 0x9f, 0xc0, 0x51, + 0x7b, 0x5f, 0x2b, 0x67, 0x1a, 0x50, 0xbc, 0x02, 0x56, 0x35, 0x62, 0x34, + 0xc5, 0xa7, 0x85, 0x31, 0xc6, 0xa5, 0x37, 0xc2, 0x2e, 0x6b, 0x30, 0x9d, + 0xc9, 0x50, 0x04, 0x84, 0x1e, 0x28, 0x3d, 0x26, 0x60, 0xd2, 0x12, 0x24, + 0xea, 0xd2, 0x66, 0x20, 0x5c, 0x4f, 0x42, 0xf8, 0x7c, 0x4f, 0x64, 0xec, + 0xb3, 0xf5, 0x07, 0x02, 0xca, 0x8f, 0x71, 0xc6, 0x50, 0xb2, 0x5c, 0x66, + 0xdd, 0x1e, 0x80, 0xdc, 0xe7, 0xb5, 0xeb, 0xe7, 0x88, 0x05, 0xd3, 0x35, + 0x9f, 0x36, 0xf4, 0x9a, 0xff, 0xaa, 0xc5, 0x32, 0x08, 0x44, 0x42, 0xba, + 0x34, 0xc1, 0xf0, 0x88, 0x0f, 0x0e, 0xb5, 0x5a, 0xb9, 0xd4, 0x35, 0xd5, + 0x62, 0xb4, 0xef, 0x08, 0x5f, 0xf4, 0x50, 0x86, 0x8b, 0x30, 0x66, 0x73, + 0x79, 0xe2, 0xf7, 0x79, 0x32, 0xcb, 0x80, 0xd9, 0xc9, 0x61, 0xe7, 0xca, + 0x41, 0xc8, 0xeb, 0xfb, 0xcf, 0xbb, 0x43, 0xc6, 0xe8, 0x72, 0x08, 0x24, + 0xc3, 0x03, 0xcd, 0xd1, 0xdc, 0xcd, 0x3d, 0x2a, 0xbc, 0x5b, 0x7d, 0xce, + 0x62, 0x5e, 0xbb, 0x0f, 0xb8, 0x46, 0x36, 0xd8, 0xaf, 0xaf, 0x2e, 0x89, + 0x21, 0x56, 0xf1, 0x02, 0xde, 0x6f, 0xd6, 0xce, 0x31, 0xc6, 0x2e, 0x89, + 0x87, 0x55, 0x16, 0x35, 0xf2, 0x99, 0x1f, 0x1b, 0x55, 0x83, 0x2e, 0xe5, + 0xf0, 0xf9, 0x5b, 0xd3, 0xc8, 0xe3, 0xf0, 0x29, 0xa1, 0x79, 0x61, 0xac, + 0xb6, 0xe9, 0x2e, 0x0d, 0x0b, 0x42, 0x38, 0x6f, 0xf7, 0xed, 0x87, 0xd8, + 0x0d, 0x27, 0x84, 0x10, 0xeb, 0xb6, 0x02, 0x09, 0x3b, 0xc1, 0x50, 0xd5, + 0xab, 0x88, 0xe0, 0x2e, 0x78, 0xc8, 0x9a, 0x55, 0x6f, 0x23, 0xfc, 0xa0, + 0x63, 0x51, 0x24, 0xd2, 0x31, 0x9d, 0xa1, 0x8f, 0x5a, 0x30, 0x82, 0x6e, + 0x26, 0xa1, 0x01, 0x1e, 0xff, 0xf7, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x1a, 0x10, 0xd1, 0xf3, 0x29, 0x48, 0x20, 0xcb, 0xdc, + 0x3f, 0x3d, 0x56, 0xd0, 0x97, 0x2a, 0xed, 0x3a, 0x3e, 0x0e, 0x97, 0x36, + 0xd2, 0x27, 0x57, 0xcd, 0x0b, 0xab, 0x37, 0xf5, 0xa3, 0xbc, 0x48, 0xe6, + 0x9b, 0x47, 0xbd, 0xbe, 0x2d, 0xf0, 0x5c, 0x81, 0x58, 0x25, 0xa0, 0x8c, + 0x59, 0x37, 0x15, 0xaf, 0x5c, 0xb6, 0xd8, 0x7e, 0x55, 0x70, 0x00, 0x4a, + 0x38, 0x6c, 0x30, 0xc2, 0xad, 0xc3, 0x6e, 0xb1, 0xb2, 0x85, 0x61, 0x37, + 0x1f, 0x7f, 0x4e, 0x7c, 0x4c, 0x51, 0x8c, 0x4e, 0x4f, 0xbf, 0x7f, 0x3d, + 0xf2, 0x04, 0x86, 0xa0, 0xa4, 0x33, 0xbb, 0x24, 0x35, 0x5d, 0xcc, 0xe5, + 0x2b, 0xc9, 0x91, 0xd3, 0x2a, 0x21, 0x32, 0x49, 0xf4, 0x03, 0x0c, 0x64, + 0x42, 0x1f, 0xba, 0x46, 0x94, 0xb3, 0xcb, 0x0f, 0xfa, 0x2a, 0xc9, 0x31, + 0x2d, 0x8c, 0xb8, 0x0b, 0x8f, 0xcf, 0xdf, 0x30, 0x6f, 0x26, 0xdc, 0x48, + 0x1e, 0x23, 0x0d, 0x6e, 0x74, 0x64, 0x7e, 0xa3, 0xec, 0x78, 0x17, 0xd1, + 0x8b, 0x02, 0x6e, 0xce, 0x5e, 0xad, 0xc8, 0x85, 0x1e, 0xaa, 0xe5, 0xde, + 0x2d, 0x5b, 0xc4, 0xe2, 0xd1, 0xa5, 0xb9, 0x89, 0x7b, 0x23, 0xa0, 0x82, + 0xa3, 0x11, 0xc3, 0x9f, 0xff, 0xcc, 0xd4, 0x47, 0x54, 0xc1, 0xfc, 0x8f, + 0x4d, 0x3c, 0x69, 0x2d, 0xd7, 0x57, 0xd8, 0x2f, 0x8e, 0x62, 0x92, 0x38, + 0xfd, 0x4b, 0xc5, 0x54, 0x04, 0xa7, 0xa4, 0x79, 0xc3, 0x3d, 0xef, 0xf4, + 0x23, 0x57, 0x89, 0x65, 0x07, 0x98, 0x3d, 0x21, 0xb0, 0xff, 0xbe, 0xf9, + 0x12, 0xab, 0xd1, 0x80, 0x95, 0xba, 0x96, 0xd3, 0x0a, 0x43, 0x11, 0xe8, + 0xfe, 0x36, 0x05, 0xa8, 0x35, 0x8c, 0xd5, 0x11, 0xfb, 0xd1, 0xb0, 0x41, + 0x7a, 0x47, 0xb2, 0x57, 0x25, 0xa3, 0x1c, 0x7a, 0x36, 0xc4, 0x5a, 0x82, + 0xaa, 0x08, 0xe7, 0x76, 0x0c, 0xcd, 0xc1, 0x02, 0x81, 0x81, 0x00, 0xd4, + 0x7b, 0xc5, 0x4e, 0x6a, 0x35, 0xae, 0x81, 0xf4, 0x72, 0x77, 0x02, 0x1e, + 0x50, 0xc1, 0x0c, 0x1c, 0xa0, 0x16, 0x2d, 0xbf, 0xd1, 0x19, 0x18, 0x7d, + 0xb1, 0x47, 0x03, 0x65, 0x80, 0x74, 0x68, 0x15, 0x19, 0x7c, 0x82, 0xaa, + 0x13, 0x14, 0x1f, 0x82, 0xe4, 0x72, 0x97, 0x1a, 0x61, 0x6d, 0xbe, 0x6c, + 0x70, 0x3e, 0x91, 0x82, 0x9b, 0xcd, 0x29, 0x6a, 0xb3, 0xe8, 0x7d, 0xf8, + 0xa7, 0x3f, 0xc6, 0x68, 0x29, 0xe4, 0x5f, 0xf0, 0x18, 0xdf, 0x3c, 0x4c, + 0xdd, 0x0e, 0xdd, 0xdf, 0x7d, 0x18, 0x9c, 0xa4, 0x97, 0xf4, 0xd9, 0xa4, + 0xf8, 0x65, 0x3b, 0xc0, 0x96, 0x9c, 0xdf, 0x08, 0xb6, 0x24, 0x30, 0x8b, + 0xae, 0x80, 0xbe, 0x21, 0x99, 0xbc, 0x44, 0x32, 0x1f, 0x43, 0x73, 0x0d, + 0x2b, 0xaf, 0xad, 0xec, 0x67, 0x37, 0xdd, 0x00, 0xa1, 0x89, 0xe0, 0xab, + 0x3c, 0x62, 0x5c, 0x05, 0xeb, 0x1d, 0x3f, 0x02, 0x81, 0x81, 0x00, 0xd3, + 0x7a, 0xce, 0x3e, 0xe9, 0xae, 0xe7, 0x60, 0xdc, 0x8e, 0xf1, 0xe7, 0x30, + 0x91, 0x16, 0xa5, 0xea, 0x4a, 0x2e, 0xcf, 0xd0, 0x7e, 0xc7, 0xa7, 0x5a, + 0x18, 0xd8, 0xcc, 0x7b, 0x95, 0x24, 0xa3, 0x8b, 0x94, 0x8e, 0x83, 0x94, + 0x77, 0x32, 0xd0, 0x7a, 0x8c, 0xc6, 0x70, 0x5a, 0x8b, 0x08, 0xcf, 0x38, + 0xa2, 0x64, 0xb0, 0x5e, 0x08, 0x0e, 0x82, 0xc3, 0xe8, 0xaf, 0x65, 0xeb, + 0xa8, 0x1a, 0x3e, 0xa3, 0x03, 0x56, 0xa6, 0x43, 0xd5, 0xa2, 0x0f, 0xfe, + 0x1a, 0x29, 0x21, 0x2d, 0x7f, 0x4a, 0x2b, 0xae, 0x9e, 0x6b, 0x3f, 0x01, + 0x3d, 0x2c, 0x48, 0x73, 0xa2, 0xd6, 0xdf, 0xdf, 0xf0, 0x21, 0x3d, 0xbf, + 0xfe, 0x79, 0x14, 0x3c, 0x06, 0x22, 0xd3, 0xc6, 0x26, 0x4a, 0x84, 0xc3, + 0xd4, 0x00, 0x02, 0xca, 0x5b, 0xc3, 0xb8, 0x12, 0x2a, 0x5a, 0x53, 0xa7, + 0x83, 0xf4, 0x6b, 0xba, 0xcd, 0x17, 0x49, 0x02, 0x81, 0x80, 0x74, 0x44, + 0xa9, 0xc9, 0x67, 0xba, 0xaa, 0x1b, 0xb8, 0x3b, 0xee, 0x3c, 0xfd, 0x83, + 0xa8, 0xae, 0xcc, 0xf7, 0x18, 0x4b, 0xbe, 0x5b, 0x57, 0x85, 0x1c, 0x3a, + 0x26, 0x26, 0x88, 0xa3, 0x0a, 0x8f, 0x6d, 0x84, 0x3d, 0xaa, 0x6e, 0x0f, + 0xf4, 0x81, 0xed, 0xa8, 0xbd, 0xbf, 0x4b, 0x13, 0x26, 0xee, 0xfc, 0xfd, + 0x4a, 0x6f, 0x6a, 0xed, 0x80, 0x0c, 0xfa, 0xb3, 0x29, 0x33, 0xcd, 0x1d, + 0x0f, 0x7b, 0xac, 0xc1, 0xc7, 0x92, 0x6b, 0x99, 0xe0, 0x85, 0x69, 0x75, + 0xc8, 0xcd, 0xc5, 0x9d, 0xf9, 0x1a, 0xb5, 0xc1, 0xe4, 0x9c, 0x37, 0x76, + 0x28, 0x46, 0xd2, 0xf2, 0x57, 0x32, 0x7f, 0xdc, 0xd2, 0xde, 0xb1, 0x80, + 0x32, 0x38, 0x57, 0xc0, 0x7c, 0xd1, 0x40, 0x2f, 0xf5, 0x43, 0x7e, 0x60, + 0x7a, 0x48, 0x0c, 0x44, 0xca, 0xbf, 0xa6, 0xb9, 0xbd, 0xed, 0x6f, 0x25, + 0xa2, 0x98, 0xc2, 0x30, 0x4e, 0x17, 0x02, 0x81, 0x81, 0x00, 0x8d, 0x71, + 0x90, 0xaa, 0x61, 0x6f, 0x7b, 0x0f, 0xbc, 0xd4, 0xda, 0x94, 0x6f, 0x56, + 0x4b, 0x18, 0x93, 0x58, 0x24, 0x71, 0x18, 0x19, 0x03, 0x7e, 0x39, 0xf3, + 0x6e, 0x65, 0x6d, 0xae, 0xb5, 0xff, 0xb0, 0xa6, 0x9e, 0x9f, 0x00, 0xd8, + 0xac, 0xa2, 0xe5, 0xa4, 0x6c, 0x40, 0xcf, 0x3e, 0x38, 0x99, 0x28, 0x5e, + 0xed, 0x0b, 0x4d, 0x09, 0x04, 0x73, 0x8f, 0x86, 0x7c, 0x71, 0xa5, 0xa9, + 0x1c, 0x4c, 0x92, 0x88, 0xf4, 0x16, 0x66, 0x3e, 0x67, 0x93, 0x5c, 0xb7, + 0xb0, 0x94, 0xa1, 0x32, 0x86, 0xb0, 0x2a, 0xad, 0x88, 0x3b, 0x6e, 0x9f, + 0xb4, 0x93, 0x8c, 0xcb, 0xf7, 0xfd, 0x6a, 0x70, 0xd8, 0x3a, 0xcd, 0xc3, + 0xec, 0xc5, 0x8c, 0xd3, 0xe9, 0xcd, 0x4c, 0xb5, 0x65, 0x97, 0xe0, 0xc6, + 0x55, 0x6f, 0x88, 0x5a, 0xd1, 0xcf, 0xb6, 0x4e, 0x9f, 0x75, 0x5e, 0x10, + 0x12, 0x95, 0x4f, 0x2e, 0x47, 0x09, 0x02, 0x81, 0x80, 0x7d, 0x7c, 0xb4, + 0xd2, 0xb0, 0x17, 0xd5, 0x2f, 0xee, 0xbc, 0x76, 0xf5, 0x6a, 0x37, 0xc3, + 0x59, 0x5b, 0x0c, 0xd3, 0xda, 0xb4, 0x8b, 0xb2, 0xf0, 0xbf, 0xbb, 0x30, + 0x68, 0x92, 0x5c, 0x6d, 0xec, 0xba, 0xe0, 0xd2, 0x4a, 0x5c, 0x04, 0x80, + 0x59, 0x2f, 0x8e, 0x56, 0x3c, 0xa5, 0x34, 0x07, 0x4f, 0x48, 0x5c, 0xee, + 0x8d, 0xb1, 0x23, 0x8b, 0xd0, 0x8f, 0x51, 0x75, 0x22, 0xb4, 0xb2, 0x6c, + 0xea, 0xc2, 0xcc, 0x6c, 0x69, 0x04, 0x94, 0xac, 0x10, 0xb4, 0xf6, 0x0b, + 0xb8, 0x0f, 0x8d, 0x10, 0xc0, 0x51, 0xb4, 0xb9, 0x2a, 0x7d, 0x98, 0x18, + 0x95, 0x77, 0x3f, 0xf7, 0x54, 0x1a, 0xef, 0xdc, 0xe6, 0xeb, 0xd0, 0x6d, + 0x56, 0x9b, 0xff, 0x6a, 0x5a, 0x0a, 0xb5, 0x9d, 0x52, 0xbb, 0x11, 0x35, + 0xc9, 0x42, 0xa6, 0x91, 0xe3, 0xe6, 0xf8, 0x4a, 0x70, 0x93, 0x85, 0x98, + 0xcb, 0xef, 0x33, 0x7e, 0x2a, + }, + { + 0x30, 0x82, 0x04, 0xbe, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa8, 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xcf, 0xb2, 0x9c, 0xc4, 0x6b, 0xdb, 0x4b, 0xe9, 0x01, 0x06, + 0x44, 0x8a, 0xe3, 0x78, 0xf5, 0xfd, 0x89, 0xaf, 0x3b, 0xce, 0x2f, 0xdd, + 0xa0, 0x34, 0x86, 0xfb, 0x3f, 0xe2, 0x85, 0xde, 0x2c, 0x86, 0xba, 0xfc, + 0x95, 0x87, 0xa3, 0x38, 0xa7, 0x16, 0xbf, 0xaf, 0xc9, 0x21, 0x1c, 0x76, + 0x87, 0x7d, 0x22, 0x80, 0x56, 0xa3, 0x05, 0x7f, 0x30, 0xbd, 0xc4, 0x7a, + 0x4d, 0x83, 0x6a, 0xd2, 0x53, 0xc6, 0xe1, 0x51, 0x83, 0x21, 0x41, 0x8a, + 0x36, 0xdb, 0xd1, 0xc1, 0x9c, 0xf8, 0x6b, 0x98, 0x03, 0x82, 0xb1, 0xd2, + 0x76, 0x58, 0xc5, 0x09, 0xb2, 0x2c, 0xb2, 0x01, 0x56, 0x93, 0x96, 0x35, + 0xd2, 0xef, 0xcf, 0x7b, 0x18, 0x55, 0xbb, 0xd6, 0x46, 0x32, 0xd9, 0x2a, + 0x34, 0x17, 0x06, 0x78, 0x69, 0x9a, 0x62, 0x7e, 0xdf, 0xc7, 0x61, 0x02, + 0x16, 0x49, 0x05, 0x6e, 0xc1, 0xb0, 0x33, 0x41, 0xf9, 0x92, 0xcd, 0xf2, + 0xc1, 0x23, 0x7b, 0x5c, 0xf5, 0xff, 0xd4, 0x18, 0x28, 0x4d, 0xcd, 0x14, + 0x82, 0xa2, 0x62, 0xea, 0x48, 0xc9, 0x03, 0x99, 0x99, 0x9f, 0x55, 0x5b, + 0x4d, 0x96, 0x2a, 0xf0, 0x42, 0x68, 0x29, 0x15, 0x13, 0x5f, 0xe4, 0xef, + 0x73, 0x48, 0x87, 0x16, 0xc8, 0x55, 0xbc, 0x2d, 0x21, 0xca, 0x22, 0x15, + 0x9f, 0xe6, 0x72, 0xd1, 0x55, 0x65, 0xa1, 0x55, 0x75, 0x83, 0x0f, 0x0e, + 0x45, 0xae, 0xce, 0x39, 0xac, 0x26, 0x8b, 0xf4, 0x77, 0xe0, 0xce, 0x59, + 0x8f, 0xc9, 0x54, 0xf4, 0x41, 0x8d, 0x94, 0x68, 0x60, 0x09, 0x68, 0xbe, + 0x5f, 0xfb, 0xc4, 0x81, 0xc8, 0x11, 0x1c, 0x07, 0x1b, 0x0d, 0xad, 0x6c, + 0x8b, 0x62, 0xf5, 0xf9, 0x37, 0x06, 0xba, 0xe4, 0xbc, 0x47, 0xd3, 0xdf, + 0x84, 0x62, 0x56, 0xa3, 0x9b, 0xd9, 0x2e, 0xea, 0x34, 0xa3, 0x21, 0x7c, + 0x28, 0xc9, 0x83, 0x9e, 0x62, 0x2d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x74, 0xbe, 0xeb, 0x4b, 0xa5, 0x6c, 0xc1, 0x00, 0x99, + 0xe8, 0xd2, 0x02, 0x57, 0xd6, 0x98, 0x3f, 0x09, 0x73, 0x8c, 0x64, 0x5b, + 0x97, 0x72, 0x03, 0xd4, 0x93, 0xc9, 0xd7, 0x24, 0x74, 0x3c, 0x07, 0x07, + 0x78, 0x0e, 0xfd, 0x0d, 0x0c, 0x3d, 0x2f, 0x96, 0x53, 0xd2, 0xf4, 0x5f, + 0xb1, 0x68, 0x7b, 0x38, 0x37, 0x77, 0x7b, 0x6f, 0x0d, 0x8d, 0x72, 0x3d, + 0xcc, 0x99, 0x61, 0x73, 0x5c, 0x02, 0x67, 0x5a, 0x23, 0x9d, 0x57, 0xc6, + 0x25, 0x50, 0xac, 0xc2, 0xfc, 0xd7, 0xa4, 0xf3, 0xa5, 0xa0, 0xe3, 0x87, + 0xdc, 0xcb, 0x55, 0x1e, 0x7c, 0x52, 0xc0, 0xb8, 0xd5, 0xf3, 0xba, 0x45, + 0xc6, 0xbf, 0x68, 0xb8, 0xf1, 0x72, 0x3e, 0x4e, 0xb5, 0x25, 0x04, 0x53, + 0xf9, 0x5b, 0x0a, 0x4e, 0x42, 0xc4, 0xe9, 0x58, 0xd0, 0x04, 0x2d, 0x68, + 0x23, 0xea, 0x2e, 0xe5, 0x74, 0xda, 0x3e, 0x96, 0xb1, 0x50, 0xfc, 0xe6, + 0xb6, 0xb6, 0x11, 0xc5, 0xcd, 0x1a, 0xf4, 0x1c, 0xd4, 0x07, 0xdf, 0xf6, + 0x01, 0xe4, 0x7a, 0xa1, 0x67, 0x7d, 0xd9, 0x21, 0xe9, 0x8a, 0xd0, 0x80, + 0x05, 0xe4, 0x72, 0x3e, 0xf7, 0xc6, 0xb7, 0x57, 0x64, 0x41, 0x88, 0xd6, + 0x94, 0x51, 0x0d, 0x24, 0xa3, 0x5a, 0xf2, 0x50, 0x64, 0x0c, 0x39, 0xe1, + 0x7e, 0xa3, 0x04, 0xb0, 0xcd, 0x35, 0xa4, 0x49, 0x53, 0xc0, 0xaf, 0x31, + 0x57, 0x32, 0x70, 0xb8, 0x30, 0x8e, 0x82, 0xb0, 0x8c, 0x77, 0x2e, 0x4e, + 0x14, 0x0d, 0x64, 0x2f, 0xc1, 0xc4, 0x65, 0xa9, 0xe6, 0x67, 0x3f, 0x79, + 0xaf, 0xb3, 0x67, 0x3e, 0x5c, 0xeb, 0x54, 0xc4, 0x19, 0x8e, 0xb0, 0x50, + 0xf1, 0x31, 0x10, 0x25, 0x2d, 0xa8, 0x14, 0xcf, 0x07, 0x2c, 0x17, 0x4c, + 0xba, 0x77, 0xfc, 0x54, 0xa0, 0x05, 0xf5, 0x0a, 0xca, 0x53, 0xa7, 0x65, + 0xaf, 0x74, 0xc2, 0x56, 0x18, 0x37, 0xa9, 0x02, 0x81, 0x81, 0x00, 0xe8, + 0x37, 0xd9, 0x95, 0xd2, 0x96, 0xae, 0x72, 0x09, 0x4e, 0x0c, 0xcd, 0x8b, + 0x8d, 0x9b, 0x3a, 0x2d, 0x5d, 0x84, 0x1e, 0x7a, 0x23, 0x43, 0xec, 0x49, + 0xee, 0x2d, 0x14, 0x28, 0xad, 0xe5, 0x6e, 0x8e, 0xbb, 0xd3, 0xff, 0x99, + 0x16, 0xcf, 0xf6, 0xe8, 0xa8, 0x5b, 0xd9, 0x13, 0xc6, 0xda, 0x29, 0x42, + 0x94, 0xb8, 0xcb, 0x0e, 0xa3, 0x5e, 0xa5, 0x3e, 0x56, 0x9d, 0x7a, 0xbb, + 0xbc, 0x06, 0x49, 0xcb, 0xc4, 0x6a, 0xe8, 0xc8, 0xcb, 0xb9, 0xbe, 0xe6, + 0x97, 0xa7, 0x7e, 0x0c, 0xdf, 0x36, 0x5b, 0x4b, 0x7a, 0x15, 0x8e, 0x81, + 0x2a, 0x28, 0x82, 0xad, 0xb8, 0xfc, 0xde, 0x73, 0x3c, 0xae, 0x34, 0x5d, + 0x9f, 0xbd, 0x9f, 0x07, 0x13, 0xc9, 0xf6, 0x5a, 0x79, 0x2a, 0x31, 0xd6, + 0xf3, 0x1b, 0x2e, 0xc7, 0xc5, 0x59, 0x14, 0x86, 0xea, 0x2c, 0xc5, 0x15, + 0xf5, 0x26, 0x43, 0xb1, 0x10, 0x78, 0x1f, 0x02, 0x81, 0x81, 0x00, 0xe4, + 0xf7, 0xe6, 0x81, 0xf1, 0x8e, 0x4d, 0xe2, 0x1a, 0x66, 0x72, 0xec, 0x7f, + 0xf2, 0x6f, 0x4a, 0x7b, 0x0e, 0x6f, 0x2f, 0x53, 0xa4, 0x4e, 0x7c, 0x55, + 0x64, 0x73, 0x70, 0xbc, 0xa0, 0x6a, 0xf6, 0x96, 0x0e, 0x85, 0x92, 0x22, + 0xdd, 0x68, 0x64, 0x62, 0x5f, 0x23, 0x5a, 0xb5, 0x39, 0xba, 0xee, 0xb5, + 0x2a, 0x1d, 0xa2, 0xe0, 0x84, 0x97, 0x61, 0xd7, 0x50, 0x38, 0x7b, 0x9d, + 0x6d, 0x28, 0x32, 0xbf, 0x5f, 0xc3, 0x3a, 0x20, 0x9e, 0xac, 0xcb, 0xa0, + 0x9b, 0x89, 0x6b, 0x81, 0x31, 0x37, 0x1e, 0xc8, 0x6f, 0xdc, 0x47, 0x39, + 0x07, 0xf1, 0x8a, 0xc8, 0x9d, 0xf2, 0x3a, 0x44, 0x10, 0x8d, 0x71, 0x32, + 0xfd, 0xcf, 0x7e, 0x50, 0x1e, 0x71, 0x90, 0x5c, 0xaa, 0xed, 0x50, 0x49, + 0x8c, 0x6f, 0x7d, 0xf0, 0x8b, 0xb6, 0x62, 0x4d, 0xcd, 0x4f, 0xb2, 0x9d, + 0xbf, 0xe4, 0xe4, 0x65, 0xab, 0x0c, 0x33, 0x02, 0x81, 0x81, 0x00, 0xd6, + 0x08, 0xac, 0x27, 0x18, 0x8b, 0xc3, 0xcb, 0xdd, 0xe1, 0xaf, 0x91, 0x40, + 0x40, 0x4b, 0xc3, 0xaa, 0x8e, 0x98, 0x38, 0xd3, 0x10, 0x70, 0x09, 0x78, + 0xf6, 0xeb, 0x5b, 0xba, 0x46, 0xd5, 0xc2, 0x3a, 0x12, 0xcb, 0x4a, 0xb9, + 0xda, 0xb9, 0xe1, 0xf4, 0xfd, 0x40, 0x72, 0xeb, 0x74, 0x8c, 0x1e, 0x1d, + 0x7d, 0x20, 0x7a, 0x20, 0x4a, 0xd9, 0xf0, 0x6a, 0x6d, 0xc1, 0x06, 0x9f, + 0xc4, 0xa4, 0xf3, 0x1d, 0xba, 0x33, 0x63, 0xcd, 0xb7, 0x60, 0xc3, 0xa0, + 0x9c, 0x45, 0x47, 0xbc, 0x2b, 0x7c, 0x59, 0x57, 0x4e, 0xf6, 0x51, 0x7b, + 0xa1, 0xd4, 0xe6, 0xe5, 0xa2, 0x2c, 0x88, 0x08, 0x24, 0xf4, 0xd7, 0xd5, + 0x37, 0x67, 0xba, 0x0c, 0xf6, 0xe3, 0x5e, 0x8a, 0x73, 0x45, 0x3d, 0xdc, + 0xc6, 0x03, 0xd6, 0xf1, 0x50, 0x67, 0x53, 0xb1, 0x2a, 0x64, 0x0b, 0x5f, + 0xba, 0xae, 0x03, 0x14, 0x4f, 0x7e, 0xb7, 0x02, 0x81, 0x81, 0x00, 0x87, + 0x08, 0x54, 0x1e, 0xea, 0x50, 0x5c, 0x4a, 0x2d, 0xfb, 0xa1, 0x67, 0x2c, + 0x85, 0xd3, 0x70, 0x7f, 0x66, 0x21, 0xd8, 0x2d, 0x61, 0xc7, 0x0f, 0xb8, + 0x64, 0x87, 0x58, 0x43, 0x45, 0xf0, 0x0f, 0x00, 0xac, 0x0b, 0xc6, 0x05, + 0x5d, 0xc2, 0x05, 0x01, 0xa6, 0xcd, 0xf8, 0xde, 0xcb, 0xef, 0x1c, 0x7c, + 0x27, 0x1c, 0x57, 0x44, 0x45, 0xad, 0xe9, 0x7b, 0xcb, 0xc9, 0xa3, 0xcd, + 0x51, 0xe4, 0xd5, 0x18, 0xdb, 0xe7, 0x0c, 0xce, 0xd4, 0x05, 0x60, 0x09, + 0x95, 0xf0, 0xd3, 0x3f, 0xdb, 0xc0, 0x80, 0x1d, 0x01, 0x2b, 0x4d, 0xad, + 0xaa, 0xab, 0x9e, 0x87, 0x75, 0xee, 0xb6, 0xc2, 0x11, 0x68, 0xf9, 0x0b, + 0x73, 0x77, 0xfd, 0x2c, 0x4e, 0xe7, 0xf6, 0x95, 0x50, 0x10, 0xa8, 0xba, + 0xd7, 0x61, 0xa1, 0x4a, 0x4d, 0x7b, 0x00, 0x3a, 0x96, 0x0c, 0x9c, 0x70, + 0x40, 0x0d, 0x43, 0x4d, 0x5a, 0x34, 0xd5, 0x02, 0x81, 0x80, 0x5e, 0x01, + 0xe3, 0xa4, 0xfd, 0xc2, 0x5c, 0x74, 0xb9, 0x04, 0x70, 0xa3, 0x14, 0x43, + 0x6e, 0x20, 0x81, 0x0a, 0x29, 0x0f, 0x85, 0xbb, 0x1e, 0x05, 0x97, 0xbf, + 0xd5, 0x89, 0xd5, 0x45, 0xf7, 0x8f, 0x4b, 0xf9, 0xf6, 0xf9, 0xcf, 0x08, + 0xa1, 0x0e, 0xb7, 0x36, 0x1f, 0x72, 0xe4, 0xd9, 0x23, 0xd5, 0xa0, 0xe0, + 0x8e, 0x61, 0xe8, 0x17, 0xa8, 0x65, 0x6b, 0x5a, 0xa2, 0x83, 0xd4, 0x5c, + 0x11, 0x97, 0xfb, 0xc6, 0x76, 0x87, 0x7c, 0x37, 0xbe, 0x21, 0x5d, 0x8b, + 0x17, 0x7e, 0x0a, 0x6c, 0xab, 0xde, 0x8e, 0x74, 0x5b, 0x4d, 0xcf, 0x58, + 0x11, 0x7b, 0xb5, 0xfc, 0x47, 0x37, 0xc6, 0x8f, 0xcc, 0x30, 0x7e, 0xb3, + 0x87, 0x4c, 0xab, 0xcd, 0xdb, 0xd7, 0x24, 0x9e, 0xeb, 0xd0, 0x12, 0x08, + 0xa0, 0xa7, 0x7e, 0x84, 0x97, 0x77, 0x9a, 0x27, 0x0b, 0x97, 0xe5, 0x25, + 0x97, 0x3c, 0xe8, 0xe8, 0x54, 0x95, + }, + { + 0x30, 0x82, 0x04, 0xbc, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa6, 0x30, 0x82, 0x04, 0xa2, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xad, 0xc0, 0xb7, 0xd8, 0x61, 0x82, 0x55, 0xa1, 0x39, 0xc8, + 0x22, 0xc1, 0x22, 0x16, 0x0f, 0x1e, 0x06, 0xc8, 0xf1, 0x37, 0xe5, 0x9a, + 0x63, 0x1f, 0xd1, 0x83, 0x76, 0x0b, 0xe3, 0xd8, 0x79, 0x7d, 0x02, 0x26, + 0xe1, 0x91, 0x2a, 0x32, 0xb1, 0xa9, 0xea, 0x5c, 0x1d, 0x1e, 0x7f, 0xed, + 0xa1, 0x06, 0xe7, 0x67, 0x41, 0x59, 0x1b, 0x68, 0xcf, 0x3e, 0xa7, 0x3a, + 0x12, 0x50, 0xc3, 0xed, 0x96, 0x9c, 0x80, 0x1c, 0xd3, 0x4f, 0x51, 0x31, + 0x74, 0x6d, 0xef, 0x04, 0xbf, 0xf7, 0x17, 0x14, 0xf8, 0x4c, 0x25, 0x63, + 0xad, 0xe2, 0x89, 0xf8, 0x02, 0x01, 0x2e, 0x05, 0x32, 0xb1, 0x71, 0x7f, + 0x04, 0x99, 0xc0, 0x93, 0x69, 0xc2, 0x2d, 0x6d, 0x4d, 0xef, 0xe2, 0xe2, + 0x0c, 0x1a, 0xf2, 0x91, 0xf6, 0x82, 0x83, 0xf1, 0x85, 0x0d, 0x37, 0x72, + 0xd6, 0x70, 0xa7, 0x4a, 0xbb, 0xf7, 0x06, 0x29, 0xef, 0xbb, 0x63, 0x6c, + 0x2e, 0x4d, 0x7d, 0x59, 0xd7, 0x08, 0xba, 0xb1, 0x7b, 0x1e, 0xa5, 0xde, + 0x9c, 0xf3, 0x6f, 0x9f, 0xcb, 0xad, 0xf6, 0xb2, 0x18, 0xef, 0x81, 0xa7, + 0xc5, 0xf4, 0xa3, 0x33, 0x4e, 0x70, 0x20, 0x88, 0x47, 0x68, 0x14, 0x6f, + 0xfc, 0x09, 0xea, 0xfe, 0x71, 0x2f, 0x3f, 0xac, 0x6a, 0x7e, 0xcf, 0xe7, + 0x2a, 0x52, 0x2c, 0xb5, 0x1d, 0x43, 0x6f, 0x31, 0x81, 0xa8, 0x5b, 0x4b, + 0x02, 0x0a, 0xec, 0x5a, 0x19, 0xc3, 0x43, 0xce, 0xe7, 0x7d, 0xbc, 0x70, + 0x5e, 0xf8, 0x83, 0xb8, 0xbc, 0xc3, 0xe3, 0x1f, 0x1a, 0x19, 0xb2, 0xeb, + 0xb3, 0x3e, 0x8f, 0x85, 0x60, 0xbe, 0x9a, 0xc4, 0xdf, 0xea, 0xa8, 0x89, + 0x19, 0xa3, 0xf3, 0x45, 0xea, 0xba, 0x11, 0xe6, 0xa6, 0x66, 0xb1, 0xb4, + 0x2e, 0xeb, 0x7a, 0xb4, 0x2c, 0x1d, 0xc9, 0xb3, 0xb1, 0x46, 0x53, 0x07, + 0xe4, 0xd5, 0xcc, 0x4f, 0xcf, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x59, 0x59, 0x41, 0xf0, 0xf6, 0x6b, 0x94, 0x67, 0x1d, + 0x14, 0x8a, 0xb2, 0xb0, 0x39, 0x91, 0xba, 0x8a, 0x18, 0xa8, 0xda, 0x6a, + 0xaa, 0x92, 0x90, 0x99, 0x27, 0xb5, 0xfb, 0x75, 0x46, 0x2b, 0x6b, 0x1a, + 0x41, 0x2e, 0x3b, 0x7c, 0xec, 0xa6, 0xa9, 0xce, 0xc7, 0x61, 0x7d, 0xfe, + 0xa1, 0x0e, 0xee, 0x42, 0xee, 0xb9, 0x0e, 0xfe, 0x66, 0x4e, 0x34, 0x54, + 0xc0, 0x2b, 0x0c, 0xf7, 0x43, 0xe4, 0xf0, 0x43, 0x7d, 0x0f, 0x38, 0xb9, + 0x72, 0xea, 0x01, 0x62, 0x29, 0x1a, 0x22, 0x10, 0xef, 0x8a, 0xa3, 0x75, + 0x92, 0xa5, 0xa7, 0x59, 0xf5, 0x7b, 0xea, 0x69, 0x64, 0xe8, 0xe5, 0x90, + 0x8c, 0x95, 0xac, 0x0e, 0xf8, 0x7f, 0x29, 0x08, 0x3d, 0x2e, 0x17, 0xce, + 0x9f, 0x19, 0x44, 0x7e, 0x3a, 0x8a, 0xfe, 0x20, 0xa5, 0x81, 0x1b, 0x03, + 0xc9, 0x7c, 0xf6, 0x5f, 0x40, 0xb2, 0x19, 0xdc, 0x44, 0x92, 0x6e, 0xfc, + 0x30, 0xc2, 0x59, 0x16, 0x29, 0x80, 0xcf, 0x4f, 0x26, 0x39, 0x6b, 0x84, + 0xb1, 0x55, 0xa0, 0xac, 0x76, 0xa2, 0xc6, 0x4e, 0x46, 0x44, 0x4f, 0x12, + 0x76, 0x39, 0xe9, 0x53, 0xb1, 0x46, 0x6a, 0x77, 0xf1, 0x0e, 0xdf, 0x88, + 0x4d, 0x3a, 0x73, 0x1b, 0x84, 0xee, 0x25, 0x04, 0x85, 0x1e, 0xd4, 0xd6, + 0xf7, 0x06, 0x16, 0xb3, 0x81, 0x16, 0xdb, 0xbb, 0xbf, 0x27, 0x6d, 0x0c, + 0xb4, 0x3e, 0x3b, 0x55, 0x25, 0x05, 0x7b, 0x47, 0xb5, 0xf4, 0xce, 0xe0, + 0xbb, 0xa0, 0xb5, 0xc6, 0x08, 0x8c, 0xdc, 0x75, 0x5b, 0xe9, 0xc2, 0xe2, + 0x61, 0x0c, 0xf9, 0x95, 0x62, 0xaf, 0x03, 0x9d, 0x99, 0x80, 0x67, 0x02, + 0xef, 0xcb, 0xb6, 0x0c, 0xe7, 0x7d, 0x1f, 0xf4, 0x6a, 0x47, 0xba, 0xf5, + 0x4a, 0xc0, 0x51, 0xec, 0x97, 0xb4, 0x2a, 0x4d, 0x2e, 0x93, 0xce, 0xb1, + 0xb4, 0x88, 0x06, 0xd3, 0x00, 0x38, 0xa5, 0x02, 0x81, 0x81, 0x00, 0xda, + 0x0d, 0x41, 0x44, 0x22, 0x42, 0x86, 0xe9, 0x69, 0x4a, 0xac, 0xe0, 0x63, + 0x20, 0x3f, 0x33, 0xc4, 0xfa, 0xe5, 0x67, 0x4c, 0x6a, 0xa4, 0x38, 0xcb, + 0x37, 0x90, 0xec, 0xaa, 0x6c, 0x76, 0x54, 0xd7, 0x6a, 0xce, 0x06, 0xf5, + 0xe9, 0xb4, 0xb6, 0x38, 0x6f, 0xe9, 0xd2, 0x38, 0x5c, 0x72, 0x5d, 0x8d, + 0xbf, 0x40, 0x13, 0x6b, 0xe1, 0xae, 0x3b, 0x68, 0x6c, 0x9f, 0xe3, 0xa0, + 0xb4, 0x88, 0xf1, 0x6b, 0x83, 0x37, 0x7b, 0x75, 0x52, 0x8c, 0x5b, 0x1e, + 0x76, 0x58, 0x19, 0xe0, 0xab, 0x82, 0x61, 0x8d, 0x47, 0x48, 0x3d, 0x46, + 0x6a, 0x28, 0x73, 0xd7, 0x12, 0x64, 0x35, 0x6b, 0x2f, 0x67, 0xbe, 0x52, + 0xfb, 0x05, 0x86, 0xe6, 0x41, 0x61, 0x1b, 0x49, 0x4a, 0x30, 0x79, 0xd9, + 0x20, 0xca, 0x6a, 0x1a, 0x6c, 0x8b, 0x2e, 0xea, 0x8d, 0x64, 0x4a, 0xde, + 0x91, 0x0a, 0x24, 0xc4, 0xe4, 0x62, 0x73, 0x02, 0x81, 0x81, 0x00, 0xcb, + 0xfd, 0xd5, 0xaa, 0x06, 0xed, 0x9a, 0x35, 0xaa, 0x95, 0xad, 0x73, 0xca, + 0x56, 0x4f, 0x92, 0xf8, 0x42, 0x88, 0xca, 0x35, 0x5a, 0x96, 0x1a, 0xa6, + 0x72, 0x2d, 0xe8, 0xc6, 0xf2, 0xd7, 0x32, 0x6d, 0xb5, 0xae, 0x4e, 0x28, + 0x62, 0xdf, 0xe3, 0x02, 0x05, 0x3c, 0xc2, 0xe9, 0x5a, 0x13, 0xc0, 0x03, + 0x63, 0xb2, 0x62, 0x79, 0x45, 0x6b, 0x74, 0x73, 0x40, 0x5f, 0x4b, 0x5b, + 0x06, 0x73, 0x06, 0x9f, 0xb3, 0x3a, 0xe9, 0x2b, 0xe6, 0xf7, 0x04, 0xb4, + 0xe9, 0xd4, 0x0e, 0x38, 0xb7, 0xa8, 0x52, 0xf5, 0x7b, 0x74, 0xdc, 0xb4, + 0x2f, 0x34, 0x40, 0x41, 0x04, 0xfb, 0x8f, 0xb0, 0xf0, 0x5b, 0xad, 0x06, + 0xd4, 0x4c, 0xf6, 0xf7, 0x63, 0x20, 0x1b, 0x00, 0x1b, 0x79, 0xd0, 0x08, + 0x8c, 0x4c, 0xf9, 0x8a, 0x90, 0x2a, 0xae, 0xcb, 0x83, 0xaa, 0x75, 0x8d, + 0x76, 0x32, 0x07, 0xb3, 0x9a, 0x47, 0xbb, 0x02, 0x81, 0x80, 0x3c, 0x40, + 0x5f, 0x61, 0x71, 0x4a, 0x0a, 0xb7, 0x62, 0x65, 0xc5, 0x01, 0x37, 0xc2, + 0xc8, 0x54, 0x08, 0xc0, 0xff, 0x34, 0x9c, 0xf3, 0xf6, 0xae, 0xce, 0xd0, + 0x6a, 0xd6, 0x4a, 0x7d, 0x2f, 0xf1, 0x5f, 0x98, 0xde, 0x97, 0x23, 0xca, + 0x51, 0x29, 0xec, 0xcc, 0x57, 0xc2, 0xc3, 0xda, 0x1f, 0xab, 0xe4, 0x28, + 0x0d, 0x8f, 0x90, 0x46, 0xca, 0xfb, 0x15, 0x6e, 0xb6, 0x7b, 0x92, 0x83, + 0x70, 0x37, 0xad, 0x6a, 0x93, 0xa1, 0x24, 0x99, 0x0b, 0xb9, 0x7d, 0xe0, + 0x5b, 0x95, 0xc2, 0xf4, 0x01, 0x51, 0xed, 0x54, 0xde, 0x0c, 0x38, 0x71, + 0xca, 0xfd, 0xbf, 0x57, 0x10, 0xa3, 0x86, 0x1b, 0x92, 0x42, 0x0f, 0xf1, + 0xd6, 0xe4, 0x20, 0xa9, 0xbe, 0x28, 0x69, 0x06, 0xfc, 0x00, 0x1f, 0x54, + 0x25, 0x3a, 0x4e, 0x54, 0xe1, 0xdc, 0xb3, 0xe9, 0x1f, 0xe6, 0x64, 0x3b, + 0x95, 0x9e, 0xf5, 0x5c, 0xda, 0x2b, 0x02, 0x81, 0x80, 0x37, 0xe9, 0x74, + 0x25, 0xed, 0x4e, 0x34, 0xc5, 0x5e, 0xe3, 0x35, 0xae, 0x96, 0x18, 0x00, + 0x29, 0x8d, 0x68, 0x57, 0x2b, 0xed, 0x61, 0xcd, 0xe0, 0xb2, 0x1c, 0x7b, + 0x9e, 0xe0, 0xe0, 0xf0, 0xc0, 0xfe, 0xb7, 0x1c, 0x76, 0x89, 0xb5, 0x48, + 0x1e, 0x65, 0x90, 0x5f, 0xee, 0x20, 0x9d, 0xb2, 0xea, 0x1f, 0x43, 0xb5, + 0x42, 0x2e, 0x71, 0x2b, 0x99, 0xb8, 0x79, 0x3d, 0x65, 0x5f, 0x26, 0xae, + 0x62, 0x73, 0x65, 0x61, 0xd1, 0x45, 0x5a, 0x41, 0xfc, 0x85, 0x45, 0xcd, + 0xfc, 0xb3, 0xe9, 0x0a, 0xf6, 0xea, 0x18, 0x13, 0x98, 0xe6, 0xbe, 0x45, + 0x79, 0x13, 0x19, 0x35, 0x86, 0x55, 0xfe, 0x1b, 0x72, 0x9a, 0x7b, 0x98, + 0x38, 0xdc, 0xe7, 0xcb, 0x85, 0xfb, 0x0a, 0x8c, 0xe1, 0xcb, 0x66, 0x01, + 0x37, 0x28, 0x96, 0x89, 0x4c, 0x6d, 0xb5, 0xc2, 0x04, 0x04, 0x69, 0x10, + 0x1f, 0x72, 0x47, 0xe8, 0x3f, 0x02, 0x81, 0x80, 0x1e, 0x91, 0xcd, 0xad, + 0x31, 0x10, 0xa4, 0x7d, 0xb0, 0x32, 0x06, 0x9a, 0x31, 0x58, 0x5b, 0x08, + 0xad, 0x60, 0x51, 0x7b, 0x3e, 0xa3, 0xed, 0x81, 0x04, 0x0e, 0x7d, 0xc6, + 0x22, 0xdb, 0x9f, 0xd9, 0x72, 0xb6, 0x5b, 0xe9, 0x30, 0xa4, 0x2f, 0x1b, + 0x08, 0xba, 0x01, 0x1f, 0x63, 0xae, 0xd2, 0x77, 0x2a, 0xbe, 0xb8, 0x89, + 0x4a, 0xc7, 0xaf, 0x38, 0x55, 0xad, 0xf6, 0x2f, 0xb0, 0xee, 0x42, 0xa3, + 0x0a, 0x95, 0x5d, 0x6a, 0x31, 0xc4, 0x10, 0x7b, 0x68, 0xd5, 0xbd, 0x6a, + 0xaa, 0xb1, 0xe3, 0xe3, 0xd9, 0x3d, 0x5f, 0x42, 0x11, 0x51, 0xd0, 0x3e, + 0xc2, 0x10, 0xda, 0x13, 0x51, 0xa8, 0x47, 0x77, 0x6c, 0xdf, 0x70, 0x28, + 0x0b, 0xca, 0x27, 0x67, 0x20, 0xe6, 0xcb, 0x5c, 0x88, 0x48, 0x62, 0x2e, + 0x9a, 0x14, 0x72, 0x63, 0x98, 0x5d, 0xad, 0xeb, 0xdd, 0x28, 0xb5, 0x10, + 0x1d, 0x01, 0xea, 0x2c, + }, + { + 0x30, 0x82, 0x04, 0xbe, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa8, 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xb1, 0xd9, 0xbc, 0x21, 0x62, 0xf6, 0xee, 0x9c, 0xb1, 0x4b, + 0xe2, 0x4d, 0x2f, 0xfa, 0x8a, 0x0e, 0x10, 0xd7, 0x9a, 0xe5, 0xb2, 0xca, + 0x8e, 0xd6, 0x9b, 0xa1, 0x41, 0x82, 0xdf, 0x6e, 0xc4, 0x0a, 0x66, 0xe0, + 0xd8, 0x47, 0x54, 0xae, 0xe2, 0x61, 0x65, 0x0f, 0x13, 0x95, 0xa7, 0x01, + 0x83, 0x30, 0x7d, 0xcf, 0x4a, 0xcf, 0x3c, 0xa7, 0x89, 0x35, 0x8e, 0x4a, + 0xef, 0x66, 0xf4, 0x62, 0xab, 0x81, 0x2d, 0xfd, 0xc7, 0xda, 0xfe, 0x71, + 0x7d, 0x35, 0x86, 0xf1, 0x7b, 0xde, 0x93, 0x4d, 0x07, 0x88, 0x81, 0xe0, + 0x8d, 0x1d, 0xb9, 0xfe, 0xb5, 0x24, 0xf5, 0x8d, 0x4e, 0xfd, 0x20, 0x27, + 0xc9, 0x19, 0x57, 0xf3, 0x7a, 0x32, 0x09, 0xbd, 0x77, 0xcc, 0x6a, 0xd8, + 0x9b, 0xd8, 0x81, 0xb8, 0x0e, 0xc4, 0xa2, 0x3a, 0x0b, 0x61, 0xf0, 0x29, + 0x41, 0x07, 0xbd, 0xe5, 0x96, 0x46, 0xcd, 0x67, 0x31, 0xa1, 0xd2, 0x67, + 0x91, 0x65, 0x5b, 0xff, 0xf6, 0x82, 0xb9, 0x4a, 0x8a, 0x41, 0x40, 0x87, + 0x15, 0x6e, 0xa7, 0x6a, 0xe6, 0xd6, 0x3d, 0x80, 0x0b, 0xcc, 0xb9, 0xe7, + 0x0e, 0x52, 0xe6, 0x26, 0x35, 0x8c, 0x04, 0x99, 0xf0, 0x5c, 0x60, 0x3e, + 0xf7, 0x33, 0x05, 0xd1, 0xc0, 0x52, 0xea, 0x20, 0xff, 0xdf, 0x7f, 0x30, + 0x83, 0xb7, 0x2a, 0x87, 0x1f, 0x6c, 0xf0, 0x28, 0x98, 0x27, 0x7c, 0x6a, + 0xe7, 0x1f, 0xbd, 0x53, 0x46, 0x7d, 0xd4, 0xf5, 0x6c, 0x40, 0x81, 0xbe, + 0x75, 0x66, 0xdc, 0x35, 0xd1, 0x1f, 0xc6, 0x3a, 0xfd, 0x96, 0xe9, 0x10, + 0xc4, 0xfe, 0x1e, 0x2f, 0x97, 0x47, 0x94, 0xf5, 0xe7, 0x65, 0x89, 0xf6, + 0xee, 0xa6, 0xd1, 0x88, 0x3d, 0x0c, 0x55, 0x7b, 0x21, 0x10, 0x90, 0x2d, + 0x0e, 0x76, 0x59, 0x30, 0xdb, 0x5d, 0x6b, 0xc3, 0x00, 0x17, 0xed, 0x3a, + 0x48, 0xad, 0x74, 0x02, 0xe9, 0x2f, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x13, 0x80, 0xf0, 0x3b, 0xad, 0x11, 0xad, 0x5b, 0x2b, + 0xaa, 0x49, 0xb7, 0xf3, 0x42, 0x03, 0x6f, 0xc5, 0x73, 0x0f, 0x7e, 0x8f, + 0x1b, 0xdd, 0x8c, 0x35, 0x66, 0xfa, 0xbb, 0x32, 0x6b, 0x80, 0x3e, 0x2f, + 0xc8, 0x0a, 0x8f, 0xcf, 0xfe, 0x99, 0xbe, 0xda, 0x89, 0x4b, 0xb9, 0x86, + 0xa6, 0x08, 0xd0, 0x01, 0x8c, 0x01, 0x05, 0x36, 0xfe, 0x9c, 0x72, 0x6e, + 0x17, 0x53, 0xa7, 0xb3, 0xb7, 0x3a, 0x5d, 0xa1, 0x40, 0x8a, 0x71, 0x3e, + 0xa4, 0x0d, 0x7a, 0x18, 0x41, 0x55, 0x37, 0x34, 0x6a, 0x27, 0x20, 0x56, + 0x35, 0xdc, 0xe3, 0xdc, 0xa8, 0xcd, 0x0e, 0xaf, 0x8a, 0xfe, 0x95, 0x8d, + 0xb8, 0x2f, 0x3a, 0x83, 0x45, 0xa5, 0x29, 0xe5, 0x9d, 0x8c, 0x8c, 0xb3, + 0x4e, 0xeb, 0xd0, 0x53, 0x71, 0x6e, 0xd5, 0x2b, 0x81, 0x38, 0x0c, 0x56, + 0x7c, 0xff, 0xaf, 0xac, 0xa8, 0x87, 0xd1, 0x5d, 0xe7, 0x2a, 0x2f, 0x09, + 0x0a, 0x1e, 0x18, 0xf1, 0x02, 0xe5, 0x2c, 0xc6, 0x9e, 0x5c, 0x91, 0xf1, + 0xdf, 0xa1, 0x0a, 0x0a, 0x50, 0xa6, 0x67, 0x77, 0xc7, 0x8b, 0xb1, 0xdf, + 0x49, 0x1e, 0xbd, 0x8c, 0x45, 0x89, 0x2b, 0xfe, 0x32, 0xcc, 0xb4, 0x62, + 0xed, 0xdc, 0xec, 0xd9, 0xfe, 0xf1, 0x18, 0x3a, 0x8f, 0x92, 0x0a, 0x6c, + 0xc2, 0x84, 0xfc, 0xe3, 0x8a, 0x88, 0xdc, 0x04, 0x31, 0x83, 0x41, 0x97, + 0x04, 0xeb, 0x32, 0x42, 0x98, 0x63, 0x6c, 0x93, 0xc7, 0x63, 0x75, 0x0a, + 0xf7, 0xfc, 0x3a, 0xe7, 0x57, 0x88, 0xa8, 0x98, 0x8c, 0xf0, 0xf4, 0x74, + 0x18, 0xda, 0x27, 0x32, 0x92, 0x95, 0x6c, 0x74, 0x76, 0x52, 0x80, 0x5a, + 0x7d, 0x6c, 0xa1, 0x9f, 0xd1, 0xf1, 0x24, 0x1b, 0x70, 0x84, 0x70, 0xe3, + 0xd5, 0x91, 0xfa, 0x5d, 0xd2, 0x0f, 0xda, 0x48, 0x41, 0x7c, 0x64, 0xd6, + 0x92, 0xdb, 0x1e, 0x67, 0x29, 0xe4, 0x69, 0x02, 0x81, 0x81, 0x00, 0xd5, + 0x9b, 0x27, 0x2d, 0x63, 0x7c, 0x4d, 0xb8, 0x99, 0xe4, 0xd5, 0x03, 0xaa, + 0x0b, 0xea, 0x51, 0x29, 0x7d, 0x4a, 0x46, 0xe3, 0xa5, 0xf4, 0x49, 0xdd, + 0x5d, 0x0d, 0x4c, 0x36, 0xc5, 0x95, 0x8e, 0xa7, 0x06, 0x3f, 0x0d, 0xf8, + 0xda, 0xc1, 0xde, 0x05, 0xb0, 0x64, 0x84, 0x0e, 0xea, 0x97, 0x20, 0x3b, + 0x24, 0xba, 0xdd, 0xf0, 0x29, 0x21, 0x91, 0x1a, 0x58, 0x76, 0x3b, 0x15, + 0x36, 0x99, 0xa7, 0x49, 0xfb, 0x8a, 0x6a, 0x28, 0x9e, 0x68, 0x84, 0xb3, + 0x7c, 0x93, 0x2a, 0xd7, 0x2d, 0xc9, 0x0a, 0x58, 0xa1, 0xe3, 0x4f, 0x5c, + 0x5b, 0x7a, 0x08, 0x33, 0xdc, 0x88, 0xad, 0x7a, 0x8e, 0x2b, 0x0e, 0x56, + 0x49, 0x59, 0x45, 0xfd, 0x1a, 0x84, 0x2a, 0x57, 0x40, 0xf3, 0x70, 0x03, + 0x86, 0xcd, 0x3d, 0xf3, 0xd4, 0x98, 0x86, 0xaa, 0xa1, 0x9f, 0x04, 0x74, + 0xf4, 0xc2, 0x83, 0x6a, 0x0b, 0xc0, 0xab, 0x02, 0x81, 0x81, 0x00, 0xd5, + 0x25, 0xec, 0x3a, 0xa3, 0x6c, 0x9b, 0x4d, 0x23, 0xcf, 0x2b, 0xf3, 0x60, + 0x36, 0x2d, 0x03, 0xcc, 0x1f, 0xf3, 0xd3, 0x0e, 0xcc, 0xe5, 0x45, 0xb3, + 0xee, 0xc5, 0x8d, 0x81, 0x7e, 0xfe, 0x2f, 0x78, 0x31, 0x3e, 0x23, 0xfe, + 0x60, 0x0b, 0xc6, 0x18, 0xae, 0x04, 0xac, 0xfe, 0x7b, 0xbd, 0x58, 0x30, + 0x62, 0xc6, 0xfb, 0x55, 0x3e, 0xbd, 0x1e, 0x28, 0x53, 0x4d, 0xf2, 0x29, + 0xeb, 0x86, 0x07, 0x4b, 0x2d, 0x0f, 0xb6, 0xa9, 0x99, 0x30, 0x19, 0xc1, + 0x78, 0x04, 0xd3, 0x46, 0xe0, 0x7e, 0x56, 0x48, 0xd1, 0xb8, 0x61, 0xcc, + 0xb4, 0xc9, 0x04, 0x7e, 0x5e, 0x50, 0x24, 0x22, 0x5b, 0x3c, 0x03, 0x87, + 0xf6, 0x6b, 0xfc, 0x78, 0xf8, 0xe3, 0xf2, 0x09, 0x75, 0xfc, 0xfd, 0xd3, + 0xfa, 0xc9, 0x93, 0x4e, 0x15, 0xda, 0x2c, 0xea, 0x3e, 0x75, 0x1e, 0x55, + 0xc4, 0x4e, 0x5f, 0xd0, 0x9b, 0x61, 0x8d, 0x02, 0x81, 0x81, 0x00, 0xb0, + 0xfa, 0x52, 0xd4, 0x65, 0x58, 0x09, 0x21, 0x08, 0xc8, 0xb2, 0xc0, 0xcd, + 0x73, 0xff, 0xd8, 0xed, 0x12, 0x34, 0xa7, 0x55, 0x58, 0x1b, 0x75, 0xd3, + 0xa5, 0x94, 0x2d, 0xf0, 0x37, 0x76, 0x79, 0x71, 0xe3, 0x57, 0xfc, 0xe0, + 0x91, 0x87, 0x0c, 0xc8, 0x13, 0xe4, 0xc4, 0x11, 0x83, 0xc6, 0x60, 0xda, + 0xff, 0xcc, 0x9f, 0xb3, 0xaa, 0xb0, 0x78, 0x03, 0xa7, 0x05, 0x96, 0x60, + 0x36, 0x13, 0xca, 0xaa, 0x1e, 0x72, 0x09, 0x10, 0xcc, 0x66, 0x76, 0x84, + 0x2b, 0x93, 0xd7, 0x6b, 0xdf, 0x30, 0x71, 0x95, 0x0b, 0xd4, 0x44, 0xdd, + 0x95, 0xa1, 0x1f, 0x08, 0xb1, 0x10, 0xc1, 0x03, 0x08, 0xa5, 0x9d, 0xc4, + 0x5a, 0x13, 0x50, 0x4c, 0xab, 0x5a, 0x93, 0xa6, 0x25, 0x57, 0x4d, 0x18, + 0x6e, 0xe8, 0xc0, 0x0a, 0xb4, 0xbb, 0x06, 0xe0, 0x7a, 0xf6, 0x40, 0x80, + 0x12, 0x86, 0xd2, 0xd0, 0xdb, 0x19, 0xef, 0x02, 0x81, 0x81, 0x00, 0xd2, + 0xda, 0xf1, 0x16, 0x11, 0x15, 0x1f, 0x8c, 0xf0, 0x1f, 0xc2, 0x1a, 0xc0, + 0xd2, 0xd7, 0x35, 0x2a, 0x79, 0x71, 0x7b, 0x18, 0xe9, 0x18, 0xe6, 0x1b, + 0x59, 0xd9, 0x94, 0x62, 0xc6, 0x7e, 0x2d, 0xf7, 0x78, 0xbf, 0x40, 0x5c, + 0x24, 0x27, 0x81, 0x90, 0x68, 0x95, 0xb7, 0x8d, 0x08, 0x5c, 0x07, 0x21, + 0xd6, 0x95, 0x81, 0x8c, 0x92, 0xc4, 0x03, 0x51, 0x61, 0x17, 0x7a, 0xb8, + 0x7d, 0x85, 0xd9, 0x31, 0x45, 0x22, 0x86, 0x50, 0xc0, 0x7a, 0x15, 0x00, + 0x8e, 0xfa, 0x37, 0x07, 0xa6, 0x8d, 0x54, 0x4e, 0x35, 0x29, 0x71, 0x96, + 0x50, 0x41, 0x8b, 0x70, 0x77, 0x5c, 0x50, 0x62, 0xac, 0x5e, 0x72, 0x1f, + 0xce, 0x66, 0x85, 0x1c, 0x27, 0x1b, 0x58, 0x14, 0x83, 0xe4, 0x02, 0x35, + 0xf1, 0xa1, 0xf7, 0x57, 0x07, 0xc7, 0x0d, 0x27, 0xad, 0x21, 0xaf, 0x20, + 0xa9, 0x51, 0xde, 0xf7, 0x3e, 0xbf, 0x01, 0x02, 0x81, 0x80, 0x01, 0xda, + 0x50, 0xd0, 0x7d, 0x59, 0x03, 0xe6, 0xb8, 0x0a, 0xe9, 0x9c, 0xc0, 0x4c, + 0x39, 0xe5, 0x28, 0xd7, 0x80, 0x54, 0x94, 0x04, 0xbd, 0xa1, 0x20, 0x5a, + 0x54, 0x61, 0x36, 0xd5, 0xc3, 0x7a, 0x93, 0x51, 0x0a, 0xca, 0x7d, 0x5b, + 0x65, 0xd5, 0xd5, 0x82, 0x96, 0x60, 0x8a, 0x52, 0x11, 0x62, 0x8a, 0x85, + 0xc2, 0xf0, 0x01, 0x3d, 0xab, 0xfc, 0xb1, 0xeb, 0x2f, 0xd2, 0x58, 0x74, + 0x2c, 0xfb, 0x53, 0x53, 0xed, 0x43, 0x96, 0x49, 0x16, 0x12, 0xba, 0xa9, + 0xa0, 0xd1, 0xb9, 0x86, 0x39, 0x7c, 0x58, 0xb5, 0x92, 0xae, 0xcc, 0x1e, + 0xf5, 0xdb, 0xcf, 0xbe, 0xd5, 0x71, 0x3e, 0x84, 0x52, 0xbc, 0xab, 0xe6, + 0x5d, 0x1f, 0xae, 0x9c, 0x16, 0x38, 0x38, 0x99, 0xde, 0xc0, 0x31, 0xd8, + 0x0d, 0xc2, 0xd7, 0x14, 0xb2, 0xe1, 0x8d, 0x28, 0xbe, 0x7a, 0x1c, 0xc3, + 0x82, 0x42, 0x0b, 0x47, 0x87, 0x10, + }, + { + 0x30, 0x82, 0x04, 0xbe, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa8, 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xe0, 0x8c, 0x17, 0xe8, 0xd0, 0xf4, 0x18, 0x7f, 0x90, 0x2d, + 0x44, 0x5c, 0x31, 0x1f, 0x57, 0x36, 0x0f, 0x5b, 0x3f, 0x37, 0x0f, 0xda, + 0x5b, 0x80, 0xe3, 0x53, 0xe8, 0xf8, 0x0a, 0x75, 0x6a, 0xe0, 0xb3, 0xa9, + 0xea, 0x29, 0x82, 0x31, 0x24, 0x19, 0xc0, 0x34, 0x7e, 0x75, 0x88, 0x1a, + 0x3c, 0xdd, 0x30, 0x6c, 0x6a, 0x04, 0x68, 0xae, 0xa0, 0x04, 0x16, 0x40, + 0x6e, 0xdf, 0xe6, 0x1a, 0xb1, 0x7d, 0x86, 0x4b, 0x0f, 0x3b, 0x0c, 0x3c, + 0x73, 0xbe, 0xc5, 0x8e, 0x94, 0x72, 0x1f, 0x3e, 0x9e, 0x6d, 0x45, 0x5e, + 0xab, 0x77, 0xd2, 0xe2, 0x55, 0x67, 0xb2, 0x25, 0xce, 0x26, 0x2f, 0x6a, + 0x1d, 0x01, 0xac, 0xd4, 0xfe, 0x2b, 0x07, 0x8e, 0x38, 0xb6, 0x08, 0x5b, + 0xc3, 0xdd, 0xbc, 0xe7, 0x66, 0x70, 0x92, 0x80, 0x41, 0x17, 0x7e, 0xd7, + 0x68, 0xca, 0x6d, 0x8b, 0xc9, 0xc5, 0x74, 0xf5, 0xd2, 0xb7, 0xab, 0xcd, + 0x87, 0xf3, 0x72, 0x85, 0xd6, 0xcd, 0xc6, 0xd1, 0xf4, 0x5d, 0xfe, 0xb9, + 0xd5, 0x3f, 0x38, 0x38, 0x21, 0x24, 0x89, 0x68, 0x49, 0xd9, 0xba, 0xcd, + 0x80, 0x99, 0xc7, 0x04, 0x51, 0xec, 0x89, 0x8c, 0x42, 0x7c, 0x1b, 0xae, + 0x5a, 0xbd, 0x0d, 0x76, 0x35, 0x9b, 0xb2, 0xee, 0x54, 0x24, 0x96, 0xe2, + 0x41, 0x0d, 0x29, 0x0d, 0xd2, 0xa4, 0xbf, 0x63, 0x84, 0x9a, 0xcb, 0x06, + 0xe0, 0x43, 0xd7, 0x70, 0x47, 0xac, 0xe7, 0x7d, 0xf4, 0x14, 0x89, 0xa1, + 0xcc, 0xa4, 0x14, 0x14, 0x5d, 0xf6, 0x1b, 0xf4, 0xe8, 0x8c, 0xda, 0xbe, + 0xad, 0xf5, 0xe0, 0x2e, 0x10, 0xdc, 0xe2, 0xb6, 0x62, 0xd0, 0x7b, 0x33, + 0x18, 0x98, 0x10, 0x70, 0xf5, 0x6c, 0x39, 0x04, 0x51, 0xd9, 0x08, 0x2a, + 0xa3, 0xa1, 0xbe, 0x8a, 0x0b, 0x14, 0xf6, 0x8b, 0xa5, 0x80, 0x0e, 0xaa, + 0xb0, 0x22, 0x2a, 0x5c, 0x26, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x71, 0x3b, 0x33, 0xf3, 0x5b, 0x2b, 0x3c, 0x0f, 0x57, + 0x8c, 0xfc, 0x23, 0xe1, 0x41, 0x84, 0xa0, 0xe6, 0x2d, 0x85, 0x3b, 0x26, + 0xeb, 0x5d, 0xa9, 0x28, 0xf9, 0x6f, 0x49, 0x65, 0x3c, 0xc0, 0xa0, 0x7e, + 0xf8, 0xf7, 0xf3, 0xe6, 0x8b, 0x11, 0x41, 0x4b, 0x03, 0x2d, 0xa1, 0xe6, + 0xf8, 0x14, 0x29, 0x15, 0xfa, 0x15, 0x9c, 0x13, 0x8d, 0xbb, 0x73, 0x54, + 0x25, 0x39, 0xc3, 0xfe, 0x2d, 0x07, 0xc3, 0xdc, 0xac, 0x8d, 0x09, 0xa1, + 0xa9, 0xfa, 0x54, 0x01, 0x1b, 0x5d, 0x10, 0x0f, 0x61, 0x6c, 0x52, 0x7d, + 0xe0, 0xb7, 0x66, 0xbd, 0x19, 0x15, 0x28, 0x2d, 0x55, 0x93, 0x16, 0xfe, + 0x61, 0xec, 0x2e, 0xa4, 0x10, 0xe3, 0xfa, 0x9e, 0xdc, 0xc1, 0x0c, 0x4a, + 0x3a, 0xbc, 0x12, 0x5c, 0xe7, 0xf3, 0x68, 0x60, 0xf7, 0xfb, 0xda, 0xf5, + 0x43, 0x7a, 0xbc, 0x59, 0x71, 0x5c, 0x56, 0x0e, 0x1c, 0xc8, 0x1c, 0x94, + 0x99, 0x8a, 0x95, 0x8b, 0x2d, 0x65, 0x0a, 0xc8, 0x6f, 0xdb, 0xdd, 0x85, + 0xcf, 0x6f, 0x38, 0x47, 0xef, 0x27, 0x21, 0xb7, 0x7f, 0x8d, 0xe9, 0xf4, + 0x3c, 0x15, 0xcb, 0x1c, 0x03, 0x91, 0xa6, 0x0f, 0x3f, 0x61, 0x7f, 0xa5, + 0x32, 0xff, 0x10, 0x14, 0x1c, 0xdc, 0xc3, 0xb9, 0xbb, 0x51, 0xb7, 0xe9, + 0x91, 0xf2, 0xff, 0x6e, 0x4b, 0x35, 0x90, 0x24, 0xf7, 0xe9, 0x39, 0x94, + 0x17, 0x36, 0x9d, 0x0c, 0xe7, 0x57, 0x96, 0x64, 0x35, 0xc1, 0x7c, 0x57, + 0x15, 0xe8, 0xec, 0x31, 0x2f, 0xac, 0xed, 0x08, 0x0a, 0x02, 0x39, 0xb3, + 0x22, 0x2c, 0x47, 0x97, 0x06, 0xa8, 0x15, 0x8f, 0x9f, 0x0d, 0x50, 0x95, + 0x70, 0x7b, 0xfd, 0x85, 0x78, 0x74, 0xfa, 0x3d, 0x37, 0x54, 0xbd, 0xfa, + 0xfe, 0x76, 0x8b, 0xc3, 0x60, 0xbc, 0x47, 0x57, 0x36, 0x4f, 0xb0, 0x3c, + 0x35, 0xc5, 0x72, 0x22, 0xb3, 0xac, 0xe1, 0x02, 0x81, 0x81, 0x00, 0xfb, + 0x6d, 0xc5, 0x79, 0x03, 0x62, 0x90, 0x75, 0x15, 0x2a, 0x9a, 0x0d, 0x90, + 0x6e, 0x03, 0xb8, 0x86, 0x52, 0x40, 0x7a, 0x6b, 0x4f, 0x46, 0x37, 0xa9, + 0xf8, 0xc4, 0x4d, 0x73, 0x1a, 0x6e, 0xd8, 0x1a, 0xb5, 0xfa, 0x75, 0x9c, + 0xc6, 0x73, 0x51, 0x60, 0xed, 0x08, 0x2d, 0xe6, 0x23, 0x62, 0x60, 0xb4, + 0x42, 0x6c, 0x36, 0xac, 0x34, 0x58, 0xf1, 0x9f, 0x49, 0x75, 0xa9, 0x22, + 0xb0, 0x97, 0x91, 0x37, 0x44, 0x40, 0x05, 0x34, 0x34, 0x61, 0x65, 0x8f, + 0xae, 0x4e, 0x4f, 0x6b, 0x1f, 0x1f, 0x2d, 0x89, 0x97, 0x2b, 0x48, 0x98, + 0x33, 0x4b, 0x79, 0x46, 0xaa, 0x8c, 0x96, 0x04, 0xfc, 0xe3, 0xe2, 0xbb, + 0x85, 0x96, 0x40, 0xa6, 0xe5, 0x4b, 0xb0, 0xa3, 0x26, 0x80, 0x98, 0x66, + 0xf1, 0x36, 0xb5, 0xdb, 0xa0, 0x9b, 0x17, 0x8a, 0x91, 0x88, 0xb8, 0x78, + 0x1a, 0xc0, 0x24, 0x93, 0x3c, 0x50, 0xa3, 0x02, 0x81, 0x81, 0x00, 0xe4, + 0xa1, 0x34, 0xf1, 0xde, 0x5a, 0x1d, 0xf0, 0xba, 0x1f, 0x8a, 0xcb, 0x9d, + 0x7a, 0xb0, 0xee, 0x90, 0x60, 0x56, 0xa6, 0x49, 0x38, 0x24, 0xb6, 0xaf, + 0x6d, 0xb9, 0x93, 0xe3, 0xc1, 0xdf, 0x49, 0x79, 0x05, 0x20, 0x0f, 0xdd, + 0x04, 0xbf, 0xcc, 0x33, 0x09, 0x13, 0xe4, 0x7c, 0x2d, 0x33, 0xec, 0xb2, + 0xc4, 0xca, 0xd9, 0x93, 0x82, 0x9f, 0xf8, 0xb2, 0xd8, 0xf1, 0x00, 0x2d, + 0xf0, 0x72, 0x0f, 0x9d, 0xb8, 0x9b, 0x29, 0x8f, 0x9f, 0x4b, 0xc5, 0xe6, + 0xa9, 0x30, 0xd9, 0xf1, 0x2f, 0x83, 0x19, 0xb6, 0xef, 0xa9, 0x88, 0x03, + 0x9d, 0x4c, 0x79, 0x3a, 0x47, 0x59, 0xab, 0xa1, 0xe3, 0x29, 0xe8, 0x75, + 0xbd, 0x1d, 0x58, 0x54, 0x9d, 0x7d, 0xd6, 0x37, 0x39, 0xb4, 0x55, 0x44, + 0x9b, 0x24, 0x16, 0xc1, 0x49, 0xfd, 0x77, 0xc9, 0x52, 0x9d, 0x61, 0x2e, + 0xc6, 0xf4, 0x54, 0x49, 0x2e, 0xb5, 0xbb, 0x02, 0x81, 0x81, 0x00, 0xd7, + 0x9f, 0x90, 0x56, 0xf3, 0xbc, 0x37, 0xbe, 0xf1, 0x64, 0x13, 0xb1, 0xc6, + 0x47, 0x53, 0x11, 0x90, 0xc0, 0x41, 0x63, 0xbb, 0x5b, 0xc5, 0x10, 0x3f, + 0xc8, 0x84, 0x31, 0x17, 0xa1, 0x77, 0xa6, 0x05, 0x62, 0x43, 0x65, 0x52, + 0x0a, 0x2f, 0x23, 0x7f, 0x48, 0x48, 0x57, 0x74, 0xa2, 0xab, 0xdf, 0xdb, + 0x37, 0x8b, 0xae, 0x67, 0x88, 0x8d, 0x2e, 0xca, 0x38, 0x29, 0x9b, 0xdf, + 0x90, 0x2a, 0xab, 0xf3, 0x05, 0xa9, 0x11, 0xcd, 0x6f, 0x8e, 0x87, 0x96, + 0xed, 0x19, 0x63, 0xaa, 0xae, 0x8a, 0x02, 0x77, 0x99, 0x19, 0x19, 0xac, + 0xcd, 0x70, 0xd0, 0x94, 0xf5, 0xf6, 0x93, 0x41, 0xbb, 0xcf, 0x83, 0xc6, + 0xe6, 0x0d, 0xb1, 0x6c, 0x70, 0x00, 0xb5, 0x7f, 0x75, 0xa9, 0x9b, 0x09, + 0xcd, 0x9b, 0xe9, 0xe2, 0x6c, 0x9e, 0x15, 0x56, 0x54, 0xf1, 0x37, 0xa2, + 0x68, 0xee, 0x97, 0x6f, 0x5d, 0xae, 0x99, 0x02, 0x81, 0x81, 0x00, 0x99, + 0xae, 0x77, 0x1d, 0x62, 0x1e, 0x67, 0x63, 0xca, 0x68, 0xab, 0x6e, 0x85, + 0x13, 0xd4, 0xdc, 0xf7, 0xb5, 0x9a, 0x69, 0x3a, 0x6c, 0x7f, 0xd9, 0x41, + 0x00, 0xdb, 0xae, 0xba, 0x79, 0x36, 0x73, 0x77, 0xe2, 0xe7, 0x13, 0x62, + 0xb8, 0xef, 0x87, 0xfe, 0x82, 0x4a, 0x99, 0xda, 0x92, 0xb4, 0x05, 0x96, + 0x81, 0x4b, 0xed, 0x87, 0x07, 0x56, 0x2a, 0xe1, 0x65, 0x8c, 0x52, 0x57, + 0x8e, 0xf9, 0xcc, 0xdf, 0x73, 0x18, 0xf1, 0x8d, 0xf6, 0x41, 0x03, 0xed, + 0x31, 0xab, 0x81, 0xc4, 0x6a, 0xf0, 0x90, 0x17, 0x74, 0xf0, 0x1b, 0x5a, + 0x7a, 0xa0, 0xce, 0x18, 0x4b, 0x9f, 0xce, 0x0c, 0x0a, 0xdb, 0xbf, 0xc3, + 0x6c, 0xf4, 0xcd, 0xcc, 0x4a, 0xf5, 0x2c, 0x4a, 0x81, 0x02, 0x64, 0x12, + 0xb2, 0xca, 0x46, 0x75, 0x75, 0x1b, 0xe9, 0x2a, 0x2d, 0xdb, 0x56, 0x59, + 0x10, 0x29, 0x6a, 0x82, 0xaa, 0xe0, 0x43, 0x02, 0x81, 0x80, 0x6e, 0x4f, + 0x83, 0xd9, 0xb0, 0xe7, 0x8a, 0x2e, 0x86, 0x9a, 0x45, 0x86, 0x9f, 0xd9, + 0x3b, 0x4b, 0xfc, 0x46, 0xd8, 0x57, 0x82, 0x5a, 0x90, 0xe6, 0x29, 0xf6, + 0xcf, 0x19, 0xf1, 0x41, 0x64, 0xa6, 0x66, 0x7e, 0xb2, 0xeb, 0x29, 0xa1, + 0x01, 0x9c, 0x28, 0xce, 0xae, 0xdd, 0xaa, 0x1d, 0x3d, 0x6f, 0xb0, 0x75, + 0xaf, 0x0f, 0xc0, 0x38, 0xc4, 0x45, 0x78, 0x15, 0xbf, 0x86, 0x8c, 0x19, + 0xce, 0xb6, 0x29, 0xdf, 0xa0, 0xaf, 0xbb, 0x8c, 0xae, 0xc6, 0x85, 0xd3, + 0x93, 0x4a, 0x2c, 0x26, 0x10, 0x36, 0x39, 0x9a, 0x75, 0x78, 0x56, 0x46, + 0xf4, 0xed, 0x3c, 0xb2, 0x2c, 0xb7, 0x31, 0xf1, 0x6d, 0xbb, 0xb3, 0xc5, + 0xea, 0x95, 0xf9, 0xcd, 0x8f, 0x31, 0xb6, 0xfd, 0x77, 0x20, 0x90, 0x9c, + 0xd7, 0xe5, 0x58, 0x6d, 0xe6, 0xd3, 0xd9, 0x1b, 0x34, 0x3e, 0x30, 0x24, + 0x72, 0xc2, 0x5d, 0xd8, 0xf9, 0x76, + }, + { + 0x30, 0x82, 0x04, 0xbd, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa7, 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xcb, 0x23, 0x69, 0xbc, 0x10, 0x8d, 0x7d, 0x50, 0x4b, 0xae, + 0xa8, 0xea, 0xa5, 0x32, 0xe1, 0xda, 0x93, 0x77, 0x03, 0x3e, 0x04, 0x8d, + 0xfa, 0x1a, 0x6d, 0x91, 0xd7, 0xd3, 0x30, 0x90, 0x0d, 0x2e, 0x4e, 0x7a, + 0xf6, 0xdd, 0xd6, 0x90, 0x90, 0xad, 0xf1, 0x48, 0x22, 0x84, 0xe7, 0xb7, + 0x7c, 0x33, 0x45, 0x13, 0x6f, 0x6c, 0xad, 0x86, 0xf7, 0xcf, 0xf7, 0x50, + 0x53, 0x96, 0x2c, 0xbd, 0xdb, 0x46, 0x2a, 0xfb, 0xa1, 0xae, 0x34, 0xcd, + 0x2a, 0xc0, 0xdc, 0xee, 0xc5, 0x06, 0x9c, 0x36, 0x3f, 0x1e, 0x10, 0xc1, + 0x1c, 0x6b, 0x25, 0xb3, 0xdf, 0xd4, 0xcb, 0x13, 0x3e, 0xc6, 0x5e, 0x3b, + 0xcf, 0xde, 0x10, 0x14, 0x54, 0x5d, 0xa4, 0xb5, 0x4d, 0x0d, 0x21, 0xd6, + 0xd9, 0xb7, 0xea, 0x3f, 0x76, 0x58, 0x0f, 0x2b, 0x0a, 0x4a, 0x91, 0x86, + 0x2d, 0x65, 0x01, 0xab, 0x27, 0x23, 0x70, 0x0f, 0xf3, 0xfc, 0xb5, 0xde, + 0x02, 0x64, 0xb1, 0x63, 0x42, 0x61, 0xa1, 0x81, 0x05, 0x63, 0x4c, 0xb8, + 0x86, 0x3b, 0xeb, 0xbe, 0xb3, 0xda, 0xc6, 0x2a, 0xda, 0x1b, 0x36, 0x3f, + 0xa3, 0xa7, 0xa5, 0xcc, 0xa4, 0x54, 0x4a, 0x6e, 0xcf, 0xf2, 0x28, 0xdb, + 0x71, 0x64, 0x2a, 0x8d, 0x0e, 0xb5, 0x9c, 0xd7, 0x34, 0x4f, 0xc5, 0x2d, + 0x64, 0x2d, 0x5b, 0xe6, 0x4b, 0x12, 0x02, 0x1f, 0xfd, 0xdf, 0x13, 0xf6, + 0x47, 0xe8, 0x1f, 0x7d, 0x91, 0x77, 0x0e, 0x72, 0xd7, 0xbd, 0xab, 0x24, + 0x36, 0x21, 0x9f, 0xac, 0x69, 0x5f, 0x7a, 0x65, 0xb2, 0x2e, 0x78, 0x89, + 0x72, 0x60, 0xd0, 0x6f, 0x11, 0x93, 0x42, 0x1d, 0xbc, 0xa3, 0x87, 0x6e, + 0xd8, 0x23, 0x93, 0x35, 0xbb, 0x6b, 0x9a, 0xcb, 0x3a, 0xc5, 0x98, 0x90, + 0xb5, 0xf1, 0xb1, 0xfb, 0x3d, 0xd9, 0xd4, 0xd4, 0x91, 0x18, 0x75, 0x55, + 0xf0, 0xb5, 0x92, 0x50, 0x1d, 0x9d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x13, 0xed, 0x64, 0x68, 0xf3, 0x82, 0xbd, 0xc1, 0x4b, + 0xbb, 0x55, 0x8c, 0xb7, 0x29, 0xf7, 0xa7, 0xf6, 0x81, 0x5d, 0x4b, 0x0f, + 0x2d, 0x52, 0x54, 0x97, 0x5d, 0x10, 0x3c, 0x02, 0x6e, 0x8f, 0x2c, 0x74, + 0xbc, 0x71, 0x4d, 0x2f, 0xc8, 0x3c, 0xb9, 0x23, 0x8b, 0x3c, 0xff, 0xa6, + 0xaf, 0x84, 0x3a, 0x8f, 0x53, 0x29, 0xc2, 0x12, 0x7f, 0xc3, 0xfd, 0x9d, + 0xb8, 0x3e, 0x8a, 0xe3, 0xd6, 0xb8, 0x14, 0xf9, 0x10, 0x78, 0x3a, 0xdb, + 0xa9, 0x28, 0xc1, 0x84, 0xaa, 0xd3, 0x9f, 0x23, 0x61, 0xda, 0xed, 0x3b, + 0x1d, 0x86, 0x89, 0x28, 0x48, 0xad, 0xf3, 0x74, 0xfc, 0x6d, 0x53, 0x0e, + 0x59, 0x75, 0xb9, 0xc6, 0x00, 0x08, 0x8a, 0xab, 0x26, 0xb1, 0xe9, 0x50, + 0xe1, 0x7f, 0xb8, 0x1f, 0xfd, 0x9b, 0xc1, 0x65, 0xb3, 0x86, 0x2d, 0xec, + 0x7a, 0xaa, 0x27, 0x57, 0x73, 0x8f, 0xc2, 0x55, 0x32, 0xeb, 0x6f, 0x39, + 0x31, 0xa0, 0x4a, 0x17, 0x55, 0xa5, 0x03, 0xbb, 0x34, 0xf0, 0xa9, 0x17, + 0xb7, 0x2f, 0x23, 0x83, 0x2c, 0xf7, 0x4e, 0x3f, 0x78, 0x2e, 0xaf, 0xe8, + 0x15, 0xd4, 0xf6, 0xb3, 0xb3, 0x57, 0x1c, 0x2b, 0x71, 0x1a, 0xae, 0x04, + 0x86, 0xdd, 0xf1, 0x53, 0x3b, 0xbe, 0xa1, 0x71, 0xfb, 0x6f, 0xff, 0x77, + 0xbb, 0x05, 0x53, 0x96, 0xae, 0xb2, 0xb2, 0xae, 0xc9, 0x28, 0x55, 0x0e, + 0x28, 0xbe, 0x36, 0x0e, 0xb7, 0xe1, 0x77, 0x44, 0xba, 0x58, 0x3f, 0xa1, + 0xff, 0xf1, 0xa1, 0x28, 0xa2, 0xd1, 0x31, 0x13, 0x46, 0x5c, 0x24, 0x89, + 0x72, 0x35, 0x86, 0x17, 0x3a, 0x28, 0x87, 0x7b, 0x79, 0xfa, 0xed, 0xc0, + 0xa8, 0x81, 0x11, 0x90, 0x49, 0xf2, 0x7e, 0xda, 0xc9, 0x93, 0x83, 0x66, + 0xd6, 0xd5, 0x67, 0x9c, 0x96, 0x11, 0x9f, 0x86, 0xca, 0xcb, 0x41, 0xf5, + 0xbb, 0x97, 0x53, 0xcf, 0x96, 0x71, 0x0d, 0x02, 0x81, 0x81, 0x00, 0xea, + 0xa0, 0x38, 0x53, 0xf3, 0xac, 0x5c, 0x3b, 0x57, 0xfe, 0xe0, 0xb9, 0x76, + 0x15, 0x22, 0x7e, 0xab, 0xd5, 0x6a, 0x5c, 0xec, 0xa4, 0x09, 0x56, 0x88, + 0xd8, 0xde, 0x33, 0x14, 0x78, 0xca, 0xcb, 0xb7, 0xd4, 0x2a, 0x3d, 0x6b, + 0xf8, 0xcf, 0x2b, 0xc8, 0x37, 0xf2, 0x26, 0x00, 0x96, 0x53, 0xe2, 0x19, + 0xd7, 0xf4, 0x14, 0x5e, 0x9a, 0x3b, 0x4f, 0xc3, 0x24, 0x39, 0x0a, 0xc7, + 0x9e, 0xa3, 0xd8, 0x0d, 0x17, 0xf7, 0xa6, 0xf7, 0xd0, 0x41, 0xa8, 0x52, + 0x82, 0xa8, 0x2e, 0x4a, 0x52, 0xbd, 0x38, 0x72, 0x55, 0xcd, 0xf1, 0xfa, + 0xa3, 0x34, 0x5e, 0x69, 0x81, 0xa9, 0x7e, 0x96, 0x94, 0x61, 0xd0, 0x61, + 0x17, 0xb4, 0x71, 0x37, 0xdf, 0xa7, 0x19, 0x62, 0x65, 0x73, 0xa5, 0xae, + 0xe7, 0x69, 0xad, 0xc0, 0xb8, 0x35, 0x32, 0xbd, 0xaf, 0x3f, 0xdb, 0x11, + 0x3d, 0x54, 0x4e, 0xef, 0xb2, 0x62, 0xaf, 0x02, 0x81, 0x81, 0x00, 0xdd, + 0xa4, 0xdc, 0xe9, 0x4b, 0x7b, 0x8d, 0xd0, 0x96, 0x2c, 0x93, 0x85, 0x11, + 0xeb, 0x26, 0x78, 0x12, 0x0f, 0x55, 0xdd, 0xf1, 0x7b, 0x1a, 0x31, 0x27, + 0xa8, 0x6e, 0x8c, 0x3b, 0xdf, 0x81, 0x27, 0x4f, 0xb2, 0x41, 0x65, 0x4a, + 0x21, 0x40, 0x4b, 0xd9, 0x4f, 0x80, 0x9e, 0xb7, 0xa7, 0x69, 0xb0, 0xb2, + 0x48, 0x5f, 0xf2, 0x48, 0xd2, 0xcb, 0xbb, 0x56, 0x85, 0xf0, 0x24, 0xfe, + 0x2f, 0x3f, 0xc3, 0xe6, 0x5b, 0xe0, 0xa5, 0x5a, 0xb3, 0xbf, 0xda, 0xe1, + 0x96, 0x61, 0x44, 0xd5, 0x5f, 0x03, 0xe1, 0x16, 0xfa, 0x22, 0x28, 0xea, + 0xbc, 0x83, 0x34, 0x2f, 0xba, 0x3f, 0x84, 0xd7, 0x70, 0x69, 0x5e, 0x9d, + 0x45, 0x6e, 0x3c, 0x7a, 0x04, 0x4c, 0x6f, 0x51, 0x30, 0x20, 0xff, 0x90, + 0xb1, 0xed, 0xd5, 0xe1, 0xaa, 0x51, 0x42, 0x87, 0x8b, 0x2c, 0x7f, 0x03, + 0x97, 0x64, 0xe0, 0x5d, 0xf5, 0x07, 0x73, 0x02, 0x81, 0x81, 0x00, 0x91, + 0x53, 0x36, 0x30, 0x81, 0xc0, 0xe3, 0xcb, 0xfa, 0x20, 0x2b, 0xef, 0x93, + 0xfd, 0x59, 0x45, 0x5e, 0x87, 0xac, 0xfe, 0xeb, 0xb0, 0x5a, 0xfc, 0x57, + 0x7d, 0x04, 0x7c, 0x5d, 0x14, 0xc8, 0x7f, 0xd0, 0x58, 0x40, 0xe5, 0x94, + 0x88, 0x23, 0x42, 0x3a, 0x1c, 0xb5, 0x06, 0xe6, 0xdc, 0x36, 0x0e, 0xd8, + 0xf5, 0x13, 0x00, 0xbe, 0xec, 0x07, 0x0a, 0xcb, 0x93, 0x17, 0x25, 0xdf, + 0x29, 0x1a, 0xd1, 0x0a, 0xa3, 0x2a, 0xc9, 0x27, 0xbb, 0xbd, 0xbf, 0x55, + 0x84, 0x0a, 0x49, 0xc9, 0xcd, 0x5f, 0xd8, 0xa3, 0xb1, 0x14, 0x03, 0xea, + 0xbb, 0xc6, 0x07, 0x28, 0x90, 0xa0, 0x7c, 0x81, 0x26, 0x5d, 0x43, 0xa5, + 0xaf, 0xfa, 0x1b, 0x1a, 0x81, 0x94, 0x4d, 0xbb, 0xcd, 0x9d, 0x09, 0x25, + 0xc1, 0xbe, 0x8a, 0x59, 0xd1, 0x7f, 0x59, 0xf3, 0x75, 0xa6, 0x36, 0xb9, + 0x81, 0xe4, 0x43, 0x94, 0x62, 0x48, 0x8f, 0x02, 0x81, 0x80, 0x0e, 0x87, + 0x68, 0x13, 0xc2, 0xe6, 0xee, 0x7c, 0xe5, 0xdb, 0x36, 0x30, 0x5a, 0xe4, + 0x57, 0x39, 0x37, 0xb5, 0xd9, 0xa3, 0x1a, 0xd9, 0x3e, 0xf6, 0x49, 0xeb, + 0x38, 0x93, 0xe8, 0xb8, 0xd5, 0xf6, 0x85, 0xba, 0xe1, 0x9e, 0x8a, 0x25, + 0x73, 0xd9, 0x84, 0xfd, 0x39, 0x29, 0x2e, 0x50, 0xc3, 0x14, 0xda, 0x1a, + 0xf4, 0x6f, 0x25, 0x66, 0xec, 0x03, 0xf3, 0xc0, 0x03, 0xe5, 0xe8, 0xe3, + 0xa0, 0x02, 0x6f, 0x6f, 0x46, 0x62, 0x90, 0x77, 0x87, 0xf4, 0x09, 0x25, + 0x9a, 0x6a, 0xb0, 0xb1, 0xf1, 0xc7, 0x27, 0x82, 0x6e, 0x0a, 0xd0, 0x98, + 0x5a, 0xe1, 0x68, 0xdf, 0x84, 0x9a, 0x68, 0xa4, 0xed, 0xc3, 0x4d, 0xfb, + 0xe7, 0x25, 0xff, 0xb9, 0x98, 0x69, 0x13, 0xa1, 0x5c, 0x08, 0x64, 0xab, + 0xc5, 0x33, 0x67, 0xff, 0x8a, 0x24, 0x1a, 0x4e, 0x7d, 0x34, 0x36, 0x40, + 0x0e, 0x54, 0xc6, 0xd3, 0xf1, 0x11, 0x02, 0x81, 0x80, 0x5e, 0x0e, 0x07, + 0x87, 0x9c, 0x14, 0x52, 0x7a, 0x6b, 0x3e, 0xc4, 0x70, 0x73, 0x97, 0x0b, + 0xf8, 0xe4, 0x4a, 0xde, 0x0e, 0xc8, 0x62, 0x98, 0x59, 0x20, 0x9e, 0x00, + 0x42, 0xb9, 0x2d, 0x38, 0xa0, 0xd0, 0x68, 0xde, 0x5a, 0xb7, 0x09, 0x5c, + 0xbc, 0x24, 0x1a, 0xa7, 0x7b, 0xde, 0x2f, 0x5b, 0x0a, 0x69, 0x3e, 0xc0, + 0xc7, 0x37, 0xe3, 0xdc, 0xa6, 0x02, 0x11, 0x72, 0xb4, 0x6f, 0xe9, 0x58, + 0x9d, 0xfb, 0x3e, 0x1f, 0xaa, 0xce, 0xa4, 0x64, 0xbc, 0xbb, 0x99, 0xce, + 0xa3, 0x35, 0x5e, 0x84, 0x48, 0x3a, 0x13, 0x12, 0xa2, 0x65, 0x31, 0xcb, + 0xa0, 0xb5, 0x36, 0x08, 0x06, 0xef, 0xf7, 0x63, 0xa9, 0x09, 0x4f, 0x30, + 0x2a, 0x86, 0x70, 0xaf, 0x43, 0xe4, 0xb0, 0xfc, 0x5a, 0x67, 0x16, 0xf4, + 0x61, 0x50, 0xa8, 0x28, 0xf4, 0x81, 0xd1, 0xfc, 0x35, 0xe0, 0x75, 0x01, + 0x00, 0x93, 0xc2, 0xb9, 0x9c, + }, + { + 0x30, 0x82, 0x04, 0xbd, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, + 0x04, 0xa7, 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xe7, 0x86, 0x9d, 0xc6, 0xae, 0x8a, 0x70, 0x82, 0x9c, 0xfb, + 0xe1, 0x35, 0x82, 0x11, 0x83, 0x47, 0x0d, 0xcd, 0x5a, 0x63, 0x4a, 0xe6, + 0xdc, 0xb3, 0x1d, 0x4d, 0x7b, 0xa6, 0x37, 0x05, 0x10, 0x7c, 0xbe, 0x52, + 0xf8, 0xb2, 0xe1, 0xa8, 0xed, 0x05, 0x5d, 0x95, 0xfd, 0x20, 0x0d, 0x39, + 0x0a, 0x90, 0x68, 0xe4, 0xed, 0x0e, 0x81, 0x64, 0x8a, 0x57, 0xe8, 0x6a, + 0x63, 0xa1, 0xaf, 0x86, 0xdb, 0x92, 0xa7, 0xda, 0x54, 0x4b, 0x07, 0x67, + 0x60, 0x0f, 0x4f, 0x06, 0x95, 0x65, 0x24, 0x02, 0x19, 0x77, 0xd8, 0x24, + 0x7e, 0x76, 0x84, 0xe0, 0x01, 0x54, 0xab, 0x4f, 0x2f, 0x70, 0xcf, 0x34, + 0xbf, 0xe2, 0xd0, 0x12, 0x6b, 0x9e, 0x8c, 0x4e, 0x0a, 0xf9, 0x06, 0xfb, + 0x41, 0xf9, 0x1a, 0xcb, 0x62, 0x21, 0xea, 0xce, 0x61, 0x04, 0x8f, 0x9d, + 0x20, 0x28, 0x2a, 0x87, 0xcc, 0xfe, 0x1a, 0x57, 0xb6, 0xe2, 0x44, 0x6c, + 0x28, 0xe3, 0xfc, 0xfe, 0xf6, 0x99, 0xa8, 0x49, 0x2e, 0xf5, 0xc7, 0x58, + 0xed, 0xf8, 0x78, 0x8a, 0xaf, 0x68, 0x73, 0xea, 0xcd, 0xbb, 0xd7, 0x8c, + 0xb8, 0x29, 0x83, 0x39, 0x04, 0x24, 0xca, 0x16, 0x59, 0x76, 0xbe, 0x27, + 0xe1, 0xfc, 0x27, 0x17, 0x40, 0x82, 0x27, 0x3b, 0x59, 0x18, 0xe9, 0xfb, + 0x23, 0x19, 0x09, 0xd7, 0x2d, 0xd7, 0x13, 0x8e, 0x4f, 0x8a, 0xcc, 0x53, + 0x11, 0x0d, 0xcf, 0x55, 0xcb, 0x0e, 0x97, 0xf5, 0x17, 0xf3, 0x3e, 0xdd, + 0x95, 0x52, 0x5d, 0x70, 0x91, 0xa7, 0xc4, 0x23, 0x46, 0xb2, 0xc5, 0xec, + 0x0a, 0x1a, 0x28, 0xb5, 0x48, 0x8b, 0x0b, 0x55, 0x18, 0xba, 0xa8, 0x07, + 0x31, 0x31, 0x07, 0xb4, 0x3b, 0x31, 0xae, 0x10, 0x9b, 0x23, 0xdf, 0xf9, + 0x8a, 0xd8, 0x78, 0x23, 0xf9, 0x35, 0x42, 0x91, 0x1d, 0xed, 0xc9, 0x64, + 0xe4, 0x41, 0x89, 0x52, 0x43, 0x6d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, + 0x82, 0x01, 0x00, 0x2c, 0x11, 0x49, 0x52, 0x99, 0xc2, 0x2b, 0xec, 0x10, + 0x69, 0x38, 0xd2, 0x70, 0x71, 0x58, 0xe5, 0x5b, 0x51, 0x2c, 0xd5, 0x1d, + 0x5a, 0x97, 0xc3, 0x57, 0xde, 0x79, 0x9c, 0x87, 0x78, 0x65, 0x4c, 0xf9, + 0x04, 0xdd, 0xe5, 0x5e, 0x62, 0x42, 0xca, 0xf4, 0xa7, 0x29, 0xc8, 0xc1, + 0xfb, 0x8b, 0x71, 0x35, 0x25, 0xed, 0xa1, 0x07, 0x2b, 0xd5, 0xd1, 0x29, + 0xa1, 0xa6, 0x59, 0x0e, 0x09, 0xc3, 0x1d, 0x44, 0xe9, 0x9f, 0x85, 0xb0, + 0x61, 0x12, 0xbd, 0x97, 0x33, 0x0f, 0x98, 0x72, 0xa4, 0x1b, 0xa8, 0xdd, + 0xf1, 0x04, 0x49, 0x16, 0xbd, 0x74, 0x43, 0x63, 0x5f, 0xed, 0x0d, 0xb1, + 0xc2, 0xbe, 0x8b, 0x33, 0x43, 0x6e, 0x4c, 0x7d, 0x34, 0x15, 0x8e, 0x94, + 0xaf, 0x9a, 0x3d, 0x09, 0xc6, 0x90, 0x65, 0x18, 0x46, 0x33, 0xdd, 0x24, + 0x60, 0xa9, 0xd0, 0x3b, 0x58, 0x21, 0xc2, 0x73, 0xcd, 0x22, 0x37, 0xce, + 0x4b, 0xcc, 0xdb, 0x8c, 0xbd, 0xef, 0xda, 0xa7, 0x7b, 0xfd, 0x89, 0x22, + 0xc3, 0x79, 0xad, 0x4d, 0x4d, 0x12, 0x96, 0x17, 0x68, 0x19, 0x01, 0x2b, + 0x67, 0xf5, 0xf8, 0xa2, 0xe7, 0x2a, 0x41, 0xa1, 0x05, 0xfa, 0xe7, 0xcf, + 0xcc, 0xff, 0xf5, 0xa1, 0xe0, 0x9f, 0x25, 0xc9, 0x3a, 0xac, 0xa8, 0x33, + 0x4f, 0x1a, 0x11, 0xfc, 0x47, 0x7f, 0x33, 0x64, 0x0a, 0x95, 0xb0, 0x86, + 0x01, 0xbf, 0x5e, 0xd4, 0xd7, 0x99, 0xdf, 0x14, 0x76, 0x31, 0xa7, 0xc1, + 0xe2, 0x9f, 0x33, 0xb7, 0xb9, 0xde, 0x18, 0x2c, 0x3a, 0x4a, 0x6b, 0x93, + 0x63, 0x5a, 0xa4, 0x6d, 0xcb, 0xc1, 0xc8, 0xa9, 0x5a, 0xa7, 0xd5, 0x5e, + 0x55, 0xc1, 0xb4, 0xcd, 0xd4, 0xb2, 0x1d, 0x1b, 0x1d, 0x80, 0xf7, 0xc3, + 0x27, 0x76, 0x7e, 0x92, 0x2a, 0x8b, 0x2d, 0x98, 0x7a, 0x90, 0xc7, 0x8a, + 0xa8, 0xa2, 0x63, 0xb2, 0x73, 0xc0, 0x81, 0x02, 0x81, 0x81, 0x00, 0xfa, + 0x35, 0x5e, 0xe0, 0xb9, 0x4e, 0x6b, 0x67, 0xfb, 0xbc, 0x30, 0x6e, 0x75, + 0xf4, 0x13, 0xd0, 0xac, 0xb6, 0x4e, 0x24, 0xcf, 0x43, 0xf7, 0xe6, 0x21, + 0xb8, 0x49, 0x13, 0xe9, 0x3d, 0xcf, 0xe7, 0x81, 0xc7, 0x2f, 0x85, 0xe5, + 0x16, 0x4e, 0x5c, 0xf5, 0x5c, 0x52, 0xa8, 0x01, 0xf9, 0x7c, 0x77, 0x6b, + 0xf5, 0xc2, 0x40, 0xe8, 0xe1, 0xc4, 0x49, 0x59, 0xc1, 0x82, 0x7a, 0x59, + 0xcc, 0x3a, 0xe0, 0x21, 0x9d, 0x07, 0xfa, 0xdf, 0x4b, 0xae, 0xcb, 0x45, + 0xe8, 0x8f, 0xe7, 0x62, 0x43, 0x7b, 0x3c, 0x89, 0xf1, 0xb4, 0x58, 0xc1, + 0xb1, 0x1c, 0x85, 0x05, 0x19, 0xbd, 0xcc, 0xe8, 0x48, 0xad, 0xd1, 0x0d, + 0x30, 0x81, 0x18, 0x42, 0xb9, 0xd6, 0x56, 0x07, 0x31, 0x95, 0xe5, 0xa4, + 0x3d, 0xc3, 0x52, 0x46, 0x39, 0xb3, 0x0c, 0x5b, 0xa4, 0x15, 0x31, 0xbd, + 0xda, 0xc3, 0x2b, 0x1c, 0xaf, 0x43, 0x7d, 0x02, 0x81, 0x81, 0x00, 0xec, + 0xe2, 0x8a, 0x52, 0xdc, 0x0f, 0x82, 0xaf, 0x7d, 0xde, 0x72, 0xc9, 0x7a, + 0x19, 0x32, 0x4e, 0x12, 0x4b, 0xfd, 0x0c, 0x6f, 0xf2, 0x10, 0x22, 0x5f, + 0xe6, 0x0e, 0x1f, 0x79, 0xb9, 0x42, 0xea, 0xd6, 0x4b, 0x0f, 0x8d, 0x8b, + 0x6f, 0x69, 0x4a, 0x85, 0x60, 0x1d, 0x9e, 0xde, 0x47, 0xc6, 0x53, 0x42, + 0xaf, 0x08, 0x14, 0xf3, 0x68, 0xad, 0xab, 0xb4, 0x57, 0x6a, 0xb2, 0x60, + 0xaa, 0x99, 0x95, 0x65, 0x59, 0x90, 0x2a, 0xb3, 0x2d, 0x34, 0x7e, 0xf5, + 0x02, 0x4c, 0x2c, 0x53, 0xad, 0xaf, 0xb8, 0xf5, 0xec, 0xf8, 0xb8, 0xb6, + 0x4e, 0x96, 0x92, 0x22, 0x3f, 0xd0, 0x6d, 0xde, 0xae, 0x51, 0x37, 0xb5, + 0xf2, 0x4f, 0x81, 0x67, 0x52, 0xa4, 0x86, 0x01, 0x87, 0x24, 0x00, 0x4b, + 0x19, 0xb2, 0xcb, 0xab, 0xd6, 0x8b, 0x71, 0x06, 0x9c, 0x11, 0x1b, 0x09, + 0x1d, 0x41, 0x62, 0x2d, 0x46, 0x22, 0xb1, 0x02, 0x81, 0x81, 0x00, 0xcb, + 0x09, 0x16, 0x15, 0xab, 0xa9, 0x8c, 0x14, 0xd4, 0x3d, 0x30, 0xdb, 0xe2, + 0x11, 0x8f, 0x26, 0xcd, 0x90, 0x1e, 0x37, 0x56, 0x8d, 0xa4, 0x13, 0x76, + 0x17, 0x72, 0x0d, 0x9b, 0x3e, 0x92, 0x80, 0x1d, 0x5a, 0xc2, 0x20, 0x97, + 0xf6, 0x92, 0xde, 0x72, 0x28, 0x59, 0xd6, 0x85, 0xcb, 0xab, 0x09, 0xc9, + 0x6c, 0xa3, 0x16, 0x43, 0x24, 0x39, 0x41, 0x00, 0x79, 0xbb, 0xe4, 0x87, + 0x0b, 0xe8, 0x56, 0xca, 0x50, 0x00, 0x12, 0xbe, 0xb2, 0x4e, 0x84, 0x1b, + 0x15, 0x8d, 0xf8, 0xc8, 0x4f, 0x54, 0x28, 0x9b, 0x13, 0xad, 0x32, 0x3c, + 0xf2, 0xf8, 0xde, 0xa4, 0x75, 0xf0, 0x03, 0xe0, 0x16, 0x62, 0x1d, 0xfa, + 0xe2, 0xfa, 0x4e, 0xf2, 0x8e, 0x94, 0xf4, 0x38, 0x60, 0x2f, 0x70, 0x2a, + 0xe8, 0x07, 0xa0, 0xb2, 0xe5, 0xcd, 0x7a, 0x60, 0xbe, 0xf4, 0x87, 0xe9, + 0xb5, 0x24, 0x9c, 0xce, 0x69, 0x16, 0x8d, 0x02, 0x81, 0x80, 0x43, 0xe8, + 0xde, 0x06, 0xcb, 0x17, 0x97, 0x3b, 0x80, 0x36, 0x19, 0x6a, 0x31, 0x1a, + 0xb0, 0x15, 0x39, 0xa1, 0x97, 0x35, 0xcd, 0x91, 0xf3, 0x96, 0x27, 0x2f, + 0xe8, 0xb4, 0x95, 0x4c, 0xcb, 0x26, 0x4f, 0xb0, 0xcd, 0x10, 0xa2, 0xfc, + 0x99, 0x8e, 0xc7, 0x95, 0xba, 0x68, 0x25, 0x09, 0x26, 0x8e, 0x0f, 0xfb, + 0xe5, 0xb1, 0x3b, 0xe6, 0xb2, 0x83, 0x1a, 0xfc, 0x44, 0x96, 0x46, 0xa8, + 0x21, 0xc7, 0x76, 0x7a, 0xaa, 0x9d, 0xd3, 0x28, 0x0e, 0x78, 0xa6, 0xfc, + 0xb5, 0xa1, 0xaf, 0x8b, 0x87, 0x68, 0xda, 0xf7, 0xc8, 0x86, 0x0b, 0x9d, + 0x94, 0x04, 0xe8, 0xd4, 0xaa, 0x88, 0x14, 0xe2, 0x9c, 0x5e, 0x00, 0x47, + 0x2b, 0x0b, 0xc9, 0xf7, 0x23, 0x3b, 0x57, 0x8c, 0xca, 0x81, 0x5b, 0x06, + 0x4e, 0xff, 0x9c, 0x8f, 0xb1, 0x02, 0x02, 0x07, 0x13, 0xd0, 0x50, 0x58, + 0x96, 0xb9, 0xf2, 0x88, 0xbc, 0xc1, 0x02, 0x81, 0x80, 0x32, 0xa2, 0x39, + 0x0a, 0xa4, 0xf0, 0x85, 0xdc, 0x71, 0x7a, 0x05, 0x66, 0x46, 0x3d, 0x3a, + 0x3c, 0xbc, 0xf2, 0x8c, 0x93, 0x64, 0x3c, 0xf1, 0xf7, 0x1e, 0xb5, 0x1b, + 0xbc, 0x0e, 0x4f, 0x65, 0xbd, 0xd3, 0x0a, 0x6a, 0x89, 0x3c, 0x34, 0xfe, + 0x23, 0x5a, 0x1a, 0xd3, 0x7d, 0x9b, 0x95, 0xcb, 0xe9, 0x33, 0xf6, 0xe4, + 0x05, 0x6c, 0xeb, 0x97, 0x20, 0x86, 0x62, 0x95, 0xc3, 0x22, 0xa2, 0x6c, + 0x10, 0x3b, 0x0d, 0xc0, 0xc5, 0xc8, 0xfb, 0xf2, 0xd2, 0x08, 0xab, 0x3e, + 0x3b, 0x78, 0x73, 0x32, 0x2c, 0xc1, 0x35, 0x8e, 0x0e, 0xc7, 0xe4, 0x4c, + 0xcc, 0xae, 0xca, 0x71, 0x85, 0xff, 0xf8, 0xb0, 0x1b, 0x17, 0x03, 0x8a, + 0x03, 0x6a, 0xa3, 0x8d, 0x6e, 0x78, 0xb1, 0x00, 0xf3, 0xd6, 0xc1, 0xd6, + 0xbd, 0xe4, 0x5e, 0x4a, 0x81, 0xb5, 0xbc, 0x94, 0x8a, 0x88, 0x53, 0x97, + 0x43, 0x1b, 0x07, 0x16, 0x51, + }, +}; + +static const uint8_t kTestSandbox[] = {0x01, 0x02, 0x03}; } // namespace wvoec diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index db0f36e7..cb27efc5 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -172,6 +172,7 @@ const size_t kMaxConcurrentSession[] = { 10, 20, 30, 40}; const size_t kMaxKeysPerSession[] = { 4, 20, 20, 30}; const size_t kMaxTotalKeys[] = { 16, 40, 80, 90}; const size_t kLargeMessageSize[] = { 8*KiB, 8*KiB, 16*KiB, 32*KiB}; +const size_t kMaxTotalDRMPrivateKeys[] = { 2, 4, 6, 8}; // Note: Frame rate and simultaneous playback are specified by resource rating, // but are tested at the system level, so there are no unit tests for frame // rate. Similarly, number of subsamples for AV1 @@ -5902,6 +5903,55 @@ TEST_F(OEMCryptoLoadsCertificate, TestMultipleRSAKeys) { ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); } +// This tests the maximum number of DRM private keys that OEMCrypto can load +TEST_F(OEMCryptoLoadsCertificate, TestMaxDRMKeys) { + const size_t max_total_keys = GetResourceValue(kMaxTotalDRMPrivateKeys); + std::vector> sessions; + std::vector> licenses; + + // It should be able to load up to kMaxTotalDRMPrivateKeys keys + for (size_t i = 0; i < max_total_keys; i++) { + sessions.push_back(std::unique_ptr(new Session())); + licenses.push_back(std::unique_ptr( + new LicenseRoundTrip(sessions[i].get()))); + const size_t key_index = i % kTestRSAPKCS8PrivateKeys_2048.size(); + encoded_rsa_key_.assign(kTestRSAPKCS8PrivateKeys_2048[key_index].begin(), + kTestRSAPKCS8PrivateKeys_2048[key_index].end()); + ASSERT_NO_FATAL_FAILURE(CreateWrappedRSAKey()); + ASSERT_NO_FATAL_FAILURE(sessions[i]->open()); + ASSERT_NO_FATAL_FAILURE(sessions[i]->PreparePublicKey( + encoded_rsa_key_.data(), encoded_rsa_key_.size())); + ASSERT_NO_FATAL_FAILURE( + sessions[i]->InstallRSASessionTestKey(wrapped_rsa_key_)); + } + + // Attempts to load one more key than the kMaxTotalDRMPrivateKeys + Session s; + encoded_rsa_key_.assign(kTestRSAPKCS8PrivateKeyInfo3_3072, + kTestRSAPKCS8PrivateKeyInfo3_3072 + + sizeof(kTestRSAPKCS8PrivateKeyInfo3_3072)); + Session ps; + ProvisioningRoundTrip provisioning_messages(&ps, encoded_rsa_key_); + provisioning_messages.PrepareSession(keybox_); + ASSERT_NO_FATAL_FAILURE(provisioning_messages.SignAndVerifyRequest()); + ASSERT_NO_FATAL_FAILURE(provisioning_messages.CreateDefaultResponse()); + ASSERT_NO_FATAL_FAILURE(provisioning_messages.EncryptAndSignResponse()); + OEMCryptoResult result = provisioning_messages.LoadResponse(); + // Key loading is allowed to fail due to resource restriction + if (result != OEMCrypto_SUCCESS) { + ASSERT_TRUE(result == OEMCrypto_ERROR_INSUFFICIENT_RESOURCES || + result == OEMCrypto_ERROR_TOO_MANY_KEYS); + } + // Verifies that the DRM keys which are already loaded should still function + for (size_t i = 0; i < licenses.size(); i++) { + ASSERT_NO_FATAL_FAILURE(licenses[i]->SignAndVerifyRequest()); + ASSERT_NO_FATAL_FAILURE(licenses[i]->CreateDefaultResponse()); + ASSERT_NO_FATAL_FAILURE(licenses[i]->EncryptAndSignResponse()); + ASSERT_EQ(OEMCrypto_SUCCESS, licenses[i]->LoadResponse()); + ASSERT_NO_FATAL_FAILURE(sessions[i]->TestDecryptCTR()); + } +} + // Devices that load certificates, should at least support RSA 2048 keys. TEST_F(OEMCryptoLoadsCertificate, SupportsCertificatesAPI13) { ASSERT_NE(0u, From 520368cea27816b78c5cdec54cb51d69feba332a Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 18:33:39 -0700 Subject: [PATCH 07/19] Reboot test: save large files [ Merge of http://go/wvgerrit/143629 ] The standard b2a_hex only saves about 2k, so we need a special version that can handle larger strings. This is needed because a license file is about 7k. Bug: 194342751 Test: GtsMediaTestCases on sunfish Change-Id: I6a6ac3f8f4fa6d9cd8a0119fc64fc8f3cc5f3ae8 --- libwvdrmengine/cdm/core/test/reboot_test.cpp | 14 ++++++++----- .../cdm/util/include/string_conversions.h | 7 ++++++- .../cdm/util/src/string_conversions.cpp | 20 ++++++++++++++++--- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/libwvdrmengine/cdm/core/test/reboot_test.cpp b/libwvdrmengine/cdm/core/test/reboot_test.cpp index 5b9a2280..58d736e1 100644 --- a/libwvdrmengine/cdm/core/test/reboot_test.cpp +++ b/libwvdrmengine/cdm/core/test/reboot_test.cpp @@ -13,8 +13,8 @@ #include "log.h" using wvutil::a2b_hex; -using wvutil::b2a_hex; using wvutil::FileSystem; +using wvutil::unlimited_b2a_hex; namespace wvcdm { FileSystem* RebootTest::file_system_; @@ -33,11 +33,11 @@ std::string EncodeString(const std::string& data) { // If there are any unprintable characters, except whitespace, or if we // close a brace before we open it, then just use hex. if (!printable || braces_count < 0) { - return "0x" + b2a_hex(data) + ","; + return "0x" + unlimited_b2a_hex(data) + ","; } } // If we left any braces open, then use hex. - if (braces_count != 0) return "0x" + b2a_hex(data) + ","; + if (braces_count != 0) return "0x" + unlimited_b2a_hex(data) + ","; return "{" + data + "},"; } @@ -51,12 +51,12 @@ std::string EncodeKey(const std::string& data) { } // When decoding, we assume that a key starting with "0x" is in hex. So we // can't have any keys that start with "0x". - if (data.substr(0, 2) == "0x") return "0x" + b2a_hex(data) + ":"; + if (data.substr(0, 2) == "0x") return "0x" + unlimited_b2a_hex(data) + ":"; // If the key is just is not printable, or if it has unmatched braces, then // we use hex. Otherwise, we surround the whole string with braces. for (size_t i = 0; i < data.length(); i++) { if (!isprint(data[i]) || (data[i] == ':')) { - return "0x" + b2a_hex(data) + ":"; + return "0x" + unlimited_b2a_hex(data) + ":"; } } return data + ":"; @@ -247,6 +247,10 @@ TEST_F(RebootTest, TestDumpUtil) { // This key looks like it might be hex. It should show up as hex in the // save file. map1["0x_bad_key_00"] = "value is ok"; + std::string big_string = "start with something {binary"; + // Double big_string 8 times, i.e. times 256, so it's bigger than 2k: + for (int i = 0; i < 8; i++) big_string = big_string + big_string; + map1["big_file"] = big_string; const std::string dump2 = DumpData(map1); std::map map3; EXPECT_TRUE(ParseDump(dump2, &map3)); diff --git a/libwvdrmengine/cdm/util/include/string_conversions.h b/libwvdrmengine/cdm/util/include/string_conversions.h index 471d2fe3..e5944bd6 100644 --- a/libwvdrmengine/cdm/util/include/string_conversions.h +++ b/libwvdrmengine/cdm/util/include/string_conversions.h @@ -20,10 +20,15 @@ CORE_UTIL_EXPORT std::vector a2b_hex(const std::string& label, const std::string& b); CORE_UTIL_EXPORT std::string a2bs_hex(const std::string& b); -// Binary to ASCII hex conversion. +// Binary to ASCII hex conversion. The default versions limit output to 2k to +// protect us from log spam. The unlimited version has no length limit. CORE_UTIL_EXPORT std::string b2a_hex(const std::vector& b); +CORE_UTIL_EXPORT std::string unlimited_b2a_hex(const std::vector& b); CORE_UTIL_EXPORT std::string b2a_hex(const std::string& b); +CORE_UTIL_EXPORT std::string unlimited_b2a_hex(const std::string& b); CORE_UTIL_EXPORT std::string HexEncode(const uint8_t* bytes, size_t size); +CORE_UTIL_EXPORT std::string UnlimitedHexEncode(const uint8_t* bytes, + size_t size); // Base64 encoding/decoding. // Converts binary data into the ASCII Base64 character set and vice diff --git a/libwvdrmengine/cdm/util/src/string_conversions.cpp b/libwvdrmengine/cdm/util/src/string_conversions.cpp index 9fd3251b..37ac2ef3 100644 --- a/libwvdrmengine/cdm/util/src/string_conversions.cpp +++ b/libwvdrmengine/cdm/util/src/string_conversions.cpp @@ -201,20 +201,34 @@ std::string b2a_hex(const std::vector& byte) { return HexEncode(byte.data(), byte.size()); } +std::string unlimited_b2a_hex(const std::vector& byte) { + if (byte.empty()) return ""; + return UnlimitedHexEncode(byte.data(), byte.size()); +} + std::string b2a_hex(const std::string& byte) { if (byte.empty()) return ""; return HexEncode(reinterpret_cast(byte.data()), byte.length()); } +std::string unlimited_b2a_hex(const std::string& byte) { + if (byte.empty()) return ""; + return UnlimitedHexEncode(reinterpret_cast(byte.data()), + byte.length()); +} + std::string HexEncode(const uint8_t* in_buffer, size_t size) { - static const char kHexChars[] = "0123456789ABCDEF"; - if (size == 0) return ""; constexpr unsigned int kMaxSafeSize = 2048; if (size > kMaxSafeSize) size = kMaxSafeSize; + return UnlimitedHexEncode(in_buffer, size); +} + +std::string UnlimitedHexEncode(const uint8_t* in_buffer, size_t size) { + static const char kHexChars[] = "0123456789ABCDEF"; + if (size == 0) return ""; // Each input byte creates two output hex characters. std::string out_buffer(size * 2, '\0'); - for (unsigned int i = 0; i < size; ++i) { char byte = in_buffer[i]; out_buffer[(i << 1)] = kHexChars[(byte >> 4) & 0xf]; From 6cda6717a9a130f9dd31d0289cd4e5f8b814c335 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sun, 13 Mar 2022 18:35:54 -0700 Subject: [PATCH 08/19] Reboot test: Initialize fake clock [ Merge of http://go/wvgerrit/143630 ] When we run a test with the fake clock, the clock had been initialized to the current time, or to 0. This causes a problem for reboot tests because the clock might go backwards over the reboot. With this change, we monitor the clock at the end of one reboot pass and initialize the clock for the next pass based on the previous value. Bug: 26163469 Test: GtsMediaTestCases on sunfish Change-Id: Ibd0024f963634382af70553fced38da6e1d857d2 --- libwvdrmengine/cdm/core/test/reboot_test.cpp | 34 ++++++++++++++++++++ libwvdrmengine/cdm/core/test/reboot_test.h | 6 ++++ libwvdrmengine/cdm/core/test/test_base.cpp | 14 ++++++++ libwvdrmengine/cdm/util/test/test_sleep.cpp | 15 +++++++++ libwvdrmengine/cdm/util/test/test_sleep.h | 4 +++ 5 files changed, 73 insertions(+) diff --git a/libwvdrmengine/cdm/core/test/reboot_test.cpp b/libwvdrmengine/cdm/core/test/reboot_test.cpp index 58d736e1..3cedd366 100644 --- a/libwvdrmengine/cdm/core/test/reboot_test.cpp +++ b/libwvdrmengine/cdm/core/test/reboot_test.cpp @@ -11,6 +11,7 @@ #include #include "log.h" +#include "test_sleep.h" using wvutil::a2b_hex; using wvutil::FileSystem; @@ -227,6 +228,23 @@ void RebootTest::TearDown() { WvCdmTestBase::TearDown(); } +int64_t RebootTest::LoadTime(const std::string& key) { + int64_t value = 0; + std::istringstream input(persistent_data_[key]); + input >> value; + if (input.fail()) { + LOGE("Could not parse time '%s'", persistent_data_[key].c_str()); + } + if (!input.eof()) { + LOGE("Extra text at end of time '%s'", persistent_data_[key].c_str()); + } + return value; +} + +void RebootTest::SaveTime(const std::string& key, int64_t time) { + persistent_data_[key] = std::to_string(time); +} + /** Test the dump and restore functions above. This does not test CDM functionality. */ TEST_F(RebootTest, TestDumpUtil) { @@ -277,4 +295,20 @@ TEST_F(RebootTest, FilesArePersistent) { } } +/** Verify that the clock moves forward over a reboot. */ +TEST_F(RebootTest, TimeMovesForward) { + wvutil::TestSleep::Sleep(2); + const int64_t start = wvutil::Clock().GetCurrentTime(); + wvutil::TestSleep::Sleep(2); + const int64_t end = wvutil::Clock().GetCurrentTime(); + EXPECT_NEAR(end - start, 2.0, 1.0); + const std::string key = "end_time"; + if (test_pass() == 0) { + // Save off the end of pass 1. + SaveTime(key, end); + } else { + int64_t previous_end = LoadTime(key); + EXPECT_LT(previous_end, start); + } +} } // namespace wvcdm diff --git a/libwvdrmengine/cdm/core/test/reboot_test.h b/libwvdrmengine/cdm/core/test/reboot_test.h index a0649bb1..0a9234be 100644 --- a/libwvdrmengine/cdm/core/test/reboot_test.h +++ b/libwvdrmengine/cdm/core/test/reboot_test.h @@ -36,6 +36,12 @@ class RebootTest : public WvCdmTestBaseWithEngine { static int test_pass() { return default_config_.test_pass(); } + // Load a previously saved time. Returns 0 if the value does not exist or + // cannot be parsed. + int64_t LoadTime(const std::string& key); + // Save a time to persistent storage. + void SaveTime(const std::string& key, int64_t time); + protected: void SetUp() override; void TearDown() override; diff --git a/libwvdrmengine/cdm/core/test/test_base.cpp b/libwvdrmengine/cdm/core/test/test_base.cpp index 1543acd5..3cfacd6e 100644 --- a/libwvdrmengine/cdm/core/test/test_base.cpp +++ b/libwvdrmengine/cdm/core/test/test_base.cpp @@ -122,6 +122,12 @@ void show_menu(const char* prog_name, const std::string& extra_help_text) { << " be used with a real OEMCrypto." << std::endl << std::endl; + std::cout << " --initial_time=